diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,109 @@
 
 ## Unreleased
 
+## 0.0.1.0 2026-10-10
+
+Breaking: `SDL3.Sys.Stdinc` drops 151 function aliases released in 0.0.0.3.
+All of these clone `libc` functions only. If you need them, the raw bindings are
+unchanged.
+
+This allows the library to resolve a collision between `SDL_Log` (logging) and
+`SDL_log` (logarithm). Since Haskell should already provide all of these at solid
+performance, there's no clear reason to expose FFI bindings in addition.
+
+### Added
+
+- `sDL_memcpy`, `sDL_memmove` and `sDL_memset` in
+  `SDL3.Sys.Bindgen.Stdinc.*` (raw-only, like the rest of the C library
+  clones: see Changed). `SDL_stdinc.h` `#define`s `SDL_memcpy` as
+  libc's `memcpy` (likewise the other two) unless `SDL_SLOW_MEMCPY` is set,
+  and hs-bindgen drops a function that a same-name macro shadows. The
+  generator now sets `SDL_SLOW_MEMCPY`, `SDL_SLOW_MEMMOVE` and
+  `SDL_SLOW_MEMSET`, so the declarations stay and bind to SDL's own
+  functions.
+- Typed constants for 29 macros hs-bindgen cannot translate, each typed at
+  its C type (its newtype, or `Word64` for `size_t`) and exported from the
+  curated module of that type:
+  - `SDL3.Sys.Stdinc`: the sixteen `SDL_MAX_*` and `SDL_MIN_*` limits of
+    `Sint8` through `Uint64` (`SDL_MIN_SINT8`, `SDL_MAX_UINT64`, ...),
+    `SDL_MAX_TIME` and `SDL_MIN_TIME` (`SDL_Time`), and `SDL_SIZE_MAX`,
+    `SDL_ICONV_ERROR`, `SDL_ICONV_E2BIG`, `SDL_ICONV_EILSEQ` and
+    `SDL_ICONV_EINVAL`, which are `Word64` (the `size_t` constants).
+  - `SDL3.Sys.Audio`: `SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK` and
+    `SDL_AUDIO_DEVICE_DEFAULT_RECORDING`.
+  - `SDL3.Sys.Mouse`: `SDL_TOUCH_MOUSEID` and `SDL_PEN_MOUSEID`.
+  - `SDL3.Sys.Touch`: `SDL_MOUSE_TOUCHID` and `SDL_PEN_TOUCHID`.
+- ABI assertions for the 29 constants.
+- C shims: 57 fixed-arity C functions`C shims` section and named after what
+  they wrap.
+  - Variadic functions: `log` (`SDL_Log`), `logTrace`, `logVerbose`,
+    `logDebug`, `logInfo`, `logWarn`, `logError`, `logCritical`,
+    `logMessage` in `SDL3.Sys.Log`; `setError` in `SDL3.Sys.Error`;
+    `ioPrintf` in `SDL3.Sys.Iostream`.
+  - Function-like macros: `unsupported`, `invalidParamError`
+    (`SDL3.Sys.Error`); `fourCC` (`SDL3.Sys.Stdinc`); `secondsToNs`,
+    `msToNs`, `usToNs` (`SDL3.Sys.Timer`); `swap16`, `swap32`, `swap64` and
+    the `LE`/`BE` swaps of 16, 32 and 64 bits and of floats
+    (`SDL3.Sys.Endian`); `createThread`, `createThreadWithProperties`
+    (`SDL3.Sys.Thread`), which pass the C runtime's thread entry and exit
+    functions on Windows like SDL's macros do; `mustLock`
+    (`SDL3.Sys.Surface`); `atomicIncRef`, `atomicDecRef`
+    (`SDL3.Sys.Atomic`); `audioFrameSize`, `defineAudioFormat`
+    (`SDL3.Sys.Audio`); and in `SDL3.Sys.Pixels`, `definePixelFourCC`,
+    `bitsPerPixel`, `bytesPerPixel`, the seven `isPixelFormat*` predicates,
+    `defineColorspace`, the six `colorspace*` accessors and the five
+    `isColorspace*` predicates.
+- The package ships the shims' headers (`extra-source-files`) and compiles
+  its wrapper C with `include-dirs: include`.
+- Regenerated from SDL 3.4.18 (was 3.4.16): `SDL_GAMEPAD_TYPE_STEAM`,
+  `SDL_SCANCODE_FRONT` and `SDLK_FRONT`, and the pen events' `device_type`
+  (`SDL_PenProximityEvent`, `SDL_PenMotionEvent`, `SDL_PenAxisEvent`,
+  `SDL_PenTouchEvent`, `SDL_PenButtonEvent`).
+
+### Changed
+
+- `SDL3.Sys.Stdinc` aliases 22 functions of `SDL_stdinc.h`: SDL's own API
+  there (environments, memory-function hooks, UTF-8 stepping) and the
+  allocator family (`malloc`, `calloc`, `realloc`, `free`, `alignedAlloc`,
+  `alignedFree`, `strdup`, `strndup`). Its other 131 functions, the C
+  library clones (`strlen`, `abs`, `qsort`, `rand`, `crc32`, `iconv`, ...),
+  are raw-only: the aliases 0.0.0.3 had for 128 of them are gone, and the
+  `memcpy` family is new and raw-only. Their raw imports stay in
+  `SDL3.Sys.Bindgen.Stdinc.*` (`sDL_strlen`). Its types and typed constants
+  are unchanged.
+- `log` is `SDL_Log`'s C shim. It was the math `SDL_log`, now raw-only
+  (`sDL_log`).
+- README: `SDL3.Sys.Stdinc`'s allowlist.
+- README: the `C shims` section, and the variadic functions and
+  function-like macros it binds are no longer listed as unbound.
+- README: "What is not bound" is shorter: it points at the hs-bindgen
+  team's survey of SDL's macros, says what differs here, lists the rest in
+  one paragraph, and links the skip ledger.
+- Regenerated with hs-bindgen 1.0.0.0.
+- Raw modules (`SDL3.Sys.Bindgen.*`): each foreign import sits behind a
+  wrapper that converts argument by argument through `HasFFIType` and keeps
+  the original C signature; structs gain `IsStruct` instances; every module
+  is `NoImplicitPrelude` with an explicit `Prelude` import list.
+- Writing a union member through `setField` of its
+  `GHC.Records.Compat.HasField` instance (`SDL_Event`, `SDL_HapticEffect`, ...)
+  now has `payload -> union -> union` semantics: it copies the existing bytes,
+  then pokes the member. It used to write into a fresh uninitialised byte
+  array.
+- The vendored runtime is updated to hs-bindgen-runtime 1.0.0.0, with
+  matching `SDL3.Sys.Bindgen.Runtime.*` facades. New modules: `HasFFIType`,
+  `Macro`, `Overloading`, `Struct`. Removed: `Support.FFIType`,
+  `Support.HasFFIType`. They were private (no facade), so no consumer could
+  import them.
+- `template-haskell >= 2.19` for the vendored runtime.
+- `SDL3.Sys.Stdinc` and `log` break, as above. Every other pre-existing
+  module keeps its exported names, signatures and export list, apart from
+  the additions above and names added to the runtime facades; the raw
+  foreign imports changed only internally.
+- ABI check covers every SDL from 3.2.0 to 3.4.18: the constants 3.4.18
+  adds are asserted at 3.4.18 and above, and `SDL_GAMEPAD_TYPE_COUNT`
+  (12 -> 13 in 3.4.18) only there. Below 3.4.18, `device_type` reads bytes
+  SDL never wrote (see the README's semantic deltas).
+
 ## 0.0.0.3 - 2026-09-13
 
 ### Added
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,32 +1,46 @@
 # sdl3-bindgen-sys
 
 Fully automated, luxury low-level Haskell bindings to [SDL3](https://libsdl.org):
-the whole SDL 3.4 API, machine-generated from the headers using an
-ever-so-slightly hacked version of `hs-bindgen`.
+the whole SDL 3.4 API, machine-generated using `hs-bindgen`.
 
 This package gets you SDL3 in full — windowing, input, audio, and the
 newfangled [GPU API](https://wiki.libsdl.org/SDL3/CategoryGPU) — today,
 if you dare.
 
-CI runs against **64-bit Linux, macOS, and Windows**, which is what
+CI runs against **64-bit Linux, MacOS, and Windows**, which is what
 this package aims to support.
 
 This library aims to be:
 
 - **Complete by construction:** Generated from all 58 headers of the
-  SDL 3.4 API (291 modules), so a gap is either a code generation
-  bug or a [deliberate omission](#what-is-not-bound) rather than a
-  binding waiting to be hand-written.
-- **Curated:** The `SDL3.Sys.*` layer wraps `hs-bindgen`'s output
-  with best-effort Haskell casing, native scalar types, and FFI safety
-  decisions and recommendations.
-- **First-class SDL docs:** Every binding carries SDL's header documentation,
-  and notes from the code generator's curation layer.
-- **ABI-verified:** A generated translation unit of C `_Static_assert`s
-  verifies the library's baked layouts against _your_ SDL at every
-  build. Divergence is a compile error naming the declaration, not
-  memory corruption. See [ABI verification](#abi-verification) for more.
+  SDL 3.4 API, so a gap is either a code generation bug or a
+  [deliberate omission](#unbound-sdl-functions-macros-and-types).
+- **Haskell-native:** `SDL3.Sys` wraps `hs-bindgen`'s output with best-effort
+  Haskell naming, native scalar types, and safety/usage notes.
+- **First-class SDL docs:** Every binding includes SDL's header documentation.
+- **ABI-verified:** A generated C file containing `_Static_assert`s verifies
+  the library's layouts against your SDL at compile-time.
+  See [ABI verification](#abi-verification) for more.
 
+The 0.0.x series is experimental: **pin to the minor
+(e.g., `>=0.0.1.0 && <0.0.2`)** and expect that the library will
+experience minor-version breaking changes until **0.1.0.0**.
+
+System requirements:
+
+- **SDL >= 3.2.0**
+- This version of the library was generated against **SDL 3.4.18**, so any
+  version **3.2.0-3.4.18** will link and run successfully.
+- The library includes `@since` annotations in Haddock. These are derived
+  from SDL3's own docs.
+  - If the runtime SDL is **below `@since`** for the function you are calling,
+    an error will be emitted via `SDL_GetError`.
+  - If the runtime SDL is **below `@since`** for a struct field in a union (e.g.,
+    an SDL event), your application will read bytes SDL doesn't write at that
+    location. This is memory-safe since the change stays within the union's size.
+  - At this time, it's up to you to handle this. There are a few routes I
+    am aware of. See [Handling runtime SDL deviation](#handling-runtime-sdl-deviation).
+
 ## Quick start
 
 ### Install build requirements
@@ -38,7 +52,7 @@
 Common setups:
 
 - **Debian/Ubuntu**: `apt install libsdl3-dev`
-- **macOS**: `brew install sdl3`
+- **MacOS**: `brew install sdl3`
 - **Arch**: `pacman -S sdl3`
 - **Fedora**: `dnf install SDL3-devel`
 - **Windows**: WSL2 with the Linux instructions, or native MSYS2.
@@ -112,9 +126,10 @@
 1. Run the `pacman` commands above through `stack exec -- pacman ...` so
    that the packages are installed in `stack`'s MSYS2.
 2. Add `msys-environment: UCRT64` to your `stack.yaml`.
-3. Add `sdl3-bindgen-sys-0.0.0.3` to `extra-deps` in your `stack.yaml`. Running
+3. Add `sdl3-bindgen-sys-x.x.x.x` to `extra-deps` in your `stack.yaml`. Running
    `stack build` should print out a helpful, pasteable entry for
-   this purpose.
+   this purpose. (Replace `x.x.x.x` with the latest version on Hackage
+   or the version you need.)
 
 Your `stack.yaml` should look something like this:
 
@@ -123,7 +138,8 @@
 packages:
   - .
 extra-deps:
-  - sdl3-bindgen-sys-0.0.0.3 # hash may be here if you copy from stack build
+  # replace with version you need; hash may be here if you copy from stack build
+  - sdl3-bindgen-sys-x.x.x.x
 msys-environment: UCRT64 # important: build will not work without this
 ```
 
@@ -144,6 +160,108 @@
 Adjust the GHC path to match your install. This provides a simple way to build
 and run the examples.
 
+## Common issues and use-cases
+
+### Handling runtime SDL deviation
+
+At this time, you can do one of the following:
+
+- Statically link your application to SDL3 so that you ship exactly the version
+  needed. This should prevent these issues structurally.
+- For function calls that may not be in the runtime SDL version, check the SDL
+  error and respond accordingly.
+- For struct fields (in unions), check `SDL3.Sys.Version.getVersion` before deciding
+  whether the bytes you read have meaning.
+
+#### Differences on older SDLs
+
+##### Defaults
+
+- `SDL_COLORSPACE_YUV_DEFAULT` is `BT601_LIMITED` regardless of SDL version.
+  It was `JPEG` in SDL 3.2.
+
+##### Events
+
+The `SDL_Event` union has size 128. None of these exceed that size, so this
+read/write cycle should be memory-safe on older SDL versions, just meaningless.
+
+- Below SDL 3.2.12, the following don't exist:
+  - `SDL_MouseWheelEvent.integer_x`
+  - `SDL_MouseWheelEvent.integer_y`
+- Below SDL 3.4.16, the following don't exist:
+  - `SDL_PenProximityEvent.pen_state`
+- Below SDL 3.4.18, the following don't exist:
+  - `SDL_PenProximityEvent.device_type`
+  - `SDL_PenMotionEvent.device_type`
+  - `SDL_PenAxisEvent.device_type`
+  - `SDL_PenTouchEvent.device_type`
+  - `SDL_PenButtonEvent.device_type`
+
+### Platform support
+
+64-bit architecture only for now. Windows, MacOS, and Linux are all tested
+in CI. Linux is tested against the most recent ~3 GHC versions.
+
+32-bit support is planned, but the implementation is still undecided.
+Short-term, I may support local runs of `lithon-codegen` inside a container or VM
+for this purpose, but the tool will need a bit of alteration before that's possible.
+
+### ABI verification
+
+The cabal flag `abi-assertions` (default) turns on ABI verification,
+which guards against unexpected layout divergence between SDL3 header
+versions and varying operating systems.
+
+When ABI assertions are on, `cbits/abi_assertions.c` statically checks
+every layout the Haskell side expects against your SDL headers.
+
+### Common issues
+
+- **Blank screen or crash on MacOS** — SDL's Cocoa backend requires
+  video and event calls on the **process main thread**. Keep the SDL
+  loop on `main` (don't `forkIO` it); `runOnMainThreadSafe` is bound for
+  marshalling work onto it.
+- **`init` fails on Windows** — the bindings are generated with
+  `SDL_MAIN_HANDLED`: call `setMainReady` before `init`.
+- **`foo` or `fooSafe`?** — every function's haddock states its flavor
+  choice, and the rationale, under its **`sdl3-bindgen-sys` notes**
+  section.
+- **Branching on `SDL3.Sys.PlatformDefines`** — don't: its two
+  constants (`sDL_PLATFORM_LINUX`, `sDL_PLATFORM_UNIX`) are baked to
+  the generation host's value of `1` on every platform.
+- **`setLinuxThreadPriority(AndPolicy)` off-Linux** — both exist
+  everywhere but fail with an `SDL_GetError` message.
+
+### Unbound SDL functions, macros, and types
+
+The hs-bindgen team's
+[survey of SDL's macros](https://github.com/dschrempf/hs-bindgen-sdl-survey)
+provides a reference on what hs-bindgen couldn't translate at this library's
+release. The situation has changed somewhat with the release of `1.0.0.0`.
+I'll try to keep this section updated regarding the current situation.
+
+Still unbound:
+
+- `SDL_RenderDebugTextFormat` - format in Haskell instead.
+- printf/scanf clones.
+- Every `va_list` function.
+- All `SDL_assert` functions and the other statement macros.
+- `SDL_size_mul_check_overflow` and `SDL_size_add_check_overflow`
+  ([hs-bindgen#2097](https://github.com/well-typed/hs-bindgen/issues/2097)).
+- `SDL_BYTEORDER` and `SDL_FLOATWORDORDER` - use `GHC.ByteOrder.targetByteOrder`
+- `SDL_PROP_GAMEPAD_CAP_*` aliases - use the joystick keys
+- The `long`-typed `SDL_stdinc.h` libc clones - their FFI types cannot be right
+  on both LP64 and LLP64.
+- `SDL_SetWindowsMessageHook`, `SDL_GetDirect3D9AdapterIndex`, and
+  `SDL_GetDXGIOutputInfo`.
+- Function-like macros accept only C integer types, rather than newtypes
+  ([hs-bindgen#2184](https://github.com/well-typed/hs-bindgen/issues/2184)).
+  You'll have to unwrap the newtype manually.
+
+Everything hs-bindgen skips on the generation host should be recorded in the
+[skip ledger](https://github.com/jtnuttall/lithon/blob/main/lithon-codegen/data/sdl3/unbound.md),
+with a disposition for each.
+
 ## Library structure
 
 For most uses, you will `import SDL3.Sys qualified as SDL3`.
@@ -152,6 +270,11 @@
 The raw hs-bindgen output lives underneath as `SDL3.Sys.Bindgen.*`, if
 you need to drop down to C types.
 
+`SDL3.Sys.Stdinc` leaves functions out by design. It selects a subset of
+SDL's API without including utilities meant generally for C programs.
+If you require these, you can access them through `SDL3.Sys.Bindgen.Stdinc.*`.
+If there are glaring omissions, please open an issue.
+
 ### Safe and unsafe FFI
 
 Most functions come in both FFI flavors: `createWindow` is an `unsafe`
@@ -178,111 +301,41 @@
 Similar to the `vulkan` library, every group member is a pattern synonym
 typed at its newtype, e.g. `SDL_INIT_VIDEO :: SDL_InitFlags`.
 
+Constants exist alongside their types.
+
 You can combine bitmask groups with `.|.` from `Data.Bits`:
 
 ```haskell
 SDL3.init (SDL3.SDL_INIT_VIDEO .|. SDL3.SDL_INIT_AUDIO)
 ```
 
-### Conversion to and from C types
-
-`SDL3.Sys` re-exports `SDL3.Sys.Runtime`, the conversion vocabulary
-you'll actually reach for: `toBool`/`fromBool` for C-typed struct
-fields (e.g. a keyboard event's `repeat`), and the `CEnum` classes for
-moving between enum newtypes and their integral representations.
-
-## Platform support
-
-**64-bit platforms only.** Linux, macOS (aarch64, Homebrew `sdl3`), and
-Windows (MSYS2 UCRT64, including the LLP64 layouts) are all targets,
-and CI builds the released package on all three. 32-bit targets are
-rejected by the ABI assertions — 64-bit layouts are baked in.
-
-## Common issues
-
-- **Blank screen or crash on macOS** — SDL's Cocoa backend requires
-  video and event calls on the **process main thread**. Keep the SDL
-  loop on `main` (don't `forkIO` it); `runOnMainThreadSafe` is bound for
-  marshalling work onto it.
-- **`init` fails on Windows** — the bindings are generated with
-  `SDL_MAIN_HANDLED`: call `setMainReady` before `init`.
-- **`foo` or `fooSafe`?** — every function's haddock states its flavor
-  choice, and the rationale, under its **`sdl3-bindgen-sys` notes**
-  section.
-- **Branching on `SDL3.Sys.PlatformDefines`** — don't: its two
-  constants (`sDL_PLATFORM_LINUX`, `sDL_PLATFORM_UNIX`) are baked to
-  the generation host's value of `1` on every platform.
-- **`setLinuxThreadPriority(AndPolicy)` off-Linux** — both exist
-  everywhere but fail with an `SDL_GetError` message.
-
-## What is not bound
-
-Known gaps, so you can discover them here instead of mid-build:
-
-- **Variadic functions**: Haskell's FFI cannot express C varargs, so
-  hs-bindgen has nothing to bind them to; the `SDL_Log` family,
-  `SDL_SetError`, and `SDL_RenderDebugTextFormat` are currently
-  unbound. In a future version, these will be bound via a fixed-arity
-  C shim.
-- **Most function-like macros**: a macro has no linkable symbol, but
-  hs-bindgen does not need one: it parses and typechecks macro bodies
-  and translates them to Haskell functions on a best-effort basis. From
-  the SDL 3.4.2 headers, 31 function-like macros translate and ship in
-  the raw layer (e.g. `sDL_AUDIO_BITSIZE`, `sDL_VERSION_ATLEAST`,
-  `sDL_DEFINE_PIXELFORMAT`, `sDL_WINDOWPOS_CENTERED_DISPLAY` in
-  `SDL3.Sys.Bindgen.*`). Two caveats: the curated `SDL3.Sys.*` layer
-  does not alias them yet, and pending
-  [hs-bindgen#2184](https://github.com/well-typed/hs-bindgen/issues/2184)
-  they accept only the underlying C integer types, not SDL's newtypes
-  such as `SDL_AudioFormat` (unwrap first). The hs-bindgen
-  team's
-  [survey of SDL's macros](https://github.com/dschrempf/hs-bindgen-sdl-survey)
-  counts 108 user-facing function-like macros, so most remain unbound
-  for now: upstream is extending coverage, and a `capi` import or a C
-  shim can reach the rest. Macro _constants_ are bound; see
-  [Typed constants](#typed-constants).
-- The seven `long`-typed `SDL_stdinc.h` libc clones (`strtol`/`ltoa`
-  families, `lround`/`lroundf`): their FFI types cannot be correct on
-  both LP64 and LLP64, so they are omitted.
-- Three Windows-only interop functions (`SDL_SetWindowsMessageHook`,
-  `SDL_GetDirect3D9AdapterIndex`, `SDL_GetDXGIOutputInfo`) — niche;
-  native window handles are reached through the bound
-  `SDL_GetWindowProperties` keys instead.
-
-## Versioning
-
-The 0.0.x series is experimental: pin to the minor
-(e.g., `>=0.0.0.1 && <0.0.1`) and expect surface-shaping changes.
+### C shims
 
-SDL **>= 3.2.0** is required; the surface is generated from 3.4.16.
-Declarations newer than your SDL still compile and link — their wrapper
-C is gated on SDL's own version macros, so calling one on an older SDL
-fails at the call site via `SDL_GetError` (exactly like the Linux-only
-functions off Linux). The wrapper gates and the ABI assertion layer are
-driven by an empirically verified availability registry rather than
-SDL's (occasionally wrong) `\since` annotations; a handful of haddock
-`@since` lines therefore repeat an upstream floor the registry
-corrects — where they disagree, the registry wins, and a gated call's
-`SDL_GetError` message states the true floor.
+The library provides a series of wrappers for variadic SDL functions
+and function-like macros.
 
-Three semantic deltas to know when running against an older SDL:
+Each module exports its shims in a **C shims** section, named after what
+the function wraps: `SDL_LogMessage` is `logMessage`, and `SDL_MUSTLOCK`
+is `mustLock`.
 
-- `SDL_COLORSPACE_YUV_DEFAULT` is baked at its 3.4 value
-  (`BT601_LIMITED`); 3.2 defined it as `JPEG`.
-- Below SDL 3.2.12, `SDL_MouseWheelEvent.integer_x`/`integer_y` read
-  bytes SDL never wrote — memory-safe (`SDL_Event` is 128 bytes), but
-  meaningless.
-- Below SDL 3.4.16, `SDL_PenProximityEvent.pen_state` likewise reads
-  bytes SDL never wrote.
+Notes:
 
-## ABI verification
+- Messages are verbatim. `printf`-style format strings aren't supported.
+- Call `createThread`, not `createThreadRuntime`. The former handles
+  cross-platform threading appropriately.
+- Each shim is a `static inline` C function.
+- Byte order: use the `swap16LE` … `swapFloatBE` shims instead of the raw layer's
+  `sDL_Swap16LE` ... `sDL_SwapFloatLE`, which hs-bindgen translated
+  on the little-endian generation host as the identity.
+- The raw imports are `lithon_SDL_*` in `SDL3.Sys.Bindgen.*Shims`
+  (`SDL3.Sys.Bindgen.LogShims.Unsafe.lithon_SDL_LogMessage`).
 
-The cabal flag `abi-assertions` (default) turns on ABI verification,
-which guards against unexpected layout divergence between SDL3 header
-versions and varying operating systems.
+### Conversion to and from C types
 
-When ABI assertions are on, `cbits/abi_assertions.c` statically checks
-every layout the Haskell side expects against your SDL headers.
+`SDL3.Sys` re-exports `SDL3.Sys.Runtime`, the conversion vocabulary
+you'll actually reach for: `toBool`/`fromBool` for C-typed struct
+fields (e.g. a keyboard event's `repeat`), and the `CEnum` classes for
+moving between enum newtypes and their integral representations.
 
 ### Layouts
 
@@ -325,10 +378,9 @@
 ## Provenance and licensing
 
 Generated by [hs-bindgen](https://github.com/well-typed/hs-bindgen)
-driven by the repository's `lithon-codegen`, from the SDL 3.4.16
-headers. The generated tree is never hand-edited, but bugs are mine, not
-SDL's or hs-bindgen's: report them at the
-[issue tracker](https://github.com/jtnuttall/lithon/issues).
+driven by the repository's `lithon-codegen`, from the SDL3 headers.
+Be keen on treating bugs as mine, not SDL's or hs-bindgen's, and report them to
+the project's [issue tracker](https://github.com/jtnuttall/lithon/issues).
 
 - `sdl3-bindgen-sys` is BSD-3-Clause (see `LICENSE`).
 - The SDL header documentation embedded in the haddocks is covered by SDL's
diff --git a/cbits/abi_assertions.c b/cbits/abi_assertions.c
--- a/cbits/abi_assertions.c
+++ b/cbits/abi_assertions.c
@@ -7,17 +7,17 @@
  * See the package README, section "ABI verification".
  * A sizeof asserted with >= belongs to a struct the bindings only ever
  * read inside a named union (SDL_Event, SDL_HapticEffect) or one the
- * registry marks layout: prefix. SDL may append fields to it; its known
+ * annotations mark layout: prefix. SDL may append fields to it; its known
  * fields stay pinned by offset and the union's own size stays exact.
  * Building with the cabal flag abi-assertions-exact makes every sizeof
  * exact again, for checking a newer SDL.
  *
  * #if guards mirror each declaration's documented @since and each
  * member's "(added in X.Y.Z)" note — corrected and refined by the
- * empirical availability registry (lithon-codegen sdl3/versions.json)
+ * availability annotations (lithon-codegen data/sdl3/versions.json)
  * — on SDL's own version macros.
  */
-#define LITHON_ABI_HELP ". sdl3-bindgen-sys was generated from SDL 3.4.16; see the README section ABI verification. Please report this at https://github.com/jtnuttall/lithon/issues with your SDL version and platform, and if you are comfortable, open a PR updating the SDL version the bindings are generated from."
+#define LITHON_ABI_HELP ". sdl3-bindgen-sys was generated from SDL 3.4.18; see the README section ABI verification. Please report this at https://github.com/jtnuttall/lithon/issues with your SDL version and platform, and if you are comfortable, open a PR updating the SDL version the bindings are generated from."
 #ifdef LITHON_ABI_EXACT
 #define LITHON_ABI_PREFIX_OP ==
 #define LITHON_ABI_PREFIX_MSG "differs from your SDL3 headers (exact mode)"
@@ -28,6 +28,9 @@
 #include <stddef.h>
 
 #define SDL_MAIN_HANDLED
+#define SDL_SLOW_MEMCPY
+#define SDL_SLOW_MEMMOVE
+#define SDL_SLOW_MEMSET
 #include <SDL3/SDL.h>
 #include <SDL3/SDL_vulkan.h>
 #include <SDL3/SDL_main.h>
@@ -715,8 +718,11 @@
 _Static_assert((SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_JOYCON_PAIR) == (10), "SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_JOYCON_PAIR: baked value 10 differs from your SDL3 headers" LITHON_ABI_HELP);
 #if SDL_VERSION_ATLEAST(3, 4, 0)
 _Static_assert((SDL_GAMEPAD_TYPE_GAMECUBE) == (11), "SDL_GAMEPAD_TYPE_GAMECUBE: baked value 11 differs from your SDL3 headers" LITHON_ABI_HELP);
-_Static_assert((SDL_GAMEPAD_TYPE_COUNT) == (12), "SDL_GAMEPAD_TYPE_COUNT: baked value 12 differs from your SDL3 headers" LITHON_ABI_HELP);
 #endif
+#if SDL_VERSION_ATLEAST(3, 4, 18)
+_Static_assert((SDL_GAMEPAD_TYPE_STEAM) == (12), "SDL_GAMEPAD_TYPE_STEAM: baked value 12 differs from your SDL3 headers" LITHON_ABI_HELP);
+_Static_assert((SDL_GAMEPAD_TYPE_COUNT) == (13), "SDL_GAMEPAD_TYPE_COUNT: baked value 13 differs from your SDL3 headers" LITHON_ABI_HELP);
+#endif
 _Static_assert(sizeof(enum SDL_GamepadButton) == 4, "enum SDL_GamepadButton: baked sizeof 4 differs from your SDL3 headers" LITHON_ABI_HELP);
 _Static_assert(_Alignof(enum SDL_GamepadButton) == 4, "enum SDL_GamepadButton: baked alignment 4 differs from your SDL3 headers" LITHON_ABI_HELP);
 _Static_assert((SDL_GAMEPAD_BUTTON_INVALID) == (-1), "SDL_GAMEPAD_BUTTON_INVALID: baked value -1 differs from your SDL3 headers" LITHON_ABI_HELP);
@@ -943,6 +949,9 @@
 _Static_assert((SDL_SCANCODE_CLEARAGAIN) == (162), "SDL_SCANCODE_CLEARAGAIN: baked value 162 differs from your SDL3 headers" LITHON_ABI_HELP);
 _Static_assert((SDL_SCANCODE_CRSEL) == (163), "SDL_SCANCODE_CRSEL: baked value 163 differs from your SDL3 headers" LITHON_ABI_HELP);
 _Static_assert((SDL_SCANCODE_EXSEL) == (164), "SDL_SCANCODE_EXSEL: baked value 164 differs from your SDL3 headers" LITHON_ABI_HELP);
+#if SDL_VERSION_ATLEAST(3, 4, 18)
+_Static_assert((SDL_SCANCODE_FRONT) == (165), "SDL_SCANCODE_FRONT: baked value 165 differs from your SDL3 headers" LITHON_ABI_HELP);
+#endif
 _Static_assert((SDL_SCANCODE_KP_00) == (176), "SDL_SCANCODE_KP_00: baked value 176 differs from your SDL3 headers" LITHON_ABI_HELP);
 _Static_assert((SDL_SCANCODE_KP_000) == (177), "SDL_SCANCODE_KP_000: baked value 177 differs from your SDL3 headers" LITHON_ABI_HELP);
 _Static_assert((SDL_SCANCODE_THOUSANDSSEPARATOR) == (178), "SDL_SCANCODE_THOUSANDSSEPARATOR: baked value 178 differs from your SDL3 headers" LITHON_ABI_HELP);
@@ -1543,6 +1552,9 @@
 #if SDL_VERSION_ATLEAST(3, 4, 16)
 _Static_assert(offsetof(struct SDL_PenProximityEvent, pen_state) == 24, "struct SDL_PenProximityEvent.pen_state: baked offset 24 differs from your SDL3 headers" LITHON_ABI_HELP);
 #endif
+#if SDL_VERSION_ATLEAST(3, 4, 18)
+_Static_assert(offsetof(struct SDL_PenProximityEvent, device_type) == 28, "struct SDL_PenProximityEvent.device_type: baked offset 28 differs from your SDL3 headers" LITHON_ABI_HELP);
+#endif
 _Static_assert(sizeof(struct SDL_PenMotionEvent) LITHON_ABI_PREFIX_OP 40, "struct SDL_PenMotionEvent: baked sizeof 40 " LITHON_ABI_PREFIX_MSG LITHON_ABI_HELP);
 _Static_assert(_Alignof(struct SDL_PenMotionEvent) == 8, "struct SDL_PenMotionEvent: baked alignment 8 differs from your SDL3 headers" LITHON_ABI_HELP);
 _Static_assert(offsetof(struct SDL_PenMotionEvent, type) == 0, "struct SDL_PenMotionEvent.type: baked offset 0 differs from your SDL3 headers" LITHON_ABI_HELP);
@@ -1553,8 +1565,16 @@
 _Static_assert(offsetof(struct SDL_PenMotionEvent, pen_state) == 24, "struct SDL_PenMotionEvent.pen_state: baked offset 24 differs from your SDL3 headers" LITHON_ABI_HELP);
 _Static_assert(offsetof(struct SDL_PenMotionEvent, x) == 28, "struct SDL_PenMotionEvent.x: baked offset 28 differs from your SDL3 headers" LITHON_ABI_HELP);
 _Static_assert(offsetof(struct SDL_PenMotionEvent, y) == 32, "struct SDL_PenMotionEvent.y: baked offset 32 differs from your SDL3 headers" LITHON_ABI_HELP);
-_Static_assert(sizeof(struct SDL_PenTouchEvent) LITHON_ABI_PREFIX_OP 40, "struct SDL_PenTouchEvent: baked sizeof 40 " LITHON_ABI_PREFIX_MSG LITHON_ABI_HELP);
+#if SDL_VERSION_ATLEAST(3, 4, 18)
+_Static_assert(offsetof(struct SDL_PenMotionEvent, device_type) == 36, "struct SDL_PenMotionEvent.device_type: baked offset 36 differs from your SDL3 headers" LITHON_ABI_HELP);
+#endif
+#if SDL_VERSION_ATLEAST(3, 4, 18)
+_Static_assert(sizeof(struct SDL_PenTouchEvent) LITHON_ABI_PREFIX_OP 48, "struct SDL_PenTouchEvent: baked sizeof 48 " LITHON_ABI_PREFIX_MSG LITHON_ABI_HELP);
 _Static_assert(_Alignof(struct SDL_PenTouchEvent) == 8, "struct SDL_PenTouchEvent: baked alignment 8 differs from your SDL3 headers" LITHON_ABI_HELP);
+#else
+_Static_assert(sizeof(struct SDL_PenTouchEvent) LITHON_ABI_PREFIX_OP 40, "struct SDL_PenTouchEvent: pre-3.4.18 sizeof 40 " LITHON_ABI_PREFIX_MSG LITHON_ABI_HELP);
+_Static_assert(_Alignof(struct SDL_PenTouchEvent) == 8, "struct SDL_PenTouchEvent: pre-3.4.18 alignment 8 differs from your SDL3 headers" LITHON_ABI_HELP);
+#endif
 _Static_assert(offsetof(struct SDL_PenTouchEvent, type) == 0, "struct SDL_PenTouchEvent.type: baked offset 0 differs from your SDL3 headers" LITHON_ABI_HELP);
 _Static_assert(offsetof(struct SDL_PenTouchEvent, reserved) == 4, "struct SDL_PenTouchEvent.reserved: baked offset 4 differs from your SDL3 headers" LITHON_ABI_HELP);
 _Static_assert(offsetof(struct SDL_PenTouchEvent, timestamp) == 8, "struct SDL_PenTouchEvent.timestamp: baked offset 8 differs from your SDL3 headers" LITHON_ABI_HELP);
@@ -1565,8 +1585,16 @@
 _Static_assert(offsetof(struct SDL_PenTouchEvent, y) == 32, "struct SDL_PenTouchEvent.y: baked offset 32 differs from your SDL3 headers" LITHON_ABI_HELP);
 _Static_assert(offsetof(struct SDL_PenTouchEvent, eraser) == 36, "struct SDL_PenTouchEvent.eraser: baked offset 36 differs from your SDL3 headers" LITHON_ABI_HELP);
 _Static_assert(offsetof(struct SDL_PenTouchEvent, down) == 37, "struct SDL_PenTouchEvent.down: baked offset 37 differs from your SDL3 headers" LITHON_ABI_HELP);
-_Static_assert(sizeof(struct SDL_PenButtonEvent) LITHON_ABI_PREFIX_OP 40, "struct SDL_PenButtonEvent: baked sizeof 40 " LITHON_ABI_PREFIX_MSG LITHON_ABI_HELP);
+#if SDL_VERSION_ATLEAST(3, 4, 18)
+_Static_assert(offsetof(struct SDL_PenTouchEvent, device_type) == 40, "struct SDL_PenTouchEvent.device_type: baked offset 40 differs from your SDL3 headers" LITHON_ABI_HELP);
+#endif
+#if SDL_VERSION_ATLEAST(3, 4, 18)
+_Static_assert(sizeof(struct SDL_PenButtonEvent) LITHON_ABI_PREFIX_OP 48, "struct SDL_PenButtonEvent: baked sizeof 48 " LITHON_ABI_PREFIX_MSG LITHON_ABI_HELP);
 _Static_assert(_Alignof(struct SDL_PenButtonEvent) == 8, "struct SDL_PenButtonEvent: baked alignment 8 differs from your SDL3 headers" LITHON_ABI_HELP);
+#else
+_Static_assert(sizeof(struct SDL_PenButtonEvent) LITHON_ABI_PREFIX_OP 40, "struct SDL_PenButtonEvent: pre-3.4.18 sizeof 40 " LITHON_ABI_PREFIX_MSG LITHON_ABI_HELP);
+_Static_assert(_Alignof(struct SDL_PenButtonEvent) == 8, "struct SDL_PenButtonEvent: pre-3.4.18 alignment 8 differs from your SDL3 headers" LITHON_ABI_HELP);
+#endif
 _Static_assert(offsetof(struct SDL_PenButtonEvent, type) == 0, "struct SDL_PenButtonEvent.type: baked offset 0 differs from your SDL3 headers" LITHON_ABI_HELP);
 _Static_assert(offsetof(struct SDL_PenButtonEvent, reserved) == 4, "struct SDL_PenButtonEvent.reserved: baked offset 4 differs from your SDL3 headers" LITHON_ABI_HELP);
 _Static_assert(offsetof(struct SDL_PenButtonEvent, timestamp) == 8, "struct SDL_PenButtonEvent.timestamp: baked offset 8 differs from your SDL3 headers" LITHON_ABI_HELP);
@@ -1577,6 +1605,9 @@
 _Static_assert(offsetof(struct SDL_PenButtonEvent, y) == 32, "struct SDL_PenButtonEvent.y: baked offset 32 differs from your SDL3 headers" LITHON_ABI_HELP);
 _Static_assert(offsetof(struct SDL_PenButtonEvent, button) == 36, "struct SDL_PenButtonEvent.button: baked offset 36 differs from your SDL3 headers" LITHON_ABI_HELP);
 _Static_assert(offsetof(struct SDL_PenButtonEvent, down) == 37, "struct SDL_PenButtonEvent.down: baked offset 37 differs from your SDL3 headers" LITHON_ABI_HELP);
+#if SDL_VERSION_ATLEAST(3, 4, 18)
+_Static_assert(offsetof(struct SDL_PenButtonEvent, device_type) == 40, "struct SDL_PenButtonEvent.device_type: baked offset 40 differs from your SDL3 headers" LITHON_ABI_HELP);
+#endif
 _Static_assert(sizeof(struct SDL_PenAxisEvent) LITHON_ABI_PREFIX_OP 48, "struct SDL_PenAxisEvent: baked sizeof 48 " LITHON_ABI_PREFIX_MSG LITHON_ABI_HELP);
 _Static_assert(_Alignof(struct SDL_PenAxisEvent) == 8, "struct SDL_PenAxisEvent: baked alignment 8 differs from your SDL3 headers" LITHON_ABI_HELP);
 _Static_assert(offsetof(struct SDL_PenAxisEvent, type) == 0, "struct SDL_PenAxisEvent.type: baked offset 0 differs from your SDL3 headers" LITHON_ABI_HELP);
@@ -1589,6 +1620,9 @@
 _Static_assert(offsetof(struct SDL_PenAxisEvent, y) == 32, "struct SDL_PenAxisEvent.y: baked offset 32 differs from your SDL3 headers" LITHON_ABI_HELP);
 _Static_assert(offsetof(struct SDL_PenAxisEvent, axis) == 36, "struct SDL_PenAxisEvent.axis: baked offset 36 differs from your SDL3 headers" LITHON_ABI_HELP);
 _Static_assert(offsetof(struct SDL_PenAxisEvent, value) == 40, "struct SDL_PenAxisEvent.value: baked offset 40 differs from your SDL3 headers" LITHON_ABI_HELP);
+#if SDL_VERSION_ATLEAST(3, 4, 18)
+_Static_assert(offsetof(struct SDL_PenAxisEvent, device_type) == 44, "struct SDL_PenAxisEvent.device_type: baked offset 44 differs from your SDL3 headers" LITHON_ABI_HELP);
+#endif
 _Static_assert(sizeof(struct SDL_DropEvent) LITHON_ABI_PREFIX_OP 48, "struct SDL_DropEvent: baked sizeof 48 " LITHON_ABI_PREFIX_MSG LITHON_ABI_HELP);
 _Static_assert(_Alignof(struct SDL_DropEvent) == 8, "struct SDL_DropEvent: baked alignment 8 differs from your SDL3 headers" LITHON_ABI_HELP);
 _Static_assert(offsetof(struct SDL_DropEvent, type) == 0, "struct SDL_DropEvent.type: baked offset 0 differs from your SDL3 headers" LITHON_ABI_HELP);
@@ -2563,6 +2597,10 @@
 _Static_assert((SDL_TIME_FORMAT_24HR) == (0), "SDL_TIME_FORMAT_24HR: baked value 0 differs from your SDL3 headers" LITHON_ABI_HELP);
 _Static_assert((SDL_TIME_FORMAT_12HR) == (1), "SDL_TIME_FORMAT_12HR: baked value 1 differs from your SDL3 headers" LITHON_ABI_HELP);
 
+/* ---- SDL_audio.h (typed constants) ---- */
+_Static_assert((SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK) == (4294967295ull), "SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK: baked value 4294967295 differs from your SDL3 headers" LITHON_ABI_HELP);
+_Static_assert((SDL_AUDIO_DEVICE_DEFAULT_RECORDING) == (4294967294ull), "SDL_AUDIO_DEVICE_DEFAULT_RECORDING: baked value 4294967294 differs from your SDL3 headers" LITHON_ABI_HELP);
+
 /* ---- SDL_blendmode.h (typed constants) ---- */
 _Static_assert((SDL_BLENDMODE_NONE) == (0ull), "SDL_BLENDMODE_NONE: baked value 0 differs from your SDL3 headers" LITHON_ABI_HELP);
 _Static_assert((SDL_BLENDMODE_BLEND) == (1ull), "SDL_BLENDMODE_BLEND: baked value 1 differs from your SDL3 headers" LITHON_ABI_HELP);
@@ -2682,6 +2720,8 @@
 _Static_assert((SDL_BUTTON_RMASK) == (4ull), "SDL_BUTTON_RMASK: baked value 4 differs from your SDL3 headers" LITHON_ABI_HELP);
 _Static_assert((SDL_BUTTON_X1MASK) == (8ull), "SDL_BUTTON_X1MASK: baked value 8 differs from your SDL3 headers" LITHON_ABI_HELP);
 _Static_assert((SDL_BUTTON_X2MASK) == (16ull), "SDL_BUTTON_X2MASK: baked value 16 differs from your SDL3 headers" LITHON_ABI_HELP);
+_Static_assert((SDL_TOUCH_MOUSEID) == (4294967295ull), "SDL_TOUCH_MOUSEID: baked value 4294967295 differs from your SDL3 headers" LITHON_ABI_HELP);
+_Static_assert((SDL_PEN_MOUSEID) == (4294967294ull), "SDL_PEN_MOUSEID: baked value 4294967294 differs from your SDL3 headers" LITHON_ABI_HELP);
 
 /* ---- SDL_pen.h (typed constants) ---- */
 _Static_assert((SDL_PEN_INPUT_DOWN) == (1ull), "SDL_PEN_INPUT_DOWN: baked value 1 differs from your SDL3 headers" LITHON_ABI_HELP);
@@ -2701,6 +2741,14 @@
 _Static_assert((SDL_SURFACE_LOCKED) == (4ull), "SDL_SURFACE_LOCKED: baked value 4 differs from your SDL3 headers" LITHON_ABI_HELP);
 _Static_assert((SDL_SURFACE_SIMD_ALIGNED) == (8ull), "SDL_SURFACE_SIMD_ALIGNED: baked value 8 differs from your SDL3 headers" LITHON_ABI_HELP);
 
+/* ---- SDL_stdinc.h (typed constants) ---- */
+_Static_assert((SDL_MAX_TIME) == (9223372036854775807ull), "SDL_MAX_TIME: baked value 9223372036854775807 differs from your SDL3 headers" LITHON_ABI_HELP);
+_Static_assert((SDL_MIN_TIME) == (9223372036854775808ull), "SDL_MIN_TIME: baked value -9223372036854775808 differs from your SDL3 headers" LITHON_ABI_HELP);
+
+/* ---- SDL_touch.h (typed constants) ---- */
+_Static_assert((SDL_MOUSE_TOUCHID) == (18446744073709551615ull), "SDL_MOUSE_TOUCHID: baked value 18446744073709551615 differs from your SDL3 headers" LITHON_ABI_HELP);
+_Static_assert((SDL_PEN_TOUCHID) == (18446744073709551614ull), "SDL_PEN_TOUCHID: baked value 18446744073709551614 differs from your SDL3 headers" LITHON_ABI_HELP);
+
 /* ---- SDL_tray.h (typed constants) ---- */
 _Static_assert((SDL_TRAYENTRY_BUTTON) == (1ull), "SDL_TRAYENTRY_BUTTON: baked value 1 differs from your SDL3 headers" LITHON_ABI_HELP);
 _Static_assert((SDL_TRAYENTRY_CHECKBOX) == (2ull), "SDL_TRAYENTRY_CHECKBOX: baked value 2 differs from your SDL3 headers" LITHON_ABI_HELP);
@@ -2737,3 +2785,26 @@
 _Static_assert((SDL_WINDOW_METAL) == (536870912ull), "SDL_WINDOW_METAL: baked value 536870912 differs from your SDL3 headers" LITHON_ABI_HELP);
 _Static_assert((SDL_WINDOW_TRANSPARENT) == (1073741824ull), "SDL_WINDOW_TRANSPARENT: baked value 1073741824 differs from your SDL3 headers" LITHON_ABI_HELP);
 _Static_assert((SDL_WINDOW_NOT_FOCUSABLE) == (2147483648ull), "SDL_WINDOW_NOT_FOCUSABLE: baked value 2147483648 differs from your SDL3 headers" LITHON_ABI_HELP);
+
+/* ---- SDL_stdinc.h (typed constants) ---- */
+_Static_assert((SDL_MAX_SINT16) == (32767ull), "SDL_MAX_SINT16: baked value 32767 differs from your SDL3 headers" LITHON_ABI_HELP);
+_Static_assert((SDL_MIN_SINT16) == (18446744073709518848ull), "SDL_MIN_SINT16: baked value -32768 differs from your SDL3 headers" LITHON_ABI_HELP);
+_Static_assert((SDL_MAX_SINT32) == (2147483647ull), "SDL_MAX_SINT32: baked value 2147483647 differs from your SDL3 headers" LITHON_ABI_HELP);
+_Static_assert((SDL_MIN_SINT32) == (18446744071562067968ull), "SDL_MIN_SINT32: baked value -2147483648 differs from your SDL3 headers" LITHON_ABI_HELP);
+_Static_assert((SDL_MAX_SINT64) == (9223372036854775807ull), "SDL_MAX_SINT64: baked value 9223372036854775807 differs from your SDL3 headers" LITHON_ABI_HELP);
+_Static_assert((SDL_MIN_SINT64) == (9223372036854775808ull), "SDL_MIN_SINT64: baked value -9223372036854775808 differs from your SDL3 headers" LITHON_ABI_HELP);
+_Static_assert((SDL_MAX_SINT8) == (127ull), "SDL_MAX_SINT8: baked value 127 differs from your SDL3 headers" LITHON_ABI_HELP);
+_Static_assert((SDL_MIN_SINT8) == (18446744073709551488ull), "SDL_MIN_SINT8: baked value -128 differs from your SDL3 headers" LITHON_ABI_HELP);
+_Static_assert((SDL_MAX_UINT16) == (65535ull), "SDL_MAX_UINT16: baked value 65535 differs from your SDL3 headers" LITHON_ABI_HELP);
+_Static_assert((SDL_MIN_UINT16) == (0ull), "SDL_MIN_UINT16: baked value 0 differs from your SDL3 headers" LITHON_ABI_HELP);
+_Static_assert((SDL_MAX_UINT32) == (4294967295ull), "SDL_MAX_UINT32: baked value 4294967295 differs from your SDL3 headers" LITHON_ABI_HELP);
+_Static_assert((SDL_MIN_UINT32) == (0ull), "SDL_MIN_UINT32: baked value 0 differs from your SDL3 headers" LITHON_ABI_HELP);
+_Static_assert((SDL_MAX_UINT64) == (18446744073709551615ull), "SDL_MAX_UINT64: baked value 18446744073709551615 differs from your SDL3 headers" LITHON_ABI_HELP);
+_Static_assert((SDL_MIN_UINT64) == (0ull), "SDL_MIN_UINT64: baked value 0 differs from your SDL3 headers" LITHON_ABI_HELP);
+_Static_assert((SDL_MAX_UINT8) == (255ull), "SDL_MAX_UINT8: baked value 255 differs from your SDL3 headers" LITHON_ABI_HELP);
+_Static_assert((SDL_MIN_UINT8) == (0ull), "SDL_MIN_UINT8: baked value 0 differs from your SDL3 headers" LITHON_ABI_HELP);
+_Static_assert((SDL_SIZE_MAX) == (18446744073709551615ull), "SDL_SIZE_MAX: baked value 18446744073709551615 differs from your SDL3 headers" LITHON_ABI_HELP);
+_Static_assert((SDL_ICONV_ERROR) == (18446744073709551615ull), "SDL_ICONV_ERROR: baked value 18446744073709551615 differs from your SDL3 headers" LITHON_ABI_HELP);
+_Static_assert((SDL_ICONV_E2BIG) == (18446744073709551614ull), "SDL_ICONV_E2BIG: baked value 18446744073709551614 differs from your SDL3 headers" LITHON_ABI_HELP);
+_Static_assert((SDL_ICONV_EILSEQ) == (18446744073709551613ull), "SDL_ICONV_EILSEQ: baked value 18446744073709551613 differs from your SDL3 headers" LITHON_ABI_HELP);
+_Static_assert((SDL_ICONV_EINVAL) == (18446744073709551612ull), "SDL_ICONV_EINVAL: baked value 18446744073709551612 differs from your SDL3 headers" LITHON_ABI_HELP);
diff --git a/include/sdl3-bindgen-sys/SDL_atomic_shims.h b/include/sdl3-bindgen-sys/SDL_atomic_shims.h
new file mode 100644
--- /dev/null
+++ b/include/sdl3-bindgen-sys/SDL_atomic_shims.h
@@ -0,0 +1,63 @@
+/*
+ * sdl3-bindgen-sys C shims for <SDL3/SDL_atomic.h>: fixed-arity functions over
+ * what Haskell's FFI cannot call (SDL's variadic functions and function-like
+ * macros). hs-bindgen binds them into SDL3.Sys.Bindgen.AtomicShims; the curated
+ * layer exports them from SDL3.Sys.Atomic, under "C shims".
+ *
+ * Authored in lithon-codegen/data/sdl3/include/sdl3-bindgen-sys/ and copied
+ * verbatim into the package's include/sdl3-bindgen-sys/: edit the
+ * lithon-codegen copy, then run `lithon-codegen sdl3 generate`. Rules:
+ * functions only (no types, no macros but the include guard); each named
+ * lithon_<the SDL name it wraps>; a since-line equal to the wrapped API's;
+ * anything newer than SDL 3.2.0 guards its definition with
+ * SDL_VERSION_ATLEAST.
+ *
+ * BSD-3-Clause, like the package (see LICENSE). Documentation adapted from
+ * the SDL 3 headers (zlib; see LICENSE_SDL).
+ */
+
+#ifndef SDL3_BINDGEN_SYS_SDL_ATOMIC_SHIMS_H
+#define SDL3_BINDGEN_SYS_SDL_ATOMIC_SHIMS_H
+
+#include <SDL3/SDL_atomic.h>
+
+/**
+ * Increment an atomic variable used as a reference count.
+ *
+ * The SDL_AtomicIncRef macro as a function.
+ *
+ * \param a a pointer to an SDL_AtomicInt to increment.
+ * \returns the previous value of the atomic variable.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ *
+ * \sa SDL_AtomicDecRef
+ */
+static SDL_INLINE int lithon_SDL_AtomicIncRef(SDL_AtomicInt *a)
+{
+    return SDL_AtomicIncRef(a);
+}
+
+/**
+ * Decrement an atomic variable used as a reference count.
+ *
+ * The SDL_AtomicDecRef macro as a function.
+ *
+ * \param a a pointer to an SDL_AtomicInt to decrement.
+ * \returns true if the variable reached zero after decrementing, false
+ *          otherwise.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ *
+ * \sa SDL_AtomicIncRef
+ */
+static SDL_INLINE bool lithon_SDL_AtomicDecRef(SDL_AtomicInt *a)
+{
+    return SDL_AtomicDecRef(a);
+}
+
+#endif /* SDL3_BINDGEN_SYS_SDL_ATOMIC_SHIMS_H */
diff --git a/include/sdl3-bindgen-sys/SDL_audio_shims.h b/include/sdl3-bindgen-sys/SDL_audio_shims.h
new file mode 100644
--- /dev/null
+++ b/include/sdl3-bindgen-sys/SDL_audio_shims.h
@@ -0,0 +1,66 @@
+/*
+ * sdl3-bindgen-sys C shims for <SDL3/SDL_audio.h>: fixed-arity functions over
+ * what Haskell's FFI cannot call (SDL's variadic functions and function-like
+ * macros). hs-bindgen binds them into SDL3.Sys.Bindgen.AudioShims; the curated
+ * layer exports them from SDL3.Sys.Audio, under "C shims".
+ *
+ * Authored in lithon-codegen/data/sdl3/include/sdl3-bindgen-sys/ and copied
+ * verbatim into the package's include/sdl3-bindgen-sys/: edit the
+ * lithon-codegen copy, then run `lithon-codegen sdl3 generate`. Rules:
+ * functions only (no types, no macros but the include guard); each named
+ * lithon_<the SDL name it wraps>; a since-line equal to the wrapped API's;
+ * anything newer than SDL 3.2.0 guards its definition with
+ * SDL_VERSION_ATLEAST.
+ *
+ * BSD-3-Clause, like the package (see LICENSE). Documentation adapted from
+ * the SDL 3 headers (zlib; see LICENSE_SDL).
+ */
+
+#ifndef SDL3_BINDGEN_SYS_SDL_AUDIO_SHIMS_H
+#define SDL3_BINDGEN_SYS_SDL_AUDIO_SHIMS_H
+
+#include <SDL3/SDL_audio.h>
+
+/**
+ * Calculate the size of each audio frame (in bytes) from an SDL_AudioSpec.
+ *
+ * The SDL_AUDIO_FRAMESIZE macro as a function. This reports on the size of an
+ * audio sample frame: stereo Sint16 data (2 channels of 2 bytes each) would
+ * be 4 bytes per frame, for example.
+ *
+ * \param spec the SDL_AudioSpec to query.
+ * \returns the number of bytes used per sample frame.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE int lithon_SDL_AUDIO_FRAMESIZE(const SDL_AudioSpec *spec)
+{
+    return (int)SDL_AUDIO_FRAMESIZE(*spec);
+}
+
+/**
+ * Define an SDL_AudioFormat value.
+ *
+ * The SDL_DEFINE_AUDIO_FORMAT macro as a function. SDL does not support
+ * custom audio formats, so this is not of much use externally, but it can be
+ * illustrative as to what the various bits of an SDL_AudioFormat mean. For
+ * example, SDL_AUDIO_S32LE is signed, littleendian, integer, 32 bits.
+ *
+ * \param is_signed true for signed data, false for unsigned data.
+ * \param is_bigendian true for bigendian data, false for littleendian data.
+ * \param is_float true for floating point data, false for integer data.
+ * \param bits number of bits per sample.
+ * \returns a format value in the style of SDL_AudioFormat.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE SDL_AudioFormat lithon_SDL_DEFINE_AUDIO_FORMAT(bool is_signed, bool is_bigendian, bool is_float, Uint8 bits)
+{
+    return (SDL_AudioFormat)SDL_DEFINE_AUDIO_FORMAT(is_signed, is_bigendian, is_float, bits);
+}
+
+#endif /* SDL3_BINDGEN_SYS_SDL_AUDIO_SHIMS_H */
diff --git a/include/sdl3-bindgen-sys/SDL_endian_shims.h b/include/sdl3-bindgen-sys/SDL_endian_shims.h
new file mode 100644
--- /dev/null
+++ b/include/sdl3-bindgen-sys/SDL_endian_shims.h
@@ -0,0 +1,225 @@
+/*
+ * sdl3-bindgen-sys C shims for <SDL3/SDL_endian.h>: fixed-arity functions over
+ * what Haskell's FFI cannot call (SDL's variadic functions and function-like
+ * macros). hs-bindgen binds them into SDL3.Sys.Bindgen.EndianShims; the curated
+ * layer exports them from SDL3.Sys.Endian, under "C shims".
+ *
+ * Authored in lithon-codegen/data/sdl3/include/sdl3-bindgen-sys/ and copied
+ * verbatim into the package's include/sdl3-bindgen-sys/: edit the
+ * lithon-codegen copy, then run `lithon-codegen sdl3 generate`. Rules:
+ * functions only (no types, no macros but the include guard); each named
+ * lithon_<the SDL name it wraps>; a since-line equal to the wrapped API's;
+ * anything newer than SDL 3.2.0 guards its definition with
+ * SDL_VERSION_ATLEAST.
+ *
+ * BSD-3-Clause, like the package (see LICENSE). Documentation adapted from
+ * the SDL 3 headers (zlib; see LICENSE_SDL).
+ */
+
+#ifndef SDL3_BINDGEN_SYS_SDL_ENDIAN_SHIMS_H
+#define SDL3_BINDGEN_SYS_SDL_ENDIAN_SHIMS_H
+
+#include <SDL3/SDL_endian.h>
+
+/**
+ * Byte-swap an unsigned 16-bit number.
+ *
+ * The SDL_Swap16 macro as a function. It always byte-swaps the value,
+ * whatever the system's byte order; SDL_Swap16LE or SDL_Swap16BE are
+ * what you want in most cases.
+ *
+ * \param x the value to byte-swap.
+ * \returns `x`, with its bytes in the opposite endian order.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE Uint16 lithon_SDL_Swap16(Uint16 x)
+{
+    return SDL_Swap16(x);
+}
+
+/**
+ * Byte-swap an unsigned 32-bit number.
+ *
+ * The SDL_Swap32 macro as a function. It always byte-swaps the value,
+ * whatever the system's byte order; SDL_Swap32LE or SDL_Swap32BE are
+ * what you want in most cases.
+ *
+ * \param x the value to byte-swap.
+ * \returns `x`, with its bytes in the opposite endian order.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE Uint32 lithon_SDL_Swap32(Uint32 x)
+{
+    return SDL_Swap32(x);
+}
+
+/**
+ * Byte-swap an unsigned 64-bit number.
+ *
+ * The SDL_Swap64 macro as a function. It always byte-swaps the value,
+ * whatever the system's byte order; SDL_Swap64LE or SDL_Swap64BE are
+ * what you want in most cases.
+ *
+ * \param x the value to byte-swap.
+ * \returns `x`, with its bytes in the opposite endian order.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE Uint64 lithon_SDL_Swap64(Uint64 x)
+{
+    return SDL_Swap64(x);
+}
+
+/**
+ * Swap a 16-bit value from littleendian to native byte order.
+ *
+ * The SDL_Swap16LE macro as a function. If this is running on a
+ * littleendian system, `x` is returned unchanged.
+ *
+ * \param x the value to swap, in littleendian byte order.
+ * \returns `x` in native byte order.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE Uint16 lithon_SDL_Swap16LE(Uint16 x)
+{
+    return SDL_Swap16LE(x);
+}
+
+/**
+ * Swap a 32-bit value from littleendian to native byte order.
+ *
+ * The SDL_Swap32LE macro as a function. If this is running on a
+ * littleendian system, `x` is returned unchanged.
+ *
+ * \param x the value to swap, in littleendian byte order.
+ * \returns `x` in native byte order.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE Uint32 lithon_SDL_Swap32LE(Uint32 x)
+{
+    return SDL_Swap32LE(x);
+}
+
+/**
+ * Swap a 64-bit value from littleendian to native byte order.
+ *
+ * The SDL_Swap64LE macro as a function. If this is running on a
+ * littleendian system, `x` is returned unchanged.
+ *
+ * \param x the value to swap, in littleendian byte order.
+ * \returns `x` in native byte order.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE Uint64 lithon_SDL_Swap64LE(Uint64 x)
+{
+    return SDL_Swap64LE(x);
+}
+
+/**
+ * Swap a floating point value from littleendian to native byte order.
+ *
+ * The SDL_SwapFloatLE macro as a function. If this is running on a
+ * littleendian system, `x` is returned unchanged.
+ *
+ * \param x the value to swap, in littleendian byte order.
+ * \returns `x` in native byte order.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE float lithon_SDL_SwapFloatLE(float x)
+{
+    return SDL_SwapFloatLE(x);
+}
+
+/**
+ * Swap a 16-bit value from bigendian to native byte order.
+ *
+ * The SDL_Swap16BE macro as a function. If this is running on a
+ * bigendian system, `x` is returned unchanged.
+ *
+ * \param x the value to swap, in bigendian byte order.
+ * \returns `x` in native byte order.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE Uint16 lithon_SDL_Swap16BE(Uint16 x)
+{
+    return SDL_Swap16BE(x);
+}
+
+/**
+ * Swap a 32-bit value from bigendian to native byte order.
+ *
+ * The SDL_Swap32BE macro as a function. If this is running on a
+ * bigendian system, `x` is returned unchanged.
+ *
+ * \param x the value to swap, in bigendian byte order.
+ * \returns `x` in native byte order.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE Uint32 lithon_SDL_Swap32BE(Uint32 x)
+{
+    return SDL_Swap32BE(x);
+}
+
+/**
+ * Swap a 64-bit value from bigendian to native byte order.
+ *
+ * The SDL_Swap64BE macro as a function. If this is running on a
+ * bigendian system, `x` is returned unchanged.
+ *
+ * \param x the value to swap, in bigendian byte order.
+ * \returns `x` in native byte order.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE Uint64 lithon_SDL_Swap64BE(Uint64 x)
+{
+    return SDL_Swap64BE(x);
+}
+
+/**
+ * Swap a floating point value from bigendian to native byte order.
+ *
+ * The SDL_SwapFloatBE macro as a function. If this is running on a
+ * bigendian system, `x` is returned unchanged.
+ *
+ * \param x the value to swap, in bigendian byte order.
+ * \returns `x` in native byte order.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE float lithon_SDL_SwapFloatBE(float x)
+{
+    return SDL_SwapFloatBE(x);
+}
+
+#endif /* SDL3_BINDGEN_SYS_SDL_ENDIAN_SHIMS_H */
diff --git a/include/sdl3-bindgen-sys/SDL_error_shims.h b/include/sdl3-bindgen-sys/SDL_error_shims.h
new file mode 100644
--- /dev/null
+++ b/include/sdl3-bindgen-sys/SDL_error_shims.h
@@ -0,0 +1,89 @@
+/*
+ * sdl3-bindgen-sys C shims for <SDL3/SDL_error.h>: fixed-arity functions over
+ * what Haskell's FFI cannot call (SDL's variadic functions and function-like
+ * macros). hs-bindgen binds them into SDL3.Sys.Bindgen.ErrorShims; the curated
+ * layer exports them from SDL3.Sys.Error, under "C shims".
+ *
+ * Authored in lithon-codegen/data/sdl3/include/sdl3-bindgen-sys/ and copied
+ * verbatim into the package's include/sdl3-bindgen-sys/: edit the
+ * lithon-codegen copy, then run `lithon-codegen sdl3 generate`. Rules:
+ * functions only (no types, no macros but the include guard); each named
+ * lithon_<the SDL name it wraps>; a since-line equal to the wrapped API's;
+ * anything newer than SDL 3.2.0 guards its definition with
+ * SDL_VERSION_ATLEAST.
+ *
+ * BSD-3-Clause, like the package (see LICENSE). Documentation adapted from
+ * the SDL 3 headers (zlib; see LICENSE_SDL).
+ */
+
+#ifndef SDL3_BINDGEN_SYS_SDL_ERROR_SHIMS_H
+#define SDL3_BINDGEN_SYS_SDL_ERROR_SHIMS_H
+
+#include <SDL3/SDL_error.h>
+
+/**
+ * Set the SDL error message for the current thread.
+ *
+ * A fixed-arity shim over the variadic SDL_SetError: `message` becomes the
+ * error message verbatim. It is never parsed as a printf-style format string,
+ * so a percent sign in it needs no escaping.
+ *
+ * Calling this function will replace any previous error message that was set.
+ * It always returns false, since SDL frequently uses false to signify a
+ * failing result.
+ *
+ * \param message the error message, in UTF-8.
+ * \returns false.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ *
+ * \sa SDL_ClearError
+ * \sa SDL_GetError
+ */
+static SDL_INLINE bool lithon_SDL_SetError(const char *message)
+{
+    return SDL_SetError("%s", message);
+}
+
+/**
+ * Report an unsupported operation with SDL's standard error message.
+ *
+ * The SDL_Unsupported macro as a function: it sets the error message to
+ * "That operation is not supported".
+ *
+ * \returns false.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ *
+ * \sa SDL_SetError
+ */
+static SDL_INLINE bool lithon_SDL_Unsupported(void)
+{
+    return SDL_Unsupported();
+}
+
+/**
+ * Report an invalid parameter with SDL's standard error message.
+ *
+ * The SDL_InvalidParamError macro as a function: it sets the error message to
+ * "Parameter 'name' is invalid", with the parameter's name in place of name.
+ *
+ * \param param the name of the invalid parameter, in UTF-8.
+ * \returns false.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ *
+ * \sa SDL_SetError
+ */
+static SDL_INLINE bool lithon_SDL_InvalidParamError(const char *param)
+{
+    return SDL_InvalidParamError(param);
+}
+
+#endif /* SDL3_BINDGEN_SYS_SDL_ERROR_SHIMS_H */
diff --git a/include/sdl3-bindgen-sys/SDL_iostream_shims.h b/include/sdl3-bindgen-sys/SDL_iostream_shims.h
new file mode 100644
--- /dev/null
+++ b/include/sdl3-bindgen-sys/SDL_iostream_shims.h
@@ -0,0 +1,47 @@
+/*
+ * sdl3-bindgen-sys C shims for <SDL3/SDL_iostream.h>: fixed-arity functions over
+ * what Haskell's FFI cannot call (SDL's variadic functions and function-like
+ * macros). hs-bindgen binds them into SDL3.Sys.Bindgen.IostreamShims; the curated
+ * layer exports them from SDL3.Sys.Iostream, under "C shims".
+ *
+ * Authored in lithon-codegen/data/sdl3/include/sdl3-bindgen-sys/ and copied
+ * verbatim into the package's include/sdl3-bindgen-sys/: edit the
+ * lithon-codegen copy, then run `lithon-codegen sdl3 generate`. Rules:
+ * functions only (no types, no macros but the include guard); each named
+ * lithon_<the SDL name it wraps>; a since-line equal to the wrapped API's;
+ * anything newer than SDL 3.2.0 guards its definition with
+ * SDL_VERSION_ATLEAST.
+ *
+ * BSD-3-Clause, like the package (see LICENSE). Documentation adapted from
+ * the SDL 3 headers (zlib; see LICENSE_SDL).
+ */
+
+#ifndef SDL3_BINDGEN_SYS_SDL_IOSTREAM_SHIMS_H
+#define SDL3_BINDGEN_SYS_SDL_IOSTREAM_SHIMS_H
+
+#include <SDL3/SDL_iostream.h>
+
+/**
+ * Print a string to an SDL_IOStream data stream.
+ *
+ * A fixed-arity shim over the variadic SDL_IOprintf: `str` is written
+ * verbatim. It is never parsed as a printf-style format string, so a percent
+ * sign in it needs no escaping.
+ *
+ * \param context a pointer to an SDL_IOStream structure.
+ * \param str the NUL-terminated string to write.
+ * \returns the number of bytes written or 0 on failure; call SDL_GetError()
+ *          for more information.
+ *
+ * \threadsafety Do not use the same SDL_IOStream from two threads at once.
+ *
+ * \since This function is available since SDL 3.2.0.
+ *
+ * \sa SDL_WriteIO
+ */
+static SDL_INLINE size_t lithon_SDL_IOprintf(SDL_IOStream *context, const char *str)
+{
+    return SDL_IOprintf(context, "%s", str);
+}
+
+#endif /* SDL3_BINDGEN_SYS_SDL_IOSTREAM_SHIMS_H */
diff --git a/include/sdl3-bindgen-sys/SDL_log_shims.h b/include/sdl3-bindgen-sys/SDL_log_shims.h
new file mode 100644
--- /dev/null
+++ b/include/sdl3-bindgen-sys/SDL_log_shims.h
@@ -0,0 +1,214 @@
+/*
+ * sdl3-bindgen-sys C shims for <SDL3/SDL_log.h>: fixed-arity functions over
+ * what Haskell's FFI cannot call (SDL's variadic functions and function-like
+ * macros). hs-bindgen binds them into SDL3.Sys.Bindgen.LogShims; the curated
+ * layer exports them from SDL3.Sys.Log, under "C shims".
+ *
+ * Authored in lithon-codegen/data/sdl3/include/sdl3-bindgen-sys/ and copied
+ * verbatim into the package's include/sdl3-bindgen-sys/: edit the
+ * lithon-codegen copy, then run `lithon-codegen sdl3 generate`. Rules:
+ * functions only (no types, no macros but the include guard); each named
+ * lithon_<the SDL name it wraps>; a since-line equal to the wrapped API's;
+ * anything newer than SDL 3.2.0 guards its definition with
+ * SDL_VERSION_ATLEAST.
+ *
+ * BSD-3-Clause, like the package (see LICENSE). Documentation adapted from
+ * the SDL 3 headers (zlib; see LICENSE_SDL).
+ */
+
+#ifndef SDL3_BINDGEN_SYS_SDL_LOG_SHIMS_H
+#define SDL3_BINDGEN_SYS_SDL_LOG_SHIMS_H
+
+#include <SDL3/SDL_log.h>
+
+/**
+ * Log a message with SDL_LOG_CATEGORY_APPLICATION and SDL_LOG_PRIORITY_INFO.
+ *
+ * A fixed-arity shim over the variadic SDL_Log: `message` is logged
+ * verbatim. It is never parsed as a printf-style format string, so a percent
+ * sign in it needs no escaping.
+ *
+ * \param message the message to log, in UTF-8.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ *
+ * \sa SDL_LogMessage
+ */
+static SDL_INLINE void lithon_SDL_Log(const char *message)
+{
+    SDL_Log("%s", message);
+}
+
+/**
+ * Log a message with SDL_LOG_PRIORITY_TRACE.
+ *
+ * A fixed-arity shim over the variadic SDL_LogTrace: `message` is logged
+ * verbatim. It is never parsed as a printf-style format string, so a percent
+ * sign in it needs no escaping.
+ *
+ * \param category the category of the message.
+ * \param message the message to log, in UTF-8.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ *
+ * \sa SDL_LogMessage
+ */
+static SDL_INLINE void lithon_SDL_LogTrace(int category, const char *message)
+{
+    SDL_LogTrace(category, "%s", message);
+}
+
+/**
+ * Log a message with SDL_LOG_PRIORITY_VERBOSE.
+ *
+ * A fixed-arity shim over the variadic SDL_LogVerbose: `message` is logged
+ * verbatim. It is never parsed as a printf-style format string, so a percent
+ * sign in it needs no escaping.
+ *
+ * \param category the category of the message.
+ * \param message the message to log, in UTF-8.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ *
+ * \sa SDL_LogMessage
+ */
+static SDL_INLINE void lithon_SDL_LogVerbose(int category, const char *message)
+{
+    SDL_LogVerbose(category, "%s", message);
+}
+
+/**
+ * Log a message with SDL_LOG_PRIORITY_DEBUG.
+ *
+ * A fixed-arity shim over the variadic SDL_LogDebug: `message` is logged
+ * verbatim. It is never parsed as a printf-style format string, so a percent
+ * sign in it needs no escaping.
+ *
+ * \param category the category of the message.
+ * \param message the message to log, in UTF-8.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ *
+ * \sa SDL_LogMessage
+ */
+static SDL_INLINE void lithon_SDL_LogDebug(int category, const char *message)
+{
+    SDL_LogDebug(category, "%s", message);
+}
+
+/**
+ * Log a message with SDL_LOG_PRIORITY_INFO.
+ *
+ * A fixed-arity shim over the variadic SDL_LogInfo: `message` is logged
+ * verbatim. It is never parsed as a printf-style format string, so a percent
+ * sign in it needs no escaping.
+ *
+ * \param category the category of the message.
+ * \param message the message to log, in UTF-8.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ *
+ * \sa SDL_LogMessage
+ */
+static SDL_INLINE void lithon_SDL_LogInfo(int category, const char *message)
+{
+    SDL_LogInfo(category, "%s", message);
+}
+
+/**
+ * Log a message with SDL_LOG_PRIORITY_WARN.
+ *
+ * A fixed-arity shim over the variadic SDL_LogWarn: `message` is logged
+ * verbatim. It is never parsed as a printf-style format string, so a percent
+ * sign in it needs no escaping.
+ *
+ * \param category the category of the message.
+ * \param message the message to log, in UTF-8.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ *
+ * \sa SDL_LogMessage
+ */
+static SDL_INLINE void lithon_SDL_LogWarn(int category, const char *message)
+{
+    SDL_LogWarn(category, "%s", message);
+}
+
+/**
+ * Log a message with SDL_LOG_PRIORITY_ERROR.
+ *
+ * A fixed-arity shim over the variadic SDL_LogError: `message` is logged
+ * verbatim. It is never parsed as a printf-style format string, so a percent
+ * sign in it needs no escaping.
+ *
+ * \param category the category of the message.
+ * \param message the message to log, in UTF-8.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ *
+ * \sa SDL_LogMessage
+ */
+static SDL_INLINE void lithon_SDL_LogError(int category, const char *message)
+{
+    SDL_LogError(category, "%s", message);
+}
+
+/**
+ * Log a message with SDL_LOG_PRIORITY_CRITICAL.
+ *
+ * A fixed-arity shim over the variadic SDL_LogCritical: `message` is logged
+ * verbatim. It is never parsed as a printf-style format string, so a percent
+ * sign in it needs no escaping.
+ *
+ * \param category the category of the message.
+ * \param message the message to log, in UTF-8.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ *
+ * \sa SDL_LogMessage
+ */
+static SDL_INLINE void lithon_SDL_LogCritical(int category, const char *message)
+{
+    SDL_LogCritical(category, "%s", message);
+}
+
+/**
+ * Log a message with the specified category and priority.
+ *
+ * A fixed-arity shim over the variadic SDL_LogMessage: `message` is logged
+ * verbatim. It is never parsed as a printf-style format string, so a percent
+ * sign in it needs no escaping.
+ *
+ * \param category the category of the message.
+ * \param priority the priority of the message.
+ * \param message the message to log, in UTF-8.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ *
+ * \sa SDL_SetLogOutputFunction
+ * \sa SDL_SetLogPriority
+ */
+static SDL_INLINE void lithon_SDL_LogMessage(int category, SDL_LogPriority priority, const char *message)
+{
+    SDL_LogMessage(category, priority, "%s", message);
+}
+
+#endif /* SDL3_BINDGEN_SYS_SDL_LOG_SHIMS_H */
diff --git a/include/sdl3-bindgen-sys/SDL_pixels_shims.h b/include/sdl3-bindgen-sys/SDL_pixels_shims.h
new file mode 100644
--- /dev/null
+++ b/include/sdl3-bindgen-sys/SDL_pixels_shims.h
@@ -0,0 +1,416 @@
+/*
+ * sdl3-bindgen-sys C shims for <SDL3/SDL_pixels.h>: fixed-arity functions over
+ * what Haskell's FFI cannot call (SDL's variadic functions and function-like
+ * macros). hs-bindgen binds them into SDL3.Sys.Bindgen.PixelsShims; the curated
+ * layer exports them from SDL3.Sys.Pixels, under "C shims".
+ *
+ * Authored in lithon-codegen/data/sdl3/include/sdl3-bindgen-sys/ and copied
+ * verbatim into the package's include/sdl3-bindgen-sys/: edit the
+ * lithon-codegen copy, then run `lithon-codegen sdl3 generate`. Rules:
+ * functions only (no types, no macros but the include guard); each named
+ * lithon_<the SDL name it wraps>; a since-line equal to the wrapped API's;
+ * anything newer than SDL 3.2.0 guards its definition with
+ * SDL_VERSION_ATLEAST.
+ *
+ * BSD-3-Clause, like the package (see LICENSE). Documentation adapted from
+ * the SDL 3 headers (zlib; see LICENSE_SDL).
+ */
+
+#ifndef SDL3_BINDGEN_SYS_SDL_PIXELS_SHIMS_H
+#define SDL3_BINDGEN_SYS_SDL_PIXELS_SHIMS_H
+
+#include <SDL3/SDL_pixels.h>
+
+/**
+ * Define a custom FourCC pixel format.
+ *
+ * The SDL_DEFINE_PIXELFOURCC macro as a function. SDL_PIXELFORMAT_YV12, for
+ * example, is the code of the characters Y, V, 1, 2.
+ *
+ * \param a the first character of the FourCC code.
+ * \param b the second character of the FourCC code.
+ * \param c the third character of the FourCC code.
+ * \param d the fourth character of the FourCC code.
+ * \returns a format value in the style of SDL_PixelFormat.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ *
+ * \sa SDL_FOURCC
+ */
+static SDL_INLINE SDL_PixelFormat lithon_SDL_DEFINE_PIXELFOURCC(Uint8 a, Uint8 b, Uint8 c, Uint8 d)
+{
+    return (SDL_PixelFormat)SDL_DEFINE_PIXELFOURCC(a, b, c, d);
+}
+
+/**
+ * Determine an SDL_PixelFormat's bits per pixel.
+ *
+ * The SDL_BITSPERPIXEL macro as a function. FourCC formats report zero here,
+ * as it rarely makes sense to measure them per-pixel.
+ *
+ * \param format an SDL_PixelFormat to check.
+ * \returns the bits-per-pixel of `format`.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ *
+ * \sa SDL_BYTESPERPIXEL
+ */
+static SDL_INLINE int lithon_SDL_BITSPERPIXEL(SDL_PixelFormat format)
+{
+    return (int)SDL_BITSPERPIXEL(format);
+}
+
+/**
+ * Determine an SDL_PixelFormat's bytes per pixel.
+ *
+ * The SDL_BYTESPERPIXEL macro as a function. FourCC formats do their best
+ * here, but many of them don't have a meaningful measurement of bytes per
+ * pixel.
+ *
+ * \param format an SDL_PixelFormat to check.
+ * \returns the bytes-per-pixel of `format`.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ *
+ * \sa SDL_BITSPERPIXEL
+ */
+static SDL_INLINE int lithon_SDL_BYTESPERPIXEL(SDL_PixelFormat format)
+{
+    return (int)SDL_BYTESPERPIXEL(format);
+}
+
+/**
+ * Determine if an SDL_PixelFormat is an indexed format.
+ *
+ * The SDL_ISPIXELFORMAT_INDEXED macro as a function.
+ *
+ * \param format an SDL_PixelFormat to check.
+ * \returns true if the format is indexed, false otherwise.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE bool lithon_SDL_ISPIXELFORMAT_INDEXED(SDL_PixelFormat format)
+{
+    return SDL_ISPIXELFORMAT_INDEXED(format);
+}
+
+/**
+ * Determine if an SDL_PixelFormat is a packed format.
+ *
+ * The SDL_ISPIXELFORMAT_PACKED macro as a function.
+ *
+ * \param format an SDL_PixelFormat to check.
+ * \returns true if the format is packed, false otherwise.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE bool lithon_SDL_ISPIXELFORMAT_PACKED(SDL_PixelFormat format)
+{
+    return SDL_ISPIXELFORMAT_PACKED(format);
+}
+
+/**
+ * Determine if an SDL_PixelFormat is an array format.
+ *
+ * The SDL_ISPIXELFORMAT_ARRAY macro as a function.
+ *
+ * \param format an SDL_PixelFormat to check.
+ * \returns true if the format is an array, false otherwise.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE bool lithon_SDL_ISPIXELFORMAT_ARRAY(SDL_PixelFormat format)
+{
+    return SDL_ISPIXELFORMAT_ARRAY(format);
+}
+
+/**
+ * Determine if an SDL_PixelFormat is a 10-bit format.
+ *
+ * The SDL_ISPIXELFORMAT_10BIT macro as a function.
+ *
+ * \param format an SDL_PixelFormat to check.
+ * \returns true if the format is 10-bit, false otherwise.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE bool lithon_SDL_ISPIXELFORMAT_10BIT(SDL_PixelFormat format)
+{
+    return SDL_ISPIXELFORMAT_10BIT(format);
+}
+
+/**
+ * Determine if an SDL_PixelFormat is a floating point format.
+ *
+ * The SDL_ISPIXELFORMAT_FLOAT macro as a function.
+ *
+ * \param format an SDL_PixelFormat to check.
+ * \returns true if the format is a floating point, false otherwise.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE bool lithon_SDL_ISPIXELFORMAT_FLOAT(SDL_PixelFormat format)
+{
+    return SDL_ISPIXELFORMAT_FLOAT(format);
+}
+
+/**
+ * Determine if an SDL_PixelFormat has an alpha channel.
+ *
+ * The SDL_ISPIXELFORMAT_ALPHA macro as a function.
+ *
+ * \param format an SDL_PixelFormat to check.
+ * \returns true if the format has alpha, false otherwise.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE bool lithon_SDL_ISPIXELFORMAT_ALPHA(SDL_PixelFormat format)
+{
+    return SDL_ISPIXELFORMAT_ALPHA(format);
+}
+
+/**
+ * Determine if an SDL_PixelFormat is a "FourCC" format.
+ *
+ * The SDL_ISPIXELFORMAT_FOURCC macro as a function. This covers custom and other unusual formats.
+ *
+ * \param format an SDL_PixelFormat to check.
+ * \returns true if the format is a FourCC format, false otherwise.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE bool lithon_SDL_ISPIXELFORMAT_FOURCC(SDL_PixelFormat format)
+{
+    return SDL_ISPIXELFORMAT_FOURCC(format);
+}
+
+/**
+ * Define a custom colorspace.
+ *
+ * The SDL_DEFINE_COLORSPACE macro as a function.
+ *
+ * \param type the type of the new format.
+ * \param range the range of the new format.
+ * \param primaries the primaries of the new format.
+ * \param transfer the transfer characteristics of the new format.
+ * \param matrix the matrix coefficients of the new format.
+ * \param chroma the chroma sample location of the new format.
+ * \returns a format value in the style of SDL_Colorspace.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE SDL_Colorspace lithon_SDL_DEFINE_COLORSPACE(SDL_ColorType type, SDL_ColorRange range, SDL_ColorPrimaries primaries, SDL_TransferCharacteristics transfer, SDL_MatrixCoefficients matrix, SDL_ChromaLocation chroma)
+{
+    return (SDL_Colorspace)SDL_DEFINE_COLORSPACE(type, range, primaries, transfer, matrix, chroma);
+}
+
+/**
+ * Retrieve the type of an SDL_Colorspace.
+ *
+ * The SDL_COLORSPACETYPE macro as a function.
+ *
+ * \param cspace an SDL_Colorspace to check.
+ * \returns the SDL_ColorType of `cspace`.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE SDL_ColorType lithon_SDL_COLORSPACETYPE(SDL_Colorspace cspace)
+{
+    return SDL_COLORSPACETYPE(cspace);
+}
+
+/**
+ * Retrieve the range of an SDL_Colorspace.
+ *
+ * The SDL_COLORSPACERANGE macro as a function.
+ *
+ * \param cspace an SDL_Colorspace to check.
+ * \returns the SDL_ColorRange of `cspace`.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE SDL_ColorRange lithon_SDL_COLORSPACERANGE(SDL_Colorspace cspace)
+{
+    return SDL_COLORSPACERANGE(cspace);
+}
+
+/**
+ * Retrieve the chroma sample location of an SDL_Colorspace.
+ *
+ * The SDL_COLORSPACECHROMA macro as a function.
+ *
+ * \param cspace an SDL_Colorspace to check.
+ * \returns the SDL_ChromaLocation of `cspace`.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE SDL_ChromaLocation lithon_SDL_COLORSPACECHROMA(SDL_Colorspace cspace)
+{
+    return SDL_COLORSPACECHROMA(cspace);
+}
+
+/**
+ * Retrieve the primaries of an SDL_Colorspace.
+ *
+ * The SDL_COLORSPACEPRIMARIES macro as a function.
+ *
+ * \param cspace an SDL_Colorspace to check.
+ * \returns the SDL_ColorPrimaries of `cspace`.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE SDL_ColorPrimaries lithon_SDL_COLORSPACEPRIMARIES(SDL_Colorspace cspace)
+{
+    return SDL_COLORSPACEPRIMARIES(cspace);
+}
+
+/**
+ * Retrieve the transfer characteristics of an SDL_Colorspace.
+ *
+ * The SDL_COLORSPACETRANSFER macro as a function.
+ *
+ * \param cspace an SDL_Colorspace to check.
+ * \returns the SDL_TransferCharacteristics of `cspace`.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE SDL_TransferCharacteristics lithon_SDL_COLORSPACETRANSFER(SDL_Colorspace cspace)
+{
+    return SDL_COLORSPACETRANSFER(cspace);
+}
+
+/**
+ * Retrieve the matrix coefficients of an SDL_Colorspace.
+ *
+ * The SDL_COLORSPACEMATRIX macro as a function.
+ *
+ * \param cspace an SDL_Colorspace to check.
+ * \returns the SDL_MatrixCoefficients of `cspace`.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE SDL_MatrixCoefficients lithon_SDL_COLORSPACEMATRIX(SDL_Colorspace cspace)
+{
+    return SDL_COLORSPACEMATRIX(cspace);
+}
+
+/**
+ * Determine if an SDL_Colorspace uses BT601 (or BT470BG) matrix coefficients.
+ *
+ * The SDL_ISCOLORSPACE_MATRIX_BT601 macro as a function.
+ *
+ * \param cspace an SDL_Colorspace to check.
+ * \returns true if BT601 or BT470BG, false otherwise.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE bool lithon_SDL_ISCOLORSPACE_MATRIX_BT601(SDL_Colorspace cspace)
+{
+    return SDL_ISCOLORSPACE_MATRIX_BT601(cspace);
+}
+
+/**
+ * Determine if an SDL_Colorspace uses BT709 matrix coefficients.
+ *
+ * The SDL_ISCOLORSPACE_MATRIX_BT709 macro as a function.
+ *
+ * \param cspace an SDL_Colorspace to check.
+ * \returns true if BT709, false otherwise.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE bool lithon_SDL_ISCOLORSPACE_MATRIX_BT709(SDL_Colorspace cspace)
+{
+    return SDL_ISCOLORSPACE_MATRIX_BT709(cspace);
+}
+
+/**
+ * Determine if an SDL_Colorspace uses BT2020_NCL matrix coefficients.
+ *
+ * The SDL_ISCOLORSPACE_MATRIX_BT2020_NCL macro as a function.
+ *
+ * \param cspace an SDL_Colorspace to check.
+ * \returns true if BT2020_NCL, false otherwise.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE bool lithon_SDL_ISCOLORSPACE_MATRIX_BT2020_NCL(SDL_Colorspace cspace)
+{
+    return SDL_ISCOLORSPACE_MATRIX_BT2020_NCL(cspace);
+}
+
+/**
+ * Determine if an SDL_Colorspace has a limited range.
+ *
+ * The SDL_ISCOLORSPACE_LIMITED_RANGE macro as a function.
+ *
+ * \param cspace an SDL_Colorspace to check.
+ * \returns true if limited range, false otherwise.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE bool lithon_SDL_ISCOLORSPACE_LIMITED_RANGE(SDL_Colorspace cspace)
+{
+    return SDL_ISCOLORSPACE_LIMITED_RANGE(cspace);
+}
+
+/**
+ * Determine if an SDL_Colorspace has a full range.
+ *
+ * The SDL_ISCOLORSPACE_FULL_RANGE macro as a function.
+ *
+ * \param cspace an SDL_Colorspace to check.
+ * \returns true if full range, false otherwise.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE bool lithon_SDL_ISCOLORSPACE_FULL_RANGE(SDL_Colorspace cspace)
+{
+    return SDL_ISCOLORSPACE_FULL_RANGE(cspace);
+}
+
+#endif /* SDL3_BINDGEN_SYS_SDL_PIXELS_SHIMS_H */
diff --git a/include/sdl3-bindgen-sys/SDL_stdinc_shims.h b/include/sdl3-bindgen-sys/SDL_stdinc_shims.h
new file mode 100644
--- /dev/null
+++ b/include/sdl3-bindgen-sys/SDL_stdinc_shims.h
@@ -0,0 +1,45 @@
+/*
+ * sdl3-bindgen-sys C shims for <SDL3/SDL_stdinc.h>: fixed-arity functions over
+ * what Haskell's FFI cannot call (SDL's variadic functions and function-like
+ * macros). hs-bindgen binds them into SDL3.Sys.Bindgen.StdincShims; the curated
+ * layer exports them from SDL3.Sys.Stdinc, under "C shims".
+ *
+ * Authored in lithon-codegen/data/sdl3/include/sdl3-bindgen-sys/ and copied
+ * verbatim into the package's include/sdl3-bindgen-sys/: edit the
+ * lithon-codegen copy, then run `lithon-codegen sdl3 generate`. Rules:
+ * functions only (no types, no macros but the include guard); each named
+ * lithon_<the SDL name it wraps>; a since-line equal to the wrapped API's;
+ * anything newer than SDL 3.2.0 guards its definition with
+ * SDL_VERSION_ATLEAST.
+ *
+ * BSD-3-Clause, like the package (see LICENSE). Documentation adapted from
+ * the SDL 3 headers (zlib; see LICENSE_SDL).
+ */
+
+#ifndef SDL3_BINDGEN_SYS_SDL_STDINC_SHIMS_H
+#define SDL3_BINDGEN_SYS_SDL_STDINC_SHIMS_H
+
+#include <SDL3/SDL_stdinc.h>
+
+/**
+ * Define a four character code as a Uint32.
+ *
+ * The SDL_FOURCC macro as a function.
+ *
+ * \param a the first ASCII character.
+ * \param b the second ASCII character.
+ * \param c the third ASCII character.
+ * \param d the fourth ASCII character.
+ * \returns the four characters converted into a Uint32, one character
+ *          per-byte.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE Uint32 lithon_SDL_FOURCC(Uint8 a, Uint8 b, Uint8 c, Uint8 d)
+{
+    return SDL_FOURCC(a, b, c, d);
+}
+
+#endif /* SDL3_BINDGEN_SYS_SDL_STDINC_SHIMS_H */
diff --git a/include/sdl3-bindgen-sys/SDL_surface_shims.h b/include/sdl3-bindgen-sys/SDL_surface_shims.h
new file mode 100644
--- /dev/null
+++ b/include/sdl3-bindgen-sys/SDL_surface_shims.h
@@ -0,0 +1,44 @@
+/*
+ * sdl3-bindgen-sys C shims for <SDL3/SDL_surface.h>: fixed-arity functions over
+ * what Haskell's FFI cannot call (SDL's variadic functions and function-like
+ * macros). hs-bindgen binds them into SDL3.Sys.Bindgen.SurfaceShims; the curated
+ * layer exports them from SDL3.Sys.Surface, under "C shims".
+ *
+ * Authored in lithon-codegen/data/sdl3/include/sdl3-bindgen-sys/ and copied
+ * verbatim into the package's include/sdl3-bindgen-sys/: edit the
+ * lithon-codegen copy, then run `lithon-codegen sdl3 generate`. Rules:
+ * functions only (no types, no macros but the include guard); each named
+ * lithon_<the SDL name it wraps>; a since-line equal to the wrapped API's;
+ * anything newer than SDL 3.2.0 guards its definition with
+ * SDL_VERSION_ATLEAST.
+ *
+ * BSD-3-Clause, like the package (see LICENSE). Documentation adapted from
+ * the SDL 3 headers (zlib; see LICENSE_SDL).
+ */
+
+#ifndef SDL3_BINDGEN_SYS_SDL_SURFACE_SHIMS_H
+#define SDL3_BINDGEN_SYS_SDL_SURFACE_SHIMS_H
+
+#include <SDL3/SDL_surface.h>
+
+/**
+ * Determine whether a surface needs to be locked before its pixels are
+ * accessed.
+ *
+ * The SDL_MUSTLOCK macro as a function.
+ *
+ * \param surface the SDL_Surface to check.
+ * \returns true if the surface must be locked with SDL_LockSurface before its
+ *          pixels are read or written, false otherwise.
+ *
+ * \since This function is available since SDL 3.2.0.
+ *
+ * \sa SDL_LockSurface
+ * \sa SDL_UnlockSurface
+ */
+static SDL_INLINE bool lithon_SDL_MUSTLOCK(SDL_Surface *surface)
+{
+    return SDL_MUSTLOCK(surface);
+}
+
+#endif /* SDL3_BINDGEN_SYS_SDL_SURFACE_SHIMS_H */
diff --git a/include/sdl3-bindgen-sys/SDL_thread_shims.h b/include/sdl3-bindgen-sys/SDL_thread_shims.h
new file mode 100644
--- /dev/null
+++ b/include/sdl3-bindgen-sys/SDL_thread_shims.h
@@ -0,0 +1,95 @@
+/*
+ * sdl3-bindgen-sys C shims for <SDL3/SDL_thread.h>: fixed-arity functions over
+ * what Haskell's FFI cannot call (SDL's variadic functions and function-like
+ * macros). hs-bindgen binds them into SDL3.Sys.Bindgen.ThreadShims; the curated
+ * layer exports them from SDL3.Sys.Thread, under "C shims".
+ *
+ * Authored in lithon-codegen/data/sdl3/include/sdl3-bindgen-sys/ and copied
+ * verbatim into the package's include/sdl3-bindgen-sys/: edit the
+ * lithon-codegen copy, then run `lithon-codegen sdl3 generate`. Rules:
+ * functions only (no types, no macros but the include guard); each named
+ * lithon_<the SDL name it wraps>; a since-line equal to the wrapped API's;
+ * anything newer than SDL 3.2.0 guards its definition with
+ * SDL_VERSION_ATLEAST.
+ *
+ * BSD-3-Clause, like the package (see LICENSE). Documentation adapted from
+ * the SDL 3 headers (zlib; see LICENSE_SDL).
+ */
+
+#ifndef SDL3_BINDGEN_SYS_SDL_THREAD_SHIMS_H
+#define SDL3_BINDGEN_SYS_SDL_THREAD_SHIMS_H
+
+#include <SDL3/SDL_thread.h>
+
+/**
+ * Create a new thread with a default stack size.
+ *
+ * The SDL_CreateThread macro as a function. Like the macro, it calls
+ * SDL_CreateThreadRuntime with the C runtime's thread entry and exit
+ * functions for the platform it is compiled on (`_beginthreadex` and
+ * `_endthreadex` on Windows, NULL elsewhere), so prefer it to calling
+ * SDL_CreateThreadRuntime directly.
+ *
+ * This is equivalent to calling SDL_CreateThreadWithProperties with the
+ * following properties set:
+ *
+ * - `SDL_PROP_THREAD_CREATE_ENTRY_FUNCTION_POINTER`: `fn`
+ * - `SDL_PROP_THREAD_CREATE_NAME_STRING`: `name`
+ * - `SDL_PROP_THREAD_CREATE_USERDATA_POINTER`: `data`
+ *
+ * \param fn the SDL_ThreadFunction function to call in the new thread.
+ * \param name the name of the thread.
+ * \param data a pointer that is passed to `fn`.
+ * \returns an opaque pointer to the new thread object on success, NULL if the
+ *          new thread could not be created; call SDL_GetError() for more
+ *          information.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ *
+ * \sa SDL_CreateThreadWithProperties
+ * \sa SDL_WaitThread
+ */
+static SDL_INLINE SDL_Thread *lithon_SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data)
+{
+    return SDL_CreateThread(fn, name, data);
+}
+
+/**
+ * Create a new thread with the specified properties.
+ *
+ * The SDL_CreateThreadWithProperties macro as a function, passing the C
+ * runtime's thread entry and exit functions like SDL_CreateThread does.
+ *
+ * These are the supported properties:
+ *
+ * - `SDL_PROP_THREAD_CREATE_ENTRY_FUNCTION_POINTER`: an SDL_ThreadFunction
+ *   value that will be called at the start of the new thread's life.
+ *   Required.
+ * - `SDL_PROP_THREAD_CREATE_NAME_STRING`: the name of the new thread, which
+ *   might be available to debuggers. Optional, defaults to NULL.
+ * - `SDL_PROP_THREAD_CREATE_USERDATA_POINTER`: an arbitrary app-defined
+ *   pointer, which is passed to the entry function on the new thread, as its
+ *   only parameter. Optional, defaults to NULL.
+ * - `SDL_PROP_THREAD_CREATE_STACKSIZE_NUMBER`: the size, in bytes, of the new
+ *   thread's stack. Optional, defaults to 0 (system-defined default).
+ *
+ * \param props the properties to use.
+ * \returns an opaque pointer to the new thread object on success, NULL if the
+ *          new thread could not be created; call SDL_GetError() for more
+ *          information.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ *
+ * \sa SDL_CreateThread
+ * \sa SDL_WaitThread
+ */
+static SDL_INLINE SDL_Thread *lithon_SDL_CreateThreadWithProperties(SDL_PropertiesID props)
+{
+    return SDL_CreateThreadWithProperties(props);
+}
+
+#endif /* SDL3_BINDGEN_SYS_SDL_THREAD_SHIMS_H */
diff --git a/include/sdl3-bindgen-sys/SDL_timer_shims.h b/include/sdl3-bindgen-sys/SDL_timer_shims.h
new file mode 100644
--- /dev/null
+++ b/include/sdl3-bindgen-sys/SDL_timer_shims.h
@@ -0,0 +1,78 @@
+/*
+ * sdl3-bindgen-sys C shims for <SDL3/SDL_timer.h>: fixed-arity functions over
+ * what Haskell's FFI cannot call (SDL's variadic functions and function-like
+ * macros). hs-bindgen binds them into SDL3.Sys.Bindgen.TimerShims; the curated
+ * layer exports them from SDL3.Sys.Timer, under "C shims".
+ *
+ * Authored in lithon-codegen/data/sdl3/include/sdl3-bindgen-sys/ and copied
+ * verbatim into the package's include/sdl3-bindgen-sys/: edit the
+ * lithon-codegen copy, then run `lithon-codegen sdl3 generate`. Rules:
+ * functions only (no types, no macros but the include guard); each named
+ * lithon_<the SDL name it wraps>; a since-line equal to the wrapped API's;
+ * anything newer than SDL 3.2.0 guards its definition with
+ * SDL_VERSION_ATLEAST.
+ *
+ * BSD-3-Clause, like the package (see LICENSE). Documentation adapted from
+ * the SDL 3 headers (zlib; see LICENSE_SDL).
+ */
+
+#ifndef SDL3_BINDGEN_SYS_SDL_TIMER_SHIMS_H
+#define SDL3_BINDGEN_SYS_SDL_TIMER_SHIMS_H
+
+#include <SDL3/SDL_timer.h>
+
+/**
+ * Convert seconds to nanoseconds.
+ *
+ * The SDL_SECONDS_TO_NS macro as a function. This only converts whole numbers, not
+ * fractional seconds.
+ *
+ * \param s the number of seconds to convert.
+ * \returns `s`, expressed in nanoseconds.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE Uint64 lithon_SDL_SECONDS_TO_NS(Uint64 s)
+{
+    return SDL_SECONDS_TO_NS(s);
+}
+
+/**
+ * Convert milliseconds to nanoseconds.
+ *
+ * The SDL_MS_TO_NS macro as a function. This only converts whole numbers, not
+ * fractional milliseconds.
+ *
+ * \param ms the number of milliseconds to convert.
+ * \returns `ms`, expressed in nanoseconds.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE Uint64 lithon_SDL_MS_TO_NS(Uint64 ms)
+{
+    return SDL_MS_TO_NS(ms);
+}
+
+/**
+ * Convert microseconds to nanoseconds.
+ *
+ * The SDL_US_TO_NS macro as a function. This only converts whole numbers, not
+ * fractional microseconds.
+ *
+ * \param us the number of microseconds to convert.
+ * \returns `us`, expressed in nanoseconds.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.2.0.
+ */
+static SDL_INLINE Uint64 lithon_SDL_US_TO_NS(Uint64 us)
+{
+    return SDL_US_TO_NS(us);
+}
+
+#endif /* SDL3_BINDGEN_SYS_SDL_TIMER_SHIMS_H */
diff --git a/runtime-cexpr/C/Expr/Posix32.hs b/runtime-cexpr/C/Expr/Posix32.hs
--- a/runtime-cexpr/C/Expr/Posix32.hs
+++ b/runtime-cexpr/C/Expr/Posix32.hs
@@ -10,10 +10,9 @@
   module C.Expr.Posix32,
 ) where
 
--- c-expr
-
 import C.Operator.Classes
 import C.Operator.GenInstances (cExprInstances)
+-- c-expr
 import C.Type (OS (..), Platform (..), WordWidth (..))
 
 --------------------------------------------------------------------------------
diff --git a/runtime-cexpr/C/Operator/Classes.hs b/runtime-cexpr/C/Operator/Classes.hs
--- a/runtime-cexpr/C/Operator/Classes.hs
+++ b/runtime-cexpr/C/Operator/Classes.hs
@@ -111,7 +111,7 @@
   -- | Result type family of the C unary minus operator.
   type MinusRes a :: Type
 
-  -- | C unary plus minus.
+  -- | C unary minus operator.
   negate :: a -> MinusRes a
 
 infixl 2 +
@@ -138,7 +138,7 @@
 
 infixl 1 *
 
--- | Class for the C binary multiplication operator..
+-- | Class for the C binary multiplication operator.
 type Mult :: Type -> Type -> Constraint
 class Mult a b where
   -- | Result type family of the C binary multiplication operator.
@@ -160,7 +160,7 @@
 
 infixl 1 %
 
--- | Class for the C binary remainder operator..
+-- | Class for the C binary remainder operator.
 type Rem :: Type -> Type -> Constraint
 class Rem a b where
   -- | Result type family of the C binary remainder operator.
@@ -192,13 +192,13 @@
   -- | Result type family of C binary bitwise logical operators.
   type BitsRes a b :: Type
 
-  -- | C binary bitwise *and* operator.
+  -- | C binary bitwise /and/ operator.
   (.&.) :: a -> b -> BitsRes a b
 
-  -- | C binary bitwise *or* operator.
+  -- | C binary bitwise /or/ operator.
   (.|.) :: a -> b -> BitsRes a b
 
-  -- | C binary bitwise *xor* operator.
+  -- | C binary bitwise /xor/ operator.
   (.^.) :: a -> b -> BitsRes a b
 
 infixl 3 <<
diff --git a/runtime-cexpr/C/Operator/Internal.hs b/runtime-cexpr/C/Operator/Internal.hs
--- a/runtime-cexpr/C/Operator/Internal.hs
+++ b/runtime-cexpr/C/Operator/Internal.hs
@@ -14,14 +14,14 @@
 
 --------------------------------------------------------------------------------
 
--- | **Internal implementation detail**
+-- | __Internal implementation detail__
 --
 -- How is a C operator, when instantiated at a particular type, implemented?
 type OpImpl :: Nat -> Hs.Type
 data OpImpl n
   = -- | Convert arguments with the given conversions and then apply
-    -- the implied function (e.g. addition for the 'Add' class)
-    -- at the resulting type.
+    -- the implied function (e.g. addition for the 'C.Operator.Classes.Add'
+    -- class) at the resulting type.
     ConvertThenOp
       {argumentConversions :: !(Vec n [Conversion])}
   | -- | Add an integral value and a pointer.
@@ -227,8 +227,10 @@
   Just (ptr, SubPtrAndIntegral)
 binarySubType _ (Ptr ty1) (Ptr ty2)
   | ty1 == ty2 =
-      -- TODO: do we want to be more lenient in allowing subtraction of pointers
-      -- with different pointee types, e.g. allow @(x :: Ptr Void) - (y :: Ptr Int)@?
+      -- TODO <https://github.com/well-typed/c-expr/issues/31>
+      --
+      -- Do we want to be more lenient in allowing subtraction of pointers with
+      -- different pointee types, e.g. allow @(x :: Ptr Void) - (y :: Ptr Int)@?
       Just (Arithmetic $ Integral $ IntLike PtrDiff, SubPtrAndPtr)
 binarySubType _ _ _ =
   Nothing
@@ -299,7 +301,9 @@
   Just $ mkArithConv2 (Integral $ IntLike $ Int Signed, snd $ arithmeticConversion plat a1 a2)
 binaryEqType _ (Ptr ty1) (Ptr ty2)
   | ty1 == ty2 =
-      -- TODO: does the C standard allow "Ptr Int" == "Ptr Void"?
+      -- TODO <https://github.com/well-typed/c-expr/issues/29>
+      --
+      -- The C Standard is more permissive than we are.
       Just (intType, ConvertThenOp ([] ::: [] ::: VNil))
 binaryEqType _ _ _ = Nothing
 
@@ -316,8 +320,9 @@
   Just $ mkArithConv2 (Integral $ IntLike $ Int Signed, snd $ arithmeticConversion plat a1 a2)
 binaryRelType _ (Ptr ty1) (Ptr ty2)
   | ty1 == ty2 =
-      -- TODO: C is a bit more lenient than requiring the inner types to
-      -- match exactly.
+      -- TODO <https://github.com/well-typed/c-expr/issues/30>
+      --
+      -- C is a bit more lenient than requiring the inner types to match exactly.
       Just (intType, ConvertThenOp ([] ::: [] ::: VNil))
 binaryRelType _ _ _ = Nothing
 
diff --git a/runtime-cexpr/C/Type.hs b/runtime-cexpr/C/Type.hs
--- a/runtime-cexpr/C/Type.hs
+++ b/runtime-cexpr/C/Type.hs
@@ -232,10 +232,12 @@
 -- on this platform?
 intLikeTypeFitsInInt :: Platform -> IntLikeType -> Bool
 intLikeTypeFitsInInt plat ty =
-  -- TODO: this logic is questionable, as in theory I think we could have
-  -- an 'IntLike' type of a small size but of an entirely distinct range,
-  -- e.g. an 8-bit unsigned integer type that can store values in the range
-  -- [2^32, 2^32+2^8-1].
+  -- TODO <https://github.com/well-typed/c-expr/issues/27>
+  --
+  -- This logic is questionable, as in theory I think we could have an 'IntLike'
+  -- type of a small size but of an entirely distinct range, e.g. an 8-bit
+  -- unsigned integer type that can store values in the range [2^32,
+  -- 2^32+2^8-1].
   case intLikeTypeSign ty of
     Signed ->
       sz <= intSz
diff --git a/runtime-cexpr/C/Type/Internal/Universe.hs b/runtime-cexpr/C/Type/Internal/Universe.hs
--- a/runtime-cexpr/C/Type/Internal/Universe.hs
+++ b/runtime-cexpr/C/Type/Internal/Universe.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE ScopedTypeVariables #-}
 
--- | **Internal** module listing out all n-tuples of types
+-- | __Internal__ module listing out all n-tuples of types
 -- for the purposes of generating code with Template Haskell
 -- and for testing.
 module C.Type.Internal.Universe (
diff --git a/runtime/HsBindgen/Runtime/Block.hs b/runtime/HsBindgen/Runtime/Block.hs
--- a/runtime/HsBindgen/Runtime/Block.hs
+++ b/runtime/HsBindgen/Runtime/Block.hs
@@ -16,7 +16,7 @@
 
 import Foreign (Ptr)
 
-import HsBindgen.Runtime.Support.HasFFIType (HasFFIType, ViaNewtype (..))
+import HsBindgen.Runtime.HasFFIType (HasFFIType)
 
 {-------------------------------------------------------------------------------
   Definition
@@ -37,4 +37,4 @@
 -- > newtype VarCounter = VarCounter (Block (CInt -> IO CInt))
 newtype Block t = Block (Ptr ())
 
-deriving via ViaNewtype (Ptr ()) instance HasFFIType (Block t)
+deriving newtype instance HasFFIType (Block t)
diff --git a/runtime/HsBindgen/Runtime/HasFFIType.hs b/runtime/HsBindgen/Runtime/HasFFIType.hs
new file mode 100644
--- /dev/null
+++ b/runtime/HsBindgen/Runtime/HasFFIType.hs
@@ -0,0 +1,198 @@
+{-# LANGUAGE CPP #-}
+
+module HsBindgen.Runtime.HasFFIType (
+    -- * Class
+    HasFFIType (FFIType, toFFIType, fromFFIType)
+    -- * Shorthand types
+  , PtrVoid
+  , FunPtrVoid
+    -- * Deriving-via
+  , ViaIdentity (..)
+  ) where
+
+import Prelude as Types (Bool, Char, Double, Float, Int, Word)
+import Prelude hiding (Bool, Char, Double, Float, Int, Word)
+
+import Data.Int as Types (Int16, Int32, Int64, Int8)
+import Data.Kind (Type)
+import Data.Void (Void)
+import Data.Word as Types (Word16, Word32, Word64, Word8)
+import Foreign.C.Error as Types (Errno (..))
+import Foreign.C.Types as Types (CBool (..), CChar (..), CClock (..),
+                                 CDouble (..), CFloat (..), CInt (..),
+                                 CIntMax (..), CIntPtr (..), CLLong (..),
+                                 CLong (..), CPtrdiff (..), CSChar (..),
+                                 CSUSeconds (..), CShort (..), CSigAtomic (..),
+                                 CSize (..), CTime (..), CUChar (..),
+                                 CUInt (..), CUIntMax (..), CUIntPtr (..),
+                                 CULLong (..), CULong (..), CUSeconds (..),
+                                 CUShort (..), CWchar (..))
+import Foreign.Ptr (castFunPtr, castPtr)
+import Foreign.Ptr as Types (FunPtr, IntPtr (..), Ptr, WordPtr (..))
+import Foreign.StablePtr (castPtrToStablePtr, castStablePtrToPtr)
+import Foreign.StablePtr as Types (StablePtr)
+
+import HsBindgen.Runtime.PtrConst as Types (PtrConst, unsafeFromPtr,
+                                            unsafeToPtr)
+
+{-------------------------------------------------------------------------------
+  Class
+-------------------------------------------------------------------------------}
+
+-- | The 'HasFFIType' class captures Haskell types that can be converted to and
+-- from its /FFI type/.
+--
+-- A 'HasFFIType' instance declaration for a type @T@, mapping @FFIType T@ to
+-- @M.T'@, is valid if @T'@ is legal to appear as an argument or result in
+-- @foreign import@ declarations in a context where @M@ is in scope.
+--
+-- @foreign import@ declarations only compile if their type is a valid /foreign
+-- type/. This depends on the context of which modules are in scope. A @foreign
+-- import@ that uses FFI types exclusively will always compile.
+--
+-- Foreign types and its sub-kinds are described by the the "Haskell 2010
+-- Language" report. See the "8.4.2 Foreign Types" section of the report for
+-- more information:
+-- <https://www.haskell.org/onlinereport/haskell2010/haskellch8.html#x15-1560008.4.2>
+--
+class HasFFIType a where
+  type FFIType a :: Type
+  -- | Convert a type to its FFI type
+  --
+  -- See the 'HasFFIType' class for more information
+  toFFIType :: a -> FFIType a
+  -- | Inverse of 'toFFIType'
+  --
+  -- See the 'HasFFIType' class for more information
+  fromFFIType :: FFIType a -> a
+
+{-------------------------------------------------------------------------------
+  Shorthand types
+-------------------------------------------------------------------------------}
+
+-- | 'Ptr' 'Void'
+type PtrVoid = Ptr Void
+
+-- | 'FunPtr' 'Void'
+type FunPtrVoid = FunPtr Void
+
+{-------------------------------------------------------------------------------
+  Deriving-via
+-------------------------------------------------------------------------------}
+
+type ViaIdentity :: Type -> Type
+newtype ViaIdentity a = ViaIdentity a
+
+instance HasFFIType (ViaIdentity a) where
+  type FFIType (ViaIdentity a) = a
+  {-# INLINE toFFIType #-}
+  toFFIType (ViaIdentity x) = x
+  {-# INLINE fromFFIType #-}
+  fromFFIType x = ViaIdentity x
+
+{-------------------------------------------------------------------------------
+  Instances
+-------------------------------------------------------------------------------}
+
+-- === Prelude ===
+
+deriving via ViaIdentity Char   instance HasFFIType Char
+deriving via ViaIdentity Int    instance HasFFIType Int
+deriving via ViaIdentity Double instance HasFFIType Double
+deriving via ViaIdentity Float  instance HasFFIType Float
+deriving via ViaIdentity Bool   instance HasFFIType Bool
+
+-- === Data.Int ===
+
+deriving via ViaIdentity Int8  instance HasFFIType Int8
+deriving via ViaIdentity Int16 instance HasFFIType Int16
+deriving via ViaIdentity Int32 instance HasFFIType Int32
+deriving via ViaIdentity Int64 instance HasFFIType Int64
+
+-- === Data.Word ===
+
+deriving via ViaIdentity Word   instance HasFFIType Word
+deriving via ViaIdentity Word8  instance HasFFIType Word8
+deriving via ViaIdentity Word16 instance HasFFIType Word16
+deriving via ViaIdentity Word32 instance HasFFIType Word32
+deriving via ViaIdentity Word64 instance HasFFIType Word64
+
+-- === Foreign.Ptr ===
+
+instance HasFFIType (Ptr a) where
+  type FFIType (Ptr a) = PtrVoid
+  {-# INLINE toFFIType #-}
+  toFFIType = castPtr
+  {-# INLINE fromFFIType #-}
+  fromFFIType = castPtr
+
+instance HasFFIType (FunPtr a) where
+  type FFIType (FunPtr a) = FunPtrVoid
+  {-# INLINE toFFIType #-}
+  toFFIType = castFunPtr
+  {-# INLINE fromFFIType #-}
+  fromFFIType = castFunPtr
+
+deriving via ViaIdentity IntPtr  instance HasFFIType IntPtr
+deriving via ViaIdentity WordPtr instance HasFFIType WordPtr
+
+-- === Foreign.StablePtr ===
+
+instance HasFFIType (StablePtr a) where
+  type FFIType (StablePtr a) = StablePtr Void
+  {-# INLINE toFFIType #-}
+  toFFIType = castStablePtr
+  {-# INLINE fromFFIType #-}
+  fromFFIType = castStablePtr
+
+{-# INLINE castStablePtr #-}
+castStablePtr :: StablePtr a -> StablePtr b
+castStablePtr = castPtrToStablePtr . castStablePtrToPtr
+
+-- === Foreign.C.ConstPtr ===
+
+instance HasFFIType (PtrConst a) where
+  type FFIType (PtrConst a) = Ptr Void
+  {-# INLINE toFFIType #-}
+  toFFIType = castPtr . unsafeToPtr
+  {-# INLINE fromFFIType #-}
+  fromFFIType = unsafeFromPtr . castPtr
+
+-- === Foreign.C.Error ===
+
+deriving via ViaIdentity Errno instance HasFFIType Errno
+
+-- === Foreign.C.Types ===
+
+deriving via ViaIdentity CChar      instance HasFFIType CChar
+deriving via ViaIdentity CSChar     instance HasFFIType CSChar
+deriving via ViaIdentity CUChar     instance HasFFIType CUChar
+deriving via ViaIdentity CShort     instance HasFFIType CShort
+deriving via ViaIdentity CUShort    instance HasFFIType CUShort
+deriving via ViaIdentity CInt       instance HasFFIType CInt
+deriving via ViaIdentity CUInt      instance HasFFIType CUInt
+deriving via ViaIdentity CLong      instance HasFFIType CLong
+deriving via ViaIdentity CULong     instance HasFFIType CULong
+deriving via ViaIdentity CPtrdiff   instance HasFFIType CPtrdiff
+deriving via ViaIdentity CSize      instance HasFFIType CSize
+deriving via ViaIdentity CWchar     instance HasFFIType CWchar
+deriving via ViaIdentity CSigAtomic instance HasFFIType CSigAtomic
+deriving via ViaIdentity CLLong     instance HasFFIType CLLong
+deriving via ViaIdentity CULLong    instance HasFFIType CULLong
+deriving via ViaIdentity CBool      instance HasFFIType CBool
+deriving via ViaIdentity CIntPtr    instance HasFFIType CIntPtr
+deriving via ViaIdentity CUIntPtr   instance HasFFIType CUIntPtr
+deriving via ViaIdentity CIntMax    instance HasFFIType CIntMax
+deriving via ViaIdentity CUIntMax   instance HasFFIType CUIntMax
+
+-- === Foreign.C.Types : Numeric types ===
+
+deriving via ViaIdentity CClock     instance HasFFIType CClock
+deriving via ViaIdentity CTime      instance HasFFIType CTime
+deriving via ViaIdentity CUSeconds  instance HasFFIType CUSeconds
+deriving via ViaIdentity CSUSeconds instance HasFFIType CSUSeconds
+
+-- === Foreign.C.Types : Floating types ===
+
+deriving via ViaIdentity CFloat  instance HasFFIType CFloat
+deriving via ViaIdentity CDouble instance HasFFIType CDouble
diff --git a/runtime/HsBindgen/Runtime/LibC.hs b/runtime/HsBindgen/Runtime/LibC.hs
--- a/runtime/HsBindgen/Runtime/LibC.hs
+++ b/runtime/HsBindgen/Runtime/LibC.hs
@@ -68,8 +68,8 @@
 
   -- * Time types
   -- $TimeTypes
-  Foreign.C.CTime,
-  Foreign.C.CClock,
+  Foreign.C.CTime (..),
+  Foreign.C.CClock (..),
   LibC.CTm (..),
 
   -- * File types
diff --git a/runtime/HsBindgen/Runtime/Macro.hs b/runtime/HsBindgen/Runtime/Macro.hs
new file mode 100644
--- /dev/null
+++ b/runtime/HsBindgen/Runtime/Macro.hs
@@ -0,0 +1,161 @@
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE NoFieldSelectors #-}
+
+-- | Raw macros: C macros kept as their token spelling, untyped.
+--
+-- This module is intended to be imported qualified.
+--
+-- > import HsBindgen.Runtime.Macro qualified as Macro
+module HsBindgen.Runtime.Macro (
+  -- * Type
+  Raw (..),
+  Params (..),
+  Variadic (..),
+
+  -- * Construction
+  objectLike,
+  functionLike,
+  variadic,
+  variadicNamed,
+
+  -- * Rendering
+  render,
+) where
+
+import Data.List qualified as List
+
+{-------------------------------------------------------------------------------
+  Type
+-------------------------------------------------------------------------------}
+
+-- | A macro that was not typechecked; only its token spellings are known.
+--
+-- The name is part of the value so that 'render' can produce a definition
+-- rather than just a body.
+--
+-- @a@ is the representation of a single token.
+--
+-- Generated code uses @'Raw' 'String'@.
+data Raw a = Raw
+  { name :: a
+  , params :: Params a
+  , body :: [a]
+  }
+  deriving stock (Eq, Foldable, Functor, Ord, Show, Traversable)
+
+-- | The parameter list of a macro.
+data Params a
+  = -- | Object-like macro: no parameter list at all.
+    --
+    -- Note that this differs from @'Params' [] 'NotVariadic'@, the empty
+    -- parameter list of @#define NOW() 0@.
+    NoParams
+  | -- | Function-like macro: the named parameters, and how the list ends.
+    Params [a] (Variadic a)
+  deriving stock (Eq, Foldable, Functor, Ord, Show, Traversable)
+
+-- | How the parameter list of a function-like macro ends.
+--
+-- Variadic macros are technically a C99 feature, but @libclang@ has backported
+-- them to C89 as well. We follow @libclang@ behaviour here, and support
+-- variadic macros regardless of the C standard that is configured (C89 is the
+-- first standard).
+--
+-- <https://clang.llvm.org/docs/LanguageExtensions.html#language-extensions-back-ported-to-previous-standards>
+data Variadic a
+  = -- | @#define F(x, y)@: the macro takes exactly its named parameters.
+    NotVariadic
+  | -- | @#define F(x, ...)@: the trailing arguments are @__VA_ARGS__@.
+    Ellipsis
+  | -- | @#define F(x, args...)@: the trailing arguments are named.
+    --
+    -- This is the GNU named-variadic extension; the name replaces
+    -- @__VA_ARGS__@ in the body. It is a distinct constructor because it is
+    -- /not/ equivalent to 'Ellipsis' with the name as its last parameter:
+    -- @#define F(args...) g(args)@ passes every argument to @g@, whereas
+    -- @#define F(args, ...) g(args)@ passes only the first.
+    --
+    -- <https://gcc.gnu.org/onlinedocs/cpp/Variadic-Macros.html>
+    NamedEllipsis a
+  deriving stock (Eq, Foldable, Functor, Ord, Show, Traversable)
+
+{-------------------------------------------------------------------------------
+  Construction
+-------------------------------------------------------------------------------}
+
+-- | Construct an object-like macro from its name and body token spellings.
+objectLike :: String -> [String] -> Raw String
+objectLike name body =
+  Raw
+    { name = name
+    , params = NoParams
+    , body = body
+    }
+
+-- | Construct a function-like macro from its name, parameter names, and body
+-- token spellings.
+functionLike :: String -> [String] -> [String] -> Raw String
+functionLike name params body =
+  mkFunctionLike name params NotVariadic body
+
+-- | Like 'functionLike', but for a macro whose parameter list ends in @...@.
+variadic :: String -> [String] -> [String] -> Raw String
+variadic name params body =
+  mkFunctionLike name params Ellipsis body
+
+-- | Like 'variadic', but for the GNU named-variadic form: the third argument
+-- is the name that stands for the trailing arguments.
+--
+-- @#define LOG(fmt, args...) printf(fmt, args)@ is
+--
+-- > variadicNamed "LOG" ["fmt"] "args"
+-- >   ["printf", "(", "fmt", ",", "args", ")"]
+variadicNamed :: String -> [String] -> String -> [String] -> Raw String
+variadicNamed name params ellipsisName body =
+  mkFunctionLike name params (NamedEllipsis ellipsisName) body
+
+mkFunctionLike :: String -> [String] -> Variadic String -> [String] -> Raw String
+mkFunctionLike name params variadicity body =
+  Raw
+    { name = name
+    , params = Params params variadicity
+    , body = body
+    }
+
+{-------------------------------------------------------------------------------
+  Rendering
+-------------------------------------------------------------------------------}
+
+-- | Render a macro as a @#define@ directive.
+--
+-- >>> render (functionLike "ADD" ["x", "y"] ["x", "+", "y"])
+-- "#define ADD(x, y) x + y"
+--
+-- Whitespace is not stored, so the result is canonical: tokens are separated by
+-- a single space, parameters by a comma and a space. @#define ADD(x,y) x+y@
+-- renders as above.
+render :: Raw String -> String
+render raw =
+  "#define " <> raw.name <> renderParams raw.params <> renderBody raw.body
+
+renderParams :: Params String -> String
+renderParams NoParams = ""
+renderParams (Params names variadicity) =
+  "(" <> List.intercalate ", " (names ++ renderVariadic variadicity) <> ")"
+
+-- | Render the end of a parameter list, as the names that follow the named
+-- parameters.
+renderVariadic :: Variadic String -> [String]
+renderVariadic = \case
+  NotVariadic -> []
+  Ellipsis -> ["..."]
+  NamedEllipsis nm -> [nm <> "..."]
+
+-- | Render a body, including the space separating it from what precedes it.
+--
+-- An empty body renders as the empty text, so that @#define FOO@ does not gain
+-- a trailing space.
+renderBody :: [String] -> String
+renderBody [] = ""
+renderBody ts = " " <> unwords ts
diff --git a/runtime/HsBindgen/Runtime/Marshal.hs b/runtime/HsBindgen/Runtime/Marshal.hs
--- a/runtime/HsBindgen/Runtime/Marshal.hs
+++ b/runtime/HsBindgen/Runtime/Marshal.hs
@@ -1,7 +1,27 @@
 -- | Marshaling and serialization
 --
--- Generalizes 'Storable'. For details, see
--- https://github.com/well-typed/hs-bindgen/issues/649.
+-- 'Storable' requires that values can be read and written. This module
+-- generalizes 'Storable' into three classes: 'ReadRaw' (read functions),
+-- 'WriteRaw' (write functions), and 'StaticSize' (size and alignment). This
+-- allows defining read-only and write-only instances, which is not possible
+-- with just 'Storable'.
+--
+-- [Read-only instances] might be necessary if the C struct is larger than the
+--   Haskell struct. In this case we can read it but not write it, unless there
+--   is a way to compute the missing C fields, or unless writes are allowed to
+--   be partial.
+--
+-- [Write-only instances] might be necessary if the Haskell struct is larger
+--   than the C struct. In this case we can write it but not read it, unless
+--   there is a way to compute the missing Haskell fields.
+--
+-- One example of a read-only struct is 'HsBindgen.Runtime.LibC.CTm'. The
+-- Haskell datatype only defines the fields that are described in the C language
+-- standard, but there are often implementation-defined additional fields. As
+-- the C struct is larger than the Haskell struct, the Haskell struct has
+-- read-only marshalling instances only.
+--
+-- For more details, see https://github.com/well-typed/hs-bindgen/issues/649.
 --
 -- This module is intended to be imported qualified.
 --
diff --git a/runtime/HsBindgen/Runtime/Overloading.hs b/runtime/HsBindgen/Runtime/Overloading.hs
new file mode 100644
--- /dev/null
+++ b/runtime/HsBindgen/Runtime/Overloading.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE AllowAmbiguousTypes #-}
+{-# LANGUAGE CPP #-}
+
+-- | Restore the default environment when using @RebindableSyntax@
+--
+-- The @RebindableSyntax@ extension is currently required when using
+-- @OverloadedRecordUpdate@, but when using this extension, a number of
+-- functions are suddenly no longer in scope that normally are. This module
+-- restores those functions to their standard definition.
+module HsBindgen.Runtime.Overloading (
+    module Prelude
+  , Control.Arrow.app
+  , Control.Arrow.arr
+  , Control.Arrow.first
+  , Control.Arrow.loop
+  , (Control.Arrow.>>>)
+  , (Control.Arrow.|||)
+  , Data.String.fromString
+  , GHC.OverloadedLabels.fromLabel
+  , GHC.Records.getField
+    -- * New definitions
+  , ifThenElse
+  , setField
+  ) where
+
+import Control.Arrow qualified
+import Data.String qualified
+import GHC.OverloadedLabels qualified
+import GHC.Records qualified
+import GHC.Records.Compat qualified
+
+{-------------------------------------------------------------------------------
+  Other exports
+-------------------------------------------------------------------------------}
+
+ifThenElse :: Bool -> a -> a -> a
+ifThenElse b x y = if b then x else y
+
+-- | Set a field in a record.
+--
+-- NOTE: the order of arguments is GHC version dependent.
+#if __GLASGOW_HASKELL__ >=914
+setField :: forall x r a. GHC.Records.Compat.HasField x r a => a -> r -> r
+setField = flip (fst . GHC.Records.Compat.hasField @x)
+#else
+setField :: forall x r a. GHC.Records.Compat.HasField x r a => r -> a -> r
+setField = fst . GHC.Records.Compat.hasField @x
+#endif
diff --git a/runtime/HsBindgen/Runtime/Prelude.hs b/runtime/HsBindgen/Runtime/Prelude.hs
--- a/runtime/HsBindgen/Runtime/Prelude.hs
+++ b/runtime/HsBindgen/Runtime/Prelude.hs
@@ -36,6 +36,9 @@
   -- * Unions
   IsUnion,
 
+  -- * Struct
+  IsStruct,
+
   -- * Marshaling and serialization
   StaticSize (..),
   ReadRaw (..),
@@ -59,6 +62,7 @@
 import HsBindgen.Runtime.IsArray
 import HsBindgen.Runtime.Marshal
 import HsBindgen.Runtime.PtrConst
+import HsBindgen.Runtime.Struct (IsStruct)
 import HsBindgen.Runtime.Support.FunPtr
 import HsBindgen.Runtime.Support.Ptr
-import HsBindgen.Runtime.Union
+import HsBindgen.Runtime.Union (IsUnion)
diff --git a/runtime/HsBindgen/Runtime/Struct.hs b/runtime/HsBindgen/Runtime/Struct.hs
new file mode 100644
--- /dev/null
+++ b/runtime/HsBindgen/Runtime/Struct.hs
@@ -0,0 +1,38 @@
+{-# LANGUAGE AllowAmbiguousTypes #-}
+
+-- | Class for C structs
+--
+-- This module is intended to be imported qualified.
+--
+-- > import HsBindgen.Runtime.Prelude
+-- > import HsBindgen.Runtime.Struct qualified as Struct
+module HsBindgen.Runtime.Struct (
+  IsStruct (..),
+  IsStructViaReadRaw (..),
+) where
+
+import Data.Primitive.ByteArray qualified as BA
+import Data.Proxy (Proxy (..))
+import Data.Word (Word8)
+import Foreign.Ptr (Ptr, castPtr)
+import System.IO.Unsafe (unsafePerformIO)
+
+import HsBindgen.Runtime.Marshal (ReadRaw (..), StaticSize (staticSizeOf))
+
+class IsStruct s where
+  -- | A 'zero' struct value is a struct value that is read from a zeroed-out
+  -- byte array
+  zero :: s
+
+-- | Helper type for deriving 'IsStruct' via 'ReadRaw' (and 'StaticSize')
+newtype IsStructViaReadRaw s = IsStructViaReadRaw s
+
+-- | Helper instance for deriving 'IsStruct' via 'ReadRaw' (and 'StaticSize')
+instance (StaticSize s, ReadRaw s) => IsStruct (IsStructViaReadRaw s) where
+  zero =
+    unsafePerformIO $
+      BA.withByteArrayContents zeroBytes $ \(ptr :: Ptr Word8) ->
+        IsStructViaReadRaw <$> readRaw (castPtr ptr :: Ptr s)
+   where
+    n = staticSizeOf (Proxy @s)
+    zeroBytes = BA.byteArrayFromListN n $ replicate n (0 :: Word8)
diff --git a/runtime/HsBindgen/Runtime/Support.hs b/runtime/HsBindgen/Runtime/Support.hs
--- a/runtime/HsBindgen/Runtime/Support.hs
+++ b/runtime/HsBindgen/Runtime/Support.hs
@@ -1,30 +1,19 @@
 {-# LANGUAGE MagicHash #-}
 {-# OPTIONS_HADDOCK hide #-}
 
--- | Definitions required by generated bindings.
---
--- This module ensures compatibility across GHC versions and @base@ library
--- versions. It re-exports most Haskell definitions that are used by the
--- generated bindings. In particular, the order of exports matches the order of
--- constructors of 'HsBindgen.Backend.SHs.Global.BindgenGlobal'.
---
--- See https://github.com/well-typed/hs-bindgen/issues/1627.
---
--- We maintain minimal lists of explicit imports and exports.
---
--- The "HsBindgen.Runtime.Support" module should only re-export definitions
--- intended for unqualified import defined in @hs-bindgen-runtime@ or from other
--- libraries such as @base@ or @containers@.
+-- | Support prelude of generated bindings
 --
--- For definitions in @hs-bindgen-runtime@ which are intended for qualified
--- import, the generated code will directly import those modules in a qualified
--- way, as intended.
+-- Re-exports the definitions that generated code needs from modules meant for
+-- unqualified import, be they in @base@, in other libraries, or in
+-- @hs-bindgen-runtime@. Generated code imports modules meant for qualified
+-- import, such as "HsBindgen.Runtime.Marshal", directly instead, and imports a
+-- curated set of "Prelude" names unqualified; see @dev\/generated-code.md@.
 --
--- So far, we have not come across definitions intended for unqualified import
--- defined in other libraries.
+-- This module also bridges differences between GHC and @base@ versions.
 --
--- For the full rule on what generated code may import, see the "Imports in
--- generated code" section of @dev\/code-structure.md@.
+-- We maintain minimal lists of explicit imports and exports. Exports are
+-- grouped like the constructors of @BindgenGlobalType@ and
+-- @BindgenGlobalTerm@ in @HsBindgen.Backend.Global@ (package @hs-bindgen@).
 --
 -- Intended for qualified import.
 --
@@ -39,10 +28,13 @@
   -- * Foreign function interface
   Ptr (Ptr),
   FunPtr,
-  plusPtr,
   StablePtr,
+  plusPtr,
+  castFunPtr,
   getUnionPayload,
   setUnionPayload,
+  getUnionPayloadBits,
+  setUnionPayloadBits,
   with,
   allocaAndPeek,
   Generic,
@@ -58,8 +50,8 @@
 
   -- * 'HasFFIType'
   HasFFIType (fromFFIType, toFFIType),
-  castFunPtrFromFFIType,
-  castFunPtrToFFIType,
+  PtrVoid,
+  FunPtrVoid,
 
   -- * Unsafe
   unsafePerformIO,
@@ -84,9 +76,11 @@
   FiniteBits,
   Ix,
   readPrec,
+  readList,
   readListPrec,
   readListDefault,
   readListPrecDefault,
+  showsPrec,
   -- Floating point numbers
   castWord32ToFloat,
   castWord64ToDouble,
@@ -114,18 +108,18 @@
   Word16,
   Word32,
   Word64,
-  CChar,
-  CSChar,
-  CUChar,
-  CShort,
-  CUShort,
-  CInt,
-  CUInt,
-  CLong,
-  CULong,
-  CLLong,
-  CULLong,
-  CBool,
+  CChar (CChar),
+  CSChar (CSChar),
+  CUChar (CUChar),
+  CShort (CShort),
+  CUShort (CUShort),
+  CInt (CInt),
+  CUInt (CUInt),
+  CLong (CLong),
+  CULong (CULong),
+  CLLong (CLLong),
+  CULLong (CULLong),
+  CBool (CBool),
   CFloat (CFloat),
   CDouble (CDouble),
   CStringLen,
@@ -156,45 +150,51 @@
 import Data.Word (Word16, Word32, Word64, Word8)
 import Foreign (
   Storable (alignment, peek, peekByteOff, poke, pokeByteOff, sizeOf),
+  castFunPtr,
   with,
  )
 import Foreign.C (
-  CBool,
-  CChar,
+  CBool (CBool),
+  CChar (CChar),
   CDouble (CDouble),
   CFloat (CFloat),
-  CInt,
-  CLLong,
-  CLong,
+  CInt (CInt),
+  CLLong (CLLong),
+  CLong (CLong),
   CPtrdiff,
-  CSChar,
-  CShort,
-  CUChar,
-  CUInt,
-  CULLong,
-  CULong,
-  CUShort,
+  CSChar (CSChar),
+  CShort (CShort),
+  CUChar (CUChar),
+  CUInt (CUInt),
+  CULLong (CULLong),
+  CULong (CULong),
+  CUShort (CUShort),
  )
 import Foreign.C.String (CStringLen)
+import Foreign.StablePtr (StablePtr)
 import GHC.Base ((*#), (+#))
 import GHC.Float (castWord32ToFloat, castWord64ToDouble)
 import GHC.Generics (Generic)
 import GHC.Ptr (FunPtr, Ptr (Ptr), plusPtr)
 import GHC.Records (HasField (getField))
-import GHC.Stable (StablePtr)
 import System.IO.Unsafe (unsafePerformIO)
 import Text.Read (readListDefault, readListPrec, readListPrecDefault, readPrec)
 
+import HsBindgen.Runtime.HasFFIType (
+  FunPtrVoid,
+  HasFFIType (fromFFIType, toFFIType),
+  PtrVoid,
+ )
 import HsBindgen.Runtime.Support.Bitfield (Bitfield)
-import HsBindgen.Runtime.Support.ByteArray (getUnionPayload, setUnionPayload)
+import HsBindgen.Runtime.Support.ByteArray (
+  getUnionPayload,
+  getUnionPayloadBits,
+  setUnionPayload,
+  setUnionPayloadBits,
+ )
 import HsBindgen.Runtime.Support.CAPI (allocaAndPeek)
 import HsBindgen.Runtime.Support.FunPtr (
   FromFunPtr (fromFunPtr),
   ToFunPtr (toFunPtr),
- )
-import HsBindgen.Runtime.Support.HasFFIType (
-  HasFFIType (fromFFIType, toFFIType),
-  castFunPtrFromFFIType,
-  castFunPtrToFFIType,
  )
 import HsBindgen.Runtime.Support.SizedByteArray (SizedByteArray (SizedByteArray))
diff --git a/runtime/HsBindgen/Runtime/Support/Bitfield.hs b/runtime/HsBindgen/Runtime/Support/Bitfield.hs
--- a/runtime/HsBindgen/Runtime/Support/Bitfield.hs
+++ b/runtime/HsBindgen/Runtime/Support/Bitfield.hs
@@ -46,7 +46,7 @@
   Bitfield
 -------------------------------------------------------------------------------}
 
--- | Types which can be a bit-field in a C @struct@
+-- | Types which can be a bit-field in a C @struct@ or @union@
 --
 -- The members convert to/from 'Word64' to make the use in the implementation of
 -- bitfields in @hs-bindgen@ easier.  We could not convert or have a smallest
@@ -192,17 +192,17 @@
 -- architecture.
 --
 -- A bit-field is read using a single peek when possible, as determined by
--- alignment and the passed memory bounds.  This should always be the case with
--- normal @struct@s.
+-- alignment and the passed memory bounds. This should always be the case with
+-- normal @struct@s and @union@s.
 --
 -- When it is not possible to read a bit-field using a single peek, multiple
--- peeks are used to read the bytes of the bit-field.  This may happen with
--- (poorly-designed) packed @struct@s.
+-- peeks are used to read the bytes of the bit-field. This may happen with
+-- (poorly-designed) packed @struct@s\/@unions@.
 --
--- The memory bounds should generally be the bounds of the @struct@ object.  In
--- this case, concurrent access to different objects (in an array) is safe.
--- Concurrent access to bit-fields within a single @struct@ object is generally
--- unsafe.
+-- The memory bounds should generally be the bounds of the @struct@ or @union@
+-- object. In this case, concurrent access to different objects (in an array) is
+-- safe. Concurrent access to bit-fields within a single @struct@ or @union@
+-- object is generally unsafe.
 peekBitOffWidth
   :: forall a
    . (Bitfield a)
@@ -242,10 +242,8 @@
   -- Read the bit-field using a single, aligned word
   readAligned
     :: (FiniteBits w, Integral w, Marshal.ReadRaw w)
-    => Ptr w
-    -- \^ Pointer to aligned word
-    -> Int
-    -- \^ Right offset (bits)
+    => Ptr w -- \^ Pointer to aligned word
+    -> Int -- \^ Right offset (bits)
     -> IO a
   readAligned ptr roff = do
     w <- Marshal.readRaw ptr
@@ -285,18 +283,18 @@
 --
 -- When a bit-field can be written using a single poke, as determined by
 -- alignment and the passed memory bounds, a single peek reads any extra bits
--- when necessary, and then a single poke writes the bit-field.  This should
--- always be the case with normal @struct@s.
+-- when necessary, and then a single poke writes the bit-field. This should
+-- always be the case with normal @struct@s and @union@s.
 --
 -- When it is not possible to write a bit-field using a single poke, the byte(s)
 -- containing any extra bits are read when necessary, and then multiple pokes
--- are used to write the bytes of the bit-field.  This may happen with
--- (poorly-designed) packed @struct@s.
+-- are used to write the bytes of the bit-field. This may happen with
+-- (poorly-designed) packed @struct@s\/@union@s.
 --
--- The memory bounds should generally be the bounds of the @struct@ object.  In
--- this case, concurrent access to different objects (in an array) is safe.
--- Concurrent access to bit-fields within a single @struct@ object is generally
--- unsafe.
+-- The memory bounds should generally be the bounds of the @struct@ or @union@
+-- object. In this case, concurrent access to different objects (in an array) is
+-- safe. Concurrent access to bit-fields within a single @struct@ or @union@
+-- object is generally unsafe.
 pokeBitOffWidth
   :: forall a
    . (Bitfield a)
@@ -338,12 +336,9 @@
   -- Write the bit-field using a single, aligned word
   writeAligned
     :: (FiniteBits w, Integral w, Marshal.ReadRaw w, Marshal.WriteRaw w)
-    => Ptr w
-    -- \^ Pointer to aligned word
-    -> Int
-    -- \^ Left offset (bits)
-    -> Int
-    -- \^ Right offset (bits)
+    => Ptr w -- \^ Pointer to aligned word
+    -> Int -- \^ Left offset (bits)
+    -> Int -- \^ Right offset (bits)
     -> IO ()
   writeAligned ptr loff roff
     | loff == 0 && roff == 0 =
@@ -469,7 +464,7 @@
     -- 00000011 00000000 00000000 00011100 00000000 00000000 00000010 00000011
     | isLittleEndian =
         let r = off + 8 * (ptrB `minusPtr` ptrA)
-         in (wSize - width - r, r)
+         in (wSize * 8 - width - r, r)
     -- Big endian: bit-field offsets are from the most significant bit
     --
     -- Field @b@ has an offset of 2, shown as @xx@ in this memory diagram:
@@ -486,7 +481,7 @@
     -- 10000000 11000000 00000000 00000000 00110000 00000000 00000001 11000000
     | otherwise =
         let l = 8 * (ptrB `minusPtr` ptrA) + off
-         in (l, wSize - width - l)
+         in (l, wSize * 8 - width - l)
 
 -- | Get a bit-field value from a list of bytes (native byte order)
 getBitfield
@@ -512,8 +507,8 @@
   -> Either String Word64
 getBitfieldLE off width = auxFirst
  where
-  -- With little endian, @struct@s are stored in reverse byte order, and
-  -- bit-field offsets are from the least significant bit.
+  -- With little endian, @struct@s and @union@s are stored in reverse byte
+  -- order, and bit-field offsets are from the least significant bit.
   --
   -- \* Single byte: @| loff? | numFieldBits | off? |@
   --
@@ -522,8 +517,7 @@
   -- \* Last byte:   @| loff? | numFieldBits |@
 
   auxFirst
-    :: [Word8]
-    -- \^ Bytes as read from memory
+    :: [Word8] -- \^ Bytes as read from memory
     -> Either String Word64
   auxFirst = \case
     -- First byte or single byte
@@ -535,14 +529,10 @@
     [] -> Left "not enough bytes"
 
   auxNext
-    :: Word64
-    -- \^ Bit-field value accumulator
-    -> Int
-    -- \^ Number of bit-field bits in the accumulator
-    -> Int
-    -- \^ Remaining number of bits in the bit-field
-    -> [Word8]
-    -- \^ Remaining bytes as read from memory
+    :: Word64 -- \^ Bit-field value accumulator
+    -> Int -- \^ Number of bit-field bits in the accumulator
+    -> Int -- \^ Remaining number of bits in the bit-field
+    -> [Word8] -- \^ Remaining bytes as read from memory
     -> Either String Word64
   auxNext !acc numAccBits width' = \case
     (b : bs)
@@ -571,8 +561,8 @@
   -> Either String Word64
 getBitfieldBE off width = auxFirst
  where
-  -- With big endian, @struct@s are stored in byte order, and bit-field
-  -- offsets are from the most significant bit.
+  -- With big endian, @struct@s and @union@s are stored in byte order, and
+  -- bit-field offsets are from the most significant bit.
   --
   -- \* Single byte: @| off? | numFieldBits | roff? |@
   --
@@ -584,8 +574,7 @@
   off8 = 8 - off
 
   auxFirst
-    :: [Word8]
-    -- \^ Bytes as read from memory
+    :: [Word8] -- \^ Bytes as read from memory
     -> Either String Word64
   auxFirst = \case
     (b : bs)
@@ -603,12 +592,9 @@
     [] -> Left "not enough bytes"
 
   auxNext
-    :: Word64
-    -- \^ Bit-field value accumulator
-    -> Int
-    -- \^ Remaining number of bits in the bit-field
-    -> [Word8]
-    -- \^ Remaining bytes as read from memory
+    :: Word64 -- \^ Bit-field value accumulator
+    -> Int -- \^ Remaining number of bits in the bit-field
+    -> [Word8] -- \^ Remaining bytes as read from memory
     -> Either String Word64
   auxNext !acc width' = \case
     (b : bs)
@@ -660,8 +646,7 @@
 putBitfieldLE off width l8 h8 = auxFirst
  where
   auxFirst
-    :: Word64
-    -- \^ Bit-field value
+    :: Word64 -- \^ Bit-field value
     -> [Word8]
   auxFirst x =
     -- Handle low offset of single/first byte
@@ -674,12 +659,9 @@
      in auxNext acc (width + off - 8) (unsafeShiftR x numFieldBits)
 
   auxNext
-    :: NonEmpty Word8
-    -- \^ Accumulator (reverse order)
-    -> Int
-    -- \^ Remaining number of bits (may be negative)
-    -> Word64
-    -- \^ Remaining bit-field value
+    :: NonEmpty Word8 -- \^ Accumulator (reverse order)
+    -> Int -- \^ Remaining number of bits (may be negative)
+    -> Word64 -- \^ Remaining bit-field value
     -> [Word8]
   auxNext acc width' x
     -- Middle/last byte
@@ -713,8 +695,7 @@
 putBitfieldBE off width l8 h8 = auxFirst
  where
   auxFirst
-    :: Word64
-    -- \^ Bit-field value
+    :: Word64 -- \^ Bit-field value
     -> [Word8]
   auxFirst x =
     -- Handle high offset of single/last byte
@@ -728,12 +709,9 @@
      in auxNext acc (width + hoff - 8) (unsafeShiftR x numFieldBits)
 
   auxNext
-    :: NonEmpty Word8
-    -- \^ Accumulator
-    -> Int
-    -- \^ Remaining number of bits (may be negative)
-    -> Word64
-    -- \^ Remaining bit-field value
+    :: NonEmpty Word8 -- \^ Accumulator
+    -> Int -- \^ Remaining number of bits (may be negative)
+    -> Word64 -- \^ Remaining bit-field value
     -> [Word8]
   auxNext acc width' x
     -- Middle/first byte
@@ -741,8 +719,7 @@
         let b = fromIntegral (x .&. 0xFF)
          in auxNext (NonEmpty.cons b acc) (width' - 8) (unsafeShiftR x 8)
     -- Handle low offset of single/first byte
-    | otherwise -- off == negate width'
-      =
+    | otherwise = -- off == negate width'
         let b' = NonEmpty.head acc
             b
               | off > 0 =
diff --git a/runtime/HsBindgen/Runtime/Support/ByteArray.hs b/runtime/HsBindgen/Runtime/Support/ByteArray.hs
--- a/runtime/HsBindgen/Runtime/Support/ByteArray.hs
+++ b/runtime/HsBindgen/Runtime/Support/ByteArray.hs
@@ -1,6 +1,6 @@
 {-# OPTIONS_HADDOCK hide #-}
 
--- | Utilities for dealing with 'ByteArray' and 'Storable'
+-- | Utilities for dealing with 'ByteArray', 'Storable', and 'Bitfield'.
 --
 -- The additional copying we have to do here is a bit annoying, but in the end
 -- an FFI implementation based on 'Storable' is never going to be /extremely/
@@ -20,6 +20,8 @@
   -- * Support for defining setters and getters for union types
   setUnionPayload,
   getUnionPayload,
+  setUnionPayloadBits,
+  getUnionPayloadBits,
 ) where
 
 import Control.Exception
@@ -27,9 +29,12 @@
 import Data.Coerce (Coercible, coerce)
 import Data.Primitive.ByteArray (ByteArray, MutableByteArray)
 import Data.Primitive.ByteArray qualified as BA
-import Foreign (Ptr, Storable (peek, poke), castPtr, copyBytes, sizeOf)
+import Foreign (Ptr, Storable (peek, poke), castPtr, copyBytes, plusPtr, sizeOf)
 import System.IO.Unsafe (unsafePerformIO)
 
+import HsBindgen.Runtime.Support.Bitfield (Bitfield)
+import HsBindgen.Runtime.Support.Bitfield qualified as Bitfield
+
 {-------------------------------------------------------------------------------
   Support for defining 'Storable' instances for union types
 -------------------------------------------------------------------------------}
@@ -56,11 +61,10 @@
 setUnionPayload
   :: forall payload union
    . ( Storable payload
-     , Storable union
      , Coercible union ByteArray
      )
-  => payload -> union
-setUnionPayload = coerce . pokeToByteArray (sizeOf (undefined :: union))
+  => payload -> union -> union
+setUnionPayload x u = coerce (pokeToByteArray x (coerce u))
 
 getUnionPayload
   :: forall payload union
@@ -70,20 +74,38 @@
   => union -> payload
 getUnionPayload = peekFromByteArray . coerce
 
+setUnionPayloadBits
+  :: forall payload union
+   . ( Bitfield payload
+     , Coercible union ByteArray
+     )
+  => Int -> Int -> payload -> union -> union
+setUnionPayloadBits bitOffset bitWidth x u =
+  coerce $ pokeBitsToByteArray bitOffset bitWidth x (coerce u)
+
+getUnionPayloadBits
+  :: forall payload union
+   . ( Bitfield payload
+     , Coercible union ByteArray
+     )
+  => Int -> Int -> union -> payload
+getUnionPayloadBits bitOffset bitWidth =
+  peekBitsFromByteArray bitOffset bitWidth . coerce
+
 {-------------------------------------------------------------------------------
   Internal auxiliary
 -------------------------------------------------------------------------------}
 
--- | Read 'Storable' value from 'ByteArray'
+-- | Read a 'Storable' value from a 'ByteArray'
 --
 -- Precondition:
 --
 -- > sizeOf (undefined :: a) <= sizeofByteArray bytes
 --
--- It may well be the case that the ByteArray is /larger/; 'peekFromByteArray'
--- is intended to be used for reading values from otherwise opaque unions (where
--- @a@ is one such possible value), and so the bytearray will be large enough to
--- store the entire union.
+-- It may well be the case that the ByteArray is /larger/ than the @a@ value;
+-- 'peekFromByteArray' is intended to be used for reading values from otherwise
+-- opaque unions (where @a@ is one such possible value), and so the bytearray
+-- will be large enough to store the entire union.
 peekFromByteArray :: forall a. (Storable a) => ByteArray -> a
 peekFromByteArray bytes =
   assert (sizeOf (undefined :: a) <= BA.sizeofByteArray bytes) $
@@ -92,22 +114,105 @@
       BA.withMutableByteArrayContents pinnedCopy $ \ptr ->
         peek (castPtr ptr)
 
--- | Write 'Storable' value to new 'ByteArray' of specified size
+-- | Write a 'Storable' value to a 'ByteArray'
 --
 -- Precondition:
 --
--- > sizeOf (undefined :: a) <= n
+-- > sizeOf (undefined :: a) <= sizeOfByteArray bytes
 --
--- It may well be that @n@ is larger; see also 'peekFromByteArray'.
-pokeToByteArray :: forall a. (Storable a) => Int -> a -> ByteArray
-pokeToByteArray n x =
-  assert (sizeOf (undefined :: a) <= n) $
+-- It may well be the case that the ByteArray is /larger/ than the @a@ value;
+-- see also 'peekFromByteArray'.
+pokeToByteArray
+  :: forall a
+   . (Storable a)
+  => a
+  -> ByteArray
+  -> ByteArray
+pokeToByteArray x bytes =
+  assert (sizeOf (undefined :: a) <= bytesSize) $
     unsafePerformIO $ do
-      pinnedCopy <- BA.newPinnedByteArray n
+      pinnedCopy <- thawToPinned bytes
       BA.withMutableByteArrayContents pinnedCopy $ \ptr ->
         poke (castPtr ptr) x
       -- The copy constructed by 'freezeByteArray' is /not/ pinned.
-      BA.freezeByteArray pinnedCopy 0 n
+      BA.freezeByteArray pinnedCopy 0 bytesSize
+ where
+  bytesSize = BA.sizeofByteArray bytes
+
+-- | @'peekBitsFromByteArray' o w bs@ reads a range of bits of a 'Storable'
+-- value from a 'ByteArray'
+--
+-- Preconditions:
+--
+-- > o >= 0
+-- > w >= 1 && w <= 64
+-- > w <= 'sizeOf' (undefined :: a) * 8
+-- > o + w <= 'sizeofByteArray' bs * 8
+--
+-- It may well be the case that the ByteArray is /larger/ than the @union@ that
+-- it represents; see also 'peekFromByteArray'.
+peekBitsFromByteArray
+  :: forall a
+   . (Bitfield a)
+  => Int
+  -- ^ Bit offset
+  -> Int
+  -- ^ Bit width
+  -> ByteArray
+  -> a
+peekBitsFromByteArray o w bs =
+  unsafePerformIO $ do
+    pinnedCopy <- thawToPinned bs
+    BA.withMutableByteArrayContents pinnedCopy $ \ptr -> do
+      let bounds = (ptrL, ptrR)
+          ptrL = castPtr ptr
+          ptrR = ptrL `plusPtr` BA.sizeofByteArray bs
+          -- peekBitOffWidth assumes that the bit offset is in the inclusive
+          -- range @\[0, 7\]@, so we move the pointer and update the bit
+          -- offset accordingly
+          ptr' = ptr `plusPtr` (o `div` 8)
+          o' = o - ((o `div` 8) * 8)
+      Bitfield.peekBitOffWidth ptr' o' w bounds
+
+-- | @'pokeBitsToByteArray' o w v bs@ Write a range of bits from a 'Storable'
+-- value to a 'ByteArray'
+--
+-- Preconditions:
+--
+-- > o >= 0
+-- > w >= 1 && w <= 64
+-- > w <= 'sizeOf' v * 8
+-- > o + w <= 'sizeofByteArray' bs * 8
+--
+-- It may well be the case that the ByteArray is /larger/ than the @union@ that
+-- it represents; see also 'peekFromByteArray'.
+pokeBitsToByteArray
+  :: forall a
+   . (Bitfield a)
+  => Int
+  -- ^ Bit offset
+  -> Int
+  -- ^ Bit width
+  -> a
+  -> ByteArray
+  -> ByteArray
+pokeBitsToByteArray o w v bs =
+  unsafePerformIO $ do
+    pinnedCopy <- thawToPinned bs
+    BA.withMutableByteArrayContents pinnedCopy $ \ptr -> do
+      let bounds = (ptrL, ptrR)
+          ptrL = castPtr ptr
+          ptrR = ptrL `plusPtr` bsSz
+          -- pokeBitOffWidth assumes that the bit offset is in the inclusive
+          -- range @\[0, 7\]@, so we move the pointer and update the bit
+          -- offset accordingly
+          ptr' = ptr `plusPtr` (o `div` 8)
+          o' = o - ((o `div` 8) * 8)
+      Bitfield.pokeBitOffWidth ptr' o' w bounds v
+    -- The copy constructed by 'freezeByteArray' is /not/ pinned.
+    BA.freezeByteArray pinnedCopy 0 bsSz
+ where
+  bsSz = BA.sizeofByteArray bs
 
 -- | Like 'Data.Primiteve.ByteArray.thawByteArray', but the new
 -- | 'MutableByteArray' is pinned
diff --git a/runtime/HsBindgen/Runtime/Support/CompatHasField.hs b/runtime/HsBindgen/Runtime/Support/CompatHasField.hs
--- a/runtime/HsBindgen/Runtime/Support/CompatHasField.hs
+++ b/runtime/HsBindgen/Runtime/Support/CompatHasField.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE AllowAmbiguousTypes #-}
 {-# OPTIONS_HADDOCK hide #-}
 
 -- | Prelude required by generated bindings.
@@ -12,6 +13,13 @@
   HasField (hasField),
   getField,
   setField,
+  modifyField,
 ) where
 
 import GHC.Records.Compat (HasField (..), getField, setField)
+
+-- | Modify a field in a record.
+modifyField :: forall x r a. (HasField x r a) => r -> (a -> a) -> r
+modifyField r f = gen $ f val
+ where
+  (gen, val) = hasField @x r
diff --git a/runtime/HsBindgen/Runtime/Support/FFIType.hs b/runtime/HsBindgen/Runtime/Support/FFIType.hs
deleted file mode 100644
--- a/runtime/HsBindgen/Runtime/Support/FFIType.hs
+++ /dev/null
@@ -1,68 +0,0 @@
-{-# OPTIONS_HADDOCK hide #-}
-
--- NOTE: For now, this module is classified "Support"; however, it may become
--- public in the future. See also
--- https://github.com/well-typed/hs-bindgen/issues/1565.
-
--- | Datatypes for the 'HsBindgen.Runtime.HasFFIType.HasFFIType' class.
---
--- These datatypes reify all possible values of the
--- 'HsBindgen.Runtime.HasFFIType.FFIType' type. These datatypes are for internal
--- use in the 'HsBindgen.Runtime.HasFFIType.HasFFIType' class, and they are
--- exported for the @hs-bindgen@ package to use. You probably won't need to use
--- these directly, but you might find the datatypes useful as documentation for
--- the 'HsBindgen.Runtime.HasFFIType.HasFFIType' class.
-module HsBindgen.Runtime.Support.FFIType (
-  FFIType (..),
-  BasicFFIType (..),
-) where
-
--- | A foreign type without newtypes
---
--- This datatype does not restrict itself to valid foreign types. For example,
--- @IO Unit `FunArrow` IO Unit@ is not a valid foreign type, but we can
--- represent it nonetheless. See the discussion on the
--- 'HsBindgen.Runtime.HasFFIType.HasFFIType' class for why this
--- is okay.
---
--- Also, see the "8.4.2 Foreign Types" section of the report for more
--- information about foreign types:
--- <https://www.haskell.org/onlinereport/haskell2010/haskellch8.html#x15-1560008.4.2>
-data FFIType
-  = -- === Foreign types ===
-    FunArrow FFIType FFIType
-  | -- === Marshallable foreign result types ===
-    Unit
-  | IO FFIType
-  | -- === Marshallable foreign types ===
-    Basic BasicFFIType
-  deriving stock (Eq, Ord, Show)
-
--- | A basic foreign type as described in the "8.4.2
--- Foreign Types" section of the "Haskell 2010 Language" report:
---
--- <https://www.haskell.org/onlinereport/haskell2010/haskellch8.html#x15-1560008.4.2>
-data BasicFFIType
-  = -- Prelude
-    Char
-  | Int
-  | Double
-  | Float
-  | Bool
-  | -- Data.Int
-    Int8
-  | Int16
-  | Int32
-  | Int64
-  | -- Data.Word
-    Word
-  | Word8
-  | Word16
-  | Word32
-  | Word64
-  | -- Foreign.Ptr
-    Ptr
-  | FunPtr
-  | -- Foreign.StablePtr
-    StablePtr
-  deriving stock (Bounded, Enum, Eq, Ord, Show)
diff --git a/runtime/HsBindgen/Runtime/Support/FunPtr.hs b/runtime/HsBindgen/Runtime/Support/FunPtr.hs
--- a/runtime/HsBindgen/Runtime/Support/FunPtr.hs
+++ b/runtime/HsBindgen/Runtime/Support/FunPtr.hs
@@ -13,6 +13,7 @@
   ToFunPtr (..),
   FromFunPtr (..),
   withFunPtr,
+  withFunPtrAs,
 ) where
 
 import HsBindgen.Runtime.Support.FunPtr.Class
diff --git a/runtime/HsBindgen/Runtime/Support/FunPtr/Class.hs b/runtime/HsBindgen/Runtime/Support/FunPtr/Class.hs
--- a/runtime/HsBindgen/Runtime/Support/FunPtr/Class.hs
+++ b/runtime/HsBindgen/Runtime/Support/FunPtr/Class.hs
@@ -12,9 +12,11 @@
 
   -- * Utilities
   withFunPtr,
+  withFunPtrAs,
 ) where
 
 import Control.Exception (bracket)
+import Data.Coerce (Coercible, coerce)
 import Foreign qualified as F
 import GHC.Ptr qualified as Ptr
 
@@ -35,3 +37,27 @@
 -- 'toFunPtr' has allocated memory for a 'Ptr.FunPtr'.
 withFunPtr :: (ToFunPtr a) => a -> (Ptr.FunPtr a -> IO b) -> IO b
 withFunPtr x = bracket (toFunPtr x) F.freeHaskellFunPtr
+
+-- | Useful for callbacks whose own type has no 'ToFunPtr' instance. Calls
+-- 'withFunPtr' provided the callback is 'Coercible' to a signature @b@ that has one.
+--
+-- Most users will never need this: when bindings are generated with @hs-bindgen@,
+-- 'ToFunPtr' and 'FromFunPtr' instances are generated for their function types.
+--
+-- The instances cover the raw C types, so @b@ is normally the same signature with your
+-- own pointer tags and newtypes replaced by what they wrap:
+--
+-- @
+-- data Node                     -- our own pointer tag
+-- newtype Result = Result CInt  -- our own status type
+--
+-- onNode :: Ptr Node -> IO Result
+--
+-- -- Ptr Node -> IO Result has no instance; Ptr Void -> IO CInt does.
+-- withFunPtrAs \@(Ptr Void -> IO CInt) onNode $ \\fp -> c_walk tree fp
+-- @
+withFunPtrAs
+  :: forall b a r
+   . (Coercible a b, ToFunPtr b)
+  => a -> (Ptr.FunPtr b -> IO r) -> IO r
+withFunPtrAs f = withFunPtr (coerce f :: b)
diff --git a/runtime/HsBindgen/Runtime/Support/HasFFIType.hs b/runtime/HsBindgen/Runtime/Support/HasFFIType.hs
deleted file mode 100644
--- a/runtime/HsBindgen/Runtime/Support/HasFFIType.hs
+++ /dev/null
@@ -1,381 +0,0 @@
-{-# OPTIONS_HADDOCK hide #-}
-
-{-# LANGUAGE CPP #-}
-
--- NOTE: For now, this module is classified "Support"; however, it may become
--- public in the future. See also
--- https://github.com/well-typed/hs-bindgen/issues/1565.
-
-module HsBindgen.Runtime.Support.HasFFIType (
-    -- * Class
-    HasFFIType
-  , FFIType
-  , toFFIType
-  , fromFFIType
-  , castFunPtrToFFIType
-  , castFunPtrFromFFIType
-    -- * Deriving-via
-  , ViaNewtype(..)
-  , ViaCoercible(..)
-  ) where
-
-import Prelude as Types (Bool, Char, Double, Float, Int, Word)
-import Prelude hiding (Bool, Char, Double, Float, Int, Word)
-
-import Data.Coerce (Coercible, coerce)
-import Data.Int as Types (Int16, Int32, Int64, Int8)
-import Data.Kind (Type)
-import Data.Void (Void)
-import Data.Word as Types (Word16, Word32, Word64, Word8)
-import Foreign.C.Error as Types (Errno (..))
-import Foreign.C.Types as Types (CBool (..), CChar (..), CClock (..),
-                                 CDouble (..), CFloat (..), CInt (..),
-                                 CIntMax (..), CIntPtr (..), CLLong (..),
-                                 CLong (..), CPtrdiff (..), CSChar (..),
-                                 CSUSeconds (..), CShort (..), CSigAtomic (..),
-                                 CSize (..), CTime (..), CUChar (..),
-                                 CUInt (..), CUIntMax (..), CUIntPtr (..),
-                                 CULLong (..), CULong (..), CUSeconds (..),
-                                 CUShort (..), CWchar (..))
-import Foreign.Ptr (castFunPtr, castPtr)
-import Foreign.Ptr as Types (FunPtr, IntPtr (..), Ptr, WordPtr (..))
-import Foreign.StablePtr (castPtrToStablePtr, castStablePtrToPtr)
-import Foreign.StablePtr as Types (StablePtr)
-
-import HsBindgen.Runtime.PtrConst as Types (PtrConst, unsafeFromPtr,
-                                            unsafeToPtr)
-import HsBindgen.Runtime.Support.FFIType qualified as FFI
-
-{-------------------------------------------------------------------------------
-  Class
--------------------------------------------------------------------------------}
-
--- | The 'HasFFIType' class broadly captures Haskell types that can be
--- converted to and from an /FFI type/.
---
--- An FFI type is similar to a /foreign type/, but with all newtypes removed.
--- Foreign types are the kinds of types that are allowed in @foreign import@
--- declarations.
---
--- Some laws apply to this class:
---
--- * If @x :: a@ is a foreign type, then @toFFIType x :: FFIType
---   a@ is also a valid foreign type and contains no newtypes.
--- * If @x :: FFIType a@ is a foreign type, then @fromFFIType x
---   :: a@ is also a valid foreign type.
---
--- Note in particular that this does /not/ guarantee that:
---
--- * Every type @a@ that is an instance of 'HasFFIType' is a valid
--- foreign type
--- * Every type @'FFIType' a@ is a valid foreign type.
---
--- Informally, 'toFFIType' and 'fromFFIType' preserve
--- /valid-foreign-type-ness/.
---
--- === User-supplied instances
---
--- Generally as a rule of thumb, if @a@ is a valid foreign type, then there
--- should be a sensible 'HasFFIType' instance. Instances are provided in this
--- module for most basic type constructors, like 'Prelude.(->)', 'IO',
--- 'Prelude.()', and all eligible types from the "Foreign" module hierarchy.
--- However, we can't magically generate instance for user-defined newtypes, nor
--- do we try to generate instances for all newtypes from the @base@ package or
--- other core packages. Instead, the user should derive such instances either
--- using newtype-deriving or using deriving-via with the t'ViaNewtype'\ or
--- t'ViaCoercible' helper datatypes. Instances can otherwise not be defined by
--- hand. Regardless of the deriving method, the @UndecidableInstances@ language
--- extension should also be enabled.
---
--- === Foreign types
---
--- Foreign types and its sub-kinds are described by the the "Haskell 2010 Language"
--- report. Kinds of foreign types include:
---
--- * top-level /foreign types/
--- * /basic foreign types/
--- * /marshallable foreign result types/
--- * /marshallable foreign types/
---
--- See the "8.4.2 Foreign Types" section of the report for more information:
--- <https://www.haskell.org/onlinereport/haskell2010/haskellch8.html#x15-1560008.4.2>
---
-class HasFFIType a where
-  type ToFFIType a :: FFI.FFIType
-  -- | Convert a foreign type to its FFI type.
-  --
-  -- See the 'HasFFIType' class for more information
-  toFFIType :: a -> FFIType a
-  -- | Convert an FFI type a foreign type.
-  --
-  -- See the 'HasFFIType' class for more information
-  fromFFIType :: FFIType a -> a
-
-type FFIType a = FromFFIType (ToFFIType a)
-
--- | Cast the foreign type inside the function pointer to its FFI type.
-castFunPtrToFFIType ::
-     forall a. HasFFIType a
-  => FunPtr a
-  -> FunPtr (FFIType a)
-castFunPtrToFFIType = castFunPtr
-  where
-    -- NOTE: the constraint is unused, but we want to restrict what types can be
-    -- cast, so we work around "unused constraint" warnings with this local
-    -- definition.
-    _unused = toFFIType @a
-
--- | Cast the FFI type inside a function pointer to a foreign type.
-castFunPtrFromFFIType ::
-     forall a. HasFFIType a
-  => FunPtr (FFIType a)
-  -> FunPtr a
-castFunPtrFromFFIType = castFunPtr
-  where
-    -- NOTE: the constraint is unused, but we want to restrict what types can be
-    -- cast, so we work around "unused constraint" warnings with this local
-    -- definition.
-    _unused = fromFFIType @a
-
-type FromFFIType :: FFI.FFIType -> Type
-type family FromFFIType ft where
-  -- === Foreign types ===
-  FromFFIType (FFI.FunArrow a b) = FromFFIType a -> FromFFIType b
-
-  -- === Marshallable foreign result types ===
-  FromFFIType FFI.Unit = ()
-  FromFFIType (FFI.IO a) = IO (FromFFIType a)
-
-  -- === Marshallable foreign types ===
-  FromFFIType (FFI.Basic a) = FromBasicFFIType a
-
-type FromBasicFFIType :: FFI.BasicFFIType -> Type
-type family FromBasicFFIType ft where
-  -- Prelude
-  FromBasicFFIType FFI.Char   = Char
-  FromBasicFFIType FFI.Int    = Int
-  FromBasicFFIType FFI.Double = Double
-  FromBasicFFIType FFI.Float  = Float
-  FromBasicFFIType FFI.Bool   = Bool
-  -- Data.Int
-  FromBasicFFIType FFI.Int8  = Int8
-  FromBasicFFIType FFI.Int16 = Int16
-  FromBasicFFIType FFI.Int32 = Int32
-  FromBasicFFIType FFI.Int64 = Int64
-  -- Data.Word
-  FromBasicFFIType FFI.Word   = Word
-  FromBasicFFIType FFI.Word8  = Word8
-  FromBasicFFIType FFI.Word16 = Word16
-  FromBasicFFIType FFI.Word32 = Word32
-  FromBasicFFIType FFI.Word64 = Word64
-  -- Foreign.Ptr
-  FromBasicFFIType FFI.Ptr     = Ptr Void
-  FromBasicFFIType FFI.FunPtr  = FunPtr Void
-  -- Foreign.StablePtr
-  FromBasicFFIType FFI.StablePtr = StablePtr Void
-
-{-------------------------------------------------------------------------------
-  Deriving-via
--------------------------------------------------------------------------------}
-
--- === Via newtype ===
-
-type ViaNewtype :: Type -> Type
-newtype ViaNewtype a = ViaNewtype a
-
--- | This produces almost the same instance as you would get using @deriving
--- newtype@, but /this/ instance has explicit @INLINE@ pragmas.
-instance HasFFIType a => HasFFIType (ViaNewtype a) where
-  type ToFFIType (ViaNewtype a) = ToFFIType a
-  {-# INLINE toFFIType #-}
-  toFFIType (ViaNewtype x) = toFFIType x
-  {-# INLINE fromFFIType #-}
-  fromFFIType x = ViaNewtype (fromFFIType x)
-
-type ViaCoercible :: Type -> Type -> Type
-newtype ViaCoercible a b = ViaCoercible b
-
-instance (Coercible a b, HasFFIType a) => HasFFIType (ViaCoercible a b) where
-  type ToFFIType (ViaCoercible a b) = ToFFIType a
-  {-# INLINE toFFIType #-}
-  toFFIType (ViaCoercible x) = toFFIType (coerce @b @a x)
-  {-# INLINE fromFFIType #-}
-  fromFFIType x = ViaCoercible (coerce @a @b (fromFFIType x))
-
--- === Via an FFI type ===
-
-type ViaFFIType :: k -> Type -> Type
-newtype ViaFFIType k a = ViaFFIType a
-
-instance FromFFIType ft ~ a => HasFFIType (ViaFFIType ft a) where
-  type ToFFIType (ViaFFIType ft a) = ft
-  {-# INLINE toFFIType #-}
-  toFFIType (ViaFFIType x) = x
-  {-# INLINE fromFFIType #-}
-  fromFFIType x = ViaFFIType x
-
--- === Via a basic foreign type ===
-
-type ViaBasicFFIType :: k -> Type -> Type
-newtype ViaBasicFFIType k a = ViaBasicFFIType a
-
-instance FromFFIType (FFI.Basic ft) ~ a => HasFFIType (ViaBasicFFIType ft a) where
-  type ToFFIType (ViaBasicFFIType ft a) = FFI.Basic ft
-  {-# INLINE toFFIType #-}
-  toFFIType (ViaBasicFFIType x) = x
-  {-# INLINE fromFFIType #-}
-  fromFFIType x = ViaBasicFFIType x
-
-{-------------------------------------------------------------------------------
-  Foreign types
--------------------------------------------------------------------------------}
-
-instance (HasFFIType a, HasFFIType b) => HasFFIType (a -> b) where
-  type ToFFIType (a -> b) = FFI.FunArrow (ToFFIType a) (ToFFIType b)
-  {-# INLINE toFFIType #-}
-  toFFIType f = \x -> toFFIType (f $ fromFFIType x)
-  {-# INLINE fromFFIType #-}
-  fromFFIType f = \x -> fromFFIType (f $ toFFIType x)
-
-{-------------------------------------------------------------------------------
-  Marshallable foreign result types
--------------------------------------------------------------------------------}
-
-deriving via ViaFFIType FFI.Unit () instance HasFFIType ()
-
-instance HasFFIType a => HasFFIType (IO a) where
-  type ToFFIType (IO ( a)) = FFI.IO (ToFFIType a)
-  {-# INLINE toFFIType #-}
-  toFFIType = fmap toFFIType
-  {-# INLINE fromFFIType #-}
-  fromFFIType = fmap fromFFIType
-
-{-------------------------------------------------------------------------------
-  Marshallable foreign types
--------------------------------------------------------------------------------}
-
--- === Prelude ===
-
--- == Basic foreign types ==
-
-deriving via ViaBasicFFIType FFI.Char Char instance HasFFIType Char
-deriving via ViaBasicFFIType FFI.Int Int instance HasFFIType Int
-deriving via ViaBasicFFIType FFI.Double Double instance HasFFIType Double
-deriving via ViaBasicFFIType FFI.Float Float instance HasFFIType Float
-deriving via ViaBasicFFIType FFI.Bool Bool instance HasFFIType Bool
-
--- === Data.Int ===
-
--- == Basic foreign types ==
-
-deriving via ViaBasicFFIType FFI.Int8 Int8 instance HasFFIType Int8
-deriving via ViaBasicFFIType FFI.Int16 Int16 instance HasFFIType Int16
-deriving via ViaBasicFFIType FFI.Int32 Int32 instance HasFFIType Int32
-deriving via ViaBasicFFIType FFI.Int64 Int64 instance HasFFIType Int64
-
--- === Data.Word ===
-
--- == Basic foreign types ==
-
-deriving via ViaBasicFFIType FFI.Word Word instance HasFFIType Word
-deriving via ViaBasicFFIType FFI.Word8 Word8 instance HasFFIType Word8
-deriving via ViaBasicFFIType FFI.Word16 Word16 instance HasFFIType Word16
-deriving via ViaBasicFFIType FFI.Word32 Word32 instance HasFFIType Word32
-deriving via ViaBasicFFIType FFI.Word64 Word64 instance HasFFIType Word64
-
--- === Foreign.Ptr ===
-
--- == Basic foreign types ==
-
-instance HasFFIType (Ptr a) where
-  type ToFFIType (Ptr a) = FFI.Basic FFI.Ptr
-  {-# INLINE toFFIType #-}
-  toFFIType = castPtr
-  {-# INLINE fromFFIType #-}
-  fromFFIType = castPtr
-
-instance HasFFIType (FunPtr a) where
-  type ToFFIType (FunPtr a) = FFI.Basic FFI.FunPtr
-  {-# INLINE toFFIType #-}
-  toFFIType = castFunPtr
-  {-# INLINE fromFFIType #-}
-  fromFFIType = castFunPtr
-
--- == Newtypes around basic foreign types ==
-
-deriving newtype instance HasFFIType IntPtr
-deriving newtype instance HasFFIType WordPtr
-
--- === Foreign.StablePtr ===
-
--- == Basic foreign types ==
-
-instance HasFFIType (StablePtr a) where
-  type ToFFIType (StablePtr a) = FFI.Basic FFI.StablePtr
-  {-# INLINE toFFIType #-}
-  toFFIType = castStablePtr
-  {-# INLINE fromFFIType #-}
-  fromFFIType = castStablePtr
-
-{-# INLINE castStablePtr #-}
-castStablePtr :: StablePtr a -> StablePtr b
-castStablePtr = castPtrToStablePtr . castStablePtrToPtr
-
--- === Foreign.C.ConstPtr ===
-
--- == Newtypes around basic foreign types ==
-
-instance HasFFIType (PtrConst a) where
-  type ToFFIType (PtrConst a) = FFI.Basic FFI.Ptr
-  {-# INLINE toFFIType #-}
-  toFFIType = castPtr . unsafeToPtr
-  {-# INLINE fromFFIType #-}
-  fromFFIType = unsafeFromPtr . castPtr
-
--- === Foreign.C.Error ===
-
--- == Newtypes around basic foreign types ==
-
-deriving newtype instance HasFFIType Errno
-
--- === Foreign.C.Types ===
-
--- == Newtypes around basic foreign types ==
-
-deriving newtype instance HasFFIType CChar
-deriving newtype instance HasFFIType CSChar
-deriving newtype instance HasFFIType CUChar
-deriving newtype instance HasFFIType CShort
-deriving newtype instance HasFFIType CUShort
-deriving newtype instance HasFFIType CInt
-deriving newtype instance HasFFIType CUInt
-deriving newtype instance HasFFIType CLong
-deriving newtype instance HasFFIType CULong
-deriving newtype instance HasFFIType CPtrdiff
-deriving newtype instance HasFFIType CSize
-deriving newtype instance HasFFIType CWchar
-deriving newtype instance HasFFIType CSigAtomic
-deriving newtype instance HasFFIType CLLong
-deriving newtype instance HasFFIType CULLong
-deriving newtype instance HasFFIType CBool
-deriving newtype instance HasFFIType CIntPtr
-deriving newtype instance HasFFIType CUIntPtr
-deriving newtype instance HasFFIType CIntMax
-deriving newtype instance HasFFIType CUIntMax
-
--- === Foreign.C.Types : Numeric types ===
-
--- == Newtypes around basic foreign types ==
-
-deriving newtype instance HasFFIType CClock
-deriving newtype instance HasFFIType CTime
-deriving newtype instance HasFFIType CUSeconds
-deriving newtype instance HasFFIType CSUSeconds
-
--- === Foreign.C.Types : Floating types ===
-
--- == Newtypes around basic foreign types ==
-
-deriving newtype instance HasFFIType CFloat
-deriving newtype instance HasFFIType CDouble
-
diff --git a/runtime/HsBindgen/Runtime/Support/LibC/Auxiliary.hsc b/runtime/HsBindgen/Runtime/Support/LibC/Auxiliary.hsc
--- a/runtime/HsBindgen/Runtime/Support/LibC/Auxiliary.hsc
+++ b/runtime/HsBindgen/Runtime/Support/LibC/Auxiliary.hsc
@@ -37,7 +37,7 @@
 import HsBindgen.Runtime.HasCField (HasCField (..))
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.Support.Bitfield (Bitfield)
-import HsBindgen.Runtime.Support.HasFFIType (HasFFIType)
+import HsBindgen.Runtime.HasFFIType (HasFFIType, ViaIdentity(..))
 import HsBindgen.Runtime.Marshal
 
 #include <inttypes.h>
@@ -111,7 +111,6 @@
     , Enum
     , Eq
     , FiniteBits
-    , HasFFIType
     , Integral
     , Ix
     , Num
@@ -126,6 +125,8 @@
     , WriteRaw
     )
 
+deriving via ViaIdentity CWintT instance HasFFIType CWintT
+
 --------------------------------------------------------------------------------
 
 -- | C @mbstate_t@ type
@@ -148,7 +149,6 @@
 newtype CWctransT = CWctransT (Ptr C.CInt)
   deriving newtype (
       Eq
-    , HasFFIType
     , Prim
     , ReadRaw
     , Show
@@ -157,6 +157,8 @@
     , WriteRaw
     )
 
+deriving via ViaIdentity CWctransT instance HasFFIType CWctransT
+
 --------------------------------------------------------------------------------
 
 -- | C @wctype_t@ type
@@ -167,7 +169,6 @@
 newtype CWctypeT = CWctypeT C.CULong
   deriving newtype (
       Eq
-    , HasFFIType
     , Prim
     , ReadRaw
     , Show
@@ -176,6 +177,8 @@
     , WriteRaw
     )
 
+deriving via ViaIdentity CWctypeT instance HasFFIType CWctypeT
+
 --------------------------------------------------------------------------------
 
 -- | C @char16_t@ type
@@ -190,7 +193,6 @@
     , Enum
     , Eq
     , FiniteBits
-    , HasFFIType
     , Integral
     , Ix
     , Num
@@ -205,6 +207,8 @@
     , WriteRaw
     )
 
+deriving via ViaIdentity CChar16T instance HasFFIType CChar16T
+
 --------------------------------------------------------------------------------
 
 -- | C @char32_t@ type
@@ -219,7 +223,6 @@
     , Enum
     , Eq
     , FiniteBits
-    , HasFFIType
     , Integral
     , Ix
     , Num
@@ -233,6 +236,8 @@
     , Storable
     , WriteRaw
     )
+
+deriving via ViaIdentity CChar32T instance HasFFIType CChar32T
 
 {-------------------------------------------------------------------------------
   Localization Types
diff --git a/runtime/HsBindgen/Runtime/Union.hs b/runtime/HsBindgen/Runtime/Union.hs
--- a/runtime/HsBindgen/Runtime/Union.hs
+++ b/runtime/HsBindgen/Runtime/Union.hs
@@ -8,6 +8,7 @@
 -- > import HsBindgen.Runtime.Union qualified as Union
 module HsBindgen.Runtime.Union (
   IsUnion (..),
+  IsUnionViaReadRaw (..),
   get,
   set,
 ) where
@@ -16,19 +17,47 @@
 import Data.Primitive.ByteArray qualified as BA
 import Data.Proxy (Proxy (..))
 import Data.Word (Word8)
+import Foreign.Ptr (Ptr, castPtr)
 import GHC.Records.Compat qualified as Compat
 import GHC.TypeNats (KnownNat)
+import System.IO.Unsafe (unsafePerformIO)
 
-import HsBindgen.Runtime.Marshal
+import HsBindgen.Runtime.Marshal (ReadRaw (..), StaticSize (staticSizeOf))
 import HsBindgen.Runtime.Support.SizedByteArray (SizedByteArray (..))
 
 class IsUnion u where
+  -- | A 'zero' union value is a union value that is read from a zeroed-out byte
+  -- array
   zero :: u
 
+-- | Helper type for deriving 'IsUnion' via 'ReadRaw' (and 'StaticSize')
+--
+-- This helper type exists mainly for user convenience so that they can define
+-- instances in cases where newtype-deriving is not possible.
+newtype IsUnionViaReadRaw u = IsUnionViaReadRaw u
+
+-- | Helper instance for deriving 'IsUnion' via 'ReadRaw' (and 'StaticSize')
+--
+-- This instance equivalent to the helper instance for newtype-deriving, but the
+-- latter is probably more performant.
+instance (StaticSize u, ReadRaw u) => IsUnion (IsUnionViaReadRaw u) where
+  zero =
+    unsafePerformIO $
+      BA.withByteArrayContents zeroBytes $ \(ptr :: Ptr Word8) ->
+        IsUnionViaReadRaw <$> readRaw (castPtr ptr :: Ptr u)
+   where
+    n = staticSizeOf (Proxy @u)
+    zeroBytes = BA.byteArrayFromListN n $ replicate n (0 :: Word8)
+
+-- | Helper instance for newtype-deriving 'IsUnion'
+--
+-- This instance is equivalent to the helper instance for deriving via
+-- 'ReadRaw', but the former is probably more performant.
 instance (KnownNat n, KnownNat m) => IsUnion (SizedByteArray n m) where
-  zero = coerce $ BA.byteArrayFromListN n $ replicate n (0 :: Word8)
+  zero = coerce zeroBytes
    where
     n = staticSizeOf (Proxy :: Proxy (SizedByteArray n m))
+    zeroBytes = BA.byteArrayFromListN n $ replicate n (0 :: Word8)
 
 get
   :: forall field union a
diff --git a/sdl3-bindgen-sys.cabal b/sdl3-bindgen-sys.cabal
--- a/sdl3-bindgen-sys.cabal
+++ b/sdl3-bindgen-sys.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: "X\240\179\139\175\224\139\FS\230\&6\158\CAN\n\183\137\239\SI\133b~\t\226\ng\228u\210\209\245\"Bw"
+-- hash: "9\207\188\b\143\173H\171$\180\US`F \140\GS\f\ETB\140ir\129MX\STX\147=\ESC\170\bE\ETX"
 
 name:           sdl3-bindgen-sys
-version:        0.0.0.3
+version:        0.0.1.0
 synopsis:       Complete SDL3 bindings, raw + curated, generated by hs-bindgen
 description:    Machine-generated low-level bindings to the whole SDL 3.4 API: the raw
                 hs-bindgen output (@SDL3.Sys.Bindgen.*@) plus a curated @SDL3.Sys@ layer
@@ -36,6 +36,18 @@
 build-type:     Simple
 tested-with:
     GHC == 9.8.* || == 9.10.* || == 9.12.*
+extra-source-files:
+    include/sdl3-bindgen-sys/SDL_atomic_shims.h
+    include/sdl3-bindgen-sys/SDL_audio_shims.h
+    include/sdl3-bindgen-sys/SDL_endian_shims.h
+    include/sdl3-bindgen-sys/SDL_error_shims.h
+    include/sdl3-bindgen-sys/SDL_iostream_shims.h
+    include/sdl3-bindgen-sys/SDL_log_shims.h
+    include/sdl3-bindgen-sys/SDL_pixels_shims.h
+    include/sdl3-bindgen-sys/SDL_stdinc_shims.h
+    include/sdl3-bindgen-sys/SDL_surface_shims.h
+    include/sdl3-bindgen-sys/SDL_thread_shims.h
+    include/sdl3-bindgen-sys/SDL_timer_shims.h
 extra-doc-files:
     README.md
     CHANGELOG.md
@@ -107,10 +119,16 @@
       SDL3.Sys.Bindgen.Atomic.FunPtr
       SDL3.Sys.Bindgen.Atomic.Safe
       SDL3.Sys.Bindgen.Atomic.Unsafe
+      SDL3.Sys.Bindgen.AtomicShims.FunPtr
+      SDL3.Sys.Bindgen.AtomicShims.Safe
+      SDL3.Sys.Bindgen.AtomicShims.Unsafe
       SDL3.Sys.Bindgen.Audio
       SDL3.Sys.Bindgen.Audio.FunPtr
       SDL3.Sys.Bindgen.Audio.Safe
       SDL3.Sys.Bindgen.Audio.Unsafe
+      SDL3.Sys.Bindgen.AudioShims.FunPtr
+      SDL3.Sys.Bindgen.AudioShims.Safe
+      SDL3.Sys.Bindgen.AudioShims.Unsafe
       SDL3.Sys.Bindgen.Bits.FunPtr
       SDL3.Sys.Bindgen.Bits.Safe
       SDL3.Sys.Bindgen.Bits.Unsafe
@@ -139,9 +157,15 @@
       SDL3.Sys.Bindgen.Endian.FunPtr
       SDL3.Sys.Bindgen.Endian.Safe
       SDL3.Sys.Bindgen.Endian.Unsafe
+      SDL3.Sys.Bindgen.EndianShims.FunPtr
+      SDL3.Sys.Bindgen.EndianShims.Safe
+      SDL3.Sys.Bindgen.EndianShims.Unsafe
       SDL3.Sys.Bindgen.Error.FunPtr
       SDL3.Sys.Bindgen.Error.Safe
       SDL3.Sys.Bindgen.Error.Unsafe
+      SDL3.Sys.Bindgen.ErrorShims.FunPtr
+      SDL3.Sys.Bindgen.ErrorShims.Safe
+      SDL3.Sys.Bindgen.ErrorShims.Unsafe
       SDL3.Sys.Bindgen.Events
       SDL3.Sys.Bindgen.Events.FunPtr
       SDL3.Sys.Bindgen.Events.Safe
@@ -182,6 +206,9 @@
       SDL3.Sys.Bindgen.Iostream.FunPtr
       SDL3.Sys.Bindgen.Iostream.Safe
       SDL3.Sys.Bindgen.Iostream.Unsafe
+      SDL3.Sys.Bindgen.IostreamShims.FunPtr
+      SDL3.Sys.Bindgen.IostreamShims.Safe
+      SDL3.Sys.Bindgen.IostreamShims.Unsafe
       SDL3.Sys.Bindgen.Joystick
       SDL3.Sys.Bindgen.Joystick.FunPtr
       SDL3.Sys.Bindgen.Joystick.Safe
@@ -203,6 +230,9 @@
       SDL3.Sys.Bindgen.Log.FunPtr
       SDL3.Sys.Bindgen.Log.Safe
       SDL3.Sys.Bindgen.Log.Unsafe
+      SDL3.Sys.Bindgen.LogShims.FunPtr
+      SDL3.Sys.Bindgen.LogShims.Safe
+      SDL3.Sys.Bindgen.LogShims.Unsafe
       SDL3.Sys.Bindgen.Main
       SDL3.Sys.Bindgen.Main.FunPtr
       SDL3.Sys.Bindgen.Main.Safe
@@ -234,6 +264,9 @@
       SDL3.Sys.Bindgen.Pixels.FunPtr
       SDL3.Sys.Bindgen.Pixels.Safe
       SDL3.Sys.Bindgen.Pixels.Unsafe
+      SDL3.Sys.Bindgen.PixelsShims.FunPtr
+      SDL3.Sys.Bindgen.PixelsShims.Safe
+      SDL3.Sys.Bindgen.PixelsShims.Unsafe
       SDL3.Sys.Bindgen.Platform.FunPtr
       SDL3.Sys.Bindgen.Platform.Safe
       SDL3.Sys.Bindgen.Platform.Unsafe
@@ -268,10 +301,14 @@
       SDL3.Sys.Bindgen.Runtime.FLAM
       SDL3.Sys.Bindgen.Runtime.HasCBitfield
       SDL3.Sys.Bindgen.Runtime.HasCField
+      SDL3.Sys.Bindgen.Runtime.HasFFIType
       SDL3.Sys.Bindgen.Runtime.IncompleteArray
       SDL3.Sys.Bindgen.Runtime.IsArray
+      SDL3.Sys.Bindgen.Runtime.Macro
       SDL3.Sys.Bindgen.Runtime.Marshal
+      SDL3.Sys.Bindgen.Runtime.Overloading
       SDL3.Sys.Bindgen.Runtime.PtrConst
+      SDL3.Sys.Bindgen.Runtime.Struct
       SDL3.Sys.Bindgen.Runtime.Union
       SDL3.Sys.Bindgen.Scancode
       SDL3.Sys.Bindgen.Sensor
@@ -282,6 +319,9 @@
       SDL3.Sys.Bindgen.Stdinc.FunPtr
       SDL3.Sys.Bindgen.Stdinc.Safe
       SDL3.Sys.Bindgen.Stdinc.Unsafe
+      SDL3.Sys.Bindgen.StdincShims.FunPtr
+      SDL3.Sys.Bindgen.StdincShims.Safe
+      SDL3.Sys.Bindgen.StdincShims.Unsafe
       SDL3.Sys.Bindgen.Storage
       SDL3.Sys.Bindgen.Storage.FunPtr
       SDL3.Sys.Bindgen.Storage.Safe
@@ -290,6 +330,9 @@
       SDL3.Sys.Bindgen.Surface.FunPtr
       SDL3.Sys.Bindgen.Surface.Safe
       SDL3.Sys.Bindgen.Surface.Unsafe
+      SDL3.Sys.Bindgen.SurfaceShims.FunPtr
+      SDL3.Sys.Bindgen.SurfaceShims.Safe
+      SDL3.Sys.Bindgen.SurfaceShims.Unsafe
       SDL3.Sys.Bindgen.System
       SDL3.Sys.Bindgen.System.FunPtr
       SDL3.Sys.Bindgen.System.Safe
@@ -298,6 +341,9 @@
       SDL3.Sys.Bindgen.Thread.FunPtr
       SDL3.Sys.Bindgen.Thread.Safe
       SDL3.Sys.Bindgen.Thread.Unsafe
+      SDL3.Sys.Bindgen.ThreadShims.FunPtr
+      SDL3.Sys.Bindgen.ThreadShims.Safe
+      SDL3.Sys.Bindgen.ThreadShims.Unsafe
       SDL3.Sys.Bindgen.Time
       SDL3.Sys.Bindgen.Time.FunPtr
       SDL3.Sys.Bindgen.Time.Safe
@@ -306,6 +352,9 @@
       SDL3.Sys.Bindgen.Timer.FunPtr
       SDL3.Sys.Bindgen.Timer.Safe
       SDL3.Sys.Bindgen.Timer.Unsafe
+      SDL3.Sys.Bindgen.TimerShims.FunPtr
+      SDL3.Sys.Bindgen.TimerShims.Safe
+      SDL3.Sys.Bindgen.TimerShims.Unsafe
       SDL3.Sys.Bindgen.Touch
       SDL3.Sys.Bindgen.Touch.FunPtr
       SDL3.Sys.Bindgen.Touch.Safe
@@ -388,6 +437,8 @@
   hs-source-dirs:
       src
   ghc-options: -optc-Wno-incompatible-pointer-types -optc-Wno-incompatible-function-pointer-types
+  include-dirs:
+      include
   pkgconfig-depends:
       sdl3 >= 3.2
   build-depends:
@@ -421,21 +472,23 @@
       HsBindgen.Runtime.FLAM
       HsBindgen.Runtime.HasCBitfield
       HsBindgen.Runtime.HasCField
+      HsBindgen.Runtime.HasFFIType
       HsBindgen.Runtime.IncompleteArray
       HsBindgen.Runtime.IsArray
       HsBindgen.Runtime.LibC
+      HsBindgen.Runtime.Macro
       HsBindgen.Runtime.Marshal
+      HsBindgen.Runtime.Overloading
       HsBindgen.Runtime.Prelude
       HsBindgen.Runtime.PtrConst
+      HsBindgen.Runtime.Struct
       HsBindgen.Runtime.Support
       HsBindgen.Runtime.Support.Bitfield
       HsBindgen.Runtime.Support.ByteArray
       HsBindgen.Runtime.Support.CAPI
       HsBindgen.Runtime.Support.CompatHasField
-      HsBindgen.Runtime.Support.FFIType
       HsBindgen.Runtime.Support.FunPtr
       HsBindgen.Runtime.Support.FunPtr.Class
-      HsBindgen.Runtime.Support.HasFFIType
       HsBindgen.Runtime.Support.LibC.Auxiliary
       HsBindgen.Runtime.Support.Ptr
       HsBindgen.Runtime.Support.SizedByteArray
@@ -471,7 +524,7 @@
     , containers >=0.6 && <0.9
     , primitive ==0.9.*
     , record-hasfield >=1.0 && <2
-    , template-haskell >=2.18 && <2.25
+    , template-haskell >=2.19 && <2.25
     , vector ==0.13.*
   default-language: GHC2021
   if flag(optimize)
diff --git a/src/SDL3/Sys.hs b/src/SDL3/Sys.hs
--- a/src/SDL3/Sys.hs
+++ b/src/SDL3/Sys.hs
@@ -45,7 +45,16 @@
 -- * This layer additionally provides typed pattern synonyms for
 --   the macro constant groups in SDL headers.
 --
--- * Some aliases (@free@, @abs@, @init@, …) collide with the "Prelude";
+-- * What the FFI cannot call — SDL's variadic functions and the
+--   function-like macros hs-bindgen cannot translate — is reached through
+--   C shims: fixed-arity functions this package defines in C, exported
+--   from the module of the header they extend, in its C shims section,
+--   and named like what they wrap (@SDL_LogMessage@ -> @logMessage@,
+--   @SDL_MUSTLOCK@ -> @mustLock@). The variadic functions' shims take
+--   their message verbatim, never as a printf-style format string.
+--   @log@ is @SDL_Log@'s shim; the math clones are raw-only.
+--
+-- * Some aliases (@init@, @log@, @readIO@) collide with the "Prelude";
 --   import this module qualified or curate your import list.
 --
 -- == Families
@@ -97,7 +106,7 @@
 -- * "SDL3.Sys.Runtime" — Bridge vocabulary: C99 bool and C enum conversions, curated from the runtime.
 -- * "SDL3.Sys.Scancode" — Defines keyboard scancodes.
 -- * "SDL3.Sys.Sensor" — SDL sensor management.
--- * "SDL3.Sys.Stdinc" — SDL's C-library replacements: memory, strings, math, and conversions.
+-- * "SDL3.Sys.Stdinc" — SDL's C-library replacements: memory, strings, math, and conversions; this module aliases the allocator and SDL's own API.
 -- * "SDL3.Sys.Storage" — The storage API is a high-level API designed to abstract away the portability issues that come up when using something lower-level (in SDL's case, this sits on top of the [Filesystem](https://wiki.libsdl.org/SDL3/CategoryFilesystem) and [IOStream](https://wiki.libsdl.org/SDL3/CategoryIOStream) subsystems).
 -- * "SDL3.Sys.Surface" — SDL surfaces are buffers of pixels in system RAM.
 -- * "SDL3.Sys.System" — Platform-specific SDL API functions.
diff --git a/src/SDL3/Sys/Assert.hs b/src/SDL3/Sys/Assert.hs
--- a/src/SDL3/Sys/Assert.hs
+++ b/src/SDL3/Sys/Assert.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | A helpful assertion macro!
 --
 --     SDL assertions operate like your usual @assert@ macro, but with some added features:
@@ -53,6 +55,7 @@
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (IO)
 
 import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
@@ -80,7 +83,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_ReportAssertion@, defined at @SDL3\/SDL_assert.h 358:45@
+--     [C declaration]: @SDL_ReportAssertion@, defined at @SDL3\/SDL_assert.h 363:45@
 reportAssertion
   :: BG.Ptr SDL_AssertData
   -- ^
@@ -125,7 +128,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_ReportAssertion@, defined at @SDL3\/SDL_assert.h 358:45@
+--     [C declaration]: @SDL_ReportAssertion@, defined at @SDL3\/SDL_assert.h 363:45@
 reportAssertionSafe
   :: BG.Ptr SDL_AssertData
   -- ^
@@ -171,7 +174,7 @@
 --                   The safe flavor is 'setAssertionHandlerSafe'
 --                   : registration; the handler fires from failed SDL assertions.
 --
---     [C declaration]: @SDL_SetAssertionHandler@, defined at @SDL3\/SDL_assert.h 599:34@
+--     [C declaration]: @SDL_SetAssertionHandler@, defined at @SDL3\/SDL_assert.h 604:34@
 setAssertionHandler
   :: SDL_AssertionHandler
   -- ^
@@ -204,7 +207,7 @@
 --                   The unsafe flavor is 'setAssertionHandler'
 --                   : registration; the handler fires from failed SDL assertions.
 --
---     [C declaration]: @SDL_SetAssertionHandler@, defined at @SDL3\/SDL_assert.h 599:34@
+--     [C declaration]: @SDL_SetAssertionHandler@, defined at @SDL3\/SDL_assert.h 604:34@
 setAssertionHandlerSafe
   :: SDL_AssertionHandler
   -- ^
@@ -236,7 +239,7 @@
 --                   The safe flavor is 'getDefaultAssertionHandlerSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetDefaultAssertionHandler@, defined at @SDL3\/SDL_assert.h 620:50@
+--     [C declaration]: @SDL_GetDefaultAssertionHandler@, defined at @SDL3\/SDL_assert.h 625:50@
 getDefaultAssertionHandler :: IO SDL_AssertionHandler
 getDefaultAssertionHandler =
   Unsafe.sDL_GetDefaultAssertionHandler
@@ -259,7 +262,7 @@
 --                   The unsafe flavor is 'getDefaultAssertionHandler'
 --                   .
 --
---     [C declaration]: @SDL_GetDefaultAssertionHandler@, defined at @SDL3\/SDL_assert.h 620:50@
+--     [C declaration]: @SDL_GetDefaultAssertionHandler@, defined at @SDL3\/SDL_assert.h 625:50@
 getDefaultAssertionHandlerSafe :: IO SDL_AssertionHandler
 getDefaultAssertionHandlerSafe =
   Safe.sDL_GetDefaultAssertionHandler
@@ -284,7 +287,7 @@
 --                   The safe flavor is 'getAssertionHandlerSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetAssertionHandler@, defined at @SDL3\/SDL_assert.h 645:50@
+--     [C declaration]: @SDL_GetAssertionHandler@, defined at @SDL3\/SDL_assert.h 650:50@
 getAssertionHandler
   :: BG.Ptr (BG.Ptr BG.Void)
   -- ^
@@ -313,7 +316,7 @@
 --                   The unsafe flavor is 'getAssertionHandler'
 --                   .
 --
---     [C declaration]: @SDL_GetAssertionHandler@, defined at @SDL3\/SDL_assert.h 645:50@
+--     [C declaration]: @SDL_GetAssertionHandler@, defined at @SDL3\/SDL_assert.h 650:50@
 getAssertionHandlerSafe
   :: BG.Ptr (BG.Ptr BG.Void)
   -- ^
@@ -354,7 +357,7 @@
 --                   The safe flavor is 'getAssertionReportSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetAssertionReport@, defined at @SDL3\/SDL_assert.h 679:52@
+--     [C declaration]: @SDL_GetAssertionReport@, defined at @SDL3\/SDL_assert.h 684:52@
 getAssertionReport :: IO (PtrConst.PtrConst SDL_AssertData)
 getAssertionReport = Unsafe.sDL_GetAssertionReport
 
@@ -389,7 +392,7 @@
 --                   The unsafe flavor is 'getAssertionReport'
 --                   .
 --
---     [C declaration]: @SDL_GetAssertionReport@, defined at @SDL3\/SDL_assert.h 679:52@
+--     [C declaration]: @SDL_GetAssertionReport@, defined at @SDL3\/SDL_assert.h 684:52@
 getAssertionReportSafe :: IO (PtrConst.PtrConst SDL_AssertData)
 getAssertionReportSafe = Safe.sDL_GetAssertionReport
 
@@ -409,7 +412,7 @@
 --                   The safe flavor is 'resetAssertionReportSafe'
 --                   .
 --
---     [C declaration]: @SDL_ResetAssertionReport@, defined at @SDL3\/SDL_assert.h 697:34@
+--     [C declaration]: @SDL_ResetAssertionReport@, defined at @SDL3\/SDL_assert.h 702:34@
 resetAssertionReport :: IO ()
 resetAssertionReport =
   Unsafe.sDL_ResetAssertionReport
@@ -430,7 +433,7 @@
 --                   The unsafe flavor is 'resetAssertionReport'
 --                   .
 --
---     [C declaration]: @SDL_ResetAssertionReport@, defined at @SDL3\/SDL_assert.h 697:34@
+--     [C declaration]: @SDL_ResetAssertionReport@, defined at @SDL3\/SDL_assert.h 702:34@
 resetAssertionReportSafe :: IO ()
 resetAssertionReportSafe =
   Safe.sDL_ResetAssertionReport
diff --git a/src/SDL3/Sys/Asyncio.hs b/src/SDL3/Sys/Asyncio.hs
--- a/src/SDL3/Sys/Asyncio.hs
+++ b/src/SDL3/Sys/Asyncio.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | SDL offers a way to perform I\/O asynchronously. This allows an app to read or write files without waiting for data to actually transfer; the functions that request I\/O never block while the request is fulfilled.
 --
 --     Instead, the data moves in the background and the app can check for results at their leisure.
@@ -77,6 +79,7 @@
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (Bool, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
diff --git a/src/SDL3/Sys/Atomic.hs b/src/SDL3/Sys/Atomic.hs
--- a/src/SDL3/Sys/Atomic.hs
+++ b/src/SDL3/Sys/Atomic.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | Atomic operations.
 --
 --     IMPORTANT: If you are not an expert in concurrent lockless programming, you should not be using any functions in this file. You should be protecting your data structures with full mutexes instead.
@@ -28,6 +30,8 @@
 --
 --     Unsuffixed aliases are __unsafe__ foreign imports; aliases suffixed @Safe@ are safe. Functions whose callbacks fire during the call export only the Safe alias (the genuine unsafe import stays reachable under @SDL3.Sys.Bindgen.Atomic.Unsafe@); functions curated unsafe-only export only the unsuffixed one. Each alias\'s documentation records its flavor and rationale.
 --
+--     The C shims are functions this package defines in C over what the FFI cannot call directly (variadic functions, function-like macros), each named after what it wraps; the same flavor rules apply. Their raw imports live under "SDL3.Sys.Bindgen.AtomicShims".
+--
 --     Full conventions: "SDL3.Sys".
 module SDL3.Sys.Atomic (
   module SDL3.Sys.Bindgen.Atomic,
@@ -65,17 +69,27 @@
   SDL3.Sys.Atomic.setAtomicPointerSafe,
   SDL3.Sys.Atomic.getAtomicPointer,
   SDL3.Sys.Atomic.getAtomicPointerSafe,
+
+  -- * C shims
+  SDL3.Sys.Atomic.atomicIncRef,
+  SDL3.Sys.Atomic.atomicIncRefSafe,
+  SDL3.Sys.Atomic.atomicDecRef,
+  SDL3.Sys.Atomic.atomicDecRefSafe,
 )
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (Bool, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.Support qualified as BG
 import SDL3.Sys.Bindgen.Atomic
+import SDL3.Sys.Bindgen.Atomic qualified
 import SDL3.Sys.Bindgen.Atomic.Safe qualified as Safe
 import SDL3.Sys.Bindgen.Atomic.Unsafe qualified as Unsafe
+import SDL3.Sys.Bindgen.AtomicShims.Safe qualified as Safe
+import SDL3.Sys.Bindgen.AtomicShims.Unsafe qualified as Unsafe
 import SDL3.Sys.Bindgen.Stdinc qualified
 
 -- | Try to lock a spin lock by setting it to a non-zero value.
@@ -568,7 +582,7 @@
 --
 --     @since 3.2.0
 --
---     [See also]: @SDL_AtomicDecRef@, @SDL_AtomicIncRef@
+--     [See also]: @'atomicDecRef'@, @'atomicIncRef'@
 --
 --     === __@sdl3-bindgen-sys@ notes__
 --
@@ -607,7 +621,7 @@
 --
 --     @since 3.2.0
 --
---     [See also]: @SDL_AtomicDecRef@, @SDL_AtomicIncRef@
+--     [See also]: @'atomicDecRef'@, @'atomicIncRef'@
 --
 --     === __@sdl3-bindgen-sys@ notes__
 --
@@ -1133,3 +1147,131 @@
   --           [@a@]: a pointer to a pointer.
   -> IO (BG.Ptr BG.Void)
 getAtomicPointerSafe = Safe.sDL_GetAtomicPointer
+
+-- | Increment an atomic variable used as a reference count.
+--
+--     The SDL_AtomicIncRef macro as a function.
+--
+--     [Returns]: the previous value of the atomic variable.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'atomicDecRef'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_AtomicIncRef@.
+--                   The safe flavor is 'atomicIncRefSafe'
+--                   .
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_AtomicIncRef@, defined at @sdl3-bindgen-sys\/SDL_atomic_shims.h 38:23@
+atomicIncRef
+  :: BG.Ptr SDL3.Sys.Bindgen.Atomic.SDL_AtomicInt
+  -- ^
+  --
+  --           [@a@]: a pointer to an SDL_AtomicInt to increment.
+  -> IO BG.Int32
+atomicIncRef =
+  \x00 ->
+    fmap Coerce.coerce (Unsafe.lithon_SDL_AtomicIncRef x00)
+
+-- | Increment an atomic variable used as a reference count.
+--
+--     The SDL_AtomicIncRef macro as a function.
+--
+--     [Returns]: the previous value of the atomic variable.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'atomicDecRef'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Safe__ foreign import of @lithon_SDL_AtomicIncRef@.
+--                   The unsafe flavor is 'atomicIncRef'
+--                   .
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_AtomicIncRef@, defined at @sdl3-bindgen-sys\/SDL_atomic_shims.h 38:23@
+atomicIncRefSafe
+  :: BG.Ptr SDL3.Sys.Bindgen.Atomic.SDL_AtomicInt
+  -- ^
+  --
+  --           [@a@]: a pointer to an SDL_AtomicInt to increment.
+  -> IO BG.Int32
+atomicIncRefSafe =
+  \x00 ->
+    fmap Coerce.coerce (Safe.lithon_SDL_AtomicIncRef x00)
+
+-- | Decrement an atomic variable used as a reference count.
+--
+--     The SDL_AtomicDecRef macro as a function.
+--
+--     [Returns]: true if the variable reached zero after decrementing, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'atomicIncRef'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_AtomicDecRef@.
+--                   The safe flavor is 'atomicDecRefSafe'
+--                   .
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_AtomicDecRef@, defined at @sdl3-bindgen-sys\/SDL_atomic_shims.h 58:24@
+atomicDecRef
+  :: BG.Ptr SDL3.Sys.Bindgen.Atomic.SDL_AtomicInt
+  -- ^
+  --
+  --           [@a@]: a pointer to an SDL_AtomicInt to decrement.
+  -> IO Bool
+atomicDecRef =
+  \x00 ->
+    fmap CBool.toBool (Unsafe.lithon_SDL_AtomicDecRef x00)
+
+-- | Decrement an atomic variable used as a reference count.
+--
+--     The SDL_AtomicDecRef macro as a function.
+--
+--     [Returns]: true if the variable reached zero after decrementing, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'atomicIncRef'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Safe__ foreign import of @lithon_SDL_AtomicDecRef@.
+--                   The unsafe flavor is 'atomicDecRef'
+--                   .
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_AtomicDecRef@, defined at @sdl3-bindgen-sys\/SDL_atomic_shims.h 58:24@
+atomicDecRefSafe
+  :: BG.Ptr SDL3.Sys.Bindgen.Atomic.SDL_AtomicInt
+  -- ^
+  --
+  --           [@a@]: a pointer to an SDL_AtomicInt to decrement.
+  -> IO Bool
+atomicDecRefSafe =
+  \x00 ->
+    fmap CBool.toBool (Safe.lithon_SDL_AtomicDecRef x00)
diff --git a/src/SDL3/Sys/Audio.hs b/src/SDL3/Sys/Audio.hs
--- a/src/SDL3/Sys/Audio.hs
+++ b/src/SDL3/Sys/Audio.hs
@@ -1,3 +1,6 @@
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | Audio functionality for the SDL library.
 --
 --     All audio in SDL3 revolves around 'SDL_AudioStream'. Whether you want to play or record audio, convert it, stream it, buffer it, or mix it, you\'re going to be passing it through an audio stream.
@@ -76,10 +79,16 @@
 --
 --     Unsuffixed aliases are __unsafe__ foreign imports; aliases suffixed @Safe@ are safe. Functions whose callbacks fire during the call export only the Safe alias (the genuine unsafe import stays reachable under @SDL3.Sys.Bindgen.Audio.Unsafe@); functions curated unsafe-only export only the unsuffixed one. Each alias\'s documentation records its flavor and rationale.
 --
+--     The C shims are functions this package defines in C over what the FFI cannot call directly (variadic functions, function-like macros), each named after what it wraps; the same flavor rules apply. Their raw imports live under "SDL3.Sys.Bindgen.AudioShims".
+--
 --     Full conventions: "SDL3.Sys".
 module SDL3.Sys.Audio (
   module SDL3.Sys.Bindgen.Audio,
 
+  -- * Typed constants
+  pattern SDL3.Sys.Audio.SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK,
+  pattern SDL3.Sys.Audio.SDL_AUDIO_DEVICE_DEFAULT_RECORDING,
+
   -- * Function aliases
   SDL3.Sys.Audio.getNumAudioDrivers,
   SDL3.Sys.Audio.getNumAudioDriversSafe,
@@ -197,18 +206,25 @@
   SDL3.Sys.Audio.getAudioFormatNameSafe,
   SDL3.Sys.Audio.getSilenceValueForFormat,
   SDL3.Sys.Audio.getSilenceValueForFormatSafe,
+
+  -- * C shims
+  SDL3.Sys.Audio.audioFrameSize,
+  SDL3.Sys.Audio.defineAudioFormat,
 )
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (Bool, Float, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import SDL3.Sys.Bindgen.Audio
+import SDL3.Sys.Bindgen.Audio qualified
 import SDL3.Sys.Bindgen.Audio.Safe qualified as Safe
 import SDL3.Sys.Bindgen.Audio.Unsafe qualified as Unsafe
+import SDL3.Sys.Bindgen.AudioShims.Unsafe qualified as Unsafe
 import SDL3.Sys.Bindgen.Iostream qualified
 import SDL3.Sys.Bindgen.Properties qualified
 import SDL3.Sys.Bindgen.Stdinc qualified
@@ -4790,3 +4806,90 @@
 getSilenceValueForFormatSafe =
   \x00 ->
     fmap Coerce.coerce (Safe.sDL_GetSilenceValueForFormat x00)
+
+-- | Calculate the size of each audio frame (in bytes) from an SDL_AudioSpec.
+--
+--     The SDL_AUDIO_FRAMESIZE macro as a function. This reports on the size of an audio sample frame: stereo Sint16 data (2 channels of 2 bytes each) would be 4 bytes per frame, for example.
+--
+--     [Returns]: the number of bytes used per sample frame.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_AUDIO_FRAMESIZE@.
+--                   The safe import is not exported
+--                   : pure arithmetic on a caller-supplied struct; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_AUDIO_FRAMESIZE@, defined at @sdl3-bindgen-sys\/SDL_audio_shims.h 38:23@
+audioFrameSize
+  :: PtrConst.PtrConst SDL3.Sys.Bindgen.Audio.SDL_AudioSpec
+  -- ^
+  --
+  --           [@spec@]: the SDL_AudioSpec to query.
+  -> IO BG.Int32
+audioFrameSize =
+  \x00 ->
+    fmap Coerce.coerce (Unsafe.lithon_SDL_AUDIO_FRAMESIZE x00)
+
+-- | Define an SDL_AudioFormat value.
+--
+--     The SDL_DEFINE_AUDIO_FORMAT macro as a function. SDL does not support custom audio formats, so this is not of much use externally, but it can be illustrative as to what the various bits of an SDL_AudioFormat mean. For example, SDL_AUDIO_S32LE is signed, littleendian, integer, 32 bits.
+--
+--     [Returns]: a format value in the style of SDL_AudioFormat.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_DEFINE_AUDIO_FORMAT@.
+--                   The safe import is not exported
+--                   : pure bit manipulation on immediate values; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_DEFINE_AUDIO_FORMAT@, defined at @sdl3-bindgen-sys\/SDL_audio_shims.h 61:35@
+defineAudioFormat
+  :: Bool
+  -- ^
+  --
+  --           [@is_signed@]: true for signed data, false for unsigned data.
+  -> Bool
+  -- ^
+  --
+  --           [@is_bigendian@]: true for bigendian data, false for littleendian data.
+  -> Bool
+  -- ^
+  --
+  --           [@is_float@]: true for floating point data, false for integer data.
+  -> BG.Word8
+  -- ^
+  --
+  --           [@bits@]: number of bits per sample.
+  -> IO SDL3.Sys.Bindgen.Audio.SDL_AudioFormat
+defineAudioFormat =
+  \x00 ->
+    \x11 ->
+      \x22 ->
+        \x33 ->
+          Unsafe.lithon_SDL_DEFINE_AUDIO_FORMAT
+            (CBool.fromBool x00)
+            (CBool.fromBool x11)
+            (CBool.fromBool x22)
+            (Coerce.coerce x33)
+
+-- | Typed constant for macro @SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK@.
+pattern SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK :: SDL_AudioDeviceID
+pattern SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK = SDL_AudioDeviceID 4294967295
+
+-- | Typed constant for macro @SDL_AUDIO_DEVICE_DEFAULT_RECORDING@.
+pattern SDL_AUDIO_DEVICE_DEFAULT_RECORDING :: SDL_AudioDeviceID
+pattern SDL_AUDIO_DEVICE_DEFAULT_RECORDING = SDL_AudioDeviceID 4294967294
diff --git a/src/SDL3/Sys/Bindgen/Assert.hs b/src/SDL3/Sys/Bindgen/Assert.hs
--- a/src/SDL3/Sys/Bindgen/Assert.hs
+++ b/src/SDL3/Sys/Bindgen/Assert.hs
@@ -6,6 +6,7 @@
 {-# LANGUAGE ExplicitForAll #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE MagicHash #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
@@ -17,6 +18,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | A helpful assertion macro!
 --
@@ -62,10 +64,13 @@
 )
 where
 
+import Prelude (Eq, IO, Int, Ord, Read, Show, fmap, pure, (<*>), (>>), type (~))
+
 import HsBindgen.Runtime.CEnum qualified as CEnum
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.Marshal qualified as Marshal
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Struct qualified as Struct
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField
 
@@ -73,7 +78,7 @@
 sDL_ASSERT_LEVEL :: BG.CInt
 sDL_ASSERT_LEVEL = (2 :: BG.CInt)
 
--- | [C declaration]: @macro SDL_NULL_WHILE_LOOP_CONDITION@, defined at @SDL3\/SDL_assert.h 281:9@
+-- | [C declaration]: @macro SDL_NULL_WHILE_LOOP_CONDITION@, defined at @SDL3\/SDL_assert.h 286:9@
 sDL_NULL_WHILE_LOOP_CONDITION :: BG.CInt
 sDL_NULL_WHILE_LOOP_CONDITION = (0 :: BG.CInt)
 
@@ -85,7 +90,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @enum SDL_AssertState@, defined at @SDL3\/SDL_assert.h 314:14@
+--     [C declaration]: @enum SDL_AssertState@, defined at @SDL3\/SDL_assert.h 319:14@
 newtype SDL_AssertState = SDL_AssertState
   { unwrap :: BG.CUInt
   }
@@ -181,31 +186,31 @@
 
 -- | Retry the assert immediately.
 --
---     [C declaration]: @SDL_ASSERTION_RETRY@, defined at @SDL3\/SDL_assert.h 316:5@
+--     [C declaration]: @SDL_ASSERTION_RETRY@, defined at @SDL3\/SDL_assert.h 321:5@
 pattern SDL_ASSERTION_RETRY :: SDL_AssertState
 pattern SDL_ASSERTION_RETRY = SDL_AssertState 0
 
 -- | Make the debugger trigger a breakpoint.
 --
---     [C declaration]: @SDL_ASSERTION_BREAK@, defined at @SDL3\/SDL_assert.h 317:5@
+--     [C declaration]: @SDL_ASSERTION_BREAK@, defined at @SDL3\/SDL_assert.h 322:5@
 pattern SDL_ASSERTION_BREAK :: SDL_AssertState
 pattern SDL_ASSERTION_BREAK = SDL_AssertState 1
 
 -- | Terminate the program.
 --
---     [C declaration]: @SDL_ASSERTION_ABORT@, defined at @SDL3\/SDL_assert.h 318:5@
+--     [C declaration]: @SDL_ASSERTION_ABORT@, defined at @SDL3\/SDL_assert.h 323:5@
 pattern SDL_ASSERTION_ABORT :: SDL_AssertState
 pattern SDL_ASSERTION_ABORT = SDL_AssertState 2
 
 -- | Ignore the assert.
 --
---     [C declaration]: @SDL_ASSERTION_IGNORE@, defined at @SDL3\/SDL_assert.h 319:5@
+--     [C declaration]: @SDL_ASSERTION_IGNORE@, defined at @SDL3\/SDL_assert.h 324:5@
 pattern SDL_ASSERTION_IGNORE :: SDL_AssertState
 pattern SDL_ASSERTION_IGNORE = SDL_AssertState 3
 
 -- | Ignore the assert from now on.
 --
---     [C declaration]: @SDL_ASSERTION_ALWAYS_IGNORE@, defined at @SDL3\/SDL_assert.h 320:5@
+--     [C declaration]: @SDL_ASSERTION_ALWAYS_IGNORE@, defined at @SDL3\/SDL_assert.h 325:5@
 pattern SDL_ASSERTION_ALWAYS_IGNORE :: SDL_AssertState
 pattern SDL_ASSERTION_ALWAYS_IGNORE = SDL_AssertState 4
 
@@ -215,36 +220,36 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @struct SDL_AssertData@, defined at @SDL3\/SDL_assert.h 332:16@
+--     [C declaration]: @struct SDL_AssertData@, defined at @SDL3\/SDL_assert.h 337:16@
 data SDL_AssertData = SDL_AssertData
   { always_ignore :: BG.CBool
   -- ^ true if app should always continue when assertion is triggered.
   --
-  --          [C declaration]: @always_ignore@, defined at @SDL3\/SDL_assert.h 334:10@
+  --          [C declaration]: @always_ignore@, defined at @SDL3\/SDL_assert.h 339:10@
   , trigger_count :: BG.CUInt
   -- ^ Number of times this assertion has been triggered.
   --
-  --          [C declaration]: @trigger_count@, defined at @SDL3\/SDL_assert.h 335:18@
+  --          [C declaration]: @trigger_count@, defined at @SDL3\/SDL_assert.h 340:18@
   , condition :: PtrConst.PtrConst BG.CChar
   -- ^ A string of this assert\'s test code.
   --
-  --          [C declaration]: @condition@, defined at @SDL3\/SDL_assert.h 336:17@
+  --          [C declaration]: @condition@, defined at @SDL3\/SDL_assert.h 341:17@
   , filename :: PtrConst.PtrConst BG.CChar
   -- ^ The source file where this assert lives.
   --
-  --          [C declaration]: @filename@, defined at @SDL3\/SDL_assert.h 337:17@
+  --          [C declaration]: @filename@, defined at @SDL3\/SDL_assert.h 342:17@
   , linenum :: BG.CInt
   -- ^ The line in @filename@ where this assert lives.
   --
-  --          [C declaration]: @linenum@, defined at @SDL3\/SDL_assert.h 338:9@
+  --          [C declaration]: @linenum@, defined at @SDL3\/SDL_assert.h 343:9@
   , function :: PtrConst.PtrConst BG.CChar
   -- ^ The name of the function where this assert lives.
   --
-  --          [C declaration]: @function@, defined at @SDL3\/SDL_assert.h 339:17@
+  --          [C declaration]: @function@, defined at @SDL3\/SDL_assert.h 344:17@
   , next :: PtrConst.PtrConst SDL_AssertData
   -- ^ next item in the linked list.
   --
-  --          [C declaration]: @next@, defined at @SDL3\/SDL_assert.h 340:34@
+  --          [C declaration]: @next@, defined at @SDL3\/SDL_assert.h 345:34@
   }
   deriving stock (BG.Generic, Eq, Show)
 
@@ -288,6 +293,11 @@
 
 deriving via Marshal.EquivStorable SDL_AssertData instance BG.Storable SDL_AssertData
 
+deriving via Struct.IsStructViaReadRaw SDL_AssertData instance Struct.IsStruct SDL_AssertData
+
+-- | true if app should always continue when assertion is triggered.
+--
+--     [C declaration]: @always_ignore@, defined at @SDL3\/SDL_assert.h 339:10@
 instance
   (ty ~ BG.CBool)
   => BG.CompatHasField.HasField "always_ignore" SDL_AssertData ty
@@ -321,6 +331,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | Number of times this assertion has been triggered.
+--
+--     [C declaration]: @trigger_count@, defined at @SDL3\/SDL_assert.h 340:18@
 instance
   (ty ~ BG.CUInt)
   => BG.CompatHasField.HasField "trigger_count" SDL_AssertData ty
@@ -354,6 +367,9 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | A string of this assert\'s test code.
+--
+--     [C declaration]: @condition@, defined at @SDL3\/SDL_assert.h 341:17@
 instance
   (ty ~ PtrConst.PtrConst BG.CChar)
   => BG.CompatHasField.HasField "condition" SDL_AssertData ty
@@ -386,6 +402,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | The source file where this assert lives.
+--
+--     [C declaration]: @filename@, defined at @SDL3\/SDL_assert.h 342:17@
 instance
   (ty ~ PtrConst.PtrConst BG.CChar)
   => BG.CompatHasField.HasField "filename" SDL_AssertData ty
@@ -418,6 +437,9 @@
 
   offset# = \_ -> \_ -> 16
 
+-- | The line in @filename@ where this assert lives.
+--
+--     [C declaration]: @linenum@, defined at @SDL3\/SDL_assert.h 343:9@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "linenum" SDL_AssertData ty
@@ -448,6 +470,9 @@
 
   offset# = \_ -> \_ -> 24
 
+-- | The name of the function where this assert lives.
+--
+--     [C declaration]: @function@, defined at @SDL3\/SDL_assert.h 344:17@
 instance
   (ty ~ PtrConst.PtrConst BG.CChar)
   => BG.CompatHasField.HasField "function" SDL_AssertData ty
@@ -480,6 +505,9 @@
 
   offset# = \_ -> \_ -> 32
 
+-- | next item in the linked list.
+--
+--     [C declaration]: @next@, defined at @SDL3\/SDL_assert.h 345:34@
 instance
   (ty ~ PtrConst.PtrConst SDL_AssertData)
   => BG.CompatHasField.HasField "next" SDL_AssertData ty
@@ -514,18 +542,17 @@
 
 -- | Auxiliary type used by 'SDL_AssertionHandler'
 --
---     [C declaration]: @SDL_AssertionHandler@, defined at @SDL3\/SDL_assert.h 573:35@
+--     [C declaration]: @SDL_AssertionHandler@, defined at @SDL3\/SDL_assert.h 578:35@
 newtype SDL_AssertionHandler_Aux = SDL_AssertionHandler_Aux
   { unwrap :: PtrConst.PtrConst SDL_AssertData -> BG.Ptr BG.Void -> IO SDL_AssertState
   }
   deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
 
 -- __unique:__ @toSDL_AssertionHandler_Aux@
 foreign import ccall safe "wrapper"
   hs_bindgen_4cf4facc2fb068b6_base
-    :: (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.Word32)
-    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.Word32))
+    :: (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.CUInt)
+    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.CUInt))
 
 -- __unique:__ @toSDL_AssertionHandler_Aux@
 hs_bindgen_4cf4facc2fb068b6
@@ -533,15 +560,22 @@
   -> IO (BG.FunPtr SDL_AssertionHandler_Aux)
 hs_bindgen_4cf4facc2fb068b6 =
   \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_4cf4facc2fb068b6_base (BG.toFFIType fun0))
+    fmap
+      BG.castFunPtr
+      ( hs_bindgen_4cf4facc2fb068b6_base
+          ( \x1 ->
+              \x2 ->
+                fmap BG.toFFIType (BG.getField @"unwrap" fun0 (BG.fromFFIType x1) (BG.fromFFIType x2))
+          )
+      )
 
 -- __unique:__ @fromSDL_AssertionHandler_Aux@
 foreign import ccall safe "dynamic"
   hs_bindgen_a1f4d13109856a1b_base
-    :: BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.Word32)
+    :: BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.CUInt)
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @fromSDL_AssertionHandler_Aux@
 hs_bindgen_a1f4d13109856a1b
@@ -549,7 +583,13 @@
   -> SDL_AssertionHandler_Aux
 hs_bindgen_a1f4d13109856a1b =
   \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_a1f4d13109856a1b_base (BG.castFunPtrToFFIType funPtr0))
+    SDL_AssertionHandler_Aux
+      ( \x1 ->
+          \x2 ->
+            fmap
+              BG.fromFFIType
+              (hs_bindgen_a1f4d13109856a1b_base (BG.castFunPtr funPtr0) (BG.toFFIType x1) (BG.toFFIType x2))
+      )
 
 instance BG.ToFunPtr SDL_AssertionHandler_Aux where
   toFunPtr = hs_bindgen_4cf4facc2fb068b6
@@ -593,7 +633,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_AssertionHandler@, defined at @SDL3\/SDL_assert.h 573:35@
+--     [C declaration]: @SDL_AssertionHandler@, defined at @SDL3\/SDL_assert.h 578:35@
 newtype SDL_AssertionHandler = SDL_AssertionHandler
   { unwrap :: BG.FunPtr SDL_AssertionHandler_Aux
   }
diff --git a/src/SDL3/Sys/Bindgen/Assert/FunPtr.hs b/src/SDL3/Sys/Bindgen/Assert/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Assert/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Assert/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Assert.FunPtr (
@@ -12,6 +14,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -19,7 +23,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_assert.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_assert.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Assert_get_SDL_ReportAssertion */"
          , "__attribute__ ((const))"
          , "SDL_AssertState (*hs_bindgen_3242a9f392e3cbbb (void)) ("
@@ -87,7 +95,7 @@
            )
        )
 hs_bindgen_3242a9f392e3cbbb =
-  BG.fromFFIType hs_bindgen_3242a9f392e3cbbb_base
+  fmap BG.fromFFIType hs_bindgen_3242a9f392e3cbbb_base
 
 {-# NOINLINE sDL_ReportAssertion #-}
 
@@ -109,7 +117,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_ReportAssertion@, defined at @SDL3\/SDL_assert.h 358:45@
+--     [C declaration]: @SDL_ReportAssertion@, defined at @SDL3\/SDL_assert.h 363:45@
 sDL_ReportAssertion
   :: BG.FunPtr
        ( BG.Ptr SDL_AssertData
@@ -129,7 +137,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Assert_get_SDL_SetAssertionHandler@
 hs_bindgen_d3c978a8cd9d0fb4 :: IO (BG.FunPtr (SDL_AssertionHandler -> BG.Ptr BG.Void -> IO ()))
 hs_bindgen_d3c978a8cd9d0fb4 =
-  BG.fromFFIType hs_bindgen_d3c978a8cd9d0fb4_base
+  fmap BG.fromFFIType hs_bindgen_d3c978a8cd9d0fb4_base
 
 {-# NOINLINE sDL_SetAssertionHandler #-}
 
@@ -151,7 +159,7 @@
 --
 --     [See also]: 'sDL_GetAssertionHandler'
 --
---     [C declaration]: @SDL_SetAssertionHandler@, defined at @SDL3\/SDL_assert.h 599:34@
+--     [C declaration]: @SDL_SetAssertionHandler@, defined at @SDL3\/SDL_assert.h 604:34@
 sDL_SetAssertionHandler :: BG.FunPtr (SDL_AssertionHandler -> BG.Ptr BG.Void -> IO ())
 sDL_SetAssertionHandler =
   BG.unsafePerformIO hs_bindgen_d3c978a8cd9d0fb4
@@ -164,7 +172,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Assert_get_SDL_GetDefaultAssertionHandler@
 hs_bindgen_9ee5171cfc759fff :: IO (BG.FunPtr (IO SDL_AssertionHandler))
 hs_bindgen_9ee5171cfc759fff =
-  BG.fromFFIType hs_bindgen_9ee5171cfc759fff_base
+  fmap BG.fromFFIType hs_bindgen_9ee5171cfc759fff_base
 
 {-# NOINLINE sDL_GetDefaultAssertionHandler #-}
 
@@ -180,7 +188,7 @@
 --
 --     [See also]: 'sDL_GetAssertionHandler'
 --
---     [C declaration]: @SDL_GetDefaultAssertionHandler@, defined at @SDL3\/SDL_assert.h 620:50@
+--     [C declaration]: @SDL_GetDefaultAssertionHandler@, defined at @SDL3\/SDL_assert.h 625:50@
 sDL_GetDefaultAssertionHandler :: BG.FunPtr (IO SDL_AssertionHandler)
 sDL_GetDefaultAssertionHandler =
   BG.unsafePerformIO hs_bindgen_9ee5171cfc759fff
@@ -193,7 +201,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Assert_get_SDL_GetAssertionHandler@
 hs_bindgen_d86a645db34b2ab2 :: IO (BG.FunPtr (BG.Ptr (BG.Ptr BG.Void) -> IO SDL_AssertionHandler))
 hs_bindgen_d86a645db34b2ab2 =
-  BG.fromFFIType hs_bindgen_d86a645db34b2ab2_base
+  fmap BG.fromFFIType hs_bindgen_d86a645db34b2ab2_base
 
 {-# NOINLINE sDL_GetAssertionHandler #-}
 
@@ -213,7 +221,7 @@
 --
 --     [See also]: 'sDL_SetAssertionHandler'
 --
---     [C declaration]: @SDL_GetAssertionHandler@, defined at @SDL3\/SDL_assert.h 645:50@
+--     [C declaration]: @SDL_GetAssertionHandler@, defined at @SDL3\/SDL_assert.h 650:50@
 sDL_GetAssertionHandler :: BG.FunPtr (BG.Ptr (BG.Ptr BG.Void) -> IO SDL_AssertionHandler)
 sDL_GetAssertionHandler =
   BG.unsafePerformIO hs_bindgen_d86a645db34b2ab2
@@ -226,7 +234,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Assert_get_SDL_GetAssertionReport@
 hs_bindgen_81f7661412c040b9 :: IO (BG.FunPtr (IO (PtrConst.PtrConst SDL_AssertData)))
 hs_bindgen_81f7661412c040b9 =
-  BG.fromFFIType hs_bindgen_81f7661412c040b9_base
+  fmap BG.fromFFIType hs_bindgen_81f7661412c040b9_base
 
 {-# NOINLINE sDL_GetAssertionReport #-}
 
@@ -255,7 +263,7 @@
 --
 --     [See also]: 'sDL_ResetAssertionReport'
 --
---     [C declaration]: @SDL_GetAssertionReport@, defined at @SDL3\/SDL_assert.h 679:52@
+--     [C declaration]: @SDL_GetAssertionReport@, defined at @SDL3\/SDL_assert.h 684:52@
 sDL_GetAssertionReport :: BG.FunPtr (IO (PtrConst.PtrConst SDL_AssertData))
 sDL_GetAssertionReport =
   BG.unsafePerformIO hs_bindgen_81f7661412c040b9
@@ -268,7 +276,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Assert_get_SDL_ResetAssertionReport@
 hs_bindgen_d418f82b830fadaf :: IO (BG.FunPtr (IO ()))
 hs_bindgen_d418f82b830fadaf =
-  BG.fromFFIType hs_bindgen_d418f82b830fadaf_base
+  fmap BG.fromFFIType hs_bindgen_d418f82b830fadaf_base
 
 {-# NOINLINE sDL_ResetAssertionReport #-}
 
@@ -282,7 +290,7 @@
 --
 --     [See also]: 'sDL_GetAssertionReport'
 --
---     [C declaration]: @SDL_ResetAssertionReport@, defined at @SDL3\/SDL_assert.h 697:34@
+--     [C declaration]: @SDL_ResetAssertionReport@, defined at @SDL3\/SDL_assert.h 702:34@
 sDL_ResetAssertionReport :: BG.FunPtr (IO ())
 sDL_ResetAssertionReport =
   BG.unsafePerformIO hs_bindgen_d418f82b830fadaf
diff --git a/src/SDL3/Sys/Bindgen/Assert/Safe.hs b/src/SDL3/Sys/Bindgen/Assert/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Assert/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Assert/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Assert.Safe (
@@ -12,6 +14,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -19,7 +23,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_assert.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_assert.h>"
          , "SDL_AssertState hs_bindgen_1ac37dfe626398fd ("
          , "  SDL_AssertData *arg1,"
          , "  char const *arg2,"
@@ -64,8 +72,8 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word32
+    -> BG.CInt
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Assert_Safe_SDL_ReportAssertion@
 hs_bindgen_1ac37dfe626398fd
@@ -75,7 +83,18 @@
   -> BG.CInt
   -> IO SDL_AssertState
 hs_bindgen_1ac37dfe626398fd =
-  BG.fromFFIType hs_bindgen_1ac37dfe626398fd_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_1ac37dfe626398fd_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Never call this directly.
 --
@@ -87,7 +106,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_ReportAssertion@, defined at @SDL3\/SDL_assert.h 358:45@
+--     [C declaration]: @SDL_ReportAssertion@, defined at @SDL3\/SDL_assert.h 363:45@
 sDL_ReportAssertion
   :: BG.Ptr SDL_AssertData
   -- ^
@@ -121,7 +140,9 @@
   -> BG.Ptr BG.Void
   -> IO ()
 hs_bindgen_29fb2e1c47c9de9d =
-  BG.fromFFIType hs_bindgen_29fb2e1c47c9de9d_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_29fb2e1c47c9de9d_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Set an application-defined assertion handler.
 --
@@ -137,7 +158,7 @@
 --
 --     [See also]: 'sDL_GetAssertionHandler'
 --
---     [C declaration]: @SDL_SetAssertionHandler@, defined at @SDL3\/SDL_assert.h 599:34@
+--     [C declaration]: @SDL_SetAssertionHandler@, defined at @SDL3\/SDL_assert.h 604:34@
 sDL_SetAssertionHandler
   :: SDL_AssertionHandler
   -- ^
@@ -158,7 +179,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Assert_Safe_SDL_GetDefaultAssertionHandler@
 hs_bindgen_95e7fb7c037fc4ae :: IO SDL_AssertionHandler
 hs_bindgen_95e7fb7c037fc4ae =
-  BG.fromFFIType hs_bindgen_95e7fb7c037fc4ae_base
+  fmap BG.fromFFIType hs_bindgen_95e7fb7c037fc4ae_base
 
 -- | Get the default assertion handler.
 --
@@ -172,7 +193,7 @@
 --
 --     [See also]: 'sDL_GetAssertionHandler'
 --
---     [C declaration]: @SDL_GetDefaultAssertionHandler@, defined at @SDL3\/SDL_assert.h 620:50@
+--     [C declaration]: @SDL_GetDefaultAssertionHandler@, defined at @SDL3\/SDL_assert.h 625:50@
 sDL_GetDefaultAssertionHandler :: IO SDL_AssertionHandler
 sDL_GetDefaultAssertionHandler =
   hs_bindgen_95e7fb7c037fc4ae
@@ -188,7 +209,8 @@
   :: BG.Ptr (BG.Ptr BG.Void)
   -> IO SDL_AssertionHandler
 hs_bindgen_b7b44249a97e8ea4 =
-  BG.fromFFIType hs_bindgen_b7b44249a97e8ea4_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_b7b44249a97e8ea4_base (BG.toFFIType x0))
 
 -- | Get the current assertion handler.
 --
@@ -204,7 +226,7 @@
 --
 --     [See also]: 'sDL_SetAssertionHandler'
 --
---     [C declaration]: @SDL_GetAssertionHandler@, defined at @SDL3\/SDL_assert.h 645:50@
+--     [C declaration]: @SDL_GetAssertionHandler@, defined at @SDL3\/SDL_assert.h 650:50@
 sDL_GetAssertionHandler
   :: BG.Ptr (BG.Ptr BG.Void)
   -- ^
@@ -221,7 +243,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Assert_Safe_SDL_GetAssertionReport@
 hs_bindgen_3b5bb811b27af0d4 :: IO (PtrConst.PtrConst SDL_AssertData)
 hs_bindgen_3b5bb811b27af0d4 =
-  BG.fromFFIType hs_bindgen_3b5bb811b27af0d4_base
+  fmap BG.fromFFIType hs_bindgen_3b5bb811b27af0d4_base
 
 -- | Get a list of all assertion failures.
 --
@@ -248,7 +270,7 @@
 --
 --     [See also]: 'sDL_ResetAssertionReport'
 --
---     [C declaration]: @SDL_GetAssertionReport@, defined at @SDL3\/SDL_assert.h 679:52@
+--     [C declaration]: @SDL_GetAssertionReport@, defined at @SDL3\/SDL_assert.h 684:52@
 sDL_GetAssertionReport :: IO (PtrConst.PtrConst SDL_AssertData)
 sDL_GetAssertionReport = hs_bindgen_3b5bb811b27af0d4
 
@@ -260,7 +282,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Assert_Safe_SDL_ResetAssertionReport@
 hs_bindgen_b5d43ee02d99641a :: IO ()
 hs_bindgen_b5d43ee02d99641a =
-  BG.fromFFIType hs_bindgen_b5d43ee02d99641a_base
+  hs_bindgen_b5d43ee02d99641a_base
 
 -- | Clear the list of all assertion failures.
 --
@@ -272,7 +294,7 @@
 --
 --     [See also]: 'sDL_GetAssertionReport'
 --
---     [C declaration]: @SDL_ResetAssertionReport@, defined at @SDL3\/SDL_assert.h 697:34@
+--     [C declaration]: @SDL_ResetAssertionReport@, defined at @SDL3\/SDL_assert.h 702:34@
 sDL_ResetAssertionReport :: IO ()
 sDL_ResetAssertionReport =
   hs_bindgen_b5d43ee02d99641a
diff --git a/src/SDL3/Sys/Bindgen/Assert/Unsafe.hs b/src/SDL3/Sys/Bindgen/Assert/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Assert/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Assert/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Assert.Unsafe (
@@ -12,6 +14,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -19,7 +23,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_assert.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_assert.h>"
          , "SDL_AssertState hs_bindgen_a7639e4e554aca71 ("
          , "  SDL_AssertData *arg1,"
          , "  char const *arg2,"
@@ -64,8 +72,8 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word32
+    -> BG.CInt
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Assert_Unsafe_SDL_ReportAssertion@
 hs_bindgen_a7639e4e554aca71
@@ -75,7 +83,18 @@
   -> BG.CInt
   -> IO SDL_AssertState
 hs_bindgen_a7639e4e554aca71 =
-  BG.fromFFIType hs_bindgen_a7639e4e554aca71_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_a7639e4e554aca71_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Never call this directly.
 --
@@ -87,7 +106,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_ReportAssertion@, defined at @SDL3\/SDL_assert.h 358:45@
+--     [C declaration]: @SDL_ReportAssertion@, defined at @SDL3\/SDL_assert.h 363:45@
 sDL_ReportAssertion
   :: BG.Ptr SDL_AssertData
   -- ^
@@ -121,7 +140,9 @@
   -> BG.Ptr BG.Void
   -> IO ()
 hs_bindgen_e1f2894e05101967 =
-  BG.fromFFIType hs_bindgen_e1f2894e05101967_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_e1f2894e05101967_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Set an application-defined assertion handler.
 --
@@ -137,7 +158,7 @@
 --
 --     [See also]: 'sDL_GetAssertionHandler'
 --
---     [C declaration]: @SDL_SetAssertionHandler@, defined at @SDL3\/SDL_assert.h 599:34@
+--     [C declaration]: @SDL_SetAssertionHandler@, defined at @SDL3\/SDL_assert.h 604:34@
 sDL_SetAssertionHandler
   :: SDL_AssertionHandler
   -- ^
@@ -158,7 +179,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Assert_Unsafe_SDL_GetDefaultAssertionHandler@
 hs_bindgen_dff5ecac8d034d8d :: IO SDL_AssertionHandler
 hs_bindgen_dff5ecac8d034d8d =
-  BG.fromFFIType hs_bindgen_dff5ecac8d034d8d_base
+  fmap BG.fromFFIType hs_bindgen_dff5ecac8d034d8d_base
 
 -- | Get the default assertion handler.
 --
@@ -172,7 +193,7 @@
 --
 --     [See also]: 'sDL_GetAssertionHandler'
 --
---     [C declaration]: @SDL_GetDefaultAssertionHandler@, defined at @SDL3\/SDL_assert.h 620:50@
+--     [C declaration]: @SDL_GetDefaultAssertionHandler@, defined at @SDL3\/SDL_assert.h 625:50@
 sDL_GetDefaultAssertionHandler :: IO SDL_AssertionHandler
 sDL_GetDefaultAssertionHandler =
   hs_bindgen_dff5ecac8d034d8d
@@ -188,7 +209,8 @@
   :: BG.Ptr (BG.Ptr BG.Void)
   -> IO SDL_AssertionHandler
 hs_bindgen_0c314ac7cf70966e =
-  BG.fromFFIType hs_bindgen_0c314ac7cf70966e_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_0c314ac7cf70966e_base (BG.toFFIType x0))
 
 -- | Get the current assertion handler.
 --
@@ -204,7 +226,7 @@
 --
 --     [See also]: 'sDL_SetAssertionHandler'
 --
---     [C declaration]: @SDL_GetAssertionHandler@, defined at @SDL3\/SDL_assert.h 645:50@
+--     [C declaration]: @SDL_GetAssertionHandler@, defined at @SDL3\/SDL_assert.h 650:50@
 sDL_GetAssertionHandler
   :: BG.Ptr (BG.Ptr BG.Void)
   -- ^
@@ -221,7 +243,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Assert_Unsafe_SDL_GetAssertionReport@
 hs_bindgen_53829b7497744243 :: IO (PtrConst.PtrConst SDL_AssertData)
 hs_bindgen_53829b7497744243 =
-  BG.fromFFIType hs_bindgen_53829b7497744243_base
+  fmap BG.fromFFIType hs_bindgen_53829b7497744243_base
 
 -- | Get a list of all assertion failures.
 --
@@ -248,7 +270,7 @@
 --
 --     [See also]: 'sDL_ResetAssertionReport'
 --
---     [C declaration]: @SDL_GetAssertionReport@, defined at @SDL3\/SDL_assert.h 679:52@
+--     [C declaration]: @SDL_GetAssertionReport@, defined at @SDL3\/SDL_assert.h 684:52@
 sDL_GetAssertionReport :: IO (PtrConst.PtrConst SDL_AssertData)
 sDL_GetAssertionReport = hs_bindgen_53829b7497744243
 
@@ -260,7 +282,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Assert_Unsafe_SDL_ResetAssertionReport@
 hs_bindgen_bb1d739857931f60 :: IO ()
 hs_bindgen_bb1d739857931f60 =
-  BG.fromFFIType hs_bindgen_bb1d739857931f60_base
+  hs_bindgen_bb1d739857931f60_base
 
 -- | Clear the list of all assertion failures.
 --
@@ -272,7 +294,7 @@
 --
 --     [See also]: 'sDL_GetAssertionReport'
 --
---     [C declaration]: @SDL_ResetAssertionReport@, defined at @SDL3\/SDL_assert.h 697:34@
+--     [C declaration]: @SDL_ResetAssertionReport@, defined at @SDL3\/SDL_assert.h 702:34@
 sDL_ResetAssertionReport :: IO ()
 sDL_ResetAssertionReport =
   hs_bindgen_bb1d739857931f60
diff --git a/src/SDL3/Sys/Bindgen/Asyncio.hs b/src/SDL3/Sys/Bindgen/Asyncio.hs
--- a/src/SDL3/Sys/Bindgen/Asyncio.hs
+++ b/src/SDL3/Sys/Bindgen/Asyncio.hs
@@ -17,6 +17,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | SDL offers a way to perform I\/O asynchronously. This allows an app to read or write files without waiting for data to actually transfer; the functions that request I\/O never block while the request is fulfilled.
 --
@@ -76,9 +77,12 @@
 )
 where
 
+import Prelude (Eq, Int, Ord, Read, Show, pure, (<*>), (>>), type (~))
+
 import HsBindgen.Runtime.CEnum qualified as CEnum
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.Marshal qualified as Marshal
+import HsBindgen.Runtime.Struct qualified as Struct
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField
 import SDL3.Sys.Bindgen.Stdinc qualified
@@ -400,6 +404,14 @@
 
 deriving via Marshal.EquivStorable SDL_AsyncIOOutcome instance BG.Storable SDL_AsyncIOOutcome
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_AsyncIOOutcome
+  instance
+    Struct.IsStruct SDL_AsyncIOOutcome
+
+-- | what generated this task. This pointer will be invalid if it was closed!
+--
+--     [C declaration]: @asyncio@, defined at @SDL3\/SDL_asyncio.h 157:18@
 instance
   (ty ~ BG.Ptr SDL_AsyncIO)
   => BG.CompatHasField.HasField "asyncio" SDL_AsyncIOOutcome ty
@@ -433,6 +445,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | What sort of task was this? Read, write, etc?
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_asyncio.h 158:25@
 instance
   (ty ~ SDL_AsyncIOTaskType)
   => BG.CompatHasField.HasField "type'" SDL_AsyncIOOutcome ty
@@ -466,6 +481,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | the result of the work (success, failure, cancellation).
+--
+--     [C declaration]: @result@, defined at @SDL3\/SDL_asyncio.h 159:23@
 instance
   (ty ~ SDL_AsyncIOResult)
   => BG.CompatHasField.HasField "result" SDL_AsyncIOOutcome ty
@@ -499,6 +517,9 @@
 
   offset# = \_ -> \_ -> 12
 
+-- | buffer where data was read\/written.
+--
+--     [C declaration]: @buffer@, defined at @SDL3\/SDL_asyncio.h 160:11@
 instance
   (ty ~ BG.Ptr BG.Void)
   => BG.CompatHasField.HasField "buffer" SDL_AsyncIOOutcome ty
@@ -532,6 +553,9 @@
 
   offset# = \_ -> \_ -> 16
 
+-- | offset in the 'SDL_AsyncIO' where data was read\/written.
+--
+--     [C declaration]: @offset@, defined at @SDL3\/SDL_asyncio.h 161:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
   => BG.CompatHasField.HasField "offset" SDL_AsyncIOOutcome ty
@@ -565,6 +589,9 @@
 
   offset# = \_ -> \_ -> 24
 
+-- | number of bytes the task was to read\/write.
+--
+--     [C declaration]: @bytes_requested@, defined at @SDL3\/SDL_asyncio.h 162:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
   => BG.CompatHasField.HasField "bytes_requested" SDL_AsyncIOOutcome ty
@@ -599,6 +626,9 @@
 
   offset# = \_ -> \_ -> 32
 
+-- | actual number of bytes that were read\/written.
+--
+--     [C declaration]: @bytes_transferred@, defined at @SDL3\/SDL_asyncio.h 163:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
   => BG.CompatHasField.HasField "bytes_transferred" SDL_AsyncIOOutcome ty
@@ -633,6 +663,9 @@
 
   offset# = \_ -> \_ -> 40
 
+-- | pointer provided by the app when starting the task
+--
+--     [C declaration]: @userdata@, defined at @SDL3\/SDL_asyncio.h 164:11@
 instance
   (ty ~ BG.Ptr BG.Void)
   => BG.CompatHasField.HasField "userdata" SDL_AsyncIOOutcome ty
diff --git a/src/SDL3/Sys/Bindgen/Asyncio/FunPtr.hs b/src/SDL3/Sys/Bindgen/Asyncio/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Asyncio/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Asyncio/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Asyncio.FunPtr (
@@ -17,6 +19,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -25,7 +29,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_asyncio.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_asyncio.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Asyncio_get_SDL_AsyncIOFromFile */"
          , "__attribute__ ((const))"
          , "SDL_AsyncIO *(*hs_bindgen_1df76789789f6d0b (void)) ("
@@ -144,7 +152,7 @@
 hs_bindgen_1df76789789f6d0b
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> PtrConst.PtrConst BG.CChar -> IO (BG.Ptr SDL_AsyncIO)))
 hs_bindgen_1df76789789f6d0b =
-  BG.fromFFIType hs_bindgen_1df76789789f6d0b_base
+  fmap BG.fromFFIType hs_bindgen_1df76789789f6d0b_base
 
 {-# NOINLINE sDL_AsyncIOFromFile #-}
 
@@ -193,7 +201,7 @@
 hs_bindgen_2873a0d4a88e3a7b
   :: IO (BG.FunPtr (BG.Ptr SDL_AsyncIO -> IO SDL3.Sys.Bindgen.Stdinc.Sint64))
 hs_bindgen_2873a0d4a88e3a7b =
-  BG.fromFFIType hs_bindgen_2873a0d4a88e3a7b_base
+  fmap BG.fromFFIType hs_bindgen_2873a0d4a88e3a7b_base
 
 {-# NOINLINE sDL_GetAsyncIOSize #-}
 
@@ -233,7 +241,7 @@
            )
        )
 hs_bindgen_c870b15855ed63f1 =
-  BG.fromFFIType hs_bindgen_c870b15855ed63f1_base
+  fmap BG.fromFFIType hs_bindgen_c870b15855ed63f1_base
 
 {-# NOINLINE sDL_ReadAsyncIO #-}
 
@@ -300,7 +308,7 @@
            )
        )
 hs_bindgen_9a68985237acc0c3 =
-  BG.fromFFIType hs_bindgen_9a68985237acc0c3_base
+  fmap BG.fromFFIType hs_bindgen_9a68985237acc0c3_base
 
 {-# NOINLINE sDL_WriteAsyncIO #-}
 
@@ -360,7 +368,7 @@
            (BG.Ptr SDL_AsyncIO -> BG.CBool -> BG.Ptr SDL_AsyncIOQueue -> BG.Ptr BG.Void -> IO BG.CBool)
        )
 hs_bindgen_e5791205836e93d4 =
-  BG.fromFFIType hs_bindgen_e5791205836e93d4_base
+  fmap BG.fromFFIType hs_bindgen_e5791205836e93d4_base
 
 {-# NOINLINE sDL_CloseAsyncIO #-}
 
@@ -407,7 +415,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Asyncio_get_SDL_CreateAsyncIOQueue@
 hs_bindgen_bad5a1c7bbfc4f36 :: IO (BG.FunPtr (IO (BG.Ptr SDL_AsyncIOQueue)))
 hs_bindgen_bad5a1c7bbfc4f36 =
-  BG.fromFFIType hs_bindgen_bad5a1c7bbfc4f36_base
+  fmap BG.fromFFIType hs_bindgen_bad5a1c7bbfc4f36_base
 
 {-# NOINLINE sDL_CreateAsyncIOQueue #-}
 
@@ -436,7 +444,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Asyncio_get_SDL_DestroyAsyncIOQueue@
 hs_bindgen_f1f3445924531218 :: IO (BG.FunPtr (BG.Ptr SDL_AsyncIOQueue -> IO ()))
 hs_bindgen_f1f3445924531218 =
-  BG.fromFFIType hs_bindgen_f1f3445924531218_base
+  fmap BG.fromFFIType hs_bindgen_f1f3445924531218_base
 
 {-# NOINLINE sDL_DestroyAsyncIOQueue #-}
 
@@ -470,7 +478,7 @@
 hs_bindgen_a377aedfcfda7243
   :: IO (BG.FunPtr (BG.Ptr SDL_AsyncIOQueue -> BG.Ptr SDL_AsyncIOOutcome -> IO BG.CBool))
 hs_bindgen_a377aedfcfda7243 =
-  BG.fromFFIType hs_bindgen_a377aedfcfda7243_base
+  fmap BG.fromFFIType hs_bindgen_a377aedfcfda7243_base
 
 {-# NOINLINE sDL_GetAsyncIOResult #-}
 
@@ -516,7 +524,7 @@
            )
        )
 hs_bindgen_1b55fd087de307a9 =
-  BG.fromFFIType hs_bindgen_1b55fd087de307a9_base
+  fmap BG.fromFFIType hs_bindgen_1b55fd087de307a9_base
 
 {-# NOINLINE sDL_WaitAsyncIOResult #-}
 
@@ -569,7 +577,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Asyncio_get_SDL_SignalAsyncIOQueue@
 hs_bindgen_094baddfb7dfcf9e :: IO (BG.FunPtr (BG.Ptr SDL_AsyncIOQueue -> IO ()))
 hs_bindgen_094baddfb7dfcf9e =
-  BG.fromFFIType hs_bindgen_094baddfb7dfcf9e_base
+  fmap BG.fromFFIType hs_bindgen_094baddfb7dfcf9e_base
 
 {-# NOINLINE sDL_SignalAsyncIOQueue #-}
 
@@ -602,7 +610,7 @@
   :: IO
        (BG.FunPtr (PtrConst.PtrConst BG.CChar -> BG.Ptr SDL_AsyncIOQueue -> BG.Ptr BG.Void -> IO BG.CBool))
 hs_bindgen_f844da257a66f6c5 =
-  BG.fromFFIType hs_bindgen_f844da257a66f6c5_base
+  fmap BG.fromFFIType hs_bindgen_f844da257a66f6c5_base
 
 {-# NOINLINE sDL_LoadFileAsync #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Asyncio/Safe.hs b/src/SDL3/Sys/Bindgen/Asyncio/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Asyncio/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Asyncio/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Asyncio.Safe (
@@ -17,6 +19,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -25,7 +30,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_asyncio.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_asyncio.h>"
          , "SDL_AsyncIO *hs_bindgen_31ab6fd411d04f78 ("
          , "  char const *arg1,"
          , "  char const *arg2"
@@ -126,7 +135,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO (BG.Ptr SDL_AsyncIO)
 hs_bindgen_31ab6fd411d04f78 =
-  BG.fromFFIType hs_bindgen_31ab6fd411d04f78_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_31ab6fd411d04f78_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to create a new 'SDL_AsyncIO' object for reading from and\/or writing to a named file.
 --
@@ -171,14 +182,15 @@
 foreign import ccall safe "hs_bindgen_53193075bdfec7d8"
   hs_bindgen_53193075bdfec7d8_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int64
+    -> IO HsBindgen.Runtime.LibC.Int64
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Asyncio_Safe_SDL_GetAsyncIOSize@
 hs_bindgen_53193075bdfec7d8
   :: BG.Ptr SDL_AsyncIO
   -> IO SDL3.Sys.Bindgen.Stdinc.Sint64
 hs_bindgen_53193075bdfec7d8 =
-  BG.fromFFIType hs_bindgen_53193075bdfec7d8_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_53193075bdfec7d8_base (BG.toFFIType x0))
 
 -- | Use this function to get the size of the data stream in an 'SDL_AsyncIO'.
 --
@@ -204,11 +216,11 @@
   hs_bindgen_c7966557f41dcbfc_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> BG.Word64
+    -> HsBindgen.Runtime.LibC.Word64
+    -> HsBindgen.Runtime.LibC.Word64
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Asyncio_Safe_SDL_ReadAsyncIO@
 hs_bindgen_c7966557f41dcbfc
@@ -220,7 +232,22 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_c7966557f41dcbfc =
-  BG.fromFFIType hs_bindgen_c7966557f41dcbfc_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_c7966557f41dcbfc_base
+                    (BG.toFFIType x0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                    (BG.toFFIType x4)
+                    (BG.toFFIType x5)
+                )
 
 -- | Start an async read.
 --
@@ -274,11 +301,11 @@
   hs_bindgen_3970c0028c407ec9_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> BG.Word64
+    -> HsBindgen.Runtime.LibC.Word64
+    -> HsBindgen.Runtime.LibC.Word64
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Asyncio_Safe_SDL_WriteAsyncIO@
 hs_bindgen_3970c0028c407ec9
@@ -290,7 +317,22 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_3970c0028c407ec9 =
-  BG.fromFFIType hs_bindgen_3970c0028c407ec9_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_3970c0028c407ec9_base
+                    (BG.toFFIType x0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                    (BG.toFFIType x4)
+                    (BG.toFFIType x5)
+                )
 
 -- | Start an async write.
 --
@@ -343,10 +385,10 @@
 foreign import ccall safe "hs_bindgen_c29ad527f342080d"
   hs_bindgen_c29ad527f342080d_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
+    -> BG.CBool
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Asyncio_Safe_SDL_CloseAsyncIO@
 hs_bindgen_c29ad527f342080d
@@ -356,7 +398,18 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_c29ad527f342080d =
-  BG.fromFFIType hs_bindgen_c29ad527f342080d_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_c29ad527f342080d_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Close and free any allocated resources for an async I\/O object.
 --
@@ -407,7 +460,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Asyncio_Safe_SDL_CreateAsyncIOQueue@
 hs_bindgen_175ded8a64120502 :: IO (BG.Ptr SDL_AsyncIOQueue)
 hs_bindgen_175ded8a64120502 =
-  BG.fromFFIType hs_bindgen_175ded8a64120502_base
+  fmap BG.fromFFIType hs_bindgen_175ded8a64120502_base
 
 -- | Create a task queue for tracking multiple I\/O operations.
 --
@@ -436,7 +489,8 @@
   :: BG.Ptr SDL_AsyncIOQueue
   -> IO ()
 hs_bindgen_4ff67e45af8870e5 =
-  BG.fromFFIType hs_bindgen_4ff67e45af8870e5_base
+  \x0 ->
+    hs_bindgen_4ff67e45af8870e5_base (BG.toFFIType x0)
 
 -- | Destroy a previously-created async I\/O task queue.
 --
@@ -466,7 +520,7 @@
   hs_bindgen_0fb3edb3afb2ac7e_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Asyncio_Safe_SDL_GetAsyncIOResult@
 hs_bindgen_0fb3edb3afb2ac7e
@@ -474,7 +528,9 @@
   -> BG.Ptr SDL_AsyncIOOutcome
   -> IO BG.CBool
 hs_bindgen_0fb3edb3afb2ac7e =
-  BG.fromFFIType hs_bindgen_0fb3edb3afb2ac7e_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_0fb3edb3afb2ac7e_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Query an async I\/O task queue for completed tasks.
 --
@@ -510,8 +566,8 @@
   hs_bindgen_449b1d195d52a054_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Int32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Asyncio_Safe_SDL_WaitAsyncIOResult@
 hs_bindgen_449b1d195d52a054
@@ -520,7 +576,12 @@
   -> SDL3.Sys.Bindgen.Stdinc.Sint32
   -> IO BG.CBool
 hs_bindgen_449b1d195d52a054 =
-  BG.fromFFIType hs_bindgen_449b1d195d52a054_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_449b1d195d52a054_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Block until an async I\/O task queue has a completed task.
 --
@@ -574,7 +635,8 @@
   :: BG.Ptr SDL_AsyncIOQueue
   -> IO ()
 hs_bindgen_ee15a5dcf2cc9ab4 =
-  BG.fromFFIType hs_bindgen_ee15a5dcf2cc9ab4_base
+  \x0 ->
+    hs_bindgen_ee15a5dcf2cc9ab4_base (BG.toFFIType x0)
 
 -- | Wake up any threads that are blocking in @SDL_WaitAsyncIOResult()@.
 --
@@ -603,7 +665,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Asyncio_Safe_SDL_LoadFileAsync@
 hs_bindgen_7556f48fabd8988b
@@ -612,7 +674,12 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_7556f48fabd8988b =
-  BG.fromFFIType hs_bindgen_7556f48fabd8988b_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_7556f48fabd8988b_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Load all the data from a file path, asynchronously.
 --
diff --git a/src/SDL3/Sys/Bindgen/Asyncio/Unsafe.hs b/src/SDL3/Sys/Bindgen/Asyncio/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Asyncio/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Asyncio/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Asyncio.Unsafe (
@@ -17,6 +19,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -25,7 +30,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_asyncio.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_asyncio.h>"
          , "SDL_AsyncIO *hs_bindgen_b82f292b6e7c7687 ("
          , "  char const *arg1,"
          , "  char const *arg2"
@@ -126,7 +135,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO (BG.Ptr SDL_AsyncIO)
 hs_bindgen_b82f292b6e7c7687 =
-  BG.fromFFIType hs_bindgen_b82f292b6e7c7687_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_b82f292b6e7c7687_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to create a new 'SDL_AsyncIO' object for reading from and\/or writing to a named file.
 --
@@ -171,14 +182,15 @@
 foreign import ccall unsafe "hs_bindgen_11b3160b0d9e0815"
   hs_bindgen_11b3160b0d9e0815_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int64
+    -> IO HsBindgen.Runtime.LibC.Int64
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Asyncio_Unsafe_SDL_GetAsyncIOSize@
 hs_bindgen_11b3160b0d9e0815
   :: BG.Ptr SDL_AsyncIO
   -> IO SDL3.Sys.Bindgen.Stdinc.Sint64
 hs_bindgen_11b3160b0d9e0815 =
-  BG.fromFFIType hs_bindgen_11b3160b0d9e0815_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_11b3160b0d9e0815_base (BG.toFFIType x0))
 
 -- | Use this function to get the size of the data stream in an 'SDL_AsyncIO'.
 --
@@ -204,11 +216,11 @@
   hs_bindgen_a7608bfc5c5b7642_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> BG.Word64
+    -> HsBindgen.Runtime.LibC.Word64
+    -> HsBindgen.Runtime.LibC.Word64
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Asyncio_Unsafe_SDL_ReadAsyncIO@
 hs_bindgen_a7608bfc5c5b7642
@@ -220,7 +232,22 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_a7608bfc5c5b7642 =
-  BG.fromFFIType hs_bindgen_a7608bfc5c5b7642_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_a7608bfc5c5b7642_base
+                    (BG.toFFIType x0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                    (BG.toFFIType x4)
+                    (BG.toFFIType x5)
+                )
 
 -- | Start an async read.
 --
@@ -274,11 +301,11 @@
   hs_bindgen_bb28a3e2adf0fdc9_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> BG.Word64
+    -> HsBindgen.Runtime.LibC.Word64
+    -> HsBindgen.Runtime.LibC.Word64
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Asyncio_Unsafe_SDL_WriteAsyncIO@
 hs_bindgen_bb28a3e2adf0fdc9
@@ -290,7 +317,22 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_bb28a3e2adf0fdc9 =
-  BG.fromFFIType hs_bindgen_bb28a3e2adf0fdc9_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_bb28a3e2adf0fdc9_base
+                    (BG.toFFIType x0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                    (BG.toFFIType x4)
+                    (BG.toFFIType x5)
+                )
 
 -- | Start an async write.
 --
@@ -343,10 +385,10 @@
 foreign import ccall unsafe "hs_bindgen_59b28e6203185e0c"
   hs_bindgen_59b28e6203185e0c_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
+    -> BG.CBool
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Asyncio_Unsafe_SDL_CloseAsyncIO@
 hs_bindgen_59b28e6203185e0c
@@ -356,7 +398,18 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_59b28e6203185e0c =
-  BG.fromFFIType hs_bindgen_59b28e6203185e0c_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_59b28e6203185e0c_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Close and free any allocated resources for an async I\/O object.
 --
@@ -407,7 +460,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Asyncio_Unsafe_SDL_CreateAsyncIOQueue@
 hs_bindgen_0b66ff14f8c0ce55 :: IO (BG.Ptr SDL_AsyncIOQueue)
 hs_bindgen_0b66ff14f8c0ce55 =
-  BG.fromFFIType hs_bindgen_0b66ff14f8c0ce55_base
+  fmap BG.fromFFIType hs_bindgen_0b66ff14f8c0ce55_base
 
 -- | Create a task queue for tracking multiple I\/O operations.
 --
@@ -436,7 +489,8 @@
   :: BG.Ptr SDL_AsyncIOQueue
   -> IO ()
 hs_bindgen_2ac8fde123b3e134 =
-  BG.fromFFIType hs_bindgen_2ac8fde123b3e134_base
+  \x0 ->
+    hs_bindgen_2ac8fde123b3e134_base (BG.toFFIType x0)
 
 -- | Destroy a previously-created async I\/O task queue.
 --
@@ -466,7 +520,7 @@
   hs_bindgen_a47b3011385bfa90_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Asyncio_Unsafe_SDL_GetAsyncIOResult@
 hs_bindgen_a47b3011385bfa90
@@ -474,7 +528,9 @@
   -> BG.Ptr SDL_AsyncIOOutcome
   -> IO BG.CBool
 hs_bindgen_a47b3011385bfa90 =
-  BG.fromFFIType hs_bindgen_a47b3011385bfa90_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_a47b3011385bfa90_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Query an async I\/O task queue for completed tasks.
 --
@@ -510,8 +566,8 @@
   hs_bindgen_c57196121c6d7557_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Int32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Asyncio_Unsafe_SDL_WaitAsyncIOResult@
 hs_bindgen_c57196121c6d7557
@@ -520,7 +576,12 @@
   -> SDL3.Sys.Bindgen.Stdinc.Sint32
   -> IO BG.CBool
 hs_bindgen_c57196121c6d7557 =
-  BG.fromFFIType hs_bindgen_c57196121c6d7557_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_c57196121c6d7557_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Block until an async I\/O task queue has a completed task.
 --
@@ -574,7 +635,8 @@
   :: BG.Ptr SDL_AsyncIOQueue
   -> IO ()
 hs_bindgen_f68ee0d177862e72 =
-  BG.fromFFIType hs_bindgen_f68ee0d177862e72_base
+  \x0 ->
+    hs_bindgen_f68ee0d177862e72_base (BG.toFFIType x0)
 
 -- | Wake up any threads that are blocking in @SDL_WaitAsyncIOResult()@.
 --
@@ -603,7 +665,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Asyncio_Unsafe_SDL_LoadFileAsync@
 hs_bindgen_c0a4fd9b015deb20
@@ -612,7 +674,12 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_c0a4fd9b015deb20 =
-  BG.fromFFIType hs_bindgen_c0a4fd9b015deb20_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_c0a4fd9b015deb20_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Load all the data from a file path, asynchronously.
 --
diff --git a/src/SDL3/Sys/Bindgen/Atomic.hs b/src/SDL3/Sys/Bindgen/Atomic.hs
--- a/src/SDL3/Sys/Bindgen/Atomic.hs
+++ b/src/SDL3/Sys/Bindgen/Atomic.hs
@@ -15,6 +15,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | Atomic operations.
 --
@@ -48,8 +49,11 @@
 )
 where
 
+import Prelude (Bounded, Enum, Eq, Int, Integral, Num, Ord, Read, Real, Show, pure, (<*>), type (~))
+
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.Marshal qualified as Marshal
+import HsBindgen.Runtime.Struct qualified as Struct
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField
 import SDL3.Sys.Bindgen.Stdinc qualified
@@ -139,6 +143,9 @@
 
 deriving via Marshal.EquivStorable SDL_AtomicInt instance BG.Storable SDL_AtomicInt
 
+deriving via Struct.IsStructViaReadRaw SDL_AtomicInt instance Struct.IsStruct SDL_AtomicInt
+
+-- | [C declaration]: @value@, defined at @SDL3\/SDL_atomic.h 405:36@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "value" SDL_AtomicInt ty
@@ -201,6 +208,9 @@
 
 deriving via Marshal.EquivStorable SDL_AtomicU32 instance BG.Storable SDL_AtomicU32
 
+deriving via Struct.IsStructViaReadRaw SDL_AtomicU32 instance Struct.IsStruct SDL_AtomicU32
+
+-- | [C declaration]: @value@, defined at @SDL3\/SDL_atomic.h 550:39@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "value" SDL_AtomicU32 ty
diff --git a/src/SDL3/Sys/Bindgen/Atomic/FunPtr.hs b/src/SDL3/Sys/Bindgen/Atomic/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Atomic/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Atomic/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Atomic.FunPtr (
@@ -22,6 +24,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Atomic
@@ -29,7 +33,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_atomic.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_atomic.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Atomic_get_SDL_TryLockSpinlock */"
          , "__attribute__ ((const))"
          , "_Bool (*hs_bindgen_3653769bf64cd142 (void)) ("
@@ -183,7 +191,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Atomic_get_SDL_TryLockSpinlock@
 hs_bindgen_3653769bf64cd142 :: IO (BG.FunPtr (BG.Ptr SDL_SpinLock -> IO BG.CBool))
 hs_bindgen_3653769bf64cd142 =
-  BG.fromFFIType hs_bindgen_3653769bf64cd142_base
+  fmap BG.fromFFIType hs_bindgen_3653769bf64cd142_base
 
 {-# NOINLINE sDL_TryLockSpinlock #-}
 
@@ -214,7 +222,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Atomic_get_SDL_LockSpinlock@
 hs_bindgen_192f3ef53748431b :: IO (BG.FunPtr (BG.Ptr SDL_SpinLock -> IO ()))
 hs_bindgen_192f3ef53748431b =
-  BG.fromFFIType hs_bindgen_192f3ef53748431b_base
+  fmap BG.fromFFIType hs_bindgen_192f3ef53748431b_base
 
 {-# NOINLINE sDL_LockSpinlock #-}
 
@@ -243,7 +251,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Atomic_get_SDL_UnlockSpinlock@
 hs_bindgen_da14195ad2b603e0 :: IO (BG.FunPtr (BG.Ptr SDL_SpinLock -> IO ()))
 hs_bindgen_da14195ad2b603e0 =
-  BG.fromFFIType hs_bindgen_da14195ad2b603e0_base
+  fmap BG.fromFFIType hs_bindgen_da14195ad2b603e0_base
 
 {-# NOINLINE sDL_UnlockSpinlock #-}
 
@@ -274,7 +282,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Atomic_get_SDL_MemoryBarrierReleaseFunction@
 hs_bindgen_4979d73c1ba41e39 :: IO (BG.FunPtr (IO ()))
 hs_bindgen_4979d73c1ba41e39 =
-  BG.fromFFIType hs_bindgen_4979d73c1ba41e39_base
+  fmap BG.fromFFIType hs_bindgen_4979d73c1ba41e39_base
 
 {-# NOINLINE sDL_MemoryBarrierReleaseFunction #-}
 
@@ -301,7 +309,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Atomic_get_SDL_MemoryBarrierAcquireFunction@
 hs_bindgen_e6cbd7564a024d99 :: IO (BG.FunPtr (IO ()))
 hs_bindgen_e6cbd7564a024d99 =
-  BG.fromFFIType hs_bindgen_e6cbd7564a024d99_base
+  fmap BG.fromFFIType hs_bindgen_e6cbd7564a024d99_base
 
 {-# NOINLINE sDL_MemoryBarrierAcquireFunction #-}
 
@@ -329,7 +337,7 @@
 hs_bindgen_c535bda19feaf153
   :: IO (BG.FunPtr (BG.Ptr SDL_AtomicInt -> BG.CInt -> BG.CInt -> IO BG.CBool))
 hs_bindgen_c535bda19feaf153 =
-  BG.fromFFIType hs_bindgen_c535bda19feaf153_base
+  fmap BG.fromFFIType hs_bindgen_c535bda19feaf153_base
 
 {-# NOINLINE sDL_CompareAndSwapAtomicInt #-}
 
@@ -364,7 +372,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Atomic_get_SDL_SetAtomicInt@
 hs_bindgen_281a397e642c4489 :: IO (BG.FunPtr (BG.Ptr SDL_AtomicInt -> BG.CInt -> IO BG.CInt))
 hs_bindgen_281a397e642c4489 =
-  BG.fromFFIType hs_bindgen_281a397e642c4489_base
+  fmap BG.fromFFIType hs_bindgen_281a397e642c4489_base
 
 {-# NOINLINE sDL_SetAtomicInt #-}
 
@@ -399,7 +407,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Atomic_get_SDL_GetAtomicInt@
 hs_bindgen_db9688135888e49b :: IO (BG.FunPtr (BG.Ptr SDL_AtomicInt -> IO BG.CInt))
 hs_bindgen_db9688135888e49b =
-  BG.fromFFIType hs_bindgen_db9688135888e49b_base
+  fmap BG.fromFFIType hs_bindgen_db9688135888e49b_base
 
 {-# NOINLINE sDL_GetAtomicInt #-}
 
@@ -430,7 +438,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Atomic_get_SDL_AddAtomicInt@
 hs_bindgen_3e37f598766ca408 :: IO (BG.FunPtr (BG.Ptr SDL_AtomicInt -> BG.CInt -> IO BG.CInt))
 hs_bindgen_3e37f598766ca408 =
-  BG.fromFFIType hs_bindgen_3e37f598766ca408_base
+  fmap BG.fromFFIType hs_bindgen_3e37f598766ca408_base
 
 {-# NOINLINE sDL_AddAtomicInt #-}
 
@@ -473,7 +481,7 @@
            )
        )
 hs_bindgen_b4be57e876b926c0 =
-  BG.fromFFIType hs_bindgen_b4be57e876b926c0_base
+  fmap BG.fromFFIType hs_bindgen_b4be57e876b926c0_base
 
 {-# NOINLINE sDL_CompareAndSwapAtomicU32 #-}
 
@@ -518,7 +526,7 @@
            (BG.Ptr SDL_AtomicU32 -> SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO SDL3.Sys.Bindgen.Stdinc.Uint32)
        )
 hs_bindgen_34e65bfeeaed8bb5 =
-  BG.fromFFIType hs_bindgen_34e65bfeeaed8bb5_base
+  fmap BG.fromFFIType hs_bindgen_34e65bfeeaed8bb5_base
 
 {-# NOINLINE sDL_SetAtomicU32 #-}
 
@@ -556,7 +564,7 @@
 hs_bindgen_89429d58246e8835
   :: IO (BG.FunPtr (BG.Ptr SDL_AtomicU32 -> IO SDL3.Sys.Bindgen.Stdinc.Uint32))
 hs_bindgen_89429d58246e8835 =
-  BG.fromFFIType hs_bindgen_89429d58246e8835_base
+  fmap BG.fromFFIType hs_bindgen_89429d58246e8835_base
 
 {-# NOINLINE sDL_GetAtomicU32 #-}
 
@@ -588,7 +596,7 @@
 hs_bindgen_74ebd3ff8c83f38e
   :: IO (BG.FunPtr (BG.Ptr SDL_AtomicU32 -> BG.CInt -> IO SDL3.Sys.Bindgen.Stdinc.Uint32))
 hs_bindgen_74ebd3ff8c83f38e =
-  BG.fromFFIType hs_bindgen_74ebd3ff8c83f38e_base
+  fmap BG.fromFFIType hs_bindgen_74ebd3ff8c83f38e_base
 
 {-# NOINLINE sDL_AddAtomicU32 #-}
 
@@ -622,7 +630,7 @@
 hs_bindgen_6871c50a63bfd9f4
   :: IO (BG.FunPtr (BG.Ptr (BG.Ptr BG.Void) -> BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.CBool))
 hs_bindgen_6871c50a63bfd9f4 =
-  BG.fromFFIType hs_bindgen_6871c50a63bfd9f4_base
+  fmap BG.fromFFIType hs_bindgen_6871c50a63bfd9f4_base
 
 {-# NOINLINE sDL_CompareAndSwapAtomicPointer #-}
 
@@ -659,7 +667,7 @@
 hs_bindgen_f4bd3696da14dba9
   :: IO (BG.FunPtr (BG.Ptr (BG.Ptr BG.Void) -> BG.Ptr BG.Void -> IO (BG.Ptr BG.Void)))
 hs_bindgen_f4bd3696da14dba9 =
-  BG.fromFFIType hs_bindgen_f4bd3696da14dba9_base
+  fmap BG.fromFFIType hs_bindgen_f4bd3696da14dba9_base
 
 {-# NOINLINE sDL_SetAtomicPointer #-}
 
@@ -692,7 +700,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Atomic_get_SDL_GetAtomicPointer@
 hs_bindgen_dc36e65ef974254e :: IO (BG.FunPtr (BG.Ptr (BG.Ptr BG.Void) -> IO (BG.Ptr BG.Void)))
 hs_bindgen_dc36e65ef974254e =
-  BG.fromFFIType hs_bindgen_dc36e65ef974254e_base
+  fmap BG.fromFFIType hs_bindgen_dc36e65ef974254e_base
 
 {-# NOINLINE sDL_GetAtomicPointer #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Atomic/Safe.hs b/src/SDL3/Sys/Bindgen/Atomic/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Atomic/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Atomic/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Atomic.Safe (
@@ -22,6 +24,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Atomic
@@ -29,7 +34,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_atomic.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_atomic.h>"
          , "_Bool hs_bindgen_172686d1676cd710 ("
          , "  SDL_SpinLock *arg1"
          , ")"
@@ -147,14 +156,15 @@
 foreign import ccall safe "hs_bindgen_172686d1676cd710"
   hs_bindgen_172686d1676cd710_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Atomic_Safe_SDL_TryLockSpinlock@
 hs_bindgen_172686d1676cd710
   :: BG.Ptr SDL_SpinLock
   -> IO BG.CBool
 hs_bindgen_172686d1676cd710 =
-  BG.fromFFIType hs_bindgen_172686d1676cd710_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_172686d1676cd710_base (BG.toFFIType x0))
 
 -- | Try to lock a spin lock by setting it to a non-zero value.
 --
@@ -188,7 +198,8 @@
   :: BG.Ptr SDL_SpinLock
   -> IO ()
 hs_bindgen_24dd21497804fb35 =
-  BG.fromFFIType hs_bindgen_24dd21497804fb35_base
+  \x0 ->
+    hs_bindgen_24dd21497804fb35_base (BG.toFFIType x0)
 
 -- | Lock a spin lock by setting it to a non-zero value.
 --
@@ -220,7 +231,8 @@
   :: BG.Ptr SDL_SpinLock
   -> IO ()
 hs_bindgen_db995a2e290168e8 =
-  BG.fromFFIType hs_bindgen_db995a2e290168e8_base
+  \x0 ->
+    hs_bindgen_db995a2e290168e8_base (BG.toFFIType x0)
 
 -- | Unlock a spin lock by setting it to 0.
 --
@@ -251,7 +263,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Atomic_Safe_SDL_MemoryBarrierReleaseFunction@
 hs_bindgen_242899706a6f2e17 :: IO ()
 hs_bindgen_242899706a6f2e17 =
-  BG.fromFFIType hs_bindgen_242899706a6f2e17_base
+  hs_bindgen_242899706a6f2e17_base
 
 -- | Insert a memory release barrier (function version).
 --
@@ -276,7 +288,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Atomic_Safe_SDL_MemoryBarrierAcquireFunction@
 hs_bindgen_4e0cd51f93ed2a72 :: IO ()
 hs_bindgen_4e0cd51f93ed2a72 =
-  BG.fromFFIType hs_bindgen_4e0cd51f93ed2a72_base
+  hs_bindgen_4e0cd51f93ed2a72_base
 
 -- | Insert a memory acquire barrier (function version).
 --
@@ -297,9 +309,9 @@
 foreign import ccall safe "hs_bindgen_e3e24329b42ecc89"
   hs_bindgen_e3e24329b42ecc89_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Atomic_Safe_SDL_CompareAndSwapAtomicInt@
 hs_bindgen_e3e24329b42ecc89
@@ -308,7 +320,12 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_e3e24329b42ecc89 =
-  BG.fromFFIType hs_bindgen_e3e24329b42ecc89_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_e3e24329b42ecc89_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set an atomic variable to a new value if it is currently an old value.
 --
@@ -344,8 +361,8 @@
 foreign import ccall safe "hs_bindgen_0b591b00447451f3"
   hs_bindgen_0b591b00447451f3_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Int32
+    -> BG.CInt
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Atomic_Safe_SDL_SetAtomicInt@
 hs_bindgen_0b591b00447451f3
@@ -353,7 +370,9 @@
   -> BG.CInt
   -> IO BG.CInt
 hs_bindgen_0b591b00447451f3 =
-  BG.fromFFIType hs_bindgen_0b591b00447451f3_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_0b591b00447451f3_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set an atomic variable to a value.
 --
@@ -386,14 +405,15 @@
 foreign import ccall safe "hs_bindgen_a79c0e141e6af2a9"
   hs_bindgen_a79c0e141e6af2a9_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Atomic_Safe_SDL_GetAtomicInt@
 hs_bindgen_a79c0e141e6af2a9
   :: BG.Ptr SDL_AtomicInt
   -> IO BG.CInt
 hs_bindgen_a79c0e141e6af2a9 =
-  BG.fromFFIType hs_bindgen_a79c0e141e6af2a9_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a79c0e141e6af2a9_base (BG.toFFIType x0))
 
 -- | Get the value of an atomic variable.
 --
@@ -420,8 +440,8 @@
 foreign import ccall safe "hs_bindgen_8436b21863a9d6bb"
   hs_bindgen_8436b21863a9d6bb_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Int32
+    -> BG.CInt
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Atomic_Safe_SDL_AddAtomicInt@
 hs_bindgen_8436b21863a9d6bb
@@ -429,7 +449,9 @@
   -> BG.CInt
   -> IO BG.CInt
 hs_bindgen_8436b21863a9d6bb =
-  BG.fromFFIType hs_bindgen_8436b21863a9d6bb_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_8436b21863a9d6bb_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Add to an atomic variable.
 --
@@ -462,9 +484,9 @@
 foreign import ccall safe "hs_bindgen_935e1a8a131d0775"
   hs_bindgen_935e1a8a131d0775_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Word32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Atomic_Safe_SDL_CompareAndSwapAtomicU32@
 hs_bindgen_935e1a8a131d0775
@@ -473,7 +495,12 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_935e1a8a131d0775 =
-  BG.fromFFIType hs_bindgen_935e1a8a131d0775_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_935e1a8a131d0775_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set an atomic variable to a new value if it is currently an old value.
 --
@@ -509,8 +536,8 @@
 foreign import ccall safe "hs_bindgen_14474ef0e01d438d"
   hs_bindgen_14474ef0e01d438d_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Atomic_Safe_SDL_SetAtomicU32@
 hs_bindgen_14474ef0e01d438d
@@ -518,7 +545,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
 hs_bindgen_14474ef0e01d438d =
-  BG.fromFFIType hs_bindgen_14474ef0e01d438d_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_14474ef0e01d438d_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set an atomic variable to a value.
 --
@@ -551,14 +580,15 @@
 foreign import ccall safe "hs_bindgen_141a90ab67d079cd"
   hs_bindgen_141a90ab67d079cd_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Atomic_Safe_SDL_GetAtomicU32@
 hs_bindgen_141a90ab67d079cd
   :: BG.Ptr SDL_AtomicU32
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
 hs_bindgen_141a90ab67d079cd =
-  BG.fromFFIType hs_bindgen_141a90ab67d079cd_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_141a90ab67d079cd_base (BG.toFFIType x0))
 
 -- | Get the value of an atomic variable.
 --
@@ -585,8 +615,8 @@
 foreign import ccall safe "hs_bindgen_a1640976428ead6d"
   hs_bindgen_a1640976428ead6d_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word32
+    -> BG.CInt
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Atomic_Safe_SDL_AddAtomicU32@
 hs_bindgen_a1640976428ead6d
@@ -594,7 +624,9 @@
   -> BG.CInt
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
 hs_bindgen_a1640976428ead6d =
-  BG.fromFFIType hs_bindgen_a1640976428ead6d_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_a1640976428ead6d_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Add to an atomic variable.
 --
@@ -627,7 +659,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Atomic_Safe_SDL_CompareAndSwapAtomicPointer@
 hs_bindgen_7fbbd1e4574eb707
@@ -636,7 +668,12 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_7fbbd1e4574eb707 =
-  BG.fromFFIType hs_bindgen_7fbbd1e4574eb707_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_7fbbd1e4574eb707_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set a pointer to a new value if it is currently an old value.
 --
@@ -681,7 +718,9 @@
   -> BG.Ptr BG.Void
   -> IO (BG.Ptr BG.Void)
 hs_bindgen_169f34ca098fd557 =
-  BG.fromFFIType hs_bindgen_169f34ca098fd557_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_169f34ca098fd557_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set a pointer to a value atomically.
 --
@@ -719,7 +758,8 @@
   :: BG.Ptr (BG.Ptr BG.Void)
   -> IO (BG.Ptr BG.Void)
 hs_bindgen_330ea044308fd995 =
-  BG.fromFFIType hs_bindgen_330ea044308fd995_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_330ea044308fd995_base (BG.toFFIType x0))
 
 -- | Get the value of a pointer atomically.
 --
diff --git a/src/SDL3/Sys/Bindgen/Atomic/Unsafe.hs b/src/SDL3/Sys/Bindgen/Atomic/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Atomic/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Atomic/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Atomic.Unsafe (
@@ -22,6 +24,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Atomic
@@ -29,7 +34,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_atomic.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_atomic.h>"
          , "_Bool hs_bindgen_7e1a623878ef7201 ("
          , "  SDL_SpinLock *arg1"
          , ")"
@@ -147,14 +156,15 @@
 foreign import ccall unsafe "hs_bindgen_7e1a623878ef7201"
   hs_bindgen_7e1a623878ef7201_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Atomic_Unsafe_SDL_TryLockSpinlock@
 hs_bindgen_7e1a623878ef7201
   :: BG.Ptr SDL_SpinLock
   -> IO BG.CBool
 hs_bindgen_7e1a623878ef7201 =
-  BG.fromFFIType hs_bindgen_7e1a623878ef7201_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_7e1a623878ef7201_base (BG.toFFIType x0))
 
 -- | Try to lock a spin lock by setting it to a non-zero value.
 --
@@ -188,7 +198,8 @@
   :: BG.Ptr SDL_SpinLock
   -> IO ()
 hs_bindgen_ac33cd18d7856e17 =
-  BG.fromFFIType hs_bindgen_ac33cd18d7856e17_base
+  \x0 ->
+    hs_bindgen_ac33cd18d7856e17_base (BG.toFFIType x0)
 
 -- | Lock a spin lock by setting it to a non-zero value.
 --
@@ -220,7 +231,8 @@
   :: BG.Ptr SDL_SpinLock
   -> IO ()
 hs_bindgen_025b3bf7538a123c =
-  BG.fromFFIType hs_bindgen_025b3bf7538a123c_base
+  \x0 ->
+    hs_bindgen_025b3bf7538a123c_base (BG.toFFIType x0)
 
 -- | Unlock a spin lock by setting it to 0.
 --
@@ -251,7 +263,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Atomic_Unsafe_SDL_MemoryBarrierReleaseFunction@
 hs_bindgen_0e27a69a6cca6aac :: IO ()
 hs_bindgen_0e27a69a6cca6aac =
-  BG.fromFFIType hs_bindgen_0e27a69a6cca6aac_base
+  hs_bindgen_0e27a69a6cca6aac_base
 
 -- | Insert a memory release barrier (function version).
 --
@@ -276,7 +288,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Atomic_Unsafe_SDL_MemoryBarrierAcquireFunction@
 hs_bindgen_0eaa15705859b209 :: IO ()
 hs_bindgen_0eaa15705859b209 =
-  BG.fromFFIType hs_bindgen_0eaa15705859b209_base
+  hs_bindgen_0eaa15705859b209_base
 
 -- | Insert a memory acquire barrier (function version).
 --
@@ -297,9 +309,9 @@
 foreign import ccall unsafe "hs_bindgen_7528ef136d782538"
   hs_bindgen_7528ef136d782538_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Atomic_Unsafe_SDL_CompareAndSwapAtomicInt@
 hs_bindgen_7528ef136d782538
@@ -308,7 +320,12 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_7528ef136d782538 =
-  BG.fromFFIType hs_bindgen_7528ef136d782538_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_7528ef136d782538_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set an atomic variable to a new value if it is currently an old value.
 --
@@ -344,8 +361,8 @@
 foreign import ccall unsafe "hs_bindgen_6267a61e0fd93b33"
   hs_bindgen_6267a61e0fd93b33_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Int32
+    -> BG.CInt
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Atomic_Unsafe_SDL_SetAtomicInt@
 hs_bindgen_6267a61e0fd93b33
@@ -353,7 +370,9 @@
   -> BG.CInt
   -> IO BG.CInt
 hs_bindgen_6267a61e0fd93b33 =
-  BG.fromFFIType hs_bindgen_6267a61e0fd93b33_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_6267a61e0fd93b33_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set an atomic variable to a value.
 --
@@ -386,14 +405,15 @@
 foreign import ccall unsafe "hs_bindgen_5d8655898ff6cb2a"
   hs_bindgen_5d8655898ff6cb2a_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Atomic_Unsafe_SDL_GetAtomicInt@
 hs_bindgen_5d8655898ff6cb2a
   :: BG.Ptr SDL_AtomicInt
   -> IO BG.CInt
 hs_bindgen_5d8655898ff6cb2a =
-  BG.fromFFIType hs_bindgen_5d8655898ff6cb2a_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_5d8655898ff6cb2a_base (BG.toFFIType x0))
 
 -- | Get the value of an atomic variable.
 --
@@ -420,8 +440,8 @@
 foreign import ccall unsafe "hs_bindgen_072d591dbe0586a7"
   hs_bindgen_072d591dbe0586a7_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Int32
+    -> BG.CInt
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Atomic_Unsafe_SDL_AddAtomicInt@
 hs_bindgen_072d591dbe0586a7
@@ -429,7 +449,9 @@
   -> BG.CInt
   -> IO BG.CInt
 hs_bindgen_072d591dbe0586a7 =
-  BG.fromFFIType hs_bindgen_072d591dbe0586a7_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_072d591dbe0586a7_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Add to an atomic variable.
 --
@@ -462,9 +484,9 @@
 foreign import ccall unsafe "hs_bindgen_f42a3f89648096cd"
   hs_bindgen_f42a3f89648096cd_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Word32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Atomic_Unsafe_SDL_CompareAndSwapAtomicU32@
 hs_bindgen_f42a3f89648096cd
@@ -473,7 +495,12 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_f42a3f89648096cd =
-  BG.fromFFIType hs_bindgen_f42a3f89648096cd_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_f42a3f89648096cd_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set an atomic variable to a new value if it is currently an old value.
 --
@@ -509,8 +536,8 @@
 foreign import ccall unsafe "hs_bindgen_f11ee3aacbcad44d"
   hs_bindgen_f11ee3aacbcad44d_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Atomic_Unsafe_SDL_SetAtomicU32@
 hs_bindgen_f11ee3aacbcad44d
@@ -518,7 +545,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
 hs_bindgen_f11ee3aacbcad44d =
-  BG.fromFFIType hs_bindgen_f11ee3aacbcad44d_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_f11ee3aacbcad44d_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set an atomic variable to a value.
 --
@@ -551,14 +580,15 @@
 foreign import ccall unsafe "hs_bindgen_8dd395b4cca78369"
   hs_bindgen_8dd395b4cca78369_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Atomic_Unsafe_SDL_GetAtomicU32@
 hs_bindgen_8dd395b4cca78369
   :: BG.Ptr SDL_AtomicU32
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
 hs_bindgen_8dd395b4cca78369 =
-  BG.fromFFIType hs_bindgen_8dd395b4cca78369_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_8dd395b4cca78369_base (BG.toFFIType x0))
 
 -- | Get the value of an atomic variable.
 --
@@ -585,8 +615,8 @@
 foreign import ccall unsafe "hs_bindgen_faa1fbc7406c4097"
   hs_bindgen_faa1fbc7406c4097_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word32
+    -> BG.CInt
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Atomic_Unsafe_SDL_AddAtomicU32@
 hs_bindgen_faa1fbc7406c4097
@@ -594,7 +624,9 @@
   -> BG.CInt
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
 hs_bindgen_faa1fbc7406c4097 =
-  BG.fromFFIType hs_bindgen_faa1fbc7406c4097_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_faa1fbc7406c4097_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Add to an atomic variable.
 --
@@ -627,7 +659,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Atomic_Unsafe_SDL_CompareAndSwapAtomicPointer@
 hs_bindgen_b184ba517671509d
@@ -636,7 +668,12 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_b184ba517671509d =
-  BG.fromFFIType hs_bindgen_b184ba517671509d_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_b184ba517671509d_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set a pointer to a new value if it is currently an old value.
 --
@@ -681,7 +718,9 @@
   -> BG.Ptr BG.Void
   -> IO (BG.Ptr BG.Void)
 hs_bindgen_c511073c2deacde8 =
-  BG.fromFFIType hs_bindgen_c511073c2deacde8_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_c511073c2deacde8_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set a pointer to a value atomically.
 --
@@ -719,7 +758,8 @@
   :: BG.Ptr (BG.Ptr BG.Void)
   -> IO (BG.Ptr BG.Void)
 hs_bindgen_24c92517dd70cd57 =
-  BG.fromFFIType hs_bindgen_24c92517dd70cd57_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_24c92517dd70cd57_base (BG.toFFIType x0))
 
 -- | Get the value of a pointer atomically.
 --
diff --git a/src/SDL3/Sys/Bindgen/AtomicShims/FunPtr.hs b/src/SDL3/Sys/Bindgen/AtomicShims/FunPtr.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/AtomicShims/FunPtr.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.AtomicShims.FunPtr (
+  SDL3.Sys.Bindgen.AtomicShims.FunPtr.lithon_SDL_AtomicIncRef,
+  SDL3.Sys.Bindgen.AtomicShims.FunPtr.lithon_SDL_AtomicDecRef,
+)
+where
+
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+import SDL3.Sys.Bindgen.Atomic qualified
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <sdl3-bindgen-sys/SDL_atomic_shims.h>"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.AtomicShims_get_lithon_SDL_AtomicIncRef */"
+         , "__attribute__ ((const))"
+         , "signed int (*hs_bindgen_d91e850bfd3ae06a (void)) ("
+         , "  SDL_AtomicInt *arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_AtomicIncRef;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.AtomicShims_get_lithon_SDL_AtomicDecRef */"
+         , "__attribute__ ((const))"
+         , "_Bool (*hs_bindgen_3bf2290199609fea (void)) ("
+         , "  SDL_AtomicInt *arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_AtomicDecRef;"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.AtomicShims_get_lithon_SDL_AtomicIncRef@
+foreign import ccall unsafe "hs_bindgen_d91e850bfd3ae06a"
+  hs_bindgen_d91e850bfd3ae06a_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.AtomicShims_get_lithon_SDL_AtomicIncRef@
+hs_bindgen_d91e850bfd3ae06a
+  :: IO (BG.FunPtr (BG.Ptr SDL3.Sys.Bindgen.Atomic.SDL_AtomicInt -> IO BG.CInt))
+hs_bindgen_d91e850bfd3ae06a =
+  fmap BG.fromFFIType hs_bindgen_d91e850bfd3ae06a_base
+
+{-# NOINLINE lithon_SDL_AtomicIncRef #-}
+
+-- | Increment an atomic variable used as a reference count.
+--
+--     The SDL_AtomicIncRef macro as a function.
+--
+--     [@a@]: a pointer to an SDL_AtomicInt to increment.
+--
+--     [Returns]: the previous value of the atomic variable.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_AtomicDecRef
+--
+--     [C declaration]: @lithon_SDL_AtomicIncRef@, defined at @sdl3-bindgen-sys\/SDL_atomic_shims.h 38:23@
+lithon_SDL_AtomicIncRef :: BG.FunPtr (BG.Ptr SDL3.Sys.Bindgen.Atomic.SDL_AtomicInt -> IO BG.CInt)
+lithon_SDL_AtomicIncRef =
+  BG.unsafePerformIO hs_bindgen_d91e850bfd3ae06a
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.AtomicShims_get_lithon_SDL_AtomicDecRef@
+foreign import ccall unsafe "hs_bindgen_3bf2290199609fea"
+  hs_bindgen_3bf2290199609fea_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.AtomicShims_get_lithon_SDL_AtomicDecRef@
+hs_bindgen_3bf2290199609fea
+  :: IO (BG.FunPtr (BG.Ptr SDL3.Sys.Bindgen.Atomic.SDL_AtomicInt -> IO BG.CBool))
+hs_bindgen_3bf2290199609fea =
+  fmap BG.fromFFIType hs_bindgen_3bf2290199609fea_base
+
+{-# NOINLINE lithon_SDL_AtomicDecRef #-}
+
+-- | Decrement an atomic variable used as a reference count.
+--
+--     The SDL_AtomicDecRef macro as a function.
+--
+--     [@a@]: a pointer to an SDL_AtomicInt to decrement.
+--
+--     [Returns]: true if the variable reached zero after decrementing, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_AtomicIncRef
+--
+--     [C declaration]: @lithon_SDL_AtomicDecRef@, defined at @sdl3-bindgen-sys\/SDL_atomic_shims.h 58:24@
+lithon_SDL_AtomicDecRef :: BG.FunPtr (BG.Ptr SDL3.Sys.Bindgen.Atomic.SDL_AtomicInt -> IO BG.CBool)
+lithon_SDL_AtomicDecRef =
+  BG.unsafePerformIO hs_bindgen_3bf2290199609fea
diff --git a/src/SDL3/Sys/Bindgen/AtomicShims/Safe.hs b/src/SDL3/Sys/Bindgen/AtomicShims/Safe.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/AtomicShims/Safe.hs
@@ -0,0 +1,110 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.AtomicShims.Safe (
+  SDL3.Sys.Bindgen.AtomicShims.Safe.lithon_SDL_AtomicIncRef,
+  SDL3.Sys.Bindgen.AtomicShims.Safe.lithon_SDL_AtomicDecRef,
+)
+where
+
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+import SDL3.Sys.Bindgen.Atomic qualified
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <sdl3-bindgen-sys/SDL_atomic_shims.h>"
+         , "signed int hs_bindgen_38d0bc95088d70bb ("
+         , "  SDL_AtomicInt *arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_AtomicIncRef)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_e35f775aa3da83a9 ("
+         , "  SDL_AtomicInt *arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_AtomicDecRef)(arg1);"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.AtomicShims_Safe_lithon_SDL_AtomicIncRef@
+foreign import ccall safe "hs_bindgen_38d0bc95088d70bb"
+  hs_bindgen_38d0bc95088d70bb_base
+    :: BG.Ptr BG.Void
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.AtomicShims_Safe_lithon_SDL_AtomicIncRef@
+hs_bindgen_38d0bc95088d70bb
+  :: BG.Ptr SDL3.Sys.Bindgen.Atomic.SDL_AtomicInt
+  -> IO BG.CInt
+hs_bindgen_38d0bc95088d70bb =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_38d0bc95088d70bb_base (BG.toFFIType x0))
+
+-- | Increment an atomic variable used as a reference count.
+--
+--     The SDL_AtomicIncRef macro as a function.
+--
+--     [Returns]: the previous value of the atomic variable.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_AtomicDecRef
+--
+--     [C declaration]: @lithon_SDL_AtomicIncRef@, defined at @sdl3-bindgen-sys\/SDL_atomic_shims.h 38:23@
+lithon_SDL_AtomicIncRef
+  :: BG.Ptr SDL3.Sys.Bindgen.Atomic.SDL_AtomicInt
+  -- ^
+  --
+  --           [@a@]: a pointer to an SDL_AtomicInt to increment.
+  -> IO BG.CInt
+lithon_SDL_AtomicIncRef = hs_bindgen_38d0bc95088d70bb
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.AtomicShims_Safe_lithon_SDL_AtomicDecRef@
+foreign import ccall safe "hs_bindgen_e35f775aa3da83a9"
+  hs_bindgen_e35f775aa3da83a9_base
+    :: BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.AtomicShims_Safe_lithon_SDL_AtomicDecRef@
+hs_bindgen_e35f775aa3da83a9
+  :: BG.Ptr SDL3.Sys.Bindgen.Atomic.SDL_AtomicInt
+  -> IO BG.CBool
+hs_bindgen_e35f775aa3da83a9 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_e35f775aa3da83a9_base (BG.toFFIType x0))
+
+-- | Decrement an atomic variable used as a reference count.
+--
+--     The SDL_AtomicDecRef macro as a function.
+--
+--     [Returns]: true if the variable reached zero after decrementing, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_AtomicIncRef
+--
+--     [C declaration]: @lithon_SDL_AtomicDecRef@, defined at @sdl3-bindgen-sys\/SDL_atomic_shims.h 58:24@
+lithon_SDL_AtomicDecRef
+  :: BG.Ptr SDL3.Sys.Bindgen.Atomic.SDL_AtomicInt
+  -- ^
+  --
+  --           [@a@]: a pointer to an SDL_AtomicInt to decrement.
+  -> IO BG.CBool
+lithon_SDL_AtomicDecRef = hs_bindgen_e35f775aa3da83a9
diff --git a/src/SDL3/Sys/Bindgen/AtomicShims/Unsafe.hs b/src/SDL3/Sys/Bindgen/AtomicShims/Unsafe.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/AtomicShims/Unsafe.hs
@@ -0,0 +1,110 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.AtomicShims.Unsafe (
+  SDL3.Sys.Bindgen.AtomicShims.Unsafe.lithon_SDL_AtomicIncRef,
+  SDL3.Sys.Bindgen.AtomicShims.Unsafe.lithon_SDL_AtomicDecRef,
+)
+where
+
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+import SDL3.Sys.Bindgen.Atomic qualified
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <sdl3-bindgen-sys/SDL_atomic_shims.h>"
+         , "signed int hs_bindgen_2bbc525ff65f8e15 ("
+         , "  SDL_AtomicInt *arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_AtomicIncRef)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_848dcd1814dd10a0 ("
+         , "  SDL_AtomicInt *arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_AtomicDecRef)(arg1);"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.AtomicShims_Unsafe_lithon_SDL_AtomicIncRef@
+foreign import ccall unsafe "hs_bindgen_2bbc525ff65f8e15"
+  hs_bindgen_2bbc525ff65f8e15_base
+    :: BG.Ptr BG.Void
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.AtomicShims_Unsafe_lithon_SDL_AtomicIncRef@
+hs_bindgen_2bbc525ff65f8e15
+  :: BG.Ptr SDL3.Sys.Bindgen.Atomic.SDL_AtomicInt
+  -> IO BG.CInt
+hs_bindgen_2bbc525ff65f8e15 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_2bbc525ff65f8e15_base (BG.toFFIType x0))
+
+-- | Increment an atomic variable used as a reference count.
+--
+--     The SDL_AtomicIncRef macro as a function.
+--
+--     [Returns]: the previous value of the atomic variable.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_AtomicDecRef
+--
+--     [C declaration]: @lithon_SDL_AtomicIncRef@, defined at @sdl3-bindgen-sys\/SDL_atomic_shims.h 38:23@
+lithon_SDL_AtomicIncRef
+  :: BG.Ptr SDL3.Sys.Bindgen.Atomic.SDL_AtomicInt
+  -- ^
+  --
+  --           [@a@]: a pointer to an SDL_AtomicInt to increment.
+  -> IO BG.CInt
+lithon_SDL_AtomicIncRef = hs_bindgen_2bbc525ff65f8e15
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.AtomicShims_Unsafe_lithon_SDL_AtomicDecRef@
+foreign import ccall unsafe "hs_bindgen_848dcd1814dd10a0"
+  hs_bindgen_848dcd1814dd10a0_base
+    :: BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.AtomicShims_Unsafe_lithon_SDL_AtomicDecRef@
+hs_bindgen_848dcd1814dd10a0
+  :: BG.Ptr SDL3.Sys.Bindgen.Atomic.SDL_AtomicInt
+  -> IO BG.CBool
+hs_bindgen_848dcd1814dd10a0 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_848dcd1814dd10a0_base (BG.toFFIType x0))
+
+-- | Decrement an atomic variable used as a reference count.
+--
+--     The SDL_AtomicDecRef macro as a function.
+--
+--     [Returns]: true if the variable reached zero after decrementing, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_AtomicIncRef
+--
+--     [C declaration]: @lithon_SDL_AtomicDecRef@, defined at @sdl3-bindgen-sys\/SDL_atomic_shims.h 58:24@
+lithon_SDL_AtomicDecRef
+  :: BG.Ptr SDL3.Sys.Bindgen.Atomic.SDL_AtomicInt
+  -- ^
+  --
+  --           [@a@]: a pointer to an SDL_AtomicInt to decrement.
+  -> IO BG.CBool
+lithon_SDL_AtomicDecRef = hs_bindgen_848dcd1814dd10a0
diff --git a/src/SDL3/Sys/Bindgen/Audio.hs b/src/SDL3/Sys/Bindgen/Audio.hs
--- a/src/SDL3/Sys/Bindgen/Audio.hs
+++ b/src/SDL3/Sys/Bindgen/Audio.hs
@@ -7,6 +7,7 @@
 {-# LANGUAGE ExplicitForAll #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE MagicHash #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
@@ -18,6 +19,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | Audio functionality for the SDL library.
 --
@@ -131,11 +133,31 @@
 )
 where
 
+import Prelude (
+  Bounded,
+  Enum,
+  Eq,
+  IO,
+  Int,
+  Integral,
+  Num,
+  Ord,
+  Read,
+  Real,
+  Show,
+  fmap,
+  pure,
+  (<*>),
+  (>>),
+  type (~),
+ )
+
 import C.Expr.HostPlatform qualified
 import HsBindgen.Runtime.CEnum qualified as CEnum
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.Marshal qualified as Marshal
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Struct qualified as Struct
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField
 import SDL3.Sys.Bindgen.Stdinc qualified
@@ -602,6 +624,11 @@
 
 deriving via Marshal.EquivStorable SDL_AudioSpec instance BG.Storable SDL_AudioSpec
 
+deriving via Struct.IsStructViaReadRaw SDL_AudioSpec instance Struct.IsStruct SDL_AudioSpec
+
+-- | Audio data format
+--
+--     [C declaration]: @format@, defined at @SDL3\/SDL_audio.h 407:21@
 instance
   (ty ~ SDL_AudioFormat)
   => BG.CompatHasField.HasField "format" SDL_AudioSpec ty
@@ -630,6 +657,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | Number of channels: 1 mono, 2 stereo, etc
+--
+--     [C declaration]: @channels@, defined at @SDL3\/SDL_audio.h 408:9@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "channels" SDL_AudioSpec ty
@@ -656,6 +686,9 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | sample rate: sample frames per second
+--
+--     [C declaration]: @freq@, defined at @SDL3\/SDL_audio.h 409:9@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "freq" SDL_AudioSpec ty
@@ -750,13 +783,12 @@
   { unwrap :: BG.Ptr BG.Void -> PtrConst.PtrConst BG.Void -> BG.CInt -> IO ()
   }
   deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
 
 -- __unique:__ @toSDL_AudioStreamDataCompleteCallback_Aux@
 foreign import ccall safe "wrapper"
   hs_bindgen_d632898096a732d7_base
-    :: (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Int32 -> IO ())
-    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Int32 -> IO ()))
+    :: (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.CInt -> IO ())
+    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.CInt -> IO ()))
 
 -- __unique:__ @toSDL_AudioStreamDataCompleteCallback_Aux@
 hs_bindgen_d632898096a732d7
@@ -764,15 +796,23 @@
   -> IO (BG.FunPtr SDL_AudioStreamDataCompleteCallback_Aux)
 hs_bindgen_d632898096a732d7 =
   \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_d632898096a732d7_base (BG.toFFIType fun0))
+    fmap
+      BG.castFunPtr
+      ( hs_bindgen_d632898096a732d7_base
+          ( \x1 ->
+              \x2 ->
+                \x3 ->
+                  BG.getField @"unwrap" fun0 (BG.fromFFIType x1) (BG.fromFFIType x2) (BG.fromFFIType x3)
+          )
+      )
 
 -- __unique:__ @fromSDL_AudioStreamDataCompleteCallback_Aux@
 foreign import ccall safe "dynamic"
   hs_bindgen_13d85e7076fc6ef1_base
-    :: BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Int32 -> IO ())
+    :: BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.CInt -> IO ())
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> IO ()
 
 -- __unique:__ @fromSDL_AudioStreamDataCompleteCallback_Aux@
@@ -781,7 +821,16 @@
   -> SDL_AudioStreamDataCompleteCallback_Aux
 hs_bindgen_13d85e7076fc6ef1 =
   \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_13d85e7076fc6ef1_base (BG.castFunPtrToFFIType funPtr0))
+    SDL_AudioStreamDataCompleteCallback_Aux
+      ( \x1 ->
+          \x2 ->
+            \x3 ->
+              hs_bindgen_13d85e7076fc6ef1_base
+                (BG.castFunPtr funPtr0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+      )
 
 instance BG.ToFunPtr SDL_AudioStreamDataCompleteCallback_Aux where
   toFunPtr = hs_bindgen_d632898096a732d7
@@ -875,13 +924,12 @@
   { unwrap :: BG.Ptr BG.Void -> BG.Ptr SDL_AudioStream -> BG.CInt -> BG.CInt -> IO ()
   }
   deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
 
 -- __unique:__ @toSDL_AudioStreamCallback_Aux@
 foreign import ccall safe "wrapper"
   hs_bindgen_2ba16e119c56cb1b_base
-    :: (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Int32 -> BG.Int32 -> IO ())
-    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Int32 -> BG.Int32 -> IO ()))
+    :: (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.CInt -> BG.CInt -> IO ())
+    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.CInt -> BG.CInt -> IO ()))
 
 -- __unique:__ @toSDL_AudioStreamCallback_Aux@
 hs_bindgen_2ba16e119c56cb1b
@@ -889,16 +937,30 @@
   -> IO (BG.FunPtr SDL_AudioStreamCallback_Aux)
 hs_bindgen_2ba16e119c56cb1b =
   \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_2ba16e119c56cb1b_base (BG.toFFIType fun0))
+    fmap
+      BG.castFunPtr
+      ( hs_bindgen_2ba16e119c56cb1b_base
+          ( \x1 ->
+              \x2 ->
+                \x3 ->
+                  \x4 ->
+                    BG.getField @"unwrap"
+                      fun0
+                      (BG.fromFFIType x1)
+                      (BG.fromFFIType x2)
+                      (BG.fromFFIType x3)
+                      (BG.fromFFIType x4)
+          )
+      )
 
 -- __unique:__ @fromSDL_AudioStreamCallback_Aux@
 foreign import ccall safe "dynamic"
   hs_bindgen_a0fafe03b8b6d008_base
-    :: BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Int32 -> BG.Int32 -> IO ())
+    :: BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.CInt -> BG.CInt -> IO ())
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
+    -> BG.CInt
+    -> BG.CInt
     -> IO ()
 
 -- __unique:__ @fromSDL_AudioStreamCallback_Aux@
@@ -907,7 +969,18 @@
   -> SDL_AudioStreamCallback_Aux
 hs_bindgen_a0fafe03b8b6d008 =
   \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_a0fafe03b8b6d008_base (BG.castFunPtrToFFIType funPtr0))
+    SDL_AudioStreamCallback_Aux
+      ( \x1 ->
+          \x2 ->
+            \x3 ->
+              \x4 ->
+                hs_bindgen_a0fafe03b8b6d008_base
+                  (BG.castFunPtr funPtr0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+      )
 
 instance BG.ToFunPtr SDL_AudioStreamCallback_Aux where
   toFunPtr = hs_bindgen_2ba16e119c56cb1b
@@ -1009,13 +1082,12 @@
   { unwrap :: BG.Ptr BG.Void -> PtrConst.PtrConst SDL_AudioSpec -> BG.Ptr BG.CFloat -> BG.CInt -> IO ()
   }
   deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
 
 -- __unique:__ @toSDL_AudioPostmixCallback_Aux@
 foreign import ccall safe "wrapper"
   hs_bindgen_303b6f766f2a421d_base
-    :: (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Int32 -> IO ())
-    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Int32 -> IO ()))
+    :: (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.CInt -> IO ())
+    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.CInt -> IO ()))
 
 -- __unique:__ @toSDL_AudioPostmixCallback_Aux@
 hs_bindgen_303b6f766f2a421d
@@ -1023,16 +1095,30 @@
   -> IO (BG.FunPtr SDL_AudioPostmixCallback_Aux)
 hs_bindgen_303b6f766f2a421d =
   \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_303b6f766f2a421d_base (BG.toFFIType fun0))
+    fmap
+      BG.castFunPtr
+      ( hs_bindgen_303b6f766f2a421d_base
+          ( \x1 ->
+              \x2 ->
+                \x3 ->
+                  \x4 ->
+                    BG.getField @"unwrap"
+                      fun0
+                      (BG.fromFFIType x1)
+                      (BG.fromFFIType x2)
+                      (BG.fromFFIType x3)
+                      (BG.fromFFIType x4)
+          )
+      )
 
 -- __unique:__ @fromSDL_AudioPostmixCallback_Aux@
 foreign import ccall safe "dynamic"
   hs_bindgen_148fa618325eaf19_base
-    :: BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Int32 -> IO ())
+    :: BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.CInt -> IO ())
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> IO ()
 
 -- __unique:__ @fromSDL_AudioPostmixCallback_Aux@
@@ -1041,7 +1127,18 @@
   -> SDL_AudioPostmixCallback_Aux
 hs_bindgen_148fa618325eaf19 =
   \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_148fa618325eaf19_base (BG.castFunPtrToFFIType funPtr0))
+    SDL_AudioPostmixCallback_Aux
+      ( \x1 ->
+          \x2 ->
+            \x3 ->
+              \x4 ->
+                hs_bindgen_148fa618325eaf19_base
+                  (BG.castFunPtr funPtr0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+      )
 
 instance BG.ToFunPtr SDL_AudioPostmixCallback_Aux where
   toFunPtr = hs_bindgen_303b6f766f2a421d
diff --git a/src/SDL3/Sys/Bindgen/Audio/FunPtr.hs b/src/SDL3/Sys/Bindgen/Audio/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Audio/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Audio/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Audio.FunPtr (
@@ -64,6 +66,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -74,7 +78,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_audio.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_audio.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Audio_get_SDL_GetNumAudioDrivers */"
          , "__attribute__ ((const))"
          , "signed int (*hs_bindgen_70df3deb87a6a291 (void)) (void)"
@@ -621,7 +629,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_get_SDL_GetNumAudioDrivers@
 hs_bindgen_70df3deb87a6a291 :: IO (BG.FunPtr (IO BG.CInt))
 hs_bindgen_70df3deb87a6a291 =
-  BG.fromFFIType hs_bindgen_70df3deb87a6a291_base
+  fmap BG.fromFFIType hs_bindgen_70df3deb87a6a291_base
 
 {-# NOINLINE sDL_GetNumAudioDrivers #-}
 
@@ -652,7 +660,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_get_SDL_GetAudioDriver@
 hs_bindgen_96a59296db34206f :: IO (BG.FunPtr (BG.CInt -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_96a59296db34206f =
-  BG.fromFFIType hs_bindgen_96a59296db34206f_base
+  fmap BG.fromFFIType hs_bindgen_96a59296db34206f_base
 
 {-# NOINLINE sDL_GetAudioDriver #-}
 
@@ -685,7 +693,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_get_SDL_GetCurrentAudioDriver@
 hs_bindgen_3b5e65309af7eb52 :: IO (BG.FunPtr (IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_3b5e65309af7eb52 =
-  BG.fromFFIType hs_bindgen_3b5e65309af7eb52_base
+  fmap BG.fromFFIType hs_bindgen_3b5e65309af7eb52_base
 
 {-# NOINLINE sDL_GetCurrentAudioDriver #-}
 
@@ -712,7 +720,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_get_SDL_GetAudioPlaybackDevices@
 hs_bindgen_0154df1db50254cb :: IO (BG.FunPtr (BG.Ptr BG.CInt -> IO (BG.Ptr SDL_AudioDeviceID)))
 hs_bindgen_0154df1db50254cb =
-  BG.fromFFIType hs_bindgen_0154df1db50254cb_base
+  fmap BG.fromFFIType hs_bindgen_0154df1db50254cb_base
 
 {-# NOINLINE sDL_GetAudioPlaybackDevices #-}
 
@@ -747,7 +755,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_get_SDL_GetAudioRecordingDevices@
 hs_bindgen_b1e17652d75669ba :: IO (BG.FunPtr (BG.Ptr BG.CInt -> IO (BG.Ptr SDL_AudioDeviceID)))
 hs_bindgen_b1e17652d75669ba =
-  BG.fromFFIType hs_bindgen_b1e17652d75669ba_base
+  fmap BG.fromFFIType hs_bindgen_b1e17652d75669ba_base
 
 {-# NOINLINE sDL_GetAudioRecordingDevices #-}
 
@@ -782,7 +790,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_get_SDL_GetAudioDeviceName@
 hs_bindgen_dcc642abb8604857 :: IO (BG.FunPtr (SDL_AudioDeviceID -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_dcc642abb8604857 =
-  BG.fromFFIType hs_bindgen_dcc642abb8604857_base
+  fmap BG.fromFFIType hs_bindgen_dcc642abb8604857_base
 
 {-# NOINLINE sDL_GetAudioDeviceName #-}
 
@@ -814,7 +822,7 @@
 hs_bindgen_7ee63106dd01fabe
   :: IO (BG.FunPtr (SDL_AudioDeviceID -> BG.Ptr SDL_AudioSpec -> BG.Ptr BG.CInt -> IO BG.CBool))
 hs_bindgen_7ee63106dd01fabe =
-  BG.fromFFIType hs_bindgen_7ee63106dd01fabe_base
+  fmap BG.fromFFIType hs_bindgen_7ee63106dd01fabe_base
 
 {-# NOINLINE sDL_GetAudioDeviceFormat #-}
 
@@ -857,7 +865,7 @@
 hs_bindgen_d8865ee45cf3f909
   :: IO (BG.FunPtr (SDL_AudioDeviceID -> BG.Ptr BG.CInt -> IO (BG.Ptr BG.CInt)))
 hs_bindgen_d8865ee45cf3f909 =
-  BG.fromFFIType hs_bindgen_d8865ee45cf3f909_base
+  fmap BG.fromFFIType hs_bindgen_d8865ee45cf3f909_base
 
 {-# NOINLINE sDL_GetAudioDeviceChannelMap #-}
 
@@ -894,7 +902,7 @@
 hs_bindgen_a61ac8f884503a96
   :: IO (BG.FunPtr (SDL_AudioDeviceID -> PtrConst.PtrConst SDL_AudioSpec -> IO SDL_AudioDeviceID))
 hs_bindgen_a61ac8f884503a96 =
-  BG.fromFFIType hs_bindgen_a61ac8f884503a96_base
+  fmap BG.fromFFIType hs_bindgen_a61ac8f884503a96_base
 
 {-# NOINLINE sDL_OpenAudioDevice #-}
 
@@ -944,7 +952,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_get_SDL_IsAudioDevicePhysical@
 hs_bindgen_6499cfa703c6758f :: IO (BG.FunPtr (SDL_AudioDeviceID -> IO BG.CBool))
 hs_bindgen_6499cfa703c6758f =
-  BG.fromFFIType hs_bindgen_6499cfa703c6758f_base
+  fmap BG.fromFFIType hs_bindgen_6499cfa703c6758f_base
 
 {-# NOINLINE sDL_IsAudioDevicePhysical #-}
 
@@ -977,7 +985,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_get_SDL_IsAudioDevicePlayback@
 hs_bindgen_a0086d8f92145768 :: IO (BG.FunPtr (SDL_AudioDeviceID -> IO BG.CBool))
 hs_bindgen_a0086d8f92145768 =
-  BG.fromFFIType hs_bindgen_a0086d8f92145768_base
+  fmap BG.fromFFIType hs_bindgen_a0086d8f92145768_base
 
 {-# NOINLINE sDL_IsAudioDevicePlayback #-}
 
@@ -1006,7 +1014,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_get_SDL_PauseAudioDevice@
 hs_bindgen_1003717acae7ce8b :: IO (BG.FunPtr (SDL_AudioDeviceID -> IO BG.CBool))
 hs_bindgen_1003717acae7ce8b =
-  BG.fromFFIType hs_bindgen_1003717acae7ce8b_base
+  fmap BG.fromFFIType hs_bindgen_1003717acae7ce8b_base
 
 {-# NOINLINE sDL_PauseAudioDevice #-}
 
@@ -1043,7 +1051,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_get_SDL_ResumeAudioDevice@
 hs_bindgen_df9a550a09c18c65 :: IO (BG.FunPtr (SDL_AudioDeviceID -> IO BG.CBool))
 hs_bindgen_df9a550a09c18c65 =
-  BG.fromFFIType hs_bindgen_df9a550a09c18c65_base
+  fmap BG.fromFFIType hs_bindgen_df9a550a09c18c65_base
 
 {-# NOINLINE sDL_ResumeAudioDevice #-}
 
@@ -1078,7 +1086,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_get_SDL_AudioDevicePaused@
 hs_bindgen_4580e249e63ded2b :: IO (BG.FunPtr (SDL_AudioDeviceID -> IO BG.CBool))
 hs_bindgen_4580e249e63ded2b =
-  BG.fromFFIType hs_bindgen_4580e249e63ded2b_base
+  fmap BG.fromFFIType hs_bindgen_4580e249e63ded2b_base
 
 {-# NOINLINE sDL_AudioDevicePaused #-}
 
@@ -1111,7 +1119,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_get_SDL_GetAudioDeviceGain@
 hs_bindgen_6f1b270afdab6bb6 :: IO (BG.FunPtr (SDL_AudioDeviceID -> IO BG.CFloat))
 hs_bindgen_6f1b270afdab6bb6 =
-  BG.fromFFIType hs_bindgen_6f1b270afdab6bb6_base
+  fmap BG.fromFFIType hs_bindgen_6f1b270afdab6bb6_base
 
 {-# NOINLINE sDL_GetAudioDeviceGain #-}
 
@@ -1146,7 +1154,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_get_SDL_SetAudioDeviceGain@
 hs_bindgen_aa933d15c7bb8ed3 :: IO (BG.FunPtr (SDL_AudioDeviceID -> BG.CFloat -> IO BG.CBool))
 hs_bindgen_aa933d15c7bb8ed3 =
-  BG.fromFFIType hs_bindgen_aa933d15c7bb8ed3_base
+  fmap BG.fromFFIType hs_bindgen_aa933d15c7bb8ed3_base
 
 {-# NOINLINE sDL_SetAudioDeviceGain #-}
 
@@ -1185,7 +1193,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_get_SDL_CloseAudioDevice@
 hs_bindgen_b303dd6fccc99188 :: IO (BG.FunPtr (SDL_AudioDeviceID -> IO ()))
 hs_bindgen_b303dd6fccc99188 =
-  BG.fromFFIType hs_bindgen_b303dd6fccc99188_base
+  fmap BG.fromFFIType hs_bindgen_b303dd6fccc99188_base
 
 {-# NOINLINE sDL_CloseAudioDevice #-}
 
@@ -1220,7 +1228,7 @@
            (SDL_AudioDeviceID -> PtrConst.PtrConst (BG.Ptr SDL_AudioStream) -> BG.CInt -> IO BG.CBool)
        )
 hs_bindgen_3e9d0d17f11c1de8 =
-  BG.fromFFIType hs_bindgen_3e9d0d17f11c1de8_base
+  fmap BG.fromFFIType hs_bindgen_3e9d0d17f11c1de8_base
 
 {-# NOINLINE sDL_BindAudioStreams #-}
 
@@ -1264,7 +1272,7 @@
 hs_bindgen_d6749d59b79ec0ff
   :: IO (BG.FunPtr (SDL_AudioDeviceID -> BG.Ptr SDL_AudioStream -> IO BG.CBool))
 hs_bindgen_d6749d59b79ec0ff =
-  BG.fromFFIType hs_bindgen_d6749d59b79ec0ff_base
+  fmap BG.fromFFIType hs_bindgen_d6749d59b79ec0ff_base
 
 {-# NOINLINE sDL_BindAudioStream #-}
 
@@ -1298,7 +1306,7 @@
 hs_bindgen_d96a4f36c25b0021
   :: IO (BG.FunPtr (PtrConst.PtrConst (BG.Ptr SDL_AudioStream) -> BG.CInt -> IO ()))
 hs_bindgen_d96a4f36c25b0021 =
-  BG.fromFFIType hs_bindgen_d96a4f36c25b0021_base
+  fmap BG.fromFFIType hs_bindgen_d96a4f36c25b0021_base
 
 {-# NOINLINE sDL_UnbindAudioStreams #-}
 
@@ -1331,7 +1339,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_get_SDL_UnbindAudioStream@
 hs_bindgen_8afc843a61a3bdb8 :: IO (BG.FunPtr (BG.Ptr SDL_AudioStream -> IO ()))
 hs_bindgen_8afc843a61a3bdb8 =
-  BG.fromFFIType hs_bindgen_8afc843a61a3bdb8_base
+  fmap BG.fromFFIType hs_bindgen_8afc843a61a3bdb8_base
 
 {-# NOINLINE sDL_UnbindAudioStream #-}
 
@@ -1360,7 +1368,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_get_SDL_GetAudioStreamDevice@
 hs_bindgen_218bd50ed6f98e9c :: IO (BG.FunPtr (BG.Ptr SDL_AudioStream -> IO SDL_AudioDeviceID))
 hs_bindgen_218bd50ed6f98e9c =
-  BG.fromFFIType hs_bindgen_218bd50ed6f98e9c_base
+  fmap BG.fromFFIType hs_bindgen_218bd50ed6f98e9c_base
 
 {-# NOINLINE sDL_GetAudioStreamDevice #-}
 
@@ -1397,7 +1405,7 @@
            (PtrConst.PtrConst SDL_AudioSpec -> PtrConst.PtrConst SDL_AudioSpec -> IO (BG.Ptr SDL_AudioStream))
        )
 hs_bindgen_7305536d807d048c =
-  BG.fromFFIType hs_bindgen_7305536d807d048c_base
+  fmap BG.fromFFIType hs_bindgen_7305536d807d048c_base
 
 {-# NOINLINE sDL_CreateAudioStream #-}
 
@@ -1433,7 +1441,7 @@
 hs_bindgen_73d6922c8243e33c
   :: IO (BG.FunPtr (BG.Ptr SDL_AudioStream -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID))
 hs_bindgen_73d6922c8243e33c =
-  BG.fromFFIType hs_bindgen_73d6922c8243e33c_base
+  fmap BG.fromFFIType hs_bindgen_73d6922c8243e33c_base
 
 {-# NOINLINE sDL_GetAudioStreamProperties #-}
 
@@ -1467,7 +1475,7 @@
   :: IO
        (BG.FunPtr (BG.Ptr SDL_AudioStream -> BG.Ptr SDL_AudioSpec -> BG.Ptr SDL_AudioSpec -> IO BG.CBool))
 hs_bindgen_eb3398e3b41382ce =
-  BG.fromFFIType hs_bindgen_eb3398e3b41382ce_base
+  fmap BG.fromFFIType hs_bindgen_eb3398e3b41382ce_base
 
 {-# NOINLINE sDL_GetAudioStreamFormat #-}
 
@@ -1509,7 +1517,7 @@
            )
        )
 hs_bindgen_53ea32f5417e7afe =
-  BG.fromFFIType hs_bindgen_53ea32f5417e7afe_base
+  fmap BG.fromFFIType hs_bindgen_53ea32f5417e7afe_base
 
 {-# NOINLINE sDL_SetAudioStreamFormat #-}
 
@@ -1556,7 +1564,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_get_SDL_GetAudioStreamFrequencyRatio@
 hs_bindgen_b61bdb5d542753f6 :: IO (BG.FunPtr (BG.Ptr SDL_AudioStream -> IO BG.CFloat))
 hs_bindgen_b61bdb5d542753f6 =
-  BG.fromFFIType hs_bindgen_b61bdb5d542753f6_base
+  fmap BG.fromFFIType hs_bindgen_b61bdb5d542753f6_base
 
 {-# NOINLINE sDL_GetAudioStreamFrequencyRatio #-}
 
@@ -1585,7 +1593,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_get_SDL_SetAudioStreamFrequencyRatio@
 hs_bindgen_ce1524607d0065a9 :: IO (BG.FunPtr (BG.Ptr SDL_AudioStream -> BG.CFloat -> IO BG.CBool))
 hs_bindgen_ce1524607d0065a9 =
-  BG.fromFFIType hs_bindgen_ce1524607d0065a9_base
+  fmap BG.fromFFIType hs_bindgen_ce1524607d0065a9_base
 
 {-# NOINLINE sDL_SetAudioStreamFrequencyRatio #-}
 
@@ -1620,7 +1628,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_get_SDL_GetAudioStreamGain@
 hs_bindgen_a83ce7d2a5163b17 :: IO (BG.FunPtr (BG.Ptr SDL_AudioStream -> IO BG.CFloat))
 hs_bindgen_a83ce7d2a5163b17 =
-  BG.fromFFIType hs_bindgen_a83ce7d2a5163b17_base
+  fmap BG.fromFFIType hs_bindgen_a83ce7d2a5163b17_base
 
 {-# NOINLINE sDL_GetAudioStreamGain #-}
 
@@ -1653,7 +1661,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_get_SDL_SetAudioStreamGain@
 hs_bindgen_79a25e2eef272c3b :: IO (BG.FunPtr (BG.Ptr SDL_AudioStream -> BG.CFloat -> IO BG.CBool))
 hs_bindgen_79a25e2eef272c3b =
-  BG.fromFFIType hs_bindgen_79a25e2eef272c3b_base
+  fmap BG.fromFFIType hs_bindgen_79a25e2eef272c3b_base
 
 {-# NOINLINE sDL_SetAudioStreamGain #-}
 
@@ -1691,7 +1699,7 @@
 hs_bindgen_8335e23836f4112d
   :: IO (BG.FunPtr (BG.Ptr SDL_AudioStream -> BG.Ptr BG.CInt -> IO (BG.Ptr BG.CInt)))
 hs_bindgen_8335e23836f4112d =
-  BG.fromFFIType hs_bindgen_8335e23836f4112d_base
+  fmap BG.fromFFIType hs_bindgen_8335e23836f4112d_base
 
 {-# NOINLINE sDL_GetAudioStreamInputChannelMap #-}
 
@@ -1728,7 +1736,7 @@
 hs_bindgen_fa8ad3c08cbd6973
   :: IO (BG.FunPtr (BG.Ptr SDL_AudioStream -> BG.Ptr BG.CInt -> IO (BG.Ptr BG.CInt)))
 hs_bindgen_fa8ad3c08cbd6973 =
-  BG.fromFFIType hs_bindgen_fa8ad3c08cbd6973_base
+  fmap BG.fromFFIType hs_bindgen_fa8ad3c08cbd6973_base
 
 {-# NOINLINE sDL_GetAudioStreamOutputChannelMap #-}
 
@@ -1765,7 +1773,7 @@
 hs_bindgen_779c5c09495318d9
   :: IO (BG.FunPtr (BG.Ptr SDL_AudioStream -> PtrConst.PtrConst BG.CInt -> BG.CInt -> IO BG.CBool))
 hs_bindgen_779c5c09495318d9 =
-  BG.fromFFIType hs_bindgen_779c5c09495318d9_base
+  fmap BG.fromFFIType hs_bindgen_779c5c09495318d9_base
 
 {-# NOINLINE sDL_SetAudioStreamInputChannelMap #-}
 
@@ -1818,7 +1826,7 @@
 hs_bindgen_aea000b7665d902d
   :: IO (BG.FunPtr (BG.Ptr SDL_AudioStream -> PtrConst.PtrConst BG.CInt -> BG.CInt -> IO BG.CBool))
 hs_bindgen_aea000b7665d902d =
-  BG.fromFFIType hs_bindgen_aea000b7665d902d_base
+  fmap BG.fromFFIType hs_bindgen_aea000b7665d902d_base
 
 {-# NOINLINE sDL_SetAudioStreamOutputChannelMap #-}
 
@@ -1871,7 +1879,7 @@
 hs_bindgen_958cb85cef653993
   :: IO (BG.FunPtr (BG.Ptr SDL_AudioStream -> PtrConst.PtrConst BG.Void -> BG.CInt -> IO BG.CBool))
 hs_bindgen_958cb85cef653993 =
-  BG.fromFFIType hs_bindgen_958cb85cef653993_base
+  fmap BG.fromFFIType hs_bindgen_958cb85cef653993_base
 
 {-# NOINLINE sDL_PutAudioStreamData #-}
 
@@ -1919,7 +1927,7 @@
            )
        )
 hs_bindgen_29041de46ea3d0a6 =
-  BG.fromFFIType hs_bindgen_29041de46ea3d0a6_base
+  fmap BG.fromFFIType hs_bindgen_29041de46ea3d0a6_base
 
 {-# NOINLINE sDL_PutAudioStreamDataNoCopy #-}
 
@@ -1981,7 +1989,7 @@
            )
        )
 hs_bindgen_8d42e0e8a50f7193 =
-  BG.fromFFIType hs_bindgen_8d42e0e8a50f7193_base
+  fmap BG.fromFFIType hs_bindgen_8d42e0e8a50f7193_base
 
 {-# NOINLINE sDL_PutAudioStreamPlanarData #-}
 
@@ -2034,7 +2042,7 @@
 hs_bindgen_c52b30082bdb58cd
   :: IO (BG.FunPtr (BG.Ptr SDL_AudioStream -> BG.Ptr BG.Void -> BG.CInt -> IO BG.CInt))
 hs_bindgen_c52b30082bdb58cd =
-  BG.fromFFIType hs_bindgen_c52b30082bdb58cd_base
+  fmap BG.fromFFIType hs_bindgen_c52b30082bdb58cd_base
 
 {-# NOINLINE sDL_GetAudioStreamData #-}
 
@@ -2072,7 +2080,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_get_SDL_GetAudioStreamAvailable@
 hs_bindgen_887ee267fde7c9f0 :: IO (BG.FunPtr (BG.Ptr SDL_AudioStream -> IO BG.CInt))
 hs_bindgen_887ee267fde7c9f0 =
-  BG.fromFFIType hs_bindgen_887ee267fde7c9f0_base
+  fmap BG.fromFFIType hs_bindgen_887ee267fde7c9f0_base
 
 {-# NOINLINE sDL_GetAudioStreamAvailable #-}
 
@@ -2105,7 +2113,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_get_SDL_GetAudioStreamQueued@
 hs_bindgen_30f43c9a9503bb9c :: IO (BG.FunPtr (BG.Ptr SDL_AudioStream -> IO BG.CInt))
 hs_bindgen_30f43c9a9503bb9c =
-  BG.fromFFIType hs_bindgen_30f43c9a9503bb9c_base
+  fmap BG.fromFFIType hs_bindgen_30f43c9a9503bb9c_base
 
 {-# NOINLINE sDL_GetAudioStreamQueued #-}
 
@@ -2142,7 +2150,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_get_SDL_FlushAudioStream@
 hs_bindgen_b5a765a41b34efed :: IO (BG.FunPtr (BG.Ptr SDL_AudioStream -> IO BG.CBool))
 hs_bindgen_b5a765a41b34efed =
-  BG.fromFFIType hs_bindgen_b5a765a41b34efed_base
+  fmap BG.fromFFIType hs_bindgen_b5a765a41b34efed_base
 
 {-# NOINLINE sDL_FlushAudioStream #-}
 
@@ -2173,7 +2181,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_get_SDL_ClearAudioStream@
 hs_bindgen_66aa75f68cad1a60 :: IO (BG.FunPtr (BG.Ptr SDL_AudioStream -> IO BG.CBool))
 hs_bindgen_66aa75f68cad1a60 =
-  BG.fromFFIType hs_bindgen_66aa75f68cad1a60_base
+  fmap BG.fromFFIType hs_bindgen_66aa75f68cad1a60_base
 
 {-# NOINLINE sDL_ClearAudioStream #-}
 
@@ -2204,7 +2212,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_get_SDL_PauseAudioStreamDevice@
 hs_bindgen_65bad5f751085af2 :: IO (BG.FunPtr (BG.Ptr SDL_AudioStream -> IO BG.CBool))
 hs_bindgen_65bad5f751085af2 =
-  BG.fromFFIType hs_bindgen_65bad5f751085af2_base
+  fmap BG.fromFFIType hs_bindgen_65bad5f751085af2_base
 
 {-# NOINLINE sDL_PauseAudioStreamDevice #-}
 
@@ -2237,7 +2245,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_get_SDL_ResumeAudioStreamDevice@
 hs_bindgen_3422451103f73d83 :: IO (BG.FunPtr (BG.Ptr SDL_AudioStream -> IO BG.CBool))
 hs_bindgen_3422451103f73d83 =
-  BG.fromFFIType hs_bindgen_3422451103f73d83_base
+  fmap BG.fromFFIType hs_bindgen_3422451103f73d83_base
 
 {-# NOINLINE sDL_ResumeAudioStreamDevice #-}
 
@@ -2270,7 +2278,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_get_SDL_AudioStreamDevicePaused@
 hs_bindgen_3e6ce96a7f944949 :: IO (BG.FunPtr (BG.Ptr SDL_AudioStream -> IO BG.CBool))
 hs_bindgen_3e6ce96a7f944949 =
-  BG.fromFFIType hs_bindgen_3e6ce96a7f944949_base
+  fmap BG.fromFFIType hs_bindgen_3e6ce96a7f944949_base
 
 {-# NOINLINE sDL_AudioStreamDevicePaused #-}
 
@@ -2301,7 +2309,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_get_SDL_LockAudioStream@
 hs_bindgen_0d7bbaa2282f61af :: IO (BG.FunPtr (BG.Ptr SDL_AudioStream -> IO BG.CBool))
 hs_bindgen_0d7bbaa2282f61af =
-  BG.fromFFIType hs_bindgen_0d7bbaa2282f61af_base
+  fmap BG.fromFFIType hs_bindgen_0d7bbaa2282f61af_base
 
 {-# NOINLINE sDL_LockAudioStream #-}
 
@@ -2336,7 +2344,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_get_SDL_UnlockAudioStream@
 hs_bindgen_01197b6703408060 :: IO (BG.FunPtr (BG.Ptr SDL_AudioStream -> IO BG.CBool))
 hs_bindgen_01197b6703408060 =
-  BG.fromFFIType hs_bindgen_01197b6703408060_base
+  fmap BG.fromFFIType hs_bindgen_01197b6703408060_base
 
 {-# NOINLINE sDL_UnlockAudioStream #-}
 
@@ -2368,7 +2376,7 @@
 hs_bindgen_c3613cf8e8649c19
   :: IO (BG.FunPtr (BG.Ptr SDL_AudioStream -> SDL_AudioStreamCallback -> BG.Ptr BG.Void -> IO BG.CBool))
 hs_bindgen_c3613cf8e8649c19 =
-  BG.fromFFIType hs_bindgen_c3613cf8e8649c19_base
+  fmap BG.fromFFIType hs_bindgen_c3613cf8e8649c19_base
 
 {-# NOINLINE sDL_SetAudioStreamGetCallback #-}
 
@@ -2417,7 +2425,7 @@
 hs_bindgen_94194526836dd7bc
   :: IO (BG.FunPtr (BG.Ptr SDL_AudioStream -> SDL_AudioStreamCallback -> BG.Ptr BG.Void -> IO BG.CBool))
 hs_bindgen_94194526836dd7bc =
-  BG.fromFFIType hs_bindgen_94194526836dd7bc_base
+  fmap BG.fromFFIType hs_bindgen_94194526836dd7bc_base
 
 {-# NOINLINE sDL_SetAudioStreamPutCallback #-}
 
@@ -2467,7 +2475,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_get_SDL_DestroyAudioStream@
 hs_bindgen_8414956b9aa941e0 :: IO (BG.FunPtr (BG.Ptr SDL_AudioStream -> IO ()))
 hs_bindgen_8414956b9aa941e0 =
-  BG.fromFFIType hs_bindgen_8414956b9aa941e0_base
+  fmap BG.fromFFIType hs_bindgen_8414956b9aa941e0_base
 
 {-# NOINLINE sDL_DestroyAudioStream #-}
 
@@ -2507,7 +2515,7 @@
            )
        )
 hs_bindgen_e8ad9974dfab54c1 =
-  BG.fromFFIType hs_bindgen_e8ad9974dfab54c1_base
+  fmap BG.fromFFIType hs_bindgen_e8ad9974dfab54c1_base
 
 {-# NOINLINE sDL_OpenAudioDeviceStream #-}
 
@@ -2568,7 +2576,7 @@
 hs_bindgen_fb49ec8721a9eaae
   :: IO (BG.FunPtr (SDL_AudioDeviceID -> SDL_AudioPostmixCallback -> BG.Ptr BG.Void -> IO BG.CBool))
 hs_bindgen_fb49ec8721a9eaae =
-  BG.fromFFIType hs_bindgen_fb49ec8721a9eaae_base
+  fmap BG.fromFFIType hs_bindgen_fb49ec8721a9eaae_base
 
 {-# NOINLINE sDL_SetAudioPostmixCallback #-}
 
@@ -2628,7 +2636,7 @@
            )
        )
 hs_bindgen_aeaf62387043ab14 =
-  BG.fromFFIType hs_bindgen_aeaf62387043ab14_base
+  fmap BG.fromFFIType hs_bindgen_aeaf62387043ab14_base
 
 {-# NOINLINE sDL_LoadWAV_IO #-}
 
@@ -2712,7 +2720,7 @@
            )
        )
 hs_bindgen_23688fb6d15b1a20 =
-  BG.fromFFIType hs_bindgen_23688fb6d15b1a20_base
+  fmap BG.fromFFIType hs_bindgen_23688fb6d15b1a20_base
 
 {-# NOINLINE sDL_LoadWAV #-}
 
@@ -2774,7 +2782,7 @@
            )
        )
 hs_bindgen_b67274f0c4cb98dd =
-  BG.fromFFIType hs_bindgen_b67274f0c4cb98dd_base
+  fmap BG.fromFFIType hs_bindgen_b67274f0c4cb98dd_base
 
 {-# NOINLINE sDL_MixAudio #-}
 
@@ -2836,7 +2844,7 @@
            )
        )
 hs_bindgen_94a0a8ff1b94e777 =
-  BG.fromFFIType hs_bindgen_94a0a8ff1b94e777_base
+  fmap BG.fromFFIType hs_bindgen_94a0a8ff1b94e777_base
 
 {-# NOINLINE sDL_ConvertAudioSamples #-}
 
@@ -2886,7 +2894,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_get_SDL_GetAudioFormatName@
 hs_bindgen_8a62dc82ce668b2b :: IO (BG.FunPtr (SDL_AudioFormat -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_8a62dc82ce668b2b =
-  BG.fromFFIType hs_bindgen_8a62dc82ce668b2b_base
+  fmap BG.fromFFIType hs_bindgen_8a62dc82ce668b2b_base
 
 {-# NOINLINE sDL_GetAudioFormatName #-}
 
@@ -2913,7 +2921,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_get_SDL_GetSilenceValueForFormat@
 hs_bindgen_733e8e75537d52fb :: IO (BG.FunPtr (SDL_AudioFormat -> IO BG.CInt))
 hs_bindgen_733e8e75537d52fb =
-  BG.fromFFIType hs_bindgen_733e8e75537d52fb_base
+  fmap BG.fromFFIType hs_bindgen_733e8e75537d52fb_base
 
 {-# NOINLINE sDL_GetSilenceValueForFormat #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Audio/Safe.hs b/src/SDL3/Sys/Bindgen/Audio/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Audio/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Audio/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Audio.Safe (
@@ -64,6 +66,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -74,7 +79,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_audio.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_audio.h>"
          , "signed int hs_bindgen_aec6557cf376f51a (void)"
          , "{"
          , "  return (SDL_GetNumAudioDrivers)();"
@@ -500,12 +509,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_GetNumAudioDrivers@
 foreign import ccall safe "hs_bindgen_aec6557cf376f51a"
   hs_bindgen_aec6557cf376f51a_base
-    :: IO BG.Int32
+    :: IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_GetNumAudioDrivers@
 hs_bindgen_aec6557cf376f51a :: IO BG.CInt
 hs_bindgen_aec6557cf376f51a =
-  BG.fromFFIType hs_bindgen_aec6557cf376f51a_base
+  fmap BG.fromFFIType hs_bindgen_aec6557cf376f51a_base
 
 -- | Use this function to get the number of built-in audio drivers.
 --
@@ -528,7 +537,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_GetAudioDriver@
 foreign import ccall safe "hs_bindgen_a7a9924f3ded1aac"
   hs_bindgen_a7a9924f3ded1aac_base
-    :: BG.Int32
+    :: BG.CInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_GetAudioDriver@
@@ -536,7 +545,8 @@
   :: BG.CInt
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_a7a9924f3ded1aac =
-  BG.fromFFIType hs_bindgen_a7a9924f3ded1aac_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a7a9924f3ded1aac_base (BG.toFFIType x0))
 
 -- | Use this function to get the name of a built in audio driver.
 --
@@ -569,7 +579,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_GetCurrentAudioDriver@
 hs_bindgen_eb8c87e3006e6e3e :: IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_eb8c87e3006e6e3e =
-  BG.fromFFIType hs_bindgen_eb8c87e3006e6e3e_base
+  fmap BG.fromFFIType hs_bindgen_eb8c87e3006e6e3e_base
 
 -- | Get the name of the current audio driver.
 --
@@ -597,7 +607,8 @@
   :: BG.Ptr BG.CInt
   -> IO (BG.Ptr SDL_AudioDeviceID)
 hs_bindgen_116eecdd1dba02ce =
-  BG.fromFFIType hs_bindgen_116eecdd1dba02ce_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_116eecdd1dba02ce_base (BG.toFFIType x0))
 
 -- | Get a list of currently-connected audio playback devices.
 --
@@ -636,7 +647,8 @@
   :: BG.Ptr BG.CInt
   -> IO (BG.Ptr SDL_AudioDeviceID)
 hs_bindgen_f9bbcb7cbaba1df7 =
-  BG.fromFFIType hs_bindgen_f9bbcb7cbaba1df7_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_f9bbcb7cbaba1df7_base (BG.toFFIType x0))
 
 -- | Get a list of currently-connected audio recording devices.
 --
@@ -667,7 +679,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_GetAudioDeviceName@
 foreign import ccall safe "hs_bindgen_499713655ad12ded"
   hs_bindgen_499713655ad12ded_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_GetAudioDeviceName@
@@ -675,7 +687,8 @@
   :: SDL_AudioDeviceID
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_499713655ad12ded =
-  BG.fromFFIType hs_bindgen_499713655ad12ded_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_499713655ad12ded_base (BG.toFFIType x0))
 
 -- | Get the human-readable name of a specific audio device.
 --
@@ -701,10 +714,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_GetAudioDeviceFormat@
 foreign import ccall safe "hs_bindgen_1607be856719fe9f"
   hs_bindgen_1607be856719fe9f_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_GetAudioDeviceFormat@
 hs_bindgen_1607be856719fe9f
@@ -713,7 +726,12 @@
   -> BG.Ptr BG.CInt
   -> IO BG.CBool
 hs_bindgen_1607be856719fe9f =
-  BG.fromFFIType hs_bindgen_1607be856719fe9f_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_1607be856719fe9f_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get the current audio format of a specific audio device.
 --
@@ -754,7 +772,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_GetAudioDeviceChannelMap@
 foreign import ccall safe "hs_bindgen_87920ef47db02c9e"
   hs_bindgen_87920ef47db02c9e_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> IO (BG.Ptr BG.Void)
 
@@ -764,7 +782,9 @@
   -> BG.Ptr BG.CInt
   -> IO (BG.Ptr BG.CInt)
 hs_bindgen_87920ef47db02c9e =
-  BG.fromFFIType hs_bindgen_87920ef47db02c9e_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_87920ef47db02c9e_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the current channel map of an audio device.
 --
@@ -797,9 +817,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_OpenAudioDevice@
 foreign import ccall safe "hs_bindgen_7c422eec383d378d"
   hs_bindgen_7c422eec383d378d_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_OpenAudioDevice@
 hs_bindgen_7c422eec383d378d
@@ -807,7 +827,9 @@
   -> PtrConst.PtrConst SDL_AudioSpec
   -> IO SDL_AudioDeviceID
 hs_bindgen_7c422eec383d378d =
-  BG.fromFFIType hs_bindgen_7c422eec383d378d_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_7c422eec383d378d_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Open a specific audio device.
 --
@@ -853,15 +875,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_IsAudioDevicePhysical@
 foreign import ccall safe "hs_bindgen_9124a0c657594930"
   hs_bindgen_9124a0c657594930_base
-    :: BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_IsAudioDevicePhysical@
 hs_bindgen_9124a0c657594930
   :: SDL_AudioDeviceID
   -> IO BG.CBool
 hs_bindgen_9124a0c657594930 =
-  BG.fromFFIType hs_bindgen_9124a0c657594930_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_9124a0c657594930_base (BG.toFFIType x0))
 
 -- | Determine if an audio device is physical (instead of logical).
 --
@@ -890,15 +913,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_IsAudioDevicePlayback@
 foreign import ccall safe "hs_bindgen_e66327fd3002e936"
   hs_bindgen_e66327fd3002e936_base
-    :: BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_IsAudioDevicePlayback@
 hs_bindgen_e66327fd3002e936
   :: SDL_AudioDeviceID
   -> IO BG.CBool
 hs_bindgen_e66327fd3002e936 =
-  BG.fromFFIType hs_bindgen_e66327fd3002e936_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_e66327fd3002e936_base (BG.toFFIType x0))
 
 -- | Determine if an audio device is a playback device (instead of recording).
 --
@@ -923,15 +947,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_PauseAudioDevice@
 foreign import ccall safe "hs_bindgen_6dcc3c4ea1398f2b"
   hs_bindgen_6dcc3c4ea1398f2b_base
-    :: BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_PauseAudioDevice@
 hs_bindgen_6dcc3c4ea1398f2b
   :: SDL_AudioDeviceID
   -> IO BG.CBool
 hs_bindgen_6dcc3c4ea1398f2b =
-  BG.fromFFIType hs_bindgen_6dcc3c4ea1398f2b_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_6dcc3c4ea1398f2b_base (BG.toFFIType x0))
 
 -- | Use this function to pause audio playback on a specified device.
 --
@@ -963,15 +988,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_ResumeAudioDevice@
 foreign import ccall safe "hs_bindgen_4fce882c920cc91a"
   hs_bindgen_4fce882c920cc91a_base
-    :: BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_ResumeAudioDevice@
 hs_bindgen_4fce882c920cc91a
   :: SDL_AudioDeviceID
   -> IO BG.CBool
 hs_bindgen_4fce882c920cc91a =
-  BG.fromFFIType hs_bindgen_4fce882c920cc91a_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_4fce882c920cc91a_base (BG.toFFIType x0))
 
 -- | Use this function to unpause audio playback on a specified device.
 --
@@ -1001,15 +1027,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_AudioDevicePaused@
 foreign import ccall safe "hs_bindgen_8ece1cc27cedcd76"
   hs_bindgen_8ece1cc27cedcd76_base
-    :: BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_AudioDevicePaused@
 hs_bindgen_8ece1cc27cedcd76
   :: SDL_AudioDeviceID
   -> IO BG.CBool
 hs_bindgen_8ece1cc27cedcd76 =
-  BG.fromFFIType hs_bindgen_8ece1cc27cedcd76_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_8ece1cc27cedcd76_base (BG.toFFIType x0))
 
 -- | Use this function to query if an audio device is paused.
 --
@@ -1037,15 +1064,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_GetAudioDeviceGain@
 foreign import ccall safe "hs_bindgen_49cef71585b71d2d"
   hs_bindgen_49cef71585b71d2d_base
-    :: BG.Word32
-    -> IO Float
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CFloat
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_GetAudioDeviceGain@
 hs_bindgen_49cef71585b71d2d
   :: SDL_AudioDeviceID
   -> IO BG.CFloat
 hs_bindgen_49cef71585b71d2d =
-  BG.fromFFIType hs_bindgen_49cef71585b71d2d_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_49cef71585b71d2d_base (BG.toFFIType x0))
 
 -- | Get the gain of an audio device.
 --
@@ -1075,9 +1103,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_SetAudioDeviceGain@
 foreign import ccall safe "hs_bindgen_b40aa45597fa463a"
   hs_bindgen_b40aa45597fa463a_base
-    :: BG.Word32
-    -> Float
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> BG.CFloat
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_SetAudioDeviceGain@
 hs_bindgen_b40aa45597fa463a
@@ -1085,7 +1113,9 @@
   -> BG.CFloat
   -> IO BG.CBool
 hs_bindgen_b40aa45597fa463a =
-  BG.fromFFIType hs_bindgen_b40aa45597fa463a_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_b40aa45597fa463a_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Change the gain of an audio device.
 --
@@ -1121,7 +1151,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_CloseAudioDevice@
 foreign import ccall safe "hs_bindgen_e8af3f72de564cf1"
   hs_bindgen_e8af3f72de564cf1_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_CloseAudioDevice@
@@ -1129,7 +1159,8 @@
   :: SDL_AudioDeviceID
   -> IO ()
 hs_bindgen_e8af3f72de564cf1 =
-  BG.fromFFIType hs_bindgen_e8af3f72de564cf1_base
+  \x0 ->
+    hs_bindgen_e8af3f72de564cf1_base (BG.toFFIType x0)
 
 -- | Close a previously-opened audio device.
 --
@@ -1155,10 +1186,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_BindAudioStreams@
 foreign import ccall safe "hs_bindgen_0af2b20aae7d1772"
   hs_bindgen_0af2b20aae7d1772_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_BindAudioStreams@
 hs_bindgen_0af2b20aae7d1772
@@ -1167,7 +1198,12 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_0af2b20aae7d1772 =
-  BG.fromFFIType hs_bindgen_0af2b20aae7d1772_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_0af2b20aae7d1772_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Bind a list of audio streams to an audio device.
 --
@@ -1207,9 +1243,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_BindAudioStream@
 foreign import ccall safe "hs_bindgen_63b077caa3c6f246"
   hs_bindgen_63b077caa3c6f246_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_BindAudioStream@
 hs_bindgen_63b077caa3c6f246
@@ -1217,7 +1253,9 @@
   -> BG.Ptr SDL_AudioStream
   -> IO BG.CBool
 hs_bindgen_63b077caa3c6f246 =
-  BG.fromFFIType hs_bindgen_63b077caa3c6f246_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_63b077caa3c6f246_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Bind a single audio stream to an audio device.
 --
@@ -1248,7 +1286,7 @@
 foreign import ccall safe "hs_bindgen_c2645d811582f0a9"
   hs_bindgen_c2645d811582f0a9_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_UnbindAudioStreams@
@@ -1257,7 +1295,9 @@
   -> BG.CInt
   -> IO ()
 hs_bindgen_c2645d811582f0a9 =
-  BG.fromFFIType hs_bindgen_c2645d811582f0a9_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_c2645d811582f0a9_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Unbind a list of audio streams from their audio devices.
 --
@@ -1295,7 +1335,8 @@
   :: BG.Ptr SDL_AudioStream
   -> IO ()
 hs_bindgen_d4d919dbf9ca4924 =
-  BG.fromFFIType hs_bindgen_d4d919dbf9ca4924_base
+  \x0 ->
+    hs_bindgen_d4d919dbf9ca4924_base (BG.toFFIType x0)
 
 -- | Unbind a single audio stream from its audio device.
 --
@@ -1320,14 +1361,15 @@
 foreign import ccall safe "hs_bindgen_8dd61683a1d75595"
   hs_bindgen_8dd61683a1d75595_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_GetAudioStreamDevice@
 hs_bindgen_8dd61683a1d75595
   :: BG.Ptr SDL_AudioStream
   -> IO SDL_AudioDeviceID
 hs_bindgen_8dd61683a1d75595 =
-  BG.fromFFIType hs_bindgen_8dd61683a1d75595_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_8dd61683a1d75595_base (BG.toFFIType x0))
 
 -- | Query an audio stream for its currently-bound device.
 --
@@ -1366,7 +1408,9 @@
   -> PtrConst.PtrConst SDL_AudioSpec
   -> IO (BG.Ptr SDL_AudioStream)
 hs_bindgen_aca7047ab74c15f6 =
-  BG.fromFFIType hs_bindgen_aca7047ab74c15f6_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_aca7047ab74c15f6_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Create a new audio stream.
 --
@@ -1397,14 +1441,15 @@
 foreign import ccall safe "hs_bindgen_cd9dda2135997250"
   hs_bindgen_cd9dda2135997250_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_GetAudioStreamProperties@
 hs_bindgen_cd9dda2135997250
   :: BG.Ptr SDL_AudioStream
   -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
 hs_bindgen_cd9dda2135997250 =
-  BG.fromFFIType hs_bindgen_cd9dda2135997250_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_cd9dda2135997250_base (BG.toFFIType x0))
 
 -- | Get the properties associated with an audio stream.
 --
@@ -1434,7 +1479,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_GetAudioStreamFormat@
 hs_bindgen_5011d0cad394b582
@@ -1443,7 +1488,12 @@
   -> BG.Ptr SDL_AudioSpec
   -> IO BG.CBool
 hs_bindgen_5011d0cad394b582 =
-  BG.fromFFIType hs_bindgen_5011d0cad394b582_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_5011d0cad394b582_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Query the current format of an audio stream.
 --
@@ -1479,7 +1529,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_SetAudioStreamFormat@
 hs_bindgen_b7e0d40673e5b425
@@ -1488,7 +1538,12 @@
   -> PtrConst.PtrConst SDL_AudioSpec
   -> IO BG.CBool
 hs_bindgen_b7e0d40673e5b425 =
-  BG.fromFFIType hs_bindgen_b7e0d40673e5b425_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_b7e0d40673e5b425_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Change the input and output formats of an audio stream.
 --
@@ -1530,14 +1585,15 @@
 foreign import ccall safe "hs_bindgen_3c13c77fea7457b6"
   hs_bindgen_3c13c77fea7457b6_base
     :: BG.Ptr BG.Void
-    -> IO Float
+    -> IO BG.CFloat
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_GetAudioStreamFrequencyRatio@
 hs_bindgen_3c13c77fea7457b6
   :: BG.Ptr SDL_AudioStream
   -> IO BG.CFloat
 hs_bindgen_3c13c77fea7457b6 =
-  BG.fromFFIType hs_bindgen_3c13c77fea7457b6_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3c13c77fea7457b6_base (BG.toFFIType x0))
 
 -- | Get the frequency ratio of an audio stream.
 --
@@ -1563,8 +1619,8 @@
 foreign import ccall safe "hs_bindgen_7be7b2b980ff1f01"
   hs_bindgen_7be7b2b980ff1f01_base
     :: BG.Ptr BG.Void
-    -> Float
-    -> IO BG.Word8
+    -> BG.CFloat
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_SetAudioStreamFrequencyRatio@
 hs_bindgen_7be7b2b980ff1f01
@@ -1572,7 +1628,9 @@
   -> BG.CFloat
   -> IO BG.CBool
 hs_bindgen_7be7b2b980ff1f01 =
-  BG.fromFFIType hs_bindgen_7be7b2b980ff1f01_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_7be7b2b980ff1f01_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Change the frequency ratio of an audio stream.
 --
@@ -1606,14 +1664,15 @@
 foreign import ccall safe "hs_bindgen_125acd9c795cad57"
   hs_bindgen_125acd9c795cad57_base
     :: BG.Ptr BG.Void
-    -> IO Float
+    -> IO BG.CFloat
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_GetAudioStreamGain@
 hs_bindgen_125acd9c795cad57
   :: BG.Ptr SDL_AudioStream
   -> IO BG.CFloat
 hs_bindgen_125acd9c795cad57 =
-  BG.fromFFIType hs_bindgen_125acd9c795cad57_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_125acd9c795cad57_base (BG.toFFIType x0))
 
 -- | Get the gain of an audio stream.
 --
@@ -1642,8 +1701,8 @@
 foreign import ccall safe "hs_bindgen_5684b3f0e33987ea"
   hs_bindgen_5684b3f0e33987ea_base
     :: BG.Ptr BG.Void
-    -> Float
-    -> IO BG.Word8
+    -> BG.CFloat
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_SetAudioStreamGain@
 hs_bindgen_5684b3f0e33987ea
@@ -1651,7 +1710,9 @@
   -> BG.CFloat
   -> IO BG.CBool
 hs_bindgen_5684b3f0e33987ea =
-  BG.fromFFIType hs_bindgen_5684b3f0e33987ea_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_5684b3f0e33987ea_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Change the gain of an audio stream.
 --
@@ -1695,7 +1756,9 @@
   -> BG.Ptr BG.CInt
   -> IO (BG.Ptr BG.CInt)
 hs_bindgen_92fa355f815c3314 =
-  BG.fromFFIType hs_bindgen_92fa355f815c3314_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_92fa355f815c3314_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the current input channel map of an audio stream.
 --
@@ -1738,7 +1801,9 @@
   -> BG.Ptr BG.CInt
   -> IO (BG.Ptr BG.CInt)
 hs_bindgen_9b5ffd54b64ea0ea =
-  BG.fromFFIType hs_bindgen_9b5ffd54b64ea0ea_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_9b5ffd54b64ea0ea_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the current output channel map of an audio stream.
 --
@@ -1773,8 +1838,8 @@
   hs_bindgen_d47a0e77e800172e_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_SetAudioStreamInputChannelMap@
 hs_bindgen_d47a0e77e800172e
@@ -1783,7 +1848,12 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_d47a0e77e800172e =
-  BG.fromFFIType hs_bindgen_d47a0e77e800172e_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_d47a0e77e800172e_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set the current input channel map of an audio stream.
 --
@@ -1836,8 +1906,8 @@
   hs_bindgen_b53ca7ca85639b18_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_SetAudioStreamOutputChannelMap@
 hs_bindgen_b53ca7ca85639b18
@@ -1846,7 +1916,12 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_b53ca7ca85639b18 =
-  BG.fromFFIType hs_bindgen_b53ca7ca85639b18_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_b53ca7ca85639b18_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set the current output channel map of an audio stream.
 --
@@ -1899,8 +1974,8 @@
   hs_bindgen_aaa4efec7abd5cd4_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_PutAudioStreamData@
 hs_bindgen_aaa4efec7abd5cd4
@@ -1909,7 +1984,12 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_aaa4efec7abd5cd4 =
-  BG.fromFFIType hs_bindgen_aaa4efec7abd5cd4_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_aaa4efec7abd5cd4_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Add data to the stream.
 --
@@ -1947,10 +2027,10 @@
   hs_bindgen_619ed51504fee204_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_PutAudioStreamDataNoCopy@
 hs_bindgen_619ed51504fee204
@@ -1961,7 +2041,20 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_619ed51504fee204 =
-  BG.fromFFIType hs_bindgen_619ed51504fee204_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_619ed51504fee204_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Add external data to an audio stream without copying it.
 --
@@ -2012,9 +2105,9 @@
   hs_bindgen_a35f9b9040c608a3_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_PutAudioStreamPlanarData@
 hs_bindgen_a35f9b9040c608a3
@@ -2024,7 +2117,18 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_a35f9b9040c608a3 =
-  BG.fromFFIType hs_bindgen_a35f9b9040c608a3_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_a35f9b9040c608a3_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Add data to the stream with each channel in a separate array.
 --
@@ -2073,8 +2177,8 @@
   hs_bindgen_80c78d4a6767c5c1_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Int32
+    -> BG.CInt
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_GetAudioStreamData@
 hs_bindgen_80c78d4a6767c5c1
@@ -2083,7 +2187,12 @@
   -> BG.CInt
   -> IO BG.CInt
 hs_bindgen_80c78d4a6767c5c1 =
-  BG.fromFFIType hs_bindgen_80c78d4a6767c5c1_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_80c78d4a6767c5c1_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get converted\/resampled data from the stream.
 --
@@ -2120,14 +2229,15 @@
 foreign import ccall safe "hs_bindgen_2ddc379eb0f7050b"
   hs_bindgen_2ddc379eb0f7050b_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_GetAudioStreamAvailable@
 hs_bindgen_2ddc379eb0f7050b
   :: BG.Ptr SDL_AudioStream
   -> IO BG.CInt
 hs_bindgen_2ddc379eb0f7050b =
-  BG.fromFFIType hs_bindgen_2ddc379eb0f7050b_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_2ddc379eb0f7050b_base (BG.toFFIType x0))
 
 -- | Get the number of converted\/resampled bytes available.
 --
@@ -2157,14 +2267,15 @@
 foreign import ccall safe "hs_bindgen_3c01027250fa0224"
   hs_bindgen_3c01027250fa0224_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_GetAudioStreamQueued@
 hs_bindgen_3c01027250fa0224
   :: BG.Ptr SDL_AudioStream
   -> IO BG.CInt
 hs_bindgen_3c01027250fa0224 =
-  BG.fromFFIType hs_bindgen_3c01027250fa0224_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3c01027250fa0224_base (BG.toFFIType x0))
 
 -- | Get the number of bytes currently queued.
 --
@@ -2198,14 +2309,15 @@
 foreign import ccall safe "hs_bindgen_a08de3ff3d4b6b48"
   hs_bindgen_a08de3ff3d4b6b48_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_FlushAudioStream@
 hs_bindgen_a08de3ff3d4b6b48
   :: BG.Ptr SDL_AudioStream
   -> IO BG.CBool
 hs_bindgen_a08de3ff3d4b6b48 =
-  BG.fromFFIType hs_bindgen_a08de3ff3d4b6b48_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a08de3ff3d4b6b48_base (BG.toFFIType x0))
 
 -- | Tell the stream that you\'re done sending data, and anything being buffered should be converted\/resampled and made available immediately.
 --
@@ -2232,14 +2344,15 @@
 foreign import ccall safe "hs_bindgen_495b0c63dde7c64f"
   hs_bindgen_495b0c63dde7c64f_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_ClearAudioStream@
 hs_bindgen_495b0c63dde7c64f
   :: BG.Ptr SDL_AudioStream
   -> IO BG.CBool
 hs_bindgen_495b0c63dde7c64f =
-  BG.fromFFIType hs_bindgen_495b0c63dde7c64f_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_495b0c63dde7c64f_base (BG.toFFIType x0))
 
 -- | Clear any pending data in the stream.
 --
@@ -2266,14 +2379,15 @@
 foreign import ccall safe "hs_bindgen_b5ae37aa80b742a5"
   hs_bindgen_b5ae37aa80b742a5_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_PauseAudioStreamDevice@
 hs_bindgen_b5ae37aa80b742a5
   :: BG.Ptr SDL_AudioStream
   -> IO BG.CBool
 hs_bindgen_b5ae37aa80b742a5 =
-  BG.fromFFIType hs_bindgen_b5ae37aa80b742a5_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_b5ae37aa80b742a5_base (BG.toFFIType x0))
 
 -- | Use this function to pause audio playback on the audio device associated with an audio stream.
 --
@@ -2303,14 +2417,15 @@
 foreign import ccall safe "hs_bindgen_df0b3314efa54fdd"
   hs_bindgen_df0b3314efa54fdd_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_ResumeAudioStreamDevice@
 hs_bindgen_df0b3314efa54fdd
   :: BG.Ptr SDL_AudioStream
   -> IO BG.CBool
 hs_bindgen_df0b3314efa54fdd =
-  BG.fromFFIType hs_bindgen_df0b3314efa54fdd_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_df0b3314efa54fdd_base (BG.toFFIType x0))
 
 -- | Use this function to unpause audio playback on the audio device associated with an audio stream.
 --
@@ -2340,14 +2455,15 @@
 foreign import ccall safe "hs_bindgen_1ff005643c24e6c0"
   hs_bindgen_1ff005643c24e6c0_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_AudioStreamDevicePaused@
 hs_bindgen_1ff005643c24e6c0
   :: BG.Ptr SDL_AudioStream
   -> IO BG.CBool
 hs_bindgen_1ff005643c24e6c0 =
-  BG.fromFFIType hs_bindgen_1ff005643c24e6c0_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_1ff005643c24e6c0_base (BG.toFFIType x0))
 
 -- | Use this function to query if an audio device associated with a stream is paused.
 --
@@ -2375,14 +2491,15 @@
 foreign import ccall safe "hs_bindgen_3d4874ba18717a32"
   hs_bindgen_3d4874ba18717a32_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_LockAudioStream@
 hs_bindgen_3d4874ba18717a32
   :: BG.Ptr SDL_AudioStream
   -> IO BG.CBool
 hs_bindgen_3d4874ba18717a32 =
-  BG.fromFFIType hs_bindgen_3d4874ba18717a32_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3d4874ba18717a32_base (BG.toFFIType x0))
 
 -- | Lock an audio stream for serialized access.
 --
@@ -2413,14 +2530,15 @@
 foreign import ccall safe "hs_bindgen_0175d2c579f38af7"
   hs_bindgen_0175d2c579f38af7_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_UnlockAudioStream@
 hs_bindgen_0175d2c579f38af7
   :: BG.Ptr SDL_AudioStream
   -> IO BG.CBool
 hs_bindgen_0175d2c579f38af7 =
-  BG.fromFFIType hs_bindgen_0175d2c579f38af7_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_0175d2c579f38af7_base (BG.toFFIType x0))
 
 -- | Unlock an audio stream for serialized access.
 --
@@ -2449,7 +2567,7 @@
     :: BG.Ptr BG.Void
     -> BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_SetAudioStreamGetCallback@
 hs_bindgen_65648a5a73743f2d
@@ -2458,7 +2576,12 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_65648a5a73743f2d =
-  BG.fromFFIType hs_bindgen_65648a5a73743f2d_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_65648a5a73743f2d_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set a callback that runs when data is requested from an audio stream.
 --
@@ -2508,7 +2631,7 @@
     :: BG.Ptr BG.Void
     -> BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_SetAudioStreamPutCallback@
 hs_bindgen_61ea9930449caa3b
@@ -2517,7 +2640,12 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_61ea9930449caa3b =
-  BG.fromFFIType hs_bindgen_61ea9930449caa3b_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_61ea9930449caa3b_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set a callback that runs when data is added to an audio stream.
 --
@@ -2574,7 +2702,8 @@
   :: BG.Ptr SDL_AudioStream
   -> IO ()
 hs_bindgen_2f2920f372de3f91 =
-  BG.fromFFIType hs_bindgen_2f2920f372de3f91_base
+  \x0 ->
+    hs_bindgen_2f2920f372de3f91_base (BG.toFFIType x0)
 
 -- | Free an audio stream.
 --
@@ -2600,7 +2729,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_OpenAudioDeviceStream@
 foreign import ccall safe "hs_bindgen_41a1f387b2d98901"
   hs_bindgen_41a1f387b2d98901_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
@@ -2614,7 +2743,18 @@
   -> BG.Ptr BG.Void
   -> IO (BG.Ptr SDL_AudioStream)
 hs_bindgen_41a1f387b2d98901 =
-  BG.fromFFIType hs_bindgen_41a1f387b2d98901_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_41a1f387b2d98901_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Convenience function for straightforward audio init for the common case.
 --
@@ -2669,10 +2809,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_SetAudioPostmixCallback@
 foreign import ccall safe "hs_bindgen_4e2802e9ed6e7f25"
   hs_bindgen_4e2802e9ed6e7f25_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_SetAudioPostmixCallback@
 hs_bindgen_4e2802e9ed6e7f25
@@ -2681,7 +2821,12 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_4e2802e9ed6e7f25 =
-  BG.fromFFIType hs_bindgen_4e2802e9ed6e7f25_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_4e2802e9ed6e7f25_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set a callback that fires when data is about to be fed to an audio device.
 --
@@ -2731,11 +2876,11 @@
 foreign import ccall safe "hs_bindgen_a910288634dd93c9"
   hs_bindgen_a910288634dd93c9_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
+    -> BG.CBool
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_LoadWAV_IO@
 hs_bindgen_a910288634dd93c9
@@ -2746,7 +2891,20 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_a910288634dd93c9 =
-  BG.fromFFIType hs_bindgen_a910288634dd93c9_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_a910288634dd93c9_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Load the audio data of a WAVE file into memory.
 --
@@ -2820,7 +2978,7 @@
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_LoadWAV@
 hs_bindgen_9dc1494e309920f0
@@ -2830,7 +2988,18 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_9dc1494e309920f0 =
-  BG.fromFFIType hs_bindgen_9dc1494e309920f0_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_9dc1494e309920f0_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Loads a WAV from a file path.
 --
@@ -2878,10 +3047,10 @@
   hs_bindgen_f90c9509d9c249ee_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Word32
-    -> Float
-    -> IO BG.Word8
+    -> BG.CUInt
+    -> HsBindgen.Runtime.LibC.Word32
+    -> BG.CFloat
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_MixAudio@
 hs_bindgen_f90c9509d9c249ee
@@ -2892,7 +3061,20 @@
   -> BG.CFloat
   -> IO BG.CBool
 hs_bindgen_f90c9509d9c249ee =
-  BG.fromFFIType hs_bindgen_f90c9509d9c249ee_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_f90c9509d9c249ee_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Mix audio data in a specified format.
 --
@@ -2940,11 +3122,11 @@
   hs_bindgen_ee64493d4496844f_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_ConvertAudioSamples@
 hs_bindgen_ee64493d4496844f
@@ -2956,7 +3138,22 @@
   -> BG.Ptr BG.CInt
   -> IO BG.CBool
 hs_bindgen_ee64493d4496844f =
-  BG.fromFFIType hs_bindgen_ee64493d4496844f_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_ee64493d4496844f_base
+                    (BG.toFFIType x0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                    (BG.toFFIType x4)
+                    (BG.toFFIType x5)
+                )
 
 -- | Convert some audio data of one format to another format.
 --
@@ -3002,7 +3199,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_GetAudioFormatName@
 foreign import ccall safe "hs_bindgen_427a7131d02ce29b"
   hs_bindgen_427a7131d02ce29b_base
-    :: BG.Word32
+    :: BG.CUInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_GetAudioFormatName@
@@ -3010,7 +3207,8 @@
   :: SDL_AudioFormat
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_427a7131d02ce29b =
-  BG.fromFFIType hs_bindgen_427a7131d02ce29b_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_427a7131d02ce29b_base (BG.toFFIType x0))
 
 -- | Get the human readable name of an audio format.
 --
@@ -3032,15 +3230,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_GetSilenceValueForFormat@
 foreign import ccall safe "hs_bindgen_a78d31ca2af16da3"
   hs_bindgen_a78d31ca2af16da3_base
-    :: BG.Word32
-    -> IO BG.Int32
+    :: BG.CUInt
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Safe_SDL_GetSilenceValueForFormat@
 hs_bindgen_a78d31ca2af16da3
   :: SDL_AudioFormat
   -> IO BG.CInt
 hs_bindgen_a78d31ca2af16da3 =
-  BG.fromFFIType hs_bindgen_a78d31ca2af16da3_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a78d31ca2af16da3_base (BG.toFFIType x0))
 
 -- | Get the appropriate memset value for silencing an audio format.
 --
diff --git a/src/SDL3/Sys/Bindgen/Audio/Unsafe.hs b/src/SDL3/Sys/Bindgen/Audio/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Audio/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Audio/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Audio.Unsafe (
@@ -64,6 +66,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -74,7 +79,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_audio.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_audio.h>"
          , "signed int hs_bindgen_3fadb766434bf32a (void)"
          , "{"
          , "  return (SDL_GetNumAudioDrivers)();"
@@ -500,12 +509,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_GetNumAudioDrivers@
 foreign import ccall unsafe "hs_bindgen_3fadb766434bf32a"
   hs_bindgen_3fadb766434bf32a_base
-    :: IO BG.Int32
+    :: IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_GetNumAudioDrivers@
 hs_bindgen_3fadb766434bf32a :: IO BG.CInt
 hs_bindgen_3fadb766434bf32a =
-  BG.fromFFIType hs_bindgen_3fadb766434bf32a_base
+  fmap BG.fromFFIType hs_bindgen_3fadb766434bf32a_base
 
 -- | Use this function to get the number of built-in audio drivers.
 --
@@ -528,7 +537,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_GetAudioDriver@
 foreign import ccall unsafe "hs_bindgen_088e341c96ec752f"
   hs_bindgen_088e341c96ec752f_base
-    :: BG.Int32
+    :: BG.CInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_GetAudioDriver@
@@ -536,7 +545,8 @@
   :: BG.CInt
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_088e341c96ec752f =
-  BG.fromFFIType hs_bindgen_088e341c96ec752f_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_088e341c96ec752f_base (BG.toFFIType x0))
 
 -- | Use this function to get the name of a built in audio driver.
 --
@@ -569,7 +579,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_GetCurrentAudioDriver@
 hs_bindgen_8d83991bf7c57ced :: IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_8d83991bf7c57ced =
-  BG.fromFFIType hs_bindgen_8d83991bf7c57ced_base
+  fmap BG.fromFFIType hs_bindgen_8d83991bf7c57ced_base
 
 -- | Get the name of the current audio driver.
 --
@@ -597,7 +607,8 @@
   :: BG.Ptr BG.CInt
   -> IO (BG.Ptr SDL_AudioDeviceID)
 hs_bindgen_ac01234fb497c823 =
-  BG.fromFFIType hs_bindgen_ac01234fb497c823_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_ac01234fb497c823_base (BG.toFFIType x0))
 
 -- | Get a list of currently-connected audio playback devices.
 --
@@ -636,7 +647,8 @@
   :: BG.Ptr BG.CInt
   -> IO (BG.Ptr SDL_AudioDeviceID)
 hs_bindgen_3d763bb9432bd9eb =
-  BG.fromFFIType hs_bindgen_3d763bb9432bd9eb_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3d763bb9432bd9eb_base (BG.toFFIType x0))
 
 -- | Get a list of currently-connected audio recording devices.
 --
@@ -667,7 +679,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_GetAudioDeviceName@
 foreign import ccall unsafe "hs_bindgen_b2c73ae14aa40e78"
   hs_bindgen_b2c73ae14aa40e78_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_GetAudioDeviceName@
@@ -675,7 +687,8 @@
   :: SDL_AudioDeviceID
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_b2c73ae14aa40e78 =
-  BG.fromFFIType hs_bindgen_b2c73ae14aa40e78_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_b2c73ae14aa40e78_base (BG.toFFIType x0))
 
 -- | Get the human-readable name of a specific audio device.
 --
@@ -701,10 +714,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_GetAudioDeviceFormat@
 foreign import ccall unsafe "hs_bindgen_8117a6bb4c2d4973"
   hs_bindgen_8117a6bb4c2d4973_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_GetAudioDeviceFormat@
 hs_bindgen_8117a6bb4c2d4973
@@ -713,7 +726,12 @@
   -> BG.Ptr BG.CInt
   -> IO BG.CBool
 hs_bindgen_8117a6bb4c2d4973 =
-  BG.fromFFIType hs_bindgen_8117a6bb4c2d4973_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_8117a6bb4c2d4973_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get the current audio format of a specific audio device.
 --
@@ -754,7 +772,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_GetAudioDeviceChannelMap@
 foreign import ccall unsafe "hs_bindgen_4c4c9c72b628a61b"
   hs_bindgen_4c4c9c72b628a61b_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> IO (BG.Ptr BG.Void)
 
@@ -764,7 +782,9 @@
   -> BG.Ptr BG.CInt
   -> IO (BG.Ptr BG.CInt)
 hs_bindgen_4c4c9c72b628a61b =
-  BG.fromFFIType hs_bindgen_4c4c9c72b628a61b_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_4c4c9c72b628a61b_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the current channel map of an audio device.
 --
@@ -797,9 +817,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_OpenAudioDevice@
 foreign import ccall unsafe "hs_bindgen_b33e26bd03556385"
   hs_bindgen_b33e26bd03556385_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_OpenAudioDevice@
 hs_bindgen_b33e26bd03556385
@@ -807,7 +827,9 @@
   -> PtrConst.PtrConst SDL_AudioSpec
   -> IO SDL_AudioDeviceID
 hs_bindgen_b33e26bd03556385 =
-  BG.fromFFIType hs_bindgen_b33e26bd03556385_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_b33e26bd03556385_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Open a specific audio device.
 --
@@ -853,15 +875,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_IsAudioDevicePhysical@
 foreign import ccall unsafe "hs_bindgen_40b4f5474e930396"
   hs_bindgen_40b4f5474e930396_base
-    :: BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_IsAudioDevicePhysical@
 hs_bindgen_40b4f5474e930396
   :: SDL_AudioDeviceID
   -> IO BG.CBool
 hs_bindgen_40b4f5474e930396 =
-  BG.fromFFIType hs_bindgen_40b4f5474e930396_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_40b4f5474e930396_base (BG.toFFIType x0))
 
 -- | Determine if an audio device is physical (instead of logical).
 --
@@ -890,15 +913,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_IsAudioDevicePlayback@
 foreign import ccall unsafe "hs_bindgen_3529c6e832f821e2"
   hs_bindgen_3529c6e832f821e2_base
-    :: BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_IsAudioDevicePlayback@
 hs_bindgen_3529c6e832f821e2
   :: SDL_AudioDeviceID
   -> IO BG.CBool
 hs_bindgen_3529c6e832f821e2 =
-  BG.fromFFIType hs_bindgen_3529c6e832f821e2_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3529c6e832f821e2_base (BG.toFFIType x0))
 
 -- | Determine if an audio device is a playback device (instead of recording).
 --
@@ -923,15 +947,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_PauseAudioDevice@
 foreign import ccall unsafe "hs_bindgen_8b915f5bea8027b8"
   hs_bindgen_8b915f5bea8027b8_base
-    :: BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_PauseAudioDevice@
 hs_bindgen_8b915f5bea8027b8
   :: SDL_AudioDeviceID
   -> IO BG.CBool
 hs_bindgen_8b915f5bea8027b8 =
-  BG.fromFFIType hs_bindgen_8b915f5bea8027b8_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_8b915f5bea8027b8_base (BG.toFFIType x0))
 
 -- | Use this function to pause audio playback on a specified device.
 --
@@ -963,15 +988,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_ResumeAudioDevice@
 foreign import ccall unsafe "hs_bindgen_459b30881d6df917"
   hs_bindgen_459b30881d6df917_base
-    :: BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_ResumeAudioDevice@
 hs_bindgen_459b30881d6df917
   :: SDL_AudioDeviceID
   -> IO BG.CBool
 hs_bindgen_459b30881d6df917 =
-  BG.fromFFIType hs_bindgen_459b30881d6df917_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_459b30881d6df917_base (BG.toFFIType x0))
 
 -- | Use this function to unpause audio playback on a specified device.
 --
@@ -1001,15 +1027,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_AudioDevicePaused@
 foreign import ccall unsafe "hs_bindgen_672dd7353e8716ce"
   hs_bindgen_672dd7353e8716ce_base
-    :: BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_AudioDevicePaused@
 hs_bindgen_672dd7353e8716ce
   :: SDL_AudioDeviceID
   -> IO BG.CBool
 hs_bindgen_672dd7353e8716ce =
-  BG.fromFFIType hs_bindgen_672dd7353e8716ce_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_672dd7353e8716ce_base (BG.toFFIType x0))
 
 -- | Use this function to query if an audio device is paused.
 --
@@ -1037,15 +1064,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_GetAudioDeviceGain@
 foreign import ccall unsafe "hs_bindgen_c8b5c017b7910d18"
   hs_bindgen_c8b5c017b7910d18_base
-    :: BG.Word32
-    -> IO Float
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CFloat
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_GetAudioDeviceGain@
 hs_bindgen_c8b5c017b7910d18
   :: SDL_AudioDeviceID
   -> IO BG.CFloat
 hs_bindgen_c8b5c017b7910d18 =
-  BG.fromFFIType hs_bindgen_c8b5c017b7910d18_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c8b5c017b7910d18_base (BG.toFFIType x0))
 
 -- | Get the gain of an audio device.
 --
@@ -1075,9 +1103,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_SetAudioDeviceGain@
 foreign import ccall unsafe "hs_bindgen_13f5c18c777458dd"
   hs_bindgen_13f5c18c777458dd_base
-    :: BG.Word32
-    -> Float
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> BG.CFloat
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_SetAudioDeviceGain@
 hs_bindgen_13f5c18c777458dd
@@ -1085,7 +1113,9 @@
   -> BG.CFloat
   -> IO BG.CBool
 hs_bindgen_13f5c18c777458dd =
-  BG.fromFFIType hs_bindgen_13f5c18c777458dd_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_13f5c18c777458dd_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Change the gain of an audio device.
 --
@@ -1121,7 +1151,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_CloseAudioDevice@
 foreign import ccall unsafe "hs_bindgen_1f1d897129d034a7"
   hs_bindgen_1f1d897129d034a7_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_CloseAudioDevice@
@@ -1129,7 +1159,8 @@
   :: SDL_AudioDeviceID
   -> IO ()
 hs_bindgen_1f1d897129d034a7 =
-  BG.fromFFIType hs_bindgen_1f1d897129d034a7_base
+  \x0 ->
+    hs_bindgen_1f1d897129d034a7_base (BG.toFFIType x0)
 
 -- | Close a previously-opened audio device.
 --
@@ -1155,10 +1186,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_BindAudioStreams@
 foreign import ccall unsafe "hs_bindgen_347a950bd3b0f9b2"
   hs_bindgen_347a950bd3b0f9b2_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_BindAudioStreams@
 hs_bindgen_347a950bd3b0f9b2
@@ -1167,7 +1198,12 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_347a950bd3b0f9b2 =
-  BG.fromFFIType hs_bindgen_347a950bd3b0f9b2_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_347a950bd3b0f9b2_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Bind a list of audio streams to an audio device.
 --
@@ -1207,9 +1243,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_BindAudioStream@
 foreign import ccall unsafe "hs_bindgen_98bc5733fab56d11"
   hs_bindgen_98bc5733fab56d11_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_BindAudioStream@
 hs_bindgen_98bc5733fab56d11
@@ -1217,7 +1253,9 @@
   -> BG.Ptr SDL_AudioStream
   -> IO BG.CBool
 hs_bindgen_98bc5733fab56d11 =
-  BG.fromFFIType hs_bindgen_98bc5733fab56d11_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_98bc5733fab56d11_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Bind a single audio stream to an audio device.
 --
@@ -1248,7 +1286,7 @@
 foreign import ccall unsafe "hs_bindgen_ec7f859bb5c9ee4b"
   hs_bindgen_ec7f859bb5c9ee4b_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_UnbindAudioStreams@
@@ -1257,7 +1295,9 @@
   -> BG.CInt
   -> IO ()
 hs_bindgen_ec7f859bb5c9ee4b =
-  BG.fromFFIType hs_bindgen_ec7f859bb5c9ee4b_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_ec7f859bb5c9ee4b_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Unbind a list of audio streams from their audio devices.
 --
@@ -1295,7 +1335,8 @@
   :: BG.Ptr SDL_AudioStream
   -> IO ()
 hs_bindgen_4c718e02b5ad1279 =
-  BG.fromFFIType hs_bindgen_4c718e02b5ad1279_base
+  \x0 ->
+    hs_bindgen_4c718e02b5ad1279_base (BG.toFFIType x0)
 
 -- | Unbind a single audio stream from its audio device.
 --
@@ -1320,14 +1361,15 @@
 foreign import ccall unsafe "hs_bindgen_caea3c9230448fae"
   hs_bindgen_caea3c9230448fae_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_GetAudioStreamDevice@
 hs_bindgen_caea3c9230448fae
   :: BG.Ptr SDL_AudioStream
   -> IO SDL_AudioDeviceID
 hs_bindgen_caea3c9230448fae =
-  BG.fromFFIType hs_bindgen_caea3c9230448fae_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_caea3c9230448fae_base (BG.toFFIType x0))
 
 -- | Query an audio stream for its currently-bound device.
 --
@@ -1366,7 +1408,9 @@
   -> PtrConst.PtrConst SDL_AudioSpec
   -> IO (BG.Ptr SDL_AudioStream)
 hs_bindgen_bcc8d812c83afb38 =
-  BG.fromFFIType hs_bindgen_bcc8d812c83afb38_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_bcc8d812c83afb38_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Create a new audio stream.
 --
@@ -1397,14 +1441,15 @@
 foreign import ccall unsafe "hs_bindgen_a513bf944ff78877"
   hs_bindgen_a513bf944ff78877_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_GetAudioStreamProperties@
 hs_bindgen_a513bf944ff78877
   :: BG.Ptr SDL_AudioStream
   -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
 hs_bindgen_a513bf944ff78877 =
-  BG.fromFFIType hs_bindgen_a513bf944ff78877_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a513bf944ff78877_base (BG.toFFIType x0))
 
 -- | Get the properties associated with an audio stream.
 --
@@ -1434,7 +1479,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_GetAudioStreamFormat@
 hs_bindgen_4b2310dc9f80a9f8
@@ -1443,7 +1488,12 @@
   -> BG.Ptr SDL_AudioSpec
   -> IO BG.CBool
 hs_bindgen_4b2310dc9f80a9f8 =
-  BG.fromFFIType hs_bindgen_4b2310dc9f80a9f8_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_4b2310dc9f80a9f8_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Query the current format of an audio stream.
 --
@@ -1479,7 +1529,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_SetAudioStreamFormat@
 hs_bindgen_a8488bb9b411fc5d
@@ -1488,7 +1538,12 @@
   -> PtrConst.PtrConst SDL_AudioSpec
   -> IO BG.CBool
 hs_bindgen_a8488bb9b411fc5d =
-  BG.fromFFIType hs_bindgen_a8488bb9b411fc5d_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_a8488bb9b411fc5d_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Change the input and output formats of an audio stream.
 --
@@ -1530,14 +1585,15 @@
 foreign import ccall unsafe "hs_bindgen_15397b18d1ddad29"
   hs_bindgen_15397b18d1ddad29_base
     :: BG.Ptr BG.Void
-    -> IO Float
+    -> IO BG.CFloat
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_GetAudioStreamFrequencyRatio@
 hs_bindgen_15397b18d1ddad29
   :: BG.Ptr SDL_AudioStream
   -> IO BG.CFloat
 hs_bindgen_15397b18d1ddad29 =
-  BG.fromFFIType hs_bindgen_15397b18d1ddad29_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_15397b18d1ddad29_base (BG.toFFIType x0))
 
 -- | Get the frequency ratio of an audio stream.
 --
@@ -1563,8 +1619,8 @@
 foreign import ccall unsafe "hs_bindgen_86275fb04d01b569"
   hs_bindgen_86275fb04d01b569_base
     :: BG.Ptr BG.Void
-    -> Float
-    -> IO BG.Word8
+    -> BG.CFloat
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_SetAudioStreamFrequencyRatio@
 hs_bindgen_86275fb04d01b569
@@ -1572,7 +1628,9 @@
   -> BG.CFloat
   -> IO BG.CBool
 hs_bindgen_86275fb04d01b569 =
-  BG.fromFFIType hs_bindgen_86275fb04d01b569_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_86275fb04d01b569_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Change the frequency ratio of an audio stream.
 --
@@ -1606,14 +1664,15 @@
 foreign import ccall unsafe "hs_bindgen_b0201fb647f1a55c"
   hs_bindgen_b0201fb647f1a55c_base
     :: BG.Ptr BG.Void
-    -> IO Float
+    -> IO BG.CFloat
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_GetAudioStreamGain@
 hs_bindgen_b0201fb647f1a55c
   :: BG.Ptr SDL_AudioStream
   -> IO BG.CFloat
 hs_bindgen_b0201fb647f1a55c =
-  BG.fromFFIType hs_bindgen_b0201fb647f1a55c_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_b0201fb647f1a55c_base (BG.toFFIType x0))
 
 -- | Get the gain of an audio stream.
 --
@@ -1642,8 +1701,8 @@
 foreign import ccall unsafe "hs_bindgen_90b7daeac2130f28"
   hs_bindgen_90b7daeac2130f28_base
     :: BG.Ptr BG.Void
-    -> Float
-    -> IO BG.Word8
+    -> BG.CFloat
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_SetAudioStreamGain@
 hs_bindgen_90b7daeac2130f28
@@ -1651,7 +1710,9 @@
   -> BG.CFloat
   -> IO BG.CBool
 hs_bindgen_90b7daeac2130f28 =
-  BG.fromFFIType hs_bindgen_90b7daeac2130f28_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_90b7daeac2130f28_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Change the gain of an audio stream.
 --
@@ -1695,7 +1756,9 @@
   -> BG.Ptr BG.CInt
   -> IO (BG.Ptr BG.CInt)
 hs_bindgen_1b79fdfec2f48b4f =
-  BG.fromFFIType hs_bindgen_1b79fdfec2f48b4f_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_1b79fdfec2f48b4f_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the current input channel map of an audio stream.
 --
@@ -1738,7 +1801,9 @@
   -> BG.Ptr BG.CInt
   -> IO (BG.Ptr BG.CInt)
 hs_bindgen_0c6aa9ee60372768 =
-  BG.fromFFIType hs_bindgen_0c6aa9ee60372768_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_0c6aa9ee60372768_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the current output channel map of an audio stream.
 --
@@ -1773,8 +1838,8 @@
   hs_bindgen_c2adfd0bb37d9aa2_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_SetAudioStreamInputChannelMap@
 hs_bindgen_c2adfd0bb37d9aa2
@@ -1783,7 +1848,12 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_c2adfd0bb37d9aa2 =
-  BG.fromFFIType hs_bindgen_c2adfd0bb37d9aa2_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_c2adfd0bb37d9aa2_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set the current input channel map of an audio stream.
 --
@@ -1836,8 +1906,8 @@
   hs_bindgen_b0ed00a566f29be4_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_SetAudioStreamOutputChannelMap@
 hs_bindgen_b0ed00a566f29be4
@@ -1846,7 +1916,12 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_b0ed00a566f29be4 =
-  BG.fromFFIType hs_bindgen_b0ed00a566f29be4_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_b0ed00a566f29be4_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set the current output channel map of an audio stream.
 --
@@ -1899,8 +1974,8 @@
   hs_bindgen_32b25453fa9b8c52_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_PutAudioStreamData@
 hs_bindgen_32b25453fa9b8c52
@@ -1909,7 +1984,12 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_32b25453fa9b8c52 =
-  BG.fromFFIType hs_bindgen_32b25453fa9b8c52_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_32b25453fa9b8c52_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Add data to the stream.
 --
@@ -1947,10 +2027,10 @@
   hs_bindgen_8e034cb6408bf39f_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_PutAudioStreamDataNoCopy@
 hs_bindgen_8e034cb6408bf39f
@@ -1961,7 +2041,20 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_8e034cb6408bf39f =
-  BG.fromFFIType hs_bindgen_8e034cb6408bf39f_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_8e034cb6408bf39f_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Add external data to an audio stream without copying it.
 --
@@ -2012,9 +2105,9 @@
   hs_bindgen_2517bbaa11deade2_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_PutAudioStreamPlanarData@
 hs_bindgen_2517bbaa11deade2
@@ -2024,7 +2117,18 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_2517bbaa11deade2 =
-  BG.fromFFIType hs_bindgen_2517bbaa11deade2_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_2517bbaa11deade2_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Add data to the stream with each channel in a separate array.
 --
@@ -2073,8 +2177,8 @@
   hs_bindgen_05c01671d414ec35_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Int32
+    -> BG.CInt
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_GetAudioStreamData@
 hs_bindgen_05c01671d414ec35
@@ -2083,7 +2187,12 @@
   -> BG.CInt
   -> IO BG.CInt
 hs_bindgen_05c01671d414ec35 =
-  BG.fromFFIType hs_bindgen_05c01671d414ec35_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_05c01671d414ec35_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get converted\/resampled data from the stream.
 --
@@ -2120,14 +2229,15 @@
 foreign import ccall unsafe "hs_bindgen_6693b5a0bc38b7f9"
   hs_bindgen_6693b5a0bc38b7f9_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_GetAudioStreamAvailable@
 hs_bindgen_6693b5a0bc38b7f9
   :: BG.Ptr SDL_AudioStream
   -> IO BG.CInt
 hs_bindgen_6693b5a0bc38b7f9 =
-  BG.fromFFIType hs_bindgen_6693b5a0bc38b7f9_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_6693b5a0bc38b7f9_base (BG.toFFIType x0))
 
 -- | Get the number of converted\/resampled bytes available.
 --
@@ -2157,14 +2267,15 @@
 foreign import ccall unsafe "hs_bindgen_75fb0631cff6ceae"
   hs_bindgen_75fb0631cff6ceae_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_GetAudioStreamQueued@
 hs_bindgen_75fb0631cff6ceae
   :: BG.Ptr SDL_AudioStream
   -> IO BG.CInt
 hs_bindgen_75fb0631cff6ceae =
-  BG.fromFFIType hs_bindgen_75fb0631cff6ceae_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_75fb0631cff6ceae_base (BG.toFFIType x0))
 
 -- | Get the number of bytes currently queued.
 --
@@ -2198,14 +2309,15 @@
 foreign import ccall unsafe "hs_bindgen_ad5616a591f54851"
   hs_bindgen_ad5616a591f54851_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_FlushAudioStream@
 hs_bindgen_ad5616a591f54851
   :: BG.Ptr SDL_AudioStream
   -> IO BG.CBool
 hs_bindgen_ad5616a591f54851 =
-  BG.fromFFIType hs_bindgen_ad5616a591f54851_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_ad5616a591f54851_base (BG.toFFIType x0))
 
 -- | Tell the stream that you\'re done sending data, and anything being buffered should be converted\/resampled and made available immediately.
 --
@@ -2232,14 +2344,15 @@
 foreign import ccall unsafe "hs_bindgen_f4d190bd770b2df3"
   hs_bindgen_f4d190bd770b2df3_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_ClearAudioStream@
 hs_bindgen_f4d190bd770b2df3
   :: BG.Ptr SDL_AudioStream
   -> IO BG.CBool
 hs_bindgen_f4d190bd770b2df3 =
-  BG.fromFFIType hs_bindgen_f4d190bd770b2df3_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_f4d190bd770b2df3_base (BG.toFFIType x0))
 
 -- | Clear any pending data in the stream.
 --
@@ -2266,14 +2379,15 @@
 foreign import ccall unsafe "hs_bindgen_fa7a02853d833a6c"
   hs_bindgen_fa7a02853d833a6c_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_PauseAudioStreamDevice@
 hs_bindgen_fa7a02853d833a6c
   :: BG.Ptr SDL_AudioStream
   -> IO BG.CBool
 hs_bindgen_fa7a02853d833a6c =
-  BG.fromFFIType hs_bindgen_fa7a02853d833a6c_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_fa7a02853d833a6c_base (BG.toFFIType x0))
 
 -- | Use this function to pause audio playback on the audio device associated with an audio stream.
 --
@@ -2303,14 +2417,15 @@
 foreign import ccall unsafe "hs_bindgen_0460d36f7042c57a"
   hs_bindgen_0460d36f7042c57a_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_ResumeAudioStreamDevice@
 hs_bindgen_0460d36f7042c57a
   :: BG.Ptr SDL_AudioStream
   -> IO BG.CBool
 hs_bindgen_0460d36f7042c57a =
-  BG.fromFFIType hs_bindgen_0460d36f7042c57a_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_0460d36f7042c57a_base (BG.toFFIType x0))
 
 -- | Use this function to unpause audio playback on the audio device associated with an audio stream.
 --
@@ -2340,14 +2455,15 @@
 foreign import ccall unsafe "hs_bindgen_ffc6b2bb5b052f6d"
   hs_bindgen_ffc6b2bb5b052f6d_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_AudioStreamDevicePaused@
 hs_bindgen_ffc6b2bb5b052f6d
   :: BG.Ptr SDL_AudioStream
   -> IO BG.CBool
 hs_bindgen_ffc6b2bb5b052f6d =
-  BG.fromFFIType hs_bindgen_ffc6b2bb5b052f6d_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_ffc6b2bb5b052f6d_base (BG.toFFIType x0))
 
 -- | Use this function to query if an audio device associated with a stream is paused.
 --
@@ -2375,14 +2491,15 @@
 foreign import ccall unsafe "hs_bindgen_0f17d22c674fb4db"
   hs_bindgen_0f17d22c674fb4db_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_LockAudioStream@
 hs_bindgen_0f17d22c674fb4db
   :: BG.Ptr SDL_AudioStream
   -> IO BG.CBool
 hs_bindgen_0f17d22c674fb4db =
-  BG.fromFFIType hs_bindgen_0f17d22c674fb4db_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_0f17d22c674fb4db_base (BG.toFFIType x0))
 
 -- | Lock an audio stream for serialized access.
 --
@@ -2413,14 +2530,15 @@
 foreign import ccall unsafe "hs_bindgen_03cca6936a438b69"
   hs_bindgen_03cca6936a438b69_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_UnlockAudioStream@
 hs_bindgen_03cca6936a438b69
   :: BG.Ptr SDL_AudioStream
   -> IO BG.CBool
 hs_bindgen_03cca6936a438b69 =
-  BG.fromFFIType hs_bindgen_03cca6936a438b69_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_03cca6936a438b69_base (BG.toFFIType x0))
 
 -- | Unlock an audio stream for serialized access.
 --
@@ -2449,7 +2567,7 @@
     :: BG.Ptr BG.Void
     -> BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_SetAudioStreamGetCallback@
 hs_bindgen_dc2f74eae1a93c31
@@ -2458,7 +2576,12 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_dc2f74eae1a93c31 =
-  BG.fromFFIType hs_bindgen_dc2f74eae1a93c31_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_dc2f74eae1a93c31_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set a callback that runs when data is requested from an audio stream.
 --
@@ -2508,7 +2631,7 @@
     :: BG.Ptr BG.Void
     -> BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_SetAudioStreamPutCallback@
 hs_bindgen_146f387abf38d92a
@@ -2517,7 +2640,12 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_146f387abf38d92a =
-  BG.fromFFIType hs_bindgen_146f387abf38d92a_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_146f387abf38d92a_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set a callback that runs when data is added to an audio stream.
 --
@@ -2574,7 +2702,8 @@
   :: BG.Ptr SDL_AudioStream
   -> IO ()
 hs_bindgen_49f1ea9de2669438 =
-  BG.fromFFIType hs_bindgen_49f1ea9de2669438_base
+  \x0 ->
+    hs_bindgen_49f1ea9de2669438_base (BG.toFFIType x0)
 
 -- | Free an audio stream.
 --
@@ -2600,7 +2729,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_OpenAudioDeviceStream@
 foreign import ccall unsafe "hs_bindgen_c626b93042e17a97"
   hs_bindgen_c626b93042e17a97_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
@@ -2614,7 +2743,18 @@
   -> BG.Ptr BG.Void
   -> IO (BG.Ptr SDL_AudioStream)
 hs_bindgen_c626b93042e17a97 =
-  BG.fromFFIType hs_bindgen_c626b93042e17a97_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_c626b93042e17a97_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Convenience function for straightforward audio init for the common case.
 --
@@ -2669,10 +2809,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_SetAudioPostmixCallback@
 foreign import ccall unsafe "hs_bindgen_2207c9d46d721c22"
   hs_bindgen_2207c9d46d721c22_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_SetAudioPostmixCallback@
 hs_bindgen_2207c9d46d721c22
@@ -2681,7 +2821,12 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_2207c9d46d721c22 =
-  BG.fromFFIType hs_bindgen_2207c9d46d721c22_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_2207c9d46d721c22_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set a callback that fires when data is about to be fed to an audio device.
 --
@@ -2731,11 +2876,11 @@
 foreign import ccall unsafe "hs_bindgen_7d7f4ec89c051bd9"
   hs_bindgen_7d7f4ec89c051bd9_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
+    -> BG.CBool
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_LoadWAV_IO@
 hs_bindgen_7d7f4ec89c051bd9
@@ -2746,7 +2891,20 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_7d7f4ec89c051bd9 =
-  BG.fromFFIType hs_bindgen_7d7f4ec89c051bd9_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_7d7f4ec89c051bd9_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Load the audio data of a WAVE file into memory.
 --
@@ -2820,7 +2978,7 @@
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_LoadWAV@
 hs_bindgen_618ebcf6bf6e8650
@@ -2830,7 +2988,18 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_618ebcf6bf6e8650 =
-  BG.fromFFIType hs_bindgen_618ebcf6bf6e8650_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_618ebcf6bf6e8650_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Loads a WAV from a file path.
 --
@@ -2878,10 +3047,10 @@
   hs_bindgen_da6d00b62c3fdd0b_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Word32
-    -> Float
-    -> IO BG.Word8
+    -> BG.CUInt
+    -> HsBindgen.Runtime.LibC.Word32
+    -> BG.CFloat
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_MixAudio@
 hs_bindgen_da6d00b62c3fdd0b
@@ -2892,7 +3061,20 @@
   -> BG.CFloat
   -> IO BG.CBool
 hs_bindgen_da6d00b62c3fdd0b =
-  BG.fromFFIType hs_bindgen_da6d00b62c3fdd0b_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_da6d00b62c3fdd0b_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Mix audio data in a specified format.
 --
@@ -2940,11 +3122,11 @@
   hs_bindgen_a6d61748227d6f0b_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_ConvertAudioSamples@
 hs_bindgen_a6d61748227d6f0b
@@ -2956,7 +3138,22 @@
   -> BG.Ptr BG.CInt
   -> IO BG.CBool
 hs_bindgen_a6d61748227d6f0b =
-  BG.fromFFIType hs_bindgen_a6d61748227d6f0b_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_a6d61748227d6f0b_base
+                    (BG.toFFIType x0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                    (BG.toFFIType x4)
+                    (BG.toFFIType x5)
+                )
 
 -- | Convert some audio data of one format to another format.
 --
@@ -3002,7 +3199,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_GetAudioFormatName@
 foreign import ccall unsafe "hs_bindgen_43b528b55cc775cf"
   hs_bindgen_43b528b55cc775cf_base
-    :: BG.Word32
+    :: BG.CUInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_GetAudioFormatName@
@@ -3010,7 +3207,8 @@
   :: SDL_AudioFormat
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_43b528b55cc775cf =
-  BG.fromFFIType hs_bindgen_43b528b55cc775cf_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_43b528b55cc775cf_base (BG.toFFIType x0))
 
 -- | Get the human readable name of an audio format.
 --
@@ -3032,15 +3230,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_GetSilenceValueForFormat@
 foreign import ccall unsafe "hs_bindgen_0154acf0cb371eab"
   hs_bindgen_0154acf0cb371eab_base
-    :: BG.Word32
-    -> IO BG.Int32
+    :: BG.CUInt
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Audio_Unsafe_SDL_GetSilenceValueForFormat@
 hs_bindgen_0154acf0cb371eab
   :: SDL_AudioFormat
   -> IO BG.CInt
 hs_bindgen_0154acf0cb371eab =
-  BG.fromFFIType hs_bindgen_0154acf0cb371eab_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_0154acf0cb371eab_base (BG.toFFIType x0))
 
 -- | Get the appropriate memset value for silencing an audio format.
 --
diff --git a/src/SDL3/Sys/Bindgen/AudioShims/FunPtr.hs b/src/SDL3/Sys/Bindgen/AudioShims/FunPtr.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/AudioShims/FunPtr.hs
@@ -0,0 +1,131 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.AudioShims.FunPtr (
+  SDL3.Sys.Bindgen.AudioShims.FunPtr.lithon_SDL_AUDIO_FRAMESIZE,
+  SDL3.Sys.Bindgen.AudioShims.FunPtr.lithon_SDL_DEFINE_AUDIO_FORMAT,
+)
+where
+
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+import SDL3.Sys.Bindgen.Audio qualified
+import SDL3.Sys.Bindgen.Stdinc qualified
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <sdl3-bindgen-sys/SDL_audio_shims.h>"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.AudioShims_get_lithon_SDL_AUDIO_FRAMESIZE */"
+         , "__attribute__ ((const))"
+         , "signed int (*hs_bindgen_3cb9c5cf09b44f74 (void)) ("
+         , "  SDL_AudioSpec const *arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_AUDIO_FRAMESIZE;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.AudioShims_get_lithon_SDL_DEFINE_AUDIO_FORMAT */"
+         , "__attribute__ ((const))"
+         , "SDL_AudioFormat (*hs_bindgen_009c1c5649507734 (void)) ("
+         , "  _Bool arg1,"
+         , "  _Bool arg2,"
+         , "  _Bool arg3,"
+         , "  Uint8 arg4"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_DEFINE_AUDIO_FORMAT;"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.AudioShims_get_lithon_SDL_AUDIO_FRAMESIZE@
+foreign import ccall unsafe "hs_bindgen_3cb9c5cf09b44f74"
+  hs_bindgen_3cb9c5cf09b44f74_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.AudioShims_get_lithon_SDL_AUDIO_FRAMESIZE@
+hs_bindgen_3cb9c5cf09b44f74
+  :: IO (BG.FunPtr (PtrConst.PtrConst SDL3.Sys.Bindgen.Audio.SDL_AudioSpec -> IO BG.CInt))
+hs_bindgen_3cb9c5cf09b44f74 =
+  fmap BG.fromFFIType hs_bindgen_3cb9c5cf09b44f74_base
+
+{-# NOINLINE lithon_SDL_AUDIO_FRAMESIZE #-}
+
+-- | Calculate the size of each audio frame (in bytes) from an SDL_AudioSpec.
+--
+--     The SDL_AUDIO_FRAMESIZE macro as a function. This reports on the size of an audio sample frame: stereo Sint16 data (2 channels of 2 bytes each) would be 4 bytes per frame, for example.
+--
+--     [@spec@]: the SDL_AudioSpec to query.
+--
+--     [Returns]: the number of bytes used per sample frame.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_AUDIO_FRAMESIZE@, defined at @sdl3-bindgen-sys\/SDL_audio_shims.h 38:23@
+lithon_SDL_AUDIO_FRAMESIZE
+  :: BG.FunPtr (PtrConst.PtrConst SDL3.Sys.Bindgen.Audio.SDL_AudioSpec -> IO BG.CInt)
+lithon_SDL_AUDIO_FRAMESIZE =
+  BG.unsafePerformIO hs_bindgen_3cb9c5cf09b44f74
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.AudioShims_get_lithon_SDL_DEFINE_AUDIO_FORMAT@
+foreign import ccall unsafe "hs_bindgen_009c1c5649507734"
+  hs_bindgen_009c1c5649507734_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.AudioShims_get_lithon_SDL_DEFINE_AUDIO_FORMAT@
+hs_bindgen_009c1c5649507734
+  :: IO
+       ( BG.FunPtr
+           ( BG.CBool
+             -> BG.CBool
+             -> BG.CBool
+             -> SDL3.Sys.Bindgen.Stdinc.Uint8
+             -> IO SDL3.Sys.Bindgen.Audio.SDL_AudioFormat
+           )
+       )
+hs_bindgen_009c1c5649507734 =
+  fmap BG.fromFFIType hs_bindgen_009c1c5649507734_base
+
+{-# NOINLINE lithon_SDL_DEFINE_AUDIO_FORMAT #-}
+
+-- | Define an SDL_AudioFormat value.
+--
+--     The SDL_DEFINE_AUDIO_FORMAT macro as a function. SDL does not support custom audio formats, so this is not of much use externally, but it can be illustrative as to what the various bits of an SDL_AudioFormat mean. For example, SDL_AUDIO_S32LE is signed, littleendian, integer, 32 bits.
+--
+--     [@is_signed@]: true for signed data, false for unsigned data.
+--
+--     [@is_bigendian@]: true for bigendian data, false for littleendian data.
+--
+--     [@is_float@]: true for floating point data, false for integer data.
+--
+--     [@bits@]: number of bits per sample.
+--
+--     [Returns]: a format value in the style of SDL_AudioFormat.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_DEFINE_AUDIO_FORMAT@, defined at @sdl3-bindgen-sys\/SDL_audio_shims.h 61:35@
+lithon_SDL_DEFINE_AUDIO_FORMAT
+  :: BG.FunPtr
+       ( BG.CBool
+         -> BG.CBool
+         -> BG.CBool
+         -> SDL3.Sys.Bindgen.Stdinc.Uint8
+         -> IO SDL3.Sys.Bindgen.Audio.SDL_AudioFormat
+       )
+lithon_SDL_DEFINE_AUDIO_FORMAT =
+  BG.unsafePerformIO hs_bindgen_009c1c5649507734
diff --git a/src/SDL3/Sys/Bindgen/AudioShims/Safe.hs b/src/SDL3/Sys/Bindgen/AudioShims/Safe.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/AudioShims/Safe.hs
@@ -0,0 +1,143 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.AudioShims.Safe (
+  SDL3.Sys.Bindgen.AudioShims.Safe.lithon_SDL_AUDIO_FRAMESIZE,
+  SDL3.Sys.Bindgen.AudioShims.Safe.lithon_SDL_DEFINE_AUDIO_FORMAT,
+)
+where
+
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
+import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+import SDL3.Sys.Bindgen.Audio qualified
+import SDL3.Sys.Bindgen.Stdinc qualified
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <sdl3-bindgen-sys/SDL_audio_shims.h>"
+         , "signed int hs_bindgen_671665de9082bc0a ("
+         , "  SDL_AudioSpec const *arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_AUDIO_FRAMESIZE)(arg1);"
+         , "}"
+         , "SDL_AudioFormat hs_bindgen_4e88b69fe8480ba5 ("
+         , "  _Bool arg1,"
+         , "  _Bool arg2,"
+         , "  _Bool arg3,"
+         , "  Uint8 arg4"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_DEFINE_AUDIO_FORMAT)(arg1, arg2, arg3, arg4);"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.AudioShims_Safe_lithon_SDL_AUDIO_FRAMESIZE@
+foreign import ccall safe "hs_bindgen_671665de9082bc0a"
+  hs_bindgen_671665de9082bc0a_base
+    :: BG.Ptr BG.Void
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.AudioShims_Safe_lithon_SDL_AUDIO_FRAMESIZE@
+hs_bindgen_671665de9082bc0a
+  :: PtrConst.PtrConst SDL3.Sys.Bindgen.Audio.SDL_AudioSpec
+  -> IO BG.CInt
+hs_bindgen_671665de9082bc0a =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_671665de9082bc0a_base (BG.toFFIType x0))
+
+-- | Calculate the size of each audio frame (in bytes) from an SDL_AudioSpec.
+--
+--     The SDL_AUDIO_FRAMESIZE macro as a function. This reports on the size of an audio sample frame: stereo Sint16 data (2 channels of 2 bytes each) would be 4 bytes per frame, for example.
+--
+--     [Returns]: the number of bytes used per sample frame.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_AUDIO_FRAMESIZE@, defined at @sdl3-bindgen-sys\/SDL_audio_shims.h 38:23@
+lithon_SDL_AUDIO_FRAMESIZE
+  :: PtrConst.PtrConst SDL3.Sys.Bindgen.Audio.SDL_AudioSpec
+  -- ^
+  --
+  --           [@spec@]: the SDL_AudioSpec to query.
+  -> IO BG.CInt
+lithon_SDL_AUDIO_FRAMESIZE =
+  hs_bindgen_671665de9082bc0a
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.AudioShims_Safe_lithon_SDL_DEFINE_AUDIO_FORMAT@
+foreign import ccall safe "hs_bindgen_4e88b69fe8480ba5"
+  hs_bindgen_4e88b69fe8480ba5_base
+    :: BG.CBool
+    -> BG.CBool
+    -> BG.CBool
+    -> HsBindgen.Runtime.LibC.Word8
+    -> IO HsBindgen.Runtime.Support.CUInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.AudioShims_Safe_lithon_SDL_DEFINE_AUDIO_FORMAT@
+hs_bindgen_4e88b69fe8480ba5
+  :: BG.CBool
+  -> BG.CBool
+  -> BG.CBool
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> IO SDL3.Sys.Bindgen.Audio.SDL_AudioFormat
+hs_bindgen_4e88b69fe8480ba5 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_4e88b69fe8480ba5_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Define an SDL_AudioFormat value.
+--
+--     The SDL_DEFINE_AUDIO_FORMAT macro as a function. SDL does not support custom audio formats, so this is not of much use externally, but it can be illustrative as to what the various bits of an SDL_AudioFormat mean. For example, SDL_AUDIO_S32LE is signed, littleendian, integer, 32 bits.
+--
+--     [Returns]: a format value in the style of SDL_AudioFormat.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_DEFINE_AUDIO_FORMAT@, defined at @sdl3-bindgen-sys\/SDL_audio_shims.h 61:35@
+lithon_SDL_DEFINE_AUDIO_FORMAT
+  :: BG.CBool
+  -- ^
+  --
+  --           [@is_signed@]: true for signed data, false for unsigned data.
+  -> BG.CBool
+  -- ^
+  --
+  --           [@is_bigendian@]: true for bigendian data, false for littleendian data.
+  -> BG.CBool
+  -- ^
+  --
+  --           [@is_float@]: true for floating point data, false for integer data.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@bits@]: number of bits per sample.
+  -> IO SDL3.Sys.Bindgen.Audio.SDL_AudioFormat
+lithon_SDL_DEFINE_AUDIO_FORMAT =
+  hs_bindgen_4e88b69fe8480ba5
diff --git a/src/SDL3/Sys/Bindgen/AudioShims/Unsafe.hs b/src/SDL3/Sys/Bindgen/AudioShims/Unsafe.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/AudioShims/Unsafe.hs
@@ -0,0 +1,143 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.AudioShims.Unsafe (
+  SDL3.Sys.Bindgen.AudioShims.Unsafe.lithon_SDL_AUDIO_FRAMESIZE,
+  SDL3.Sys.Bindgen.AudioShims.Unsafe.lithon_SDL_DEFINE_AUDIO_FORMAT,
+)
+where
+
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
+import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+import SDL3.Sys.Bindgen.Audio qualified
+import SDL3.Sys.Bindgen.Stdinc qualified
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <sdl3-bindgen-sys/SDL_audio_shims.h>"
+         , "signed int hs_bindgen_9c912e2fea22e125 ("
+         , "  SDL_AudioSpec const *arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_AUDIO_FRAMESIZE)(arg1);"
+         , "}"
+         , "SDL_AudioFormat hs_bindgen_862e8c5060edfe5f ("
+         , "  _Bool arg1,"
+         , "  _Bool arg2,"
+         , "  _Bool arg3,"
+         , "  Uint8 arg4"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_DEFINE_AUDIO_FORMAT)(arg1, arg2, arg3, arg4);"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.AudioShims_Unsafe_lithon_SDL_AUDIO_FRAMESIZE@
+foreign import ccall unsafe "hs_bindgen_9c912e2fea22e125"
+  hs_bindgen_9c912e2fea22e125_base
+    :: BG.Ptr BG.Void
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.AudioShims_Unsafe_lithon_SDL_AUDIO_FRAMESIZE@
+hs_bindgen_9c912e2fea22e125
+  :: PtrConst.PtrConst SDL3.Sys.Bindgen.Audio.SDL_AudioSpec
+  -> IO BG.CInt
+hs_bindgen_9c912e2fea22e125 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_9c912e2fea22e125_base (BG.toFFIType x0))
+
+-- | Calculate the size of each audio frame (in bytes) from an SDL_AudioSpec.
+--
+--     The SDL_AUDIO_FRAMESIZE macro as a function. This reports on the size of an audio sample frame: stereo Sint16 data (2 channels of 2 bytes each) would be 4 bytes per frame, for example.
+--
+--     [Returns]: the number of bytes used per sample frame.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_AUDIO_FRAMESIZE@, defined at @sdl3-bindgen-sys\/SDL_audio_shims.h 38:23@
+lithon_SDL_AUDIO_FRAMESIZE
+  :: PtrConst.PtrConst SDL3.Sys.Bindgen.Audio.SDL_AudioSpec
+  -- ^
+  --
+  --           [@spec@]: the SDL_AudioSpec to query.
+  -> IO BG.CInt
+lithon_SDL_AUDIO_FRAMESIZE =
+  hs_bindgen_9c912e2fea22e125
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.AudioShims_Unsafe_lithon_SDL_DEFINE_AUDIO_FORMAT@
+foreign import ccall unsafe "hs_bindgen_862e8c5060edfe5f"
+  hs_bindgen_862e8c5060edfe5f_base
+    :: BG.CBool
+    -> BG.CBool
+    -> BG.CBool
+    -> HsBindgen.Runtime.LibC.Word8
+    -> IO HsBindgen.Runtime.Support.CUInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.AudioShims_Unsafe_lithon_SDL_DEFINE_AUDIO_FORMAT@
+hs_bindgen_862e8c5060edfe5f
+  :: BG.CBool
+  -> BG.CBool
+  -> BG.CBool
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> IO SDL3.Sys.Bindgen.Audio.SDL_AudioFormat
+hs_bindgen_862e8c5060edfe5f =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_862e8c5060edfe5f_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Define an SDL_AudioFormat value.
+--
+--     The SDL_DEFINE_AUDIO_FORMAT macro as a function. SDL does not support custom audio formats, so this is not of much use externally, but it can be illustrative as to what the various bits of an SDL_AudioFormat mean. For example, SDL_AUDIO_S32LE is signed, littleendian, integer, 32 bits.
+--
+--     [Returns]: a format value in the style of SDL_AudioFormat.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_DEFINE_AUDIO_FORMAT@, defined at @sdl3-bindgen-sys\/SDL_audio_shims.h 61:35@
+lithon_SDL_DEFINE_AUDIO_FORMAT
+  :: BG.CBool
+  -- ^
+  --
+  --           [@is_signed@]: true for signed data, false for unsigned data.
+  -> BG.CBool
+  -- ^
+  --
+  --           [@is_bigendian@]: true for bigendian data, false for littleendian data.
+  -> BG.CBool
+  -- ^
+  --
+  --           [@is_float@]: true for floating point data, false for integer data.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@bits@]: number of bits per sample.
+  -> IO SDL3.Sys.Bindgen.Audio.SDL_AudioFormat
+lithon_SDL_DEFINE_AUDIO_FORMAT =
+  hs_bindgen_862e8c5060edfe5f
diff --git a/src/SDL3/Sys/Bindgen/Bits/FunPtr.hs b/src/SDL3/Sys/Bindgen/Bits/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Bits/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Bits/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Bits.FunPtr (
@@ -8,13 +10,19 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Stdinc qualified
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_bits.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_bits.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Bits_get_SDL_MostSignificantBitIndex32 */"
          , "__attribute__ ((const))"
          , "signed int (*hs_bindgen_ef0d609239e2f97c (void)) ("
@@ -43,7 +51,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Bits_get_SDL_MostSignificantBitIndex32@
 hs_bindgen_ef0d609239e2f97c :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO BG.CInt))
 hs_bindgen_ef0d609239e2f97c =
-  BG.fromFFIType hs_bindgen_ef0d609239e2f97c_base
+  fmap BG.fromFFIType hs_bindgen_ef0d609239e2f97c_base
 
 {-# NOINLINE sDL_MostSignificantBitIndex32 #-}
 
@@ -60,7 +68,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Bits_get_SDL_HasExactlyOneBitSet32@
 hs_bindgen_424cf674227955df :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO BG.CBool))
 hs_bindgen_424cf674227955df =
-  BG.fromFFIType hs_bindgen_424cf674227955df_base
+  fmap BG.fromFFIType hs_bindgen_424cf674227955df_base
 
 {-# NOINLINE sDL_HasExactlyOneBitSet32 #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Bits/Safe.hs b/src/SDL3/Sys/Bindgen/Bits/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Bits/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Bits/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Bits.Safe (
@@ -8,13 +10,20 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Stdinc qualified
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_bits.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_bits.h>"
          , "signed int hs_bindgen_456d262a9d645a2c ("
          , "  Uint32 arg1"
          , ")"
@@ -34,15 +43,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Bits_Safe_SDL_MostSignificantBitIndex32@
 foreign import ccall safe "hs_bindgen_456d262a9d645a2c"
   hs_bindgen_456d262a9d645a2c_base
-    :: BG.Word32
-    -> IO BG.Int32
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Bits_Safe_SDL_MostSignificantBitIndex32@
 hs_bindgen_456d262a9d645a2c
   :: SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CInt
 hs_bindgen_456d262a9d645a2c =
-  BG.fromFFIType hs_bindgen_456d262a9d645a2c_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_456d262a9d645a2c_base (BG.toFFIType x0))
 
 -- | [C declaration]: @SDL_MostSignificantBitIndex32@, defined at @SDL3\/SDL_bits.h 65:22@
 sDL_MostSignificantBitIndex32
@@ -55,15 +65,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Bits_Safe_SDL_HasExactlyOneBitSet32@
 foreign import ccall safe "hs_bindgen_f02b1182f4d7fd03"
   hs_bindgen_f02b1182f4d7fd03_base
-    :: BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Bits_Safe_SDL_HasExactlyOneBitSet32@
 hs_bindgen_f02b1182f4d7fd03
   :: SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_f02b1182f4d7fd03 =
-  BG.fromFFIType hs_bindgen_f02b1182f4d7fd03_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_f02b1182f4d7fd03_base (BG.toFFIType x0))
 
 -- | Determine if a unsigned 32-bit value has exactly one bit set.
 --
diff --git a/src/SDL3/Sys/Bindgen/Bits/Unsafe.hs b/src/SDL3/Sys/Bindgen/Bits/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Bits/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Bits/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Bits.Unsafe (
@@ -8,13 +10,20 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Stdinc qualified
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_bits.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_bits.h>"
          , "signed int hs_bindgen_f46c1724b0f07dbc ("
          , "  Uint32 arg1"
          , ")"
@@ -34,15 +43,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Bits_Unsafe_SDL_MostSignificantBitIndex32@
 foreign import ccall unsafe "hs_bindgen_f46c1724b0f07dbc"
   hs_bindgen_f46c1724b0f07dbc_base
-    :: BG.Word32
-    -> IO BG.Int32
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Bits_Unsafe_SDL_MostSignificantBitIndex32@
 hs_bindgen_f46c1724b0f07dbc
   :: SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CInt
 hs_bindgen_f46c1724b0f07dbc =
-  BG.fromFFIType hs_bindgen_f46c1724b0f07dbc_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_f46c1724b0f07dbc_base (BG.toFFIType x0))
 
 -- | [C declaration]: @SDL_MostSignificantBitIndex32@, defined at @SDL3\/SDL_bits.h 65:22@
 sDL_MostSignificantBitIndex32
@@ -55,15 +65,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Bits_Unsafe_SDL_HasExactlyOneBitSet32@
 foreign import ccall unsafe "hs_bindgen_f449555941bbc6ef"
   hs_bindgen_f449555941bbc6ef_base
-    :: BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Bits_Unsafe_SDL_HasExactlyOneBitSet32@
 hs_bindgen_f449555941bbc6ef
   :: SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_f449555941bbc6ef =
-  BG.fromFFIType hs_bindgen_f449555941bbc6ef_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_f449555941bbc6ef_base (BG.toFFIType x0))
 
 -- | Determine if a unsigned 32-bit value has exactly one bit set.
 --
diff --git a/src/SDL3/Sys/Bindgen/Blendmode.hs b/src/SDL3/Sys/Bindgen/Blendmode.hs
--- a/src/SDL3/Sys/Bindgen/Blendmode.hs
+++ b/src/SDL3/Sys/Bindgen/Blendmode.hs
@@ -17,6 +17,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | Blend modes decide how two colors will mix together. There are both standard modes for basic needs and a means to create custom modes, dictating what sort of math to do on what color components. A set of blend modes used in drawing operations.
 --
@@ -56,6 +57,8 @@
   pattern SDL3.Sys.Bindgen.Blendmode.SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA,
 )
 where
+
+import Prelude (Bounded, Enum, Eq, Int, Integral, Num, Ord, Read, Real, Show, pure, (<*>), type (~))
 
 import HsBindgen.Runtime.CEnum qualified as CEnum
 import HsBindgen.Runtime.HasCField qualified as HasCField
diff --git a/src/SDL3/Sys/Bindgen/Blendmode/FunPtr.hs b/src/SDL3/Sys/Bindgen/Blendmode/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Blendmode/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Blendmode/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Blendmode.FunPtr (
@@ -7,13 +9,19 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Blendmode
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_blendmode.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_blendmode.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Blendmode_get_SDL_ComposeCustomBlendMode */"
          , "__attribute__ ((const))"
          , "SDL_BlendMode (*hs_bindgen_472d1766983a7c58 (void)) ("
@@ -50,7 +58,7 @@
            )
        )
 hs_bindgen_472d1766983a7c58 =
-  BG.fromFFIType hs_bindgen_472d1766983a7c58_base
+  fmap BG.fromFFIType hs_bindgen_472d1766983a7c58_base
 
 {-# NOINLINE sDL_ComposeCustomBlendMode #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Blendmode/Safe.hs b/src/SDL3/Sys/Bindgen/Blendmode/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Blendmode/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Blendmode/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Blendmode.Safe (
@@ -7,13 +9,20 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Blendmode
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_blendmode.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_blendmode.h>"
          , "SDL_BlendMode hs_bindgen_c265ba8d4db542f2 ("
          , "  SDL_BlendFactor arg1,"
          , "  SDL_BlendFactor arg2,"
@@ -32,13 +41,13 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Blendmode_Safe_SDL_ComposeCustomBlendMode@
 foreign import ccall safe "hs_bindgen_c265ba8d4db542f2"
   hs_bindgen_c265ba8d4db542f2_base
-    :: BG.Word32
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Word32
-    -> IO BG.Word32
+    :: BG.CUInt
+    -> BG.CUInt
+    -> BG.CUInt
+    -> BG.CUInt
+    -> BG.CUInt
+    -> BG.CUInt
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Blendmode_Safe_SDL_ComposeCustomBlendMode@
 hs_bindgen_c265ba8d4db542f2
@@ -50,7 +59,22 @@
   -> SDL_BlendOperation
   -> IO SDL_BlendMode
 hs_bindgen_c265ba8d4db542f2 =
-  BG.fromFFIType hs_bindgen_c265ba8d4db542f2_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_c265ba8d4db542f2_base
+                    (BG.toFFIType x0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                    (BG.toFFIType x4)
+                    (BG.toFFIType x5)
+                )
 
 -- | Compose a custom blend mode for renderers.
 --
diff --git a/src/SDL3/Sys/Bindgen/Blendmode/Unsafe.hs b/src/SDL3/Sys/Bindgen/Blendmode/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Blendmode/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Blendmode/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Blendmode.Unsafe (
@@ -7,13 +9,20 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Blendmode
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_blendmode.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_blendmode.h>"
          , "SDL_BlendMode hs_bindgen_02a1b148e92e150f ("
          , "  SDL_BlendFactor arg1,"
          , "  SDL_BlendFactor arg2,"
@@ -32,13 +41,13 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Blendmode_Unsafe_SDL_ComposeCustomBlendMode@
 foreign import ccall unsafe "hs_bindgen_02a1b148e92e150f"
   hs_bindgen_02a1b148e92e150f_base
-    :: BG.Word32
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Word32
-    -> IO BG.Word32
+    :: BG.CUInt
+    -> BG.CUInt
+    -> BG.CUInt
+    -> BG.CUInt
+    -> BG.CUInt
+    -> BG.CUInt
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Blendmode_Unsafe_SDL_ComposeCustomBlendMode@
 hs_bindgen_02a1b148e92e150f
@@ -50,7 +59,22 @@
   -> SDL_BlendOperation
   -> IO SDL_BlendMode
 hs_bindgen_02a1b148e92e150f =
-  BG.fromFFIType hs_bindgen_02a1b148e92e150f_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_02a1b148e92e150f_base
+                    (BG.toFFIType x0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                    (BG.toFFIType x4)
+                    (BG.toFFIType x5)
+                )
 
 -- | Compose a custom blend mode for renderers.
 --
diff --git a/src/SDL3/Sys/Bindgen/Camera.hs b/src/SDL3/Sys/Bindgen/Camera.hs
--- a/src/SDL3/Sys/Bindgen/Camera.hs
+++ b/src/SDL3/Sys/Bindgen/Camera.hs
@@ -17,6 +17,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | Video capture for the SDL library.
 --
@@ -54,9 +55,27 @@
 )
 where
 
+import Prelude (
+  Bounded,
+  Enum,
+  Eq,
+  Int,
+  Integral,
+  Num,
+  Ord,
+  Read,
+  Real,
+  Show,
+  pure,
+  (<*>),
+  (>>),
+  type (~),
+ )
+
 import HsBindgen.Runtime.CEnum qualified as CEnum
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.Marshal qualified as Marshal
+import HsBindgen.Runtime.Struct qualified as Struct
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField
 import SDL3.Sys.Bindgen.Pixels qualified
@@ -190,6 +209,11 @@
 
 deriving via Marshal.EquivStorable SDL_CameraSpec instance BG.Storable SDL_CameraSpec
 
+deriving via Struct.IsStructViaReadRaw SDL_CameraSpec instance Struct.IsStruct SDL_CameraSpec
+
+-- | Frame format
+--
+--     [C declaration]: @format@, defined at @SDL3\/SDL_camera.h 117:21@
 instance
   (ty ~ SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat)
   => BG.CompatHasField.HasField "format" SDL_CameraSpec ty
@@ -221,6 +245,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | Frame colorspace
+--
+--     [C declaration]: @colorspace@, defined at @SDL3\/SDL_camera.h 118:20@
 instance
   (ty ~ SDL3.Sys.Bindgen.Pixels.SDL_Colorspace)
   => BG.CompatHasField.HasField "colorspace" SDL_CameraSpec ty
@@ -252,6 +279,9 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | Frame width
+--
+--     [C declaration]: @width@, defined at @SDL3\/SDL_camera.h 119:9@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "width" SDL_CameraSpec ty
@@ -281,6 +311,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | Frame height
+--
+--     [C declaration]: @height@, defined at @SDL3\/SDL_camera.h 120:9@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "height" SDL_CameraSpec ty
@@ -310,6 +343,9 @@
 
   offset# = \_ -> \_ -> 12
 
+-- | Frame rate numerator ((num \/ denom) == FPS, (denom \/ num) == duration in seconds)
+--
+--     [C declaration]: @framerate_numerator@, defined at @SDL3\/SDL_camera.h 121:9@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "framerate_numerator" SDL_CameraSpec ty
@@ -342,6 +378,9 @@
 
   offset# = \_ -> \_ -> 16
 
+-- | Frame rate denominator ((num \/ denom) == FPS, (denom \/ num) == duration in seconds)
+--
+--     [C declaration]: @framerate_denominator@, defined at @SDL3\/SDL_camera.h 122:9@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "framerate_denominator" SDL_CameraSpec ty
diff --git a/src/SDL3/Sys/Bindgen/Camera/FunPtr.hs b/src/SDL3/Sys/Bindgen/Camera/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Camera/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Camera/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Camera.FunPtr (
@@ -21,6 +23,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -31,7 +35,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_camera.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_camera.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Camera_get_SDL_GetNumCameraDrivers */"
          , "__attribute__ ((const))"
          , "signed int (*hs_bindgen_2fe56f3f652d0579 (void)) (void)"
@@ -169,7 +177,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_get_SDL_GetNumCameraDrivers@
 hs_bindgen_2fe56f3f652d0579 :: IO (BG.FunPtr (IO BG.CInt))
 hs_bindgen_2fe56f3f652d0579 =
-  BG.fromFFIType hs_bindgen_2fe56f3f652d0579_base
+  fmap BG.fromFFIType hs_bindgen_2fe56f3f652d0579_base
 
 {-# NOINLINE sDL_GetNumCameraDrivers #-}
 
@@ -200,7 +208,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_get_SDL_GetCameraDriver@
 hs_bindgen_c446a6779ba24477 :: IO (BG.FunPtr (BG.CInt -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_c446a6779ba24477 =
-  BG.fromFFIType hs_bindgen_c446a6779ba24477_base
+  fmap BG.fromFFIType hs_bindgen_c446a6779ba24477_base
 
 {-# NOINLINE sDL_GetCameraDriver #-}
 
@@ -233,7 +241,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_get_SDL_GetCurrentCameraDriver@
 hs_bindgen_450b62c8a8bdad25 :: IO (BG.FunPtr (IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_450b62c8a8bdad25 =
-  BG.fromFFIType hs_bindgen_450b62c8a8bdad25_base
+  fmap BG.fromFFIType hs_bindgen_450b62c8a8bdad25_base
 
 {-# NOINLINE sDL_GetCurrentCameraDriver #-}
 
@@ -260,7 +268,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_get_SDL_GetCameras@
 hs_bindgen_bc1a5321dad7fcb1 :: IO (BG.FunPtr (BG.Ptr BG.CInt -> IO (BG.Ptr SDL_CameraID)))
 hs_bindgen_bc1a5321dad7fcb1 =
-  BG.fromFFIType hs_bindgen_bc1a5321dad7fcb1_base
+  fmap BG.fromFFIType hs_bindgen_bc1a5321dad7fcb1_base
 
 {-# NOINLINE sDL_GetCameras #-}
 
@@ -290,7 +298,7 @@
 hs_bindgen_bf28278a90a763f1
   :: IO (BG.FunPtr (SDL_CameraID -> BG.Ptr BG.CInt -> IO (BG.Ptr (BG.Ptr SDL_CameraSpec))))
 hs_bindgen_bf28278a90a763f1 =
-  BG.fromFFIType hs_bindgen_bf28278a90a763f1_base
+  fmap BG.fromFFIType hs_bindgen_bf28278a90a763f1_base
 
 {-# NOINLINE sDL_GetCameraSupportedFormats #-}
 
@@ -330,7 +338,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_get_SDL_GetCameraName@
 hs_bindgen_55dbe06bac2f3a2a :: IO (BG.FunPtr (SDL_CameraID -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_55dbe06bac2f3a2a =
-  BG.fromFFIType hs_bindgen_55dbe06bac2f3a2a_base
+  fmap BG.fromFFIType hs_bindgen_55dbe06bac2f3a2a_base
 
 {-# NOINLINE sDL_GetCameraName #-}
 
@@ -359,7 +367,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_get_SDL_GetCameraPosition@
 hs_bindgen_9aa8f16a3313e368 :: IO (BG.FunPtr (SDL_CameraID -> IO SDL_CameraPosition))
 hs_bindgen_9aa8f16a3313e368 =
-  BG.fromFFIType hs_bindgen_9aa8f16a3313e368_base
+  fmap BG.fromFFIType hs_bindgen_9aa8f16a3313e368_base
 
 {-# NOINLINE sDL_GetCameraPosition #-}
 
@@ -391,7 +399,7 @@
 hs_bindgen_b00c5599a7791662
   :: IO (BG.FunPtr (SDL_CameraID -> PtrConst.PtrConst SDL_CameraSpec -> IO (BG.Ptr SDL_Camera)))
 hs_bindgen_b00c5599a7791662 =
-  BG.fromFFIType hs_bindgen_b00c5599a7791662_base
+  fmap BG.fromFFIType hs_bindgen_b00c5599a7791662_base
 
 {-# NOINLINE sDL_OpenCamera #-}
 
@@ -433,7 +441,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_get_SDL_GetCameraPermissionState@
 hs_bindgen_48f0024f18d7e07c :: IO (BG.FunPtr (BG.Ptr SDL_Camera -> IO SDL_CameraPermissionState))
 hs_bindgen_48f0024f18d7e07c =
-  BG.fromFFIType hs_bindgen_48f0024f18d7e07c_base
+  fmap BG.fromFFIType hs_bindgen_48f0024f18d7e07c_base
 
 {-# NOINLINE sDL_GetCameraPermissionState #-}
 
@@ -470,7 +478,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_get_SDL_GetCameraID@
 hs_bindgen_0229aa426471e9f3 :: IO (BG.FunPtr (BG.Ptr SDL_Camera -> IO SDL_CameraID))
 hs_bindgen_0229aa426471e9f3 =
-  BG.fromFFIType hs_bindgen_0229aa426471e9f3_base
+  fmap BG.fromFFIType hs_bindgen_0229aa426471e9f3_base
 
 {-# NOINLINE sDL_GetCameraID #-}
 
@@ -500,7 +508,7 @@
 hs_bindgen_811d109afab05470
   :: IO (BG.FunPtr (BG.Ptr SDL_Camera -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID))
 hs_bindgen_811d109afab05470 =
-  BG.fromFFIType hs_bindgen_811d109afab05470_base
+  fmap BG.fromFFIType hs_bindgen_811d109afab05470_base
 
 {-# NOINLINE sDL_GetCameraProperties #-}
 
@@ -529,7 +537,7 @@
 hs_bindgen_c31156109d01dac2
   :: IO (BG.FunPtr (BG.Ptr SDL_Camera -> BG.Ptr SDL_CameraSpec -> IO BG.CBool))
 hs_bindgen_c31156109d01dac2 =
-  BG.fromFFIType hs_bindgen_c31156109d01dac2_base
+  fmap BG.fromFFIType hs_bindgen_c31156109d01dac2_base
 
 {-# NOINLINE sDL_GetCameraFormat #-}
 
@@ -571,7 +579,7 @@
            )
        )
 hs_bindgen_15418e0f8c1b74ab =
-  BG.fromFFIType hs_bindgen_15418e0f8c1b74ab_base
+  fmap BG.fromFFIType hs_bindgen_15418e0f8c1b74ab_base
 
 {-# NOINLINE sDL_AcquireCameraFrame #-}
 
@@ -620,7 +628,7 @@
 hs_bindgen_e130359542808d09
   :: IO (BG.FunPtr (BG.Ptr SDL_Camera -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface -> IO ()))
 hs_bindgen_e130359542808d09 =
-  BG.fromFFIType hs_bindgen_e130359542808d09_base
+  fmap BG.fromFFIType hs_bindgen_e130359542808d09_base
 
 {-# NOINLINE sDL_ReleaseCameraFrame #-}
 
@@ -658,7 +666,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_get_SDL_CloseCamera@
 hs_bindgen_bdcef6daeaf762cd :: IO (BG.FunPtr (BG.Ptr SDL_Camera -> IO ()))
 hs_bindgen_bdcef6daeaf762cd =
-  BG.fromFFIType hs_bindgen_bdcef6daeaf762cd_base
+  fmap BG.fromFFIType hs_bindgen_bdcef6daeaf762cd_base
 
 {-# NOINLINE sDL_CloseCamera #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Camera/Safe.hs b/src/SDL3/Sys/Bindgen/Camera/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Camera/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Camera/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Camera.Safe (
@@ -21,6 +23,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -31,7 +36,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_camera.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_camera.h>"
          , "signed int hs_bindgen_cd72562c40895f9d (void)"
          , "{"
          , "  return (SDL_GetNumCameraDrivers)();"
@@ -134,12 +143,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_Safe_SDL_GetNumCameraDrivers@
 foreign import ccall safe "hs_bindgen_cd72562c40895f9d"
   hs_bindgen_cd72562c40895f9d_base
-    :: IO BG.Int32
+    :: IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_Safe_SDL_GetNumCameraDrivers@
 hs_bindgen_cd72562c40895f9d :: IO BG.CInt
 hs_bindgen_cd72562c40895f9d =
-  BG.fromFFIType hs_bindgen_cd72562c40895f9d_base
+  fmap BG.fromFFIType hs_bindgen_cd72562c40895f9d_base
 
 -- | Use this function to get the number of built-in camera drivers.
 --
@@ -162,7 +171,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_Safe_SDL_GetCameraDriver@
 foreign import ccall safe "hs_bindgen_1b2353edfbc61157"
   hs_bindgen_1b2353edfbc61157_base
-    :: BG.Int32
+    :: BG.CInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_Safe_SDL_GetCameraDriver@
@@ -170,7 +179,8 @@
   :: BG.CInt
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_1b2353edfbc61157 =
-  BG.fromFFIType hs_bindgen_1b2353edfbc61157_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_1b2353edfbc61157_base (BG.toFFIType x0))
 
 -- | Use this function to get the name of a built in camera driver.
 --
@@ -203,7 +213,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_Safe_SDL_GetCurrentCameraDriver@
 hs_bindgen_eb2b917f28fc96fd :: IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_eb2b917f28fc96fd =
-  BG.fromFFIType hs_bindgen_eb2b917f28fc96fd_base
+  fmap BG.fromFFIType hs_bindgen_eb2b917f28fc96fd_base
 
 -- | Get the name of the current camera driver.
 --
@@ -231,7 +241,8 @@
   :: BG.Ptr BG.CInt
   -> IO (BG.Ptr SDL_CameraID)
 hs_bindgen_1ba2aef0a8cc6032 =
-  BG.fromFFIType hs_bindgen_1ba2aef0a8cc6032_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_1ba2aef0a8cc6032_base (BG.toFFIType x0))
 
 -- | Get a list of currently connected camera devices.
 --
@@ -255,7 +266,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_Safe_SDL_GetCameraSupportedFormats@
 foreign import ccall safe "hs_bindgen_5a031667f9d45a0d"
   hs_bindgen_5a031667f9d45a0d_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> IO (BG.Ptr BG.Void)
 
@@ -265,7 +276,9 @@
   -> BG.Ptr BG.CInt
   -> IO (BG.Ptr (BG.Ptr SDL_CameraSpec))
 hs_bindgen_5a031667f9d45a0d =
-  BG.fromFFIType hs_bindgen_5a031667f9d45a0d_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_5a031667f9d45a0d_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the list of native formats\/sizes a camera supports.
 --
@@ -302,7 +315,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_Safe_SDL_GetCameraName@
 foreign import ccall safe "hs_bindgen_1fe2503ad9612c29"
   hs_bindgen_1fe2503ad9612c29_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_Safe_SDL_GetCameraName@
@@ -310,7 +323,8 @@
   :: SDL_CameraID
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_1fe2503ad9612c29 =
-  BG.fromFFIType hs_bindgen_1fe2503ad9612c29_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_1fe2503ad9612c29_base (BG.toFFIType x0))
 
 -- | Get the human-readable device name for a camera.
 --
@@ -334,15 +348,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_Safe_SDL_GetCameraPosition@
 foreign import ccall safe "hs_bindgen_53c0436c6140f231"
   hs_bindgen_53c0436c6140f231_base
-    :: BG.Word32
-    -> IO BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_Safe_SDL_GetCameraPosition@
 hs_bindgen_53c0436c6140f231
   :: SDL_CameraID
   -> IO SDL_CameraPosition
 hs_bindgen_53c0436c6140f231 =
-  BG.fromFFIType hs_bindgen_53c0436c6140f231_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_53c0436c6140f231_base (BG.toFFIType x0))
 
 -- | Get the position of the camera in relation to the system.
 --
@@ -368,7 +383,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_Safe_SDL_OpenCamera@
 foreign import ccall safe "hs_bindgen_9c29b271631f7c6f"
   hs_bindgen_9c29b271631f7c6f_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> IO (BG.Ptr BG.Void)
 
@@ -378,7 +393,9 @@
   -> PtrConst.PtrConst SDL_CameraSpec
   -> IO (BG.Ptr SDL_Camera)
 hs_bindgen_9c29b271631f7c6f =
-  BG.fromFFIType hs_bindgen_9c29b271631f7c6f_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_9c29b271631f7c6f_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Open a video recording device (a \"camera\").
 --
@@ -417,14 +434,15 @@
 foreign import ccall safe "hs_bindgen_77d5a87752cf6936"
   hs_bindgen_77d5a87752cf6936_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_Safe_SDL_GetCameraPermissionState@
 hs_bindgen_77d5a87752cf6936
   :: BG.Ptr SDL_Camera
   -> IO SDL_CameraPermissionState
 hs_bindgen_77d5a87752cf6936 =
-  BG.fromFFIType hs_bindgen_77d5a87752cf6936_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_77d5a87752cf6936_base (BG.toFFIType x0))
 
 -- | Query if camera access has been approved by the user.
 --
@@ -458,14 +476,15 @@
 foreign import ccall safe "hs_bindgen_bcdd620eca919b2e"
   hs_bindgen_bcdd620eca919b2e_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_Safe_SDL_GetCameraID@
 hs_bindgen_bcdd620eca919b2e
   :: BG.Ptr SDL_Camera
   -> IO SDL_CameraID
 hs_bindgen_bcdd620eca919b2e =
-  BG.fromFFIType hs_bindgen_bcdd620eca919b2e_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_bcdd620eca919b2e_base (BG.toFFIType x0))
 
 -- | Get the instance ID of an opened camera.
 --
@@ -490,14 +509,15 @@
 foreign import ccall safe "hs_bindgen_052b8e57c4e6c7b6"
   hs_bindgen_052b8e57c4e6c7b6_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_Safe_SDL_GetCameraProperties@
 hs_bindgen_052b8e57c4e6c7b6
   :: BG.Ptr SDL_Camera
   -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
 hs_bindgen_052b8e57c4e6c7b6 =
-  BG.fromFFIType hs_bindgen_052b8e57c4e6c7b6_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_052b8e57c4e6c7b6_base (BG.toFFIType x0))
 
 -- | Get the properties associated with an opened camera.
 --
@@ -521,7 +541,7 @@
   hs_bindgen_077520cc55e1919f_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_Safe_SDL_GetCameraFormat@
 hs_bindgen_077520cc55e1919f
@@ -529,7 +549,9 @@
   -> BG.Ptr SDL_CameraSpec
   -> IO BG.CBool
 hs_bindgen_077520cc55e1919f =
-  BG.fromFFIType hs_bindgen_077520cc55e1919f_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_077520cc55e1919f_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the spec that a camera is using when generating images.
 --
@@ -571,7 +593,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint64
   -> IO (BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface)
 hs_bindgen_ea5de39cea6d2cc9 =
-  BG.fromFFIType hs_bindgen_ea5de39cea6d2cc9_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_ea5de39cea6d2cc9_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Acquire a frame.
 --
@@ -621,7 +645,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface
   -> IO ()
 hs_bindgen_9abaf64e06b4eeb3 =
-  BG.fromFFIType hs_bindgen_9abaf64e06b4eeb3_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_9abaf64e06b4eeb3_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Release a frame of video acquired from a camera.
 --
@@ -663,7 +689,8 @@
   :: BG.Ptr SDL_Camera
   -> IO ()
 hs_bindgen_2ca914bb2dfa2f4d =
-  BG.fromFFIType hs_bindgen_2ca914bb2dfa2f4d_base
+  \x0 ->
+    hs_bindgen_2ca914bb2dfa2f4d_base (BG.toFFIType x0)
 
 -- | Use this function to shut down camera processing and close the camera device.
 --
diff --git a/src/SDL3/Sys/Bindgen/Camera/Unsafe.hs b/src/SDL3/Sys/Bindgen/Camera/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Camera/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Camera/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Camera.Unsafe (
@@ -21,6 +23,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -31,7 +36,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_camera.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_camera.h>"
          , "signed int hs_bindgen_d6f6e8f18fc1b811 (void)"
          , "{"
          , "  return (SDL_GetNumCameraDrivers)();"
@@ -134,12 +143,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_Unsafe_SDL_GetNumCameraDrivers@
 foreign import ccall unsafe "hs_bindgen_d6f6e8f18fc1b811"
   hs_bindgen_d6f6e8f18fc1b811_base
-    :: IO BG.Int32
+    :: IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_Unsafe_SDL_GetNumCameraDrivers@
 hs_bindgen_d6f6e8f18fc1b811 :: IO BG.CInt
 hs_bindgen_d6f6e8f18fc1b811 =
-  BG.fromFFIType hs_bindgen_d6f6e8f18fc1b811_base
+  fmap BG.fromFFIType hs_bindgen_d6f6e8f18fc1b811_base
 
 -- | Use this function to get the number of built-in camera drivers.
 --
@@ -162,7 +171,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_Unsafe_SDL_GetCameraDriver@
 foreign import ccall unsafe "hs_bindgen_fab707b0b898d9a8"
   hs_bindgen_fab707b0b898d9a8_base
-    :: BG.Int32
+    :: BG.CInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_Unsafe_SDL_GetCameraDriver@
@@ -170,7 +179,8 @@
   :: BG.CInt
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_fab707b0b898d9a8 =
-  BG.fromFFIType hs_bindgen_fab707b0b898d9a8_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_fab707b0b898d9a8_base (BG.toFFIType x0))
 
 -- | Use this function to get the name of a built in camera driver.
 --
@@ -203,7 +213,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_Unsafe_SDL_GetCurrentCameraDriver@
 hs_bindgen_f63a9ad2baa64d58 :: IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_f63a9ad2baa64d58 =
-  BG.fromFFIType hs_bindgen_f63a9ad2baa64d58_base
+  fmap BG.fromFFIType hs_bindgen_f63a9ad2baa64d58_base
 
 -- | Get the name of the current camera driver.
 --
@@ -231,7 +241,8 @@
   :: BG.Ptr BG.CInt
   -> IO (BG.Ptr SDL_CameraID)
 hs_bindgen_6eb690904608f448 =
-  BG.fromFFIType hs_bindgen_6eb690904608f448_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_6eb690904608f448_base (BG.toFFIType x0))
 
 -- | Get a list of currently connected camera devices.
 --
@@ -255,7 +266,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_Unsafe_SDL_GetCameraSupportedFormats@
 foreign import ccall unsafe "hs_bindgen_298ed5d6dee5e9d7"
   hs_bindgen_298ed5d6dee5e9d7_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> IO (BG.Ptr BG.Void)
 
@@ -265,7 +276,9 @@
   -> BG.Ptr BG.CInt
   -> IO (BG.Ptr (BG.Ptr SDL_CameraSpec))
 hs_bindgen_298ed5d6dee5e9d7 =
-  BG.fromFFIType hs_bindgen_298ed5d6dee5e9d7_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_298ed5d6dee5e9d7_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the list of native formats\/sizes a camera supports.
 --
@@ -302,7 +315,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_Unsafe_SDL_GetCameraName@
 foreign import ccall unsafe "hs_bindgen_13f9855710ed88cb"
   hs_bindgen_13f9855710ed88cb_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_Unsafe_SDL_GetCameraName@
@@ -310,7 +323,8 @@
   :: SDL_CameraID
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_13f9855710ed88cb =
-  BG.fromFFIType hs_bindgen_13f9855710ed88cb_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_13f9855710ed88cb_base (BG.toFFIType x0))
 
 -- | Get the human-readable device name for a camera.
 --
@@ -334,15 +348,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_Unsafe_SDL_GetCameraPosition@
 foreign import ccall unsafe "hs_bindgen_cb5fce5ed4c39502"
   hs_bindgen_cb5fce5ed4c39502_base
-    :: BG.Word32
-    -> IO BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_Unsafe_SDL_GetCameraPosition@
 hs_bindgen_cb5fce5ed4c39502
   :: SDL_CameraID
   -> IO SDL_CameraPosition
 hs_bindgen_cb5fce5ed4c39502 =
-  BG.fromFFIType hs_bindgen_cb5fce5ed4c39502_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_cb5fce5ed4c39502_base (BG.toFFIType x0))
 
 -- | Get the position of the camera in relation to the system.
 --
@@ -368,7 +383,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_Unsafe_SDL_OpenCamera@
 foreign import ccall unsafe "hs_bindgen_7076142551220212"
   hs_bindgen_7076142551220212_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> IO (BG.Ptr BG.Void)
 
@@ -378,7 +393,9 @@
   -> PtrConst.PtrConst SDL_CameraSpec
   -> IO (BG.Ptr SDL_Camera)
 hs_bindgen_7076142551220212 =
-  BG.fromFFIType hs_bindgen_7076142551220212_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_7076142551220212_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Open a video recording device (a \"camera\").
 --
@@ -417,14 +434,15 @@
 foreign import ccall unsafe "hs_bindgen_43f06cfe20bf363a"
   hs_bindgen_43f06cfe20bf363a_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_Unsafe_SDL_GetCameraPermissionState@
 hs_bindgen_43f06cfe20bf363a
   :: BG.Ptr SDL_Camera
   -> IO SDL_CameraPermissionState
 hs_bindgen_43f06cfe20bf363a =
-  BG.fromFFIType hs_bindgen_43f06cfe20bf363a_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_43f06cfe20bf363a_base (BG.toFFIType x0))
 
 -- | Query if camera access has been approved by the user.
 --
@@ -458,14 +476,15 @@
 foreign import ccall unsafe "hs_bindgen_ece1966e90c73584"
   hs_bindgen_ece1966e90c73584_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_Unsafe_SDL_GetCameraID@
 hs_bindgen_ece1966e90c73584
   :: BG.Ptr SDL_Camera
   -> IO SDL_CameraID
 hs_bindgen_ece1966e90c73584 =
-  BG.fromFFIType hs_bindgen_ece1966e90c73584_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_ece1966e90c73584_base (BG.toFFIType x0))
 
 -- | Get the instance ID of an opened camera.
 --
@@ -490,14 +509,15 @@
 foreign import ccall unsafe "hs_bindgen_f62fda07cbce2ead"
   hs_bindgen_f62fda07cbce2ead_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_Unsafe_SDL_GetCameraProperties@
 hs_bindgen_f62fda07cbce2ead
   :: BG.Ptr SDL_Camera
   -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
 hs_bindgen_f62fda07cbce2ead =
-  BG.fromFFIType hs_bindgen_f62fda07cbce2ead_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_f62fda07cbce2ead_base (BG.toFFIType x0))
 
 -- | Get the properties associated with an opened camera.
 --
@@ -521,7 +541,7 @@
   hs_bindgen_42178ba967905119_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Camera_Unsafe_SDL_GetCameraFormat@
 hs_bindgen_42178ba967905119
@@ -529,7 +549,9 @@
   -> BG.Ptr SDL_CameraSpec
   -> IO BG.CBool
 hs_bindgen_42178ba967905119 =
-  BG.fromFFIType hs_bindgen_42178ba967905119_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_42178ba967905119_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the spec that a camera is using when generating images.
 --
@@ -571,7 +593,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint64
   -> IO (BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface)
 hs_bindgen_c2cdd3ce6b7ef7cd =
-  BG.fromFFIType hs_bindgen_c2cdd3ce6b7ef7cd_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_c2cdd3ce6b7ef7cd_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Acquire a frame.
 --
@@ -621,7 +645,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface
   -> IO ()
 hs_bindgen_faf5d2c09f75fa1b =
-  BG.fromFFIType hs_bindgen_faf5d2c09f75fa1b_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_faf5d2c09f75fa1b_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Release a frame of video acquired from a camera.
 --
@@ -663,7 +689,8 @@
   :: BG.Ptr SDL_Camera
   -> IO ()
 hs_bindgen_4e7f7c3353027126 =
-  BG.fromFFIType hs_bindgen_4e7f7c3353027126_base
+  \x0 ->
+    hs_bindgen_4e7f7c3353027126_base (BG.toFFIType x0)
 
 -- | Use this function to shut down camera processing and close the camera device.
 --
diff --git a/src/SDL3/Sys/Bindgen/Clipboard.hs b/src/SDL3/Sys/Bindgen/Clipboard.hs
--- a/src/SDL3/Sys/Bindgen/Clipboard.hs
+++ b/src/SDL3/Sys/Bindgen/Clipboard.hs
@@ -4,6 +4,7 @@
 {-# LANGUAGE DuplicateRecordFields #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE MagicHash #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
@@ -12,6 +13,7 @@
 {-# LANGUAGE TypeOperators #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | SDL provides access to the system clipboard, both for reading information from other processes and publishing information of its own.
 --
@@ -52,6 +54,8 @@
 )
 where
 
+import Prelude (Eq, IO, Ord, Show, fmap, type (~))
+
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.Marshal qualified as Marshal
@@ -70,7 +74,6 @@
       -> IO (PtrConst.PtrConst BG.Void)
   }
   deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
 
 -- __unique:__ @toSDL_ClipboardDataCallback_Aux@
 foreign import ccall safe "wrapper"
@@ -84,7 +87,17 @@
   -> IO (BG.FunPtr SDL_ClipboardDataCallback_Aux)
 hs_bindgen_4dc4029500cc2362 =
   \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_4dc4029500cc2362_base (BG.toFFIType fun0))
+    fmap
+      BG.castFunPtr
+      ( hs_bindgen_4dc4029500cc2362_base
+          ( \x1 ->
+              \x2 ->
+                \x3 ->
+                  fmap
+                    BG.toFFIType
+                    (BG.getField @"unwrap" fun0 (BG.fromFFIType x1) (BG.fromFFIType x2) (BG.fromFFIType x3))
+          )
+      )
 
 -- __unique:__ @fromSDL_ClipboardDataCallback_Aux@
 foreign import ccall safe "dynamic"
@@ -101,7 +114,19 @@
   -> SDL_ClipboardDataCallback_Aux
 hs_bindgen_941a517724689596 =
   \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_941a517724689596_base (BG.castFunPtrToFFIType funPtr0))
+    SDL_ClipboardDataCallback_Aux
+      ( \x1 ->
+          \x2 ->
+            \x3 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_941a517724689596_base
+                    (BG.castFunPtr funPtr0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                )
+      )
 
 instance BG.ToFunPtr SDL_ClipboardDataCallback_Aux where
   toFunPtr = hs_bindgen_4dc4029500cc2362
@@ -207,7 +232,6 @@
   { unwrap :: BG.Ptr BG.Void -> IO ()
   }
   deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
 
 -- __unique:__ @toSDL_ClipboardCleanupCallback_Aux@
 foreign import ccall safe "wrapper"
@@ -221,7 +245,13 @@
   -> IO (BG.FunPtr SDL_ClipboardCleanupCallback_Aux)
 hs_bindgen_dec1734c1f7f2a3f =
   \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_dec1734c1f7f2a3f_base (BG.toFFIType fun0))
+    fmap
+      BG.castFunPtr
+      ( hs_bindgen_dec1734c1f7f2a3f_base
+          ( \x1 ->
+              BG.getField @"unwrap" fun0 (BG.fromFFIType x1)
+          )
+      )
 
 -- __unique:__ @fromSDL_ClipboardCleanupCallback_Aux@
 foreign import ccall safe "dynamic"
@@ -236,7 +266,10 @@
   -> SDL_ClipboardCleanupCallback_Aux
 hs_bindgen_0ab064059cf117ee =
   \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_0ab064059cf117ee_base (BG.castFunPtrToFFIType funPtr0))
+    SDL_ClipboardCleanupCallback_Aux
+      ( \x1 ->
+          hs_bindgen_0ab064059cf117ee_base (BG.castFunPtr funPtr0) (BG.toFFIType x1)
+      )
 
 instance BG.ToFunPtr SDL_ClipboardCleanupCallback_Aux where
   toFunPtr = hs_bindgen_dec1734c1f7f2a3f
diff --git a/src/SDL3/Sys/Bindgen/Clipboard/FunPtr.hs b/src/SDL3/Sys/Bindgen/Clipboard/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Clipboard/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Clipboard/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Clipboard.FunPtr (
@@ -17,6 +19,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
@@ -25,7 +29,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_clipboard.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_clipboard.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Clipboard_get_SDL_SetClipboardText */"
          , "__attribute__ ((const))"
          , "_Bool (*hs_bindgen_e6a081b49815ff9d (void)) ("
@@ -121,7 +129,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Clipboard_get_SDL_SetClipboardText@
 hs_bindgen_e6a081b49815ff9d :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO BG.CBool))
 hs_bindgen_e6a081b49815ff9d =
-  BG.fromFFIType hs_bindgen_e6a081b49815ff9d_base
+  fmap BG.fromFFIType hs_bindgen_e6a081b49815ff9d_base
 
 {-# NOINLINE sDL_SetClipboardText #-}
 
@@ -138,7 +146,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Clipboard_get_SDL_GetClipboardText@
 hs_bindgen_e073f17299d97161 :: IO (BG.FunPtr (IO (BG.Ptr BG.CChar)))
 hs_bindgen_e073f17299d97161 =
-  BG.fromFFIType hs_bindgen_e073f17299d97161_base
+  fmap BG.fromFFIType hs_bindgen_e073f17299d97161_base
 
 {-# NOINLINE sDL_GetClipboardText #-}
 
@@ -167,7 +175,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Clipboard_get_SDL_HasClipboardText@
 hs_bindgen_0110b0e19d65293a :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_0110b0e19d65293a =
-  BG.fromFFIType hs_bindgen_0110b0e19d65293a_base
+  fmap BG.fromFFIType hs_bindgen_0110b0e19d65293a_base
 
 {-# NOINLINE sDL_HasClipboardText #-}
 
@@ -194,7 +202,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Clipboard_get_SDL_SetPrimarySelectionText@
 hs_bindgen_2780901b25e68105 :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO BG.CBool))
 hs_bindgen_2780901b25e68105 =
-  BG.fromFFIType hs_bindgen_2780901b25e68105_base
+  fmap BG.fromFFIType hs_bindgen_2780901b25e68105_base
 
 {-# NOINLINE sDL_SetPrimarySelectionText #-}
 
@@ -223,7 +231,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Clipboard_get_SDL_GetPrimarySelectionText@
 hs_bindgen_a50a077372a1275b :: IO (BG.FunPtr (IO (BG.Ptr BG.CChar)))
 hs_bindgen_a50a077372a1275b =
-  BG.fromFFIType hs_bindgen_a50a077372a1275b_base
+  fmap BG.fromFFIType hs_bindgen_a50a077372a1275b_base
 
 {-# NOINLINE sDL_GetPrimarySelectionText #-}
 
@@ -252,7 +260,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Clipboard_get_SDL_HasPrimarySelectionText@
 hs_bindgen_ed5cec4a17949538 :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_ed5cec4a17949538 =
-  BG.fromFFIType hs_bindgen_ed5cec4a17949538_base
+  fmap BG.fromFFIType hs_bindgen_ed5cec4a17949538_base
 
 {-# NOINLINE sDL_HasPrimarySelectionText #-}
 
@@ -289,7 +297,7 @@
            )
        )
 hs_bindgen_407833da207603f1 =
-  BG.fromFFIType hs_bindgen_407833da207603f1_base
+  fmap BG.fromFFIType hs_bindgen_407833da207603f1_base
 
 {-# NOINLINE sDL_SetClipboardData #-}
 
@@ -338,7 +346,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Clipboard_get_SDL_ClearClipboardData@
 hs_bindgen_6b6d9f04b710100d :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_6b6d9f04b710100d =
-  BG.fromFFIType hs_bindgen_6b6d9f04b710100d_base
+  fmap BG.fromFFIType hs_bindgen_6b6d9f04b710100d_base
 
 {-# NOINLINE sDL_ClearClipboardData #-}
 
@@ -367,7 +375,7 @@
   :: IO
        (BG.FunPtr (PtrConst.PtrConst BG.CChar -> BG.Ptr HsBindgen.Runtime.LibC.CSize -> IO (BG.Ptr BG.Void)))
 hs_bindgen_4936992218b0c564 =
-  BG.fromFFIType hs_bindgen_4936992218b0c564_base
+  fmap BG.fromFFIType hs_bindgen_4936992218b0c564_base
 
 {-# NOINLINE sDL_GetClipboardData #-}
 
@@ -401,7 +409,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Clipboard_get_SDL_HasClipboardData@
 hs_bindgen_a0c05f57097b9fe0 :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO BG.CBool))
 hs_bindgen_a0c05f57097b9fe0 =
-  BG.fromFFIType hs_bindgen_a0c05f57097b9fe0_base
+  fmap BG.fromFFIType hs_bindgen_a0c05f57097b9fe0_base
 
 {-# NOINLINE sDL_HasClipboardData #-}
 
@@ -431,7 +439,7 @@
 hs_bindgen_fa141967047535cc
   :: IO (BG.FunPtr (BG.Ptr HsBindgen.Runtime.LibC.CSize -> IO (BG.Ptr (BG.Ptr BG.CChar))))
 hs_bindgen_fa141967047535cc =
-  BG.fromFFIType hs_bindgen_fa141967047535cc_base
+  fmap BG.fromFFIType hs_bindgen_fa141967047535cc_base
 
 {-# NOINLINE sDL_GetClipboardMimeTypes #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Clipboard/Safe.hs b/src/SDL3/Sys/Bindgen/Clipboard/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Clipboard/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Clipboard/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Clipboard.Safe (
@@ -17,6 +19,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
@@ -25,7 +29,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_clipboard.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_clipboard.h>"
          , "_Bool hs_bindgen_b1150c42ea076e8c ("
          , "  char const *arg1"
          , ")"
@@ -95,14 +103,15 @@
 foreign import ccall safe "hs_bindgen_b1150c42ea076e8c"
   hs_bindgen_b1150c42ea076e8c_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Clipboard_Safe_SDL_SetClipboardText@
 hs_bindgen_b1150c42ea076e8c
   :: PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_b1150c42ea076e8c =
-  BG.fromFFIType hs_bindgen_b1150c42ea076e8c_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_b1150c42ea076e8c_base (BG.toFFIType x0))
 
 -- | [C declaration]: @SDL_SetClipboardText@, defined at @SDL3\/SDL_clipboard.h 104:34@
 sDL_SetClipboardText
@@ -119,7 +128,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Clipboard_Safe_SDL_GetClipboardText@
 hs_bindgen_280a176c02a40213 :: IO (BG.Ptr BG.CChar)
 hs_bindgen_280a176c02a40213 =
-  BG.fromFFIType hs_bindgen_280a176c02a40213_base
+  fmap BG.fromFFIType hs_bindgen_280a176c02a40213_base
 
 -- | Get UTF-8 text from the clipboard.
 --
@@ -140,12 +149,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Clipboard_Safe_SDL_HasClipboardText@
 foreign import ccall safe "hs_bindgen_0a5b78c7f4d4d82d"
   hs_bindgen_0a5b78c7f4d4d82d_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Clipboard_Safe_SDL_HasClipboardText@
 hs_bindgen_0a5b78c7f4d4d82d :: IO BG.CBool
 hs_bindgen_0a5b78c7f4d4d82d =
-  BG.fromFFIType hs_bindgen_0a5b78c7f4d4d82d_base
+  fmap BG.fromFFIType hs_bindgen_0a5b78c7f4d4d82d_base
 
 -- | Query whether the clipboard exists and contains a non-empty text string.
 --
@@ -165,14 +174,15 @@
 foreign import ccall safe "hs_bindgen_296e622e9e7c041e"
   hs_bindgen_296e622e9e7c041e_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Clipboard_Safe_SDL_SetPrimarySelectionText@
 hs_bindgen_296e622e9e7c041e
   :: PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_296e622e9e7c041e =
-  BG.fromFFIType hs_bindgen_296e622e9e7c041e_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_296e622e9e7c041e_base (BG.toFFIType x0))
 
 -- | Put UTF-8 text into the primary selection.
 --
@@ -202,7 +212,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Clipboard_Safe_SDL_GetPrimarySelectionText@
 hs_bindgen_b29f4f6c44c760ae :: IO (BG.Ptr BG.CChar)
 hs_bindgen_b29f4f6c44c760ae =
-  BG.fromFFIType hs_bindgen_b29f4f6c44c760ae_base
+  fmap BG.fromFFIType hs_bindgen_b29f4f6c44c760ae_base
 
 -- | Get UTF-8 text from the primary selection.
 --
@@ -224,12 +234,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Clipboard_Safe_SDL_HasPrimarySelectionText@
 foreign import ccall safe "hs_bindgen_72e968e77e5a4b30"
   hs_bindgen_72e968e77e5a4b30_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Clipboard_Safe_SDL_HasPrimarySelectionText@
 hs_bindgen_72e968e77e5a4b30 :: IO BG.CBool
 hs_bindgen_72e968e77e5a4b30 =
-  BG.fromFFIType hs_bindgen_72e968e77e5a4b30_base
+  fmap BG.fromFFIType hs_bindgen_72e968e77e5a4b30_base
 
 -- | Query whether the primary selection exists and contains a non-empty text string.
 --
@@ -253,8 +263,8 @@
     -> BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Clipboard_Safe_SDL_SetClipboardData@
 hs_bindgen_36bebff7824b1300
@@ -265,7 +275,20 @@
   -> HsBindgen.Runtime.LibC.CSize
   -> IO BG.CBool
 hs_bindgen_36bebff7824b1300 =
-  BG.fromFFIType hs_bindgen_36bebff7824b1300_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_36bebff7824b1300_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Offer clipboard data to the OS.
 --
@@ -309,12 +332,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Clipboard_Safe_SDL_ClearClipboardData@
 foreign import ccall safe "hs_bindgen_acd3467dd81bcf1b"
   hs_bindgen_acd3467dd81bcf1b_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Clipboard_Safe_SDL_ClearClipboardData@
 hs_bindgen_acd3467dd81bcf1b :: IO BG.CBool
 hs_bindgen_acd3467dd81bcf1b =
-  BG.fromFFIType hs_bindgen_acd3467dd81bcf1b_base
+  fmap BG.fromFFIType hs_bindgen_acd3467dd81bcf1b_base
 
 -- | Clear the clipboard data.
 --
@@ -343,7 +366,9 @@
   -> BG.Ptr HsBindgen.Runtime.LibC.CSize
   -> IO (BG.Ptr BG.Void)
 hs_bindgen_d971d4d8159c9733 =
-  BG.fromFFIType hs_bindgen_d971d4d8159c9733_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_d971d4d8159c9733_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the data from the clipboard for a given mime type.
 --
@@ -374,14 +399,15 @@
 foreign import ccall safe "hs_bindgen_7056b6a1011e4cda"
   hs_bindgen_7056b6a1011e4cda_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Clipboard_Safe_SDL_HasClipboardData@
 hs_bindgen_7056b6a1011e4cda
   :: PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_7056b6a1011e4cda =
-  BG.fromFFIType hs_bindgen_7056b6a1011e4cda_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_7056b6a1011e4cda_base (BG.toFFIType x0))
 
 -- | Query whether there is data in the clipboard for the provided mime type.
 --
@@ -413,7 +439,8 @@
   :: BG.Ptr HsBindgen.Runtime.LibC.CSize
   -> IO (BG.Ptr (BG.Ptr BG.CChar))
 hs_bindgen_333d0a0010885f59 =
-  BG.fromFFIType hs_bindgen_333d0a0010885f59_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_333d0a0010885f59_base (BG.toFFIType x0))
 
 -- | Retrieve the list of mime types available in the clipboard.
 --
diff --git a/src/SDL3/Sys/Bindgen/Clipboard/Unsafe.hs b/src/SDL3/Sys/Bindgen/Clipboard/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Clipboard/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Clipboard/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Clipboard.Unsafe (
@@ -17,6 +19,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
@@ -25,7 +29,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_clipboard.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_clipboard.h>"
          , "_Bool hs_bindgen_9f2a95dedb650832 ("
          , "  char const *arg1"
          , ")"
@@ -95,14 +103,15 @@
 foreign import ccall unsafe "hs_bindgen_9f2a95dedb650832"
   hs_bindgen_9f2a95dedb650832_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Clipboard_Unsafe_SDL_SetClipboardText@
 hs_bindgen_9f2a95dedb650832
   :: PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_9f2a95dedb650832 =
-  BG.fromFFIType hs_bindgen_9f2a95dedb650832_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_9f2a95dedb650832_base (BG.toFFIType x0))
 
 -- | [C declaration]: @SDL_SetClipboardText@, defined at @SDL3\/SDL_clipboard.h 104:34@
 sDL_SetClipboardText
@@ -119,7 +128,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Clipboard_Unsafe_SDL_GetClipboardText@
 hs_bindgen_421a57638d4c3dac :: IO (BG.Ptr BG.CChar)
 hs_bindgen_421a57638d4c3dac =
-  BG.fromFFIType hs_bindgen_421a57638d4c3dac_base
+  fmap BG.fromFFIType hs_bindgen_421a57638d4c3dac_base
 
 -- | Get UTF-8 text from the clipboard.
 --
@@ -140,12 +149,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Clipboard_Unsafe_SDL_HasClipboardText@
 foreign import ccall unsafe "hs_bindgen_98d342e69ea4a567"
   hs_bindgen_98d342e69ea4a567_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Clipboard_Unsafe_SDL_HasClipboardText@
 hs_bindgen_98d342e69ea4a567 :: IO BG.CBool
 hs_bindgen_98d342e69ea4a567 =
-  BG.fromFFIType hs_bindgen_98d342e69ea4a567_base
+  fmap BG.fromFFIType hs_bindgen_98d342e69ea4a567_base
 
 -- | Query whether the clipboard exists and contains a non-empty text string.
 --
@@ -165,14 +174,15 @@
 foreign import ccall unsafe "hs_bindgen_6488f17232c683bf"
   hs_bindgen_6488f17232c683bf_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Clipboard_Unsafe_SDL_SetPrimarySelectionText@
 hs_bindgen_6488f17232c683bf
   :: PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_6488f17232c683bf =
-  BG.fromFFIType hs_bindgen_6488f17232c683bf_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_6488f17232c683bf_base (BG.toFFIType x0))
 
 -- | Put UTF-8 text into the primary selection.
 --
@@ -202,7 +212,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Clipboard_Unsafe_SDL_GetPrimarySelectionText@
 hs_bindgen_5e7b06376b2e9bbd :: IO (BG.Ptr BG.CChar)
 hs_bindgen_5e7b06376b2e9bbd =
-  BG.fromFFIType hs_bindgen_5e7b06376b2e9bbd_base
+  fmap BG.fromFFIType hs_bindgen_5e7b06376b2e9bbd_base
 
 -- | Get UTF-8 text from the primary selection.
 --
@@ -224,12 +234,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Clipboard_Unsafe_SDL_HasPrimarySelectionText@
 foreign import ccall unsafe "hs_bindgen_219ce6e82c7fc2f7"
   hs_bindgen_219ce6e82c7fc2f7_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Clipboard_Unsafe_SDL_HasPrimarySelectionText@
 hs_bindgen_219ce6e82c7fc2f7 :: IO BG.CBool
 hs_bindgen_219ce6e82c7fc2f7 =
-  BG.fromFFIType hs_bindgen_219ce6e82c7fc2f7_base
+  fmap BG.fromFFIType hs_bindgen_219ce6e82c7fc2f7_base
 
 -- | Query whether the primary selection exists and contains a non-empty text string.
 --
@@ -253,8 +263,8 @@
     -> BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Clipboard_Unsafe_SDL_SetClipboardData@
 hs_bindgen_d48cb2fd87e5c697
@@ -265,7 +275,20 @@
   -> HsBindgen.Runtime.LibC.CSize
   -> IO BG.CBool
 hs_bindgen_d48cb2fd87e5c697 =
-  BG.fromFFIType hs_bindgen_d48cb2fd87e5c697_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_d48cb2fd87e5c697_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Offer clipboard data to the OS.
 --
@@ -309,12 +332,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Clipboard_Unsafe_SDL_ClearClipboardData@
 foreign import ccall unsafe "hs_bindgen_c332ca2219d94718"
   hs_bindgen_c332ca2219d94718_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Clipboard_Unsafe_SDL_ClearClipboardData@
 hs_bindgen_c332ca2219d94718 :: IO BG.CBool
 hs_bindgen_c332ca2219d94718 =
-  BG.fromFFIType hs_bindgen_c332ca2219d94718_base
+  fmap BG.fromFFIType hs_bindgen_c332ca2219d94718_base
 
 -- | Clear the clipboard data.
 --
@@ -343,7 +366,9 @@
   -> BG.Ptr HsBindgen.Runtime.LibC.CSize
   -> IO (BG.Ptr BG.Void)
 hs_bindgen_c38a6cca511b3536 =
-  BG.fromFFIType hs_bindgen_c38a6cca511b3536_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_c38a6cca511b3536_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the data from the clipboard for a given mime type.
 --
@@ -374,14 +399,15 @@
 foreign import ccall unsafe "hs_bindgen_5aacfbaa2a2e29f4"
   hs_bindgen_5aacfbaa2a2e29f4_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Clipboard_Unsafe_SDL_HasClipboardData@
 hs_bindgen_5aacfbaa2a2e29f4
   :: PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_5aacfbaa2a2e29f4 =
-  BG.fromFFIType hs_bindgen_5aacfbaa2a2e29f4_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_5aacfbaa2a2e29f4_base (BG.toFFIType x0))
 
 -- | Query whether there is data in the clipboard for the provided mime type.
 --
@@ -413,7 +439,8 @@
   :: BG.Ptr HsBindgen.Runtime.LibC.CSize
   -> IO (BG.Ptr (BG.Ptr BG.CChar))
 hs_bindgen_936644e3f850ec42 =
-  BG.fromFFIType hs_bindgen_936644e3f850ec42_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_936644e3f850ec42_base (BG.toFFIType x0))
 
 -- | Retrieve the list of mime types available in the clipboard.
 --
diff --git a/src/SDL3/Sys/Bindgen/Cpuinfo.hs b/src/SDL3/Sys/Bindgen/Cpuinfo.hs
--- a/src/SDL3/Sys/Bindgen/Cpuinfo.hs
+++ b/src/SDL3/Sys/Bindgen/Cpuinfo.hs
@@ -1,5 +1,6 @@
 {-# LANGUAGE ExplicitForAll #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | CPU feature detection for SDL.
 --
diff --git a/src/SDL3/Sys/Bindgen/Cpuinfo/FunPtr.hs b/src/SDL3/Sys/Bindgen/Cpuinfo/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Cpuinfo/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Cpuinfo/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Cpuinfo.FunPtr (
@@ -25,13 +27,19 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_cpuinfo.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_cpuinfo.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_get_SDL_GetNumLogicalCPUCores */"
          , "__attribute__ ((const))"
          , "signed int (*hs_bindgen_c4c2c993acb58488 (void)) (void)"
@@ -164,7 +172,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_get_SDL_GetNumLogicalCPUCores@
 hs_bindgen_c4c2c993acb58488 :: IO (BG.FunPtr (IO BG.CInt))
 hs_bindgen_c4c2c993acb58488 =
-  BG.fromFFIType hs_bindgen_c4c2c993acb58488_base
+  fmap BG.fromFFIType hs_bindgen_c4c2c993acb58488_base
 
 {-# NOINLINE sDL_GetNumLogicalCPUCores #-}
 
@@ -189,7 +197,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_get_SDL_GetCPUCacheLineSize@
 hs_bindgen_2391090357def4cf :: IO (BG.FunPtr (IO BG.CInt))
 hs_bindgen_2391090357def4cf =
-  BG.fromFFIType hs_bindgen_2391090357def4cf_base
+  fmap BG.fromFFIType hs_bindgen_2391090357def4cf_base
 
 {-# NOINLINE sDL_GetCPUCacheLineSize #-}
 
@@ -216,7 +224,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_get_SDL_HasAltiVec@
 hs_bindgen_9f39d5a7368376a4 :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_9f39d5a7368376a4 =
-  BG.fromFFIType hs_bindgen_9f39d5a7368376a4_base
+  fmap BG.fromFFIType hs_bindgen_9f39d5a7368376a4_base
 
 {-# NOINLINE sDL_HasAltiVec #-}
 
@@ -243,7 +251,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_get_SDL_HasMMX@
 hs_bindgen_fa412e7652139df5 :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_fa412e7652139df5 =
-  BG.fromFFIType hs_bindgen_fa412e7652139df5_base
+  fmap BG.fromFFIType hs_bindgen_fa412e7652139df5_base
 
 {-# NOINLINE sDL_HasMMX #-}
 
@@ -270,7 +278,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_get_SDL_HasSSE@
 hs_bindgen_05d08b5690b4e001 :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_05d08b5690b4e001 =
-  BG.fromFFIType hs_bindgen_05d08b5690b4e001_base
+  fmap BG.fromFFIType hs_bindgen_05d08b5690b4e001_base
 
 {-# NOINLINE sDL_HasSSE #-}
 
@@ -299,7 +307,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_get_SDL_HasSSE2@
 hs_bindgen_ad213f4961990d26 :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_ad213f4961990d26 =
-  BG.fromFFIType hs_bindgen_ad213f4961990d26_base
+  fmap BG.fromFFIType hs_bindgen_ad213f4961990d26_base
 
 {-# NOINLINE sDL_HasSSE2 #-}
 
@@ -328,7 +336,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_get_SDL_HasSSE3@
 hs_bindgen_a58ea737867abc40 :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_a58ea737867abc40 =
-  BG.fromFFIType hs_bindgen_a58ea737867abc40_base
+  fmap BG.fromFFIType hs_bindgen_a58ea737867abc40_base
 
 {-# NOINLINE sDL_HasSSE3 #-}
 
@@ -357,7 +365,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_get_SDL_HasSSE41@
 hs_bindgen_29ae5cbdbd616ec9 :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_29ae5cbdbd616ec9 =
-  BG.fromFFIType hs_bindgen_29ae5cbdbd616ec9_base
+  fmap BG.fromFFIType hs_bindgen_29ae5cbdbd616ec9_base
 
 {-# NOINLINE sDL_HasSSE41 #-}
 
@@ -386,7 +394,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_get_SDL_HasSSE42@
 hs_bindgen_a3625752abd98954 :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_a3625752abd98954 =
-  BG.fromFFIType hs_bindgen_a3625752abd98954_base
+  fmap BG.fromFFIType hs_bindgen_a3625752abd98954_base
 
 {-# NOINLINE sDL_HasSSE42 #-}
 
@@ -415,7 +423,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_get_SDL_HasAVX@
 hs_bindgen_b930b79d23d9a864 :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_b930b79d23d9a864 =
-  BG.fromFFIType hs_bindgen_b930b79d23d9a864_base
+  fmap BG.fromFFIType hs_bindgen_b930b79d23d9a864_base
 
 {-# NOINLINE sDL_HasAVX #-}
 
@@ -444,7 +452,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_get_SDL_HasAVX2@
 hs_bindgen_7d7f442924af51db :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_7d7f442924af51db =
-  BG.fromFFIType hs_bindgen_7d7f442924af51db_base
+  fmap BG.fromFFIType hs_bindgen_7d7f442924af51db_base
 
 {-# NOINLINE sDL_HasAVX2 #-}
 
@@ -473,7 +481,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_get_SDL_HasAVX512F@
 hs_bindgen_95bef25f1d596e41 :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_95bef25f1d596e41 =
-  BG.fromFFIType hs_bindgen_95bef25f1d596e41_base
+  fmap BG.fromFFIType hs_bindgen_95bef25f1d596e41_base
 
 {-# NOINLINE sDL_HasAVX512F #-}
 
@@ -502,7 +510,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_get_SDL_HasARMSIMD@
 hs_bindgen_37e83b09e5180d73 :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_37e83b09e5180d73 =
-  BG.fromFFIType hs_bindgen_37e83b09e5180d73_base
+  fmap BG.fromFFIType hs_bindgen_37e83b09e5180d73_base
 
 {-# NOINLINE sDL_HasARMSIMD #-}
 
@@ -533,7 +541,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_get_SDL_HasNEON@
 hs_bindgen_f1637d681990a151 :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_f1637d681990a151 =
-  BG.fromFFIType hs_bindgen_f1637d681990a151_base
+  fmap BG.fromFFIType hs_bindgen_f1637d681990a151_base
 
 {-# NOINLINE sDL_HasNEON #-}
 
@@ -560,7 +568,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_get_SDL_HasLSX@
 hs_bindgen_aeeccb148a52761c :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_aeeccb148a52761c =
-  BG.fromFFIType hs_bindgen_aeeccb148a52761c_base
+  fmap BG.fromFFIType hs_bindgen_aeeccb148a52761c_base
 
 {-# NOINLINE sDL_HasLSX #-}
 
@@ -587,7 +595,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_get_SDL_HasLASX@
 hs_bindgen_d5a4bc1d40b5d505 :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_d5a4bc1d40b5d505 =
-  BG.fromFFIType hs_bindgen_d5a4bc1d40b5d505_base
+  fmap BG.fromFFIType hs_bindgen_d5a4bc1d40b5d505_base
 
 {-# NOINLINE sDL_HasLASX #-}
 
@@ -614,7 +622,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_get_SDL_GetSystemRAM@
 hs_bindgen_393a56703dc32628 :: IO (BG.FunPtr (IO BG.CInt))
 hs_bindgen_393a56703dc32628 =
-  BG.fromFFIType hs_bindgen_393a56703dc32628_base
+  fmap BG.fromFFIType hs_bindgen_393a56703dc32628_base
 
 {-# NOINLINE sDL_GetSystemRAM #-}
 
@@ -639,7 +647,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_get_SDL_GetSIMDAlignment@
 hs_bindgen_893e4a7de858042c :: IO (BG.FunPtr (IO HsBindgen.Runtime.LibC.CSize))
 hs_bindgen_893e4a7de858042c =
-  BG.fromFFIType hs_bindgen_893e4a7de858042c_base
+  fmap BG.fromFFIType hs_bindgen_893e4a7de858042c_base
 
 {-# NOINLINE sDL_GetSIMDAlignment #-}
 
@@ -668,7 +676,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_get_SDL_GetSystemPageSize@
 hs_bindgen_0f2dc2f831cb5d73 :: IO (BG.FunPtr (IO BG.CInt))
 hs_bindgen_0f2dc2f831cb5d73 =
-  BG.fromFFIType hs_bindgen_0f2dc2f831cb5d73_base
+  fmap BG.fromFFIType hs_bindgen_0f2dc2f831cb5d73_base
 
 {-# NOINLINE sDL_GetSystemPageSize #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Cpuinfo/Safe.hs b/src/SDL3/Sys/Bindgen/Cpuinfo/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Cpuinfo/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Cpuinfo/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Cpuinfo.Safe (
@@ -25,13 +27,19 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_cpuinfo.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_cpuinfo.h>"
          , "signed int hs_bindgen_021d38423efa2894 (void)"
          , "{"
          , "  return (SDL_GetNumLogicalCPUCores)();"
@@ -121,12 +129,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_GetNumLogicalCPUCores@
 foreign import ccall safe "hs_bindgen_021d38423efa2894"
   hs_bindgen_021d38423efa2894_base
-    :: IO BG.Int32
+    :: IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_GetNumLogicalCPUCores@
 hs_bindgen_021d38423efa2894 :: IO BG.CInt
 hs_bindgen_021d38423efa2894 =
-  BG.fromFFIType hs_bindgen_021d38423efa2894_base
+  fmap BG.fromFFIType hs_bindgen_021d38423efa2894_base
 
 -- | Get the number of logical CPU cores available.
 --
@@ -144,12 +152,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_GetCPUCacheLineSize@
 foreign import ccall safe "hs_bindgen_0ca909a81c077ab1"
   hs_bindgen_0ca909a81c077ab1_base
-    :: IO BG.Int32
+    :: IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_GetCPUCacheLineSize@
 hs_bindgen_0ca909a81c077ab1 :: IO BG.CInt
 hs_bindgen_0ca909a81c077ab1 =
-  BG.fromFFIType hs_bindgen_0ca909a81c077ab1_base
+  fmap BG.fromFFIType hs_bindgen_0ca909a81c077ab1_base
 
 -- | Determine the L1 cache line size of the CPU.
 --
@@ -168,12 +176,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasAltiVec@
 foreign import ccall safe "hs_bindgen_12f0f738ad7e36de"
   hs_bindgen_12f0f738ad7e36de_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasAltiVec@
 hs_bindgen_12f0f738ad7e36de :: IO BG.CBool
 hs_bindgen_12f0f738ad7e36de =
-  BG.fromFFIType hs_bindgen_12f0f738ad7e36de_base
+  fmap BG.fromFFIType hs_bindgen_12f0f738ad7e36de_base
 
 -- | Determine whether the CPU has AltiVec features.
 --
@@ -192,12 +200,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasMMX@
 foreign import ccall safe "hs_bindgen_7b773ae3e33864af"
   hs_bindgen_7b773ae3e33864af_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasMMX@
 hs_bindgen_7b773ae3e33864af :: IO BG.CBool
 hs_bindgen_7b773ae3e33864af =
-  BG.fromFFIType hs_bindgen_7b773ae3e33864af_base
+  fmap BG.fromFFIType hs_bindgen_7b773ae3e33864af_base
 
 -- | Determine whether the CPU has MMX features.
 --
@@ -216,12 +224,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasSSE@
 foreign import ccall safe "hs_bindgen_9fc6d41bd7e06a8c"
   hs_bindgen_9fc6d41bd7e06a8c_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasSSE@
 hs_bindgen_9fc6d41bd7e06a8c :: IO BG.CBool
 hs_bindgen_9fc6d41bd7e06a8c =
-  BG.fromFFIType hs_bindgen_9fc6d41bd7e06a8c_base
+  fmap BG.fromFFIType hs_bindgen_9fc6d41bd7e06a8c_base
 
 -- | Determine whether the CPU has SSE features.
 --
@@ -242,12 +250,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasSSE2@
 foreign import ccall safe "hs_bindgen_87bc5fc8be1bca92"
   hs_bindgen_87bc5fc8be1bca92_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasSSE2@
 hs_bindgen_87bc5fc8be1bca92 :: IO BG.CBool
 hs_bindgen_87bc5fc8be1bca92 =
-  BG.fromFFIType hs_bindgen_87bc5fc8be1bca92_base
+  fmap BG.fromFFIType hs_bindgen_87bc5fc8be1bca92_base
 
 -- | Determine whether the CPU has SSE2 features.
 --
@@ -268,12 +276,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasSSE3@
 foreign import ccall safe "hs_bindgen_8c78b2fb7d6ba035"
   hs_bindgen_8c78b2fb7d6ba035_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasSSE3@
 hs_bindgen_8c78b2fb7d6ba035 :: IO BG.CBool
 hs_bindgen_8c78b2fb7d6ba035 =
-  BG.fromFFIType hs_bindgen_8c78b2fb7d6ba035_base
+  fmap BG.fromFFIType hs_bindgen_8c78b2fb7d6ba035_base
 
 -- | Determine whether the CPU has SSE3 features.
 --
@@ -294,12 +302,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasSSE41@
 foreign import ccall safe "hs_bindgen_ad68eac9c65daa8b"
   hs_bindgen_ad68eac9c65daa8b_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasSSE41@
 hs_bindgen_ad68eac9c65daa8b :: IO BG.CBool
 hs_bindgen_ad68eac9c65daa8b =
-  BG.fromFFIType hs_bindgen_ad68eac9c65daa8b_base
+  fmap BG.fromFFIType hs_bindgen_ad68eac9c65daa8b_base
 
 -- | Determine whether the CPU has SSE4.1 features.
 --
@@ -320,12 +328,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasSSE42@
 foreign import ccall safe "hs_bindgen_45773d656848547a"
   hs_bindgen_45773d656848547a_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasSSE42@
 hs_bindgen_45773d656848547a :: IO BG.CBool
 hs_bindgen_45773d656848547a =
-  BG.fromFFIType hs_bindgen_45773d656848547a_base
+  fmap BG.fromFFIType hs_bindgen_45773d656848547a_base
 
 -- | Determine whether the CPU has SSE4.2 features.
 --
@@ -346,12 +354,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasAVX@
 foreign import ccall safe "hs_bindgen_09d9c1ee75214203"
   hs_bindgen_09d9c1ee75214203_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasAVX@
 hs_bindgen_09d9c1ee75214203 :: IO BG.CBool
 hs_bindgen_09d9c1ee75214203 =
-  BG.fromFFIType hs_bindgen_09d9c1ee75214203_base
+  fmap BG.fromFFIType hs_bindgen_09d9c1ee75214203_base
 
 -- | Determine whether the CPU has AVX features.
 --
@@ -372,12 +380,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasAVX2@
 foreign import ccall safe "hs_bindgen_dccd2628b251a266"
   hs_bindgen_dccd2628b251a266_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasAVX2@
 hs_bindgen_dccd2628b251a266 :: IO BG.CBool
 hs_bindgen_dccd2628b251a266 =
-  BG.fromFFIType hs_bindgen_dccd2628b251a266_base
+  fmap BG.fromFFIType hs_bindgen_dccd2628b251a266_base
 
 -- | Determine whether the CPU has AVX2 features.
 --
@@ -398,12 +406,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasAVX512F@
 foreign import ccall safe "hs_bindgen_963390989096b612"
   hs_bindgen_963390989096b612_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasAVX512F@
 hs_bindgen_963390989096b612 :: IO BG.CBool
 hs_bindgen_963390989096b612 =
-  BG.fromFFIType hs_bindgen_963390989096b612_base
+  fmap BG.fromFFIType hs_bindgen_963390989096b612_base
 
 -- | Determine whether the CPU has AVX-512F (foundation) features.
 --
@@ -424,12 +432,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasARMSIMD@
 foreign import ccall safe "hs_bindgen_7f5bde151d49ba8f"
   hs_bindgen_7f5bde151d49ba8f_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasARMSIMD@
 hs_bindgen_7f5bde151d49ba8f :: IO BG.CBool
 hs_bindgen_7f5bde151d49ba8f =
-  BG.fromFFIType hs_bindgen_7f5bde151d49ba8f_base
+  fmap BG.fromFFIType hs_bindgen_7f5bde151d49ba8f_base
 
 -- | Determine whether the CPU has ARM SIMD (ARMv6) features.
 --
@@ -452,12 +460,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasNEON@
 foreign import ccall safe "hs_bindgen_4bb569121e6831a2"
   hs_bindgen_4bb569121e6831a2_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasNEON@
 hs_bindgen_4bb569121e6831a2 :: IO BG.CBool
 hs_bindgen_4bb569121e6831a2 =
-  BG.fromFFIType hs_bindgen_4bb569121e6831a2_base
+  fmap BG.fromFFIType hs_bindgen_4bb569121e6831a2_base
 
 -- | Determine whether the CPU has NEON (ARM SIMD) features.
 --
@@ -476,12 +484,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasLSX@
 foreign import ccall safe "hs_bindgen_56a380fc3630f88f"
   hs_bindgen_56a380fc3630f88f_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasLSX@
 hs_bindgen_56a380fc3630f88f :: IO BG.CBool
 hs_bindgen_56a380fc3630f88f =
-  BG.fromFFIType hs_bindgen_56a380fc3630f88f_base
+  fmap BG.fromFFIType hs_bindgen_56a380fc3630f88f_base
 
 -- | Determine whether the CPU has LSX (LOONGARCH SIMD) features.
 --
@@ -500,12 +508,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasLASX@
 foreign import ccall safe "hs_bindgen_18257ff80297cf49"
   hs_bindgen_18257ff80297cf49_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasLASX@
 hs_bindgen_18257ff80297cf49 :: IO BG.CBool
 hs_bindgen_18257ff80297cf49 =
-  BG.fromFFIType hs_bindgen_18257ff80297cf49_base
+  fmap BG.fromFFIType hs_bindgen_18257ff80297cf49_base
 
 -- | Determine whether the CPU has LASX (LOONGARCH SIMD) features.
 --
@@ -524,12 +532,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_GetSystemRAM@
 foreign import ccall safe "hs_bindgen_cd53f670bd0bc729"
   hs_bindgen_cd53f670bd0bc729_base
-    :: IO BG.Int32
+    :: IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_GetSystemRAM@
 hs_bindgen_cd53f670bd0bc729 :: IO BG.CInt
 hs_bindgen_cd53f670bd0bc729 =
-  BG.fromFFIType hs_bindgen_cd53f670bd0bc729_base
+  fmap BG.fromFFIType hs_bindgen_cd53f670bd0bc729_base
 
 -- | Get the amount of RAM configured in the system.
 --
@@ -546,12 +554,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_GetSIMDAlignment@
 foreign import ccall safe "hs_bindgen_db11c36832e4fbf2"
   hs_bindgen_db11c36832e4fbf2_base
-    :: IO BG.Word64
+    :: IO HsBindgen.Runtime.LibC.CSize
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_GetSIMDAlignment@
 hs_bindgen_db11c36832e4fbf2 :: IO HsBindgen.Runtime.LibC.CSize
 hs_bindgen_db11c36832e4fbf2 =
-  BG.fromFFIType hs_bindgen_db11c36832e4fbf2_base
+  fmap BG.fromFFIType hs_bindgen_db11c36832e4fbf2_base
 
 -- | Report the alignment this system needs for SIMD allocations.
 --
@@ -572,12 +580,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_GetSystemPageSize@
 foreign import ccall safe "hs_bindgen_a5c1dbf29e777b88"
   hs_bindgen_a5c1dbf29e777b88_base
-    :: IO BG.Int32
+    :: IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_GetSystemPageSize@
 hs_bindgen_a5c1dbf29e777b88 :: IO BG.CInt
 hs_bindgen_a5c1dbf29e777b88 =
-  BG.fromFFIType hs_bindgen_a5c1dbf29e777b88_base
+  fmap BG.fromFFIType hs_bindgen_a5c1dbf29e777b88_base
 
 -- | Report the size of a page of memory.
 --
diff --git a/src/SDL3/Sys/Bindgen/Cpuinfo/Unsafe.hs b/src/SDL3/Sys/Bindgen/Cpuinfo/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Cpuinfo/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Cpuinfo/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Cpuinfo.Unsafe (
@@ -25,13 +27,19 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_cpuinfo.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_cpuinfo.h>"
          , "signed int hs_bindgen_2dccacbd66e2901a (void)"
          , "{"
          , "  return (SDL_GetNumLogicalCPUCores)();"
@@ -121,12 +129,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_GetNumLogicalCPUCores@
 foreign import ccall unsafe "hs_bindgen_2dccacbd66e2901a"
   hs_bindgen_2dccacbd66e2901a_base
-    :: IO BG.Int32
+    :: IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_GetNumLogicalCPUCores@
 hs_bindgen_2dccacbd66e2901a :: IO BG.CInt
 hs_bindgen_2dccacbd66e2901a =
-  BG.fromFFIType hs_bindgen_2dccacbd66e2901a_base
+  fmap BG.fromFFIType hs_bindgen_2dccacbd66e2901a_base
 
 -- | Get the number of logical CPU cores available.
 --
@@ -144,12 +152,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_GetCPUCacheLineSize@
 foreign import ccall unsafe "hs_bindgen_e03244111b7a5e58"
   hs_bindgen_e03244111b7a5e58_base
-    :: IO BG.Int32
+    :: IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_GetCPUCacheLineSize@
 hs_bindgen_e03244111b7a5e58 :: IO BG.CInt
 hs_bindgen_e03244111b7a5e58 =
-  BG.fromFFIType hs_bindgen_e03244111b7a5e58_base
+  fmap BG.fromFFIType hs_bindgen_e03244111b7a5e58_base
 
 -- | Determine the L1 cache line size of the CPU.
 --
@@ -168,12 +176,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_HasAltiVec@
 foreign import ccall unsafe "hs_bindgen_c02ac9b5929c16b4"
   hs_bindgen_c02ac9b5929c16b4_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_HasAltiVec@
 hs_bindgen_c02ac9b5929c16b4 :: IO BG.CBool
 hs_bindgen_c02ac9b5929c16b4 =
-  BG.fromFFIType hs_bindgen_c02ac9b5929c16b4_base
+  fmap BG.fromFFIType hs_bindgen_c02ac9b5929c16b4_base
 
 -- | Determine whether the CPU has AltiVec features.
 --
@@ -192,12 +200,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_HasMMX@
 foreign import ccall unsafe "hs_bindgen_28aa2bda36b5aa4c"
   hs_bindgen_28aa2bda36b5aa4c_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_HasMMX@
 hs_bindgen_28aa2bda36b5aa4c :: IO BG.CBool
 hs_bindgen_28aa2bda36b5aa4c =
-  BG.fromFFIType hs_bindgen_28aa2bda36b5aa4c_base
+  fmap BG.fromFFIType hs_bindgen_28aa2bda36b5aa4c_base
 
 -- | Determine whether the CPU has MMX features.
 --
@@ -216,12 +224,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_HasSSE@
 foreign import ccall unsafe "hs_bindgen_eaac9231c0bcefbd"
   hs_bindgen_eaac9231c0bcefbd_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_HasSSE@
 hs_bindgen_eaac9231c0bcefbd :: IO BG.CBool
 hs_bindgen_eaac9231c0bcefbd =
-  BG.fromFFIType hs_bindgen_eaac9231c0bcefbd_base
+  fmap BG.fromFFIType hs_bindgen_eaac9231c0bcefbd_base
 
 -- | Determine whether the CPU has SSE features.
 --
@@ -242,12 +250,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_HasSSE2@
 foreign import ccall unsafe "hs_bindgen_45752d13431081c5"
   hs_bindgen_45752d13431081c5_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_HasSSE2@
 hs_bindgen_45752d13431081c5 :: IO BG.CBool
 hs_bindgen_45752d13431081c5 =
-  BG.fromFFIType hs_bindgen_45752d13431081c5_base
+  fmap BG.fromFFIType hs_bindgen_45752d13431081c5_base
 
 -- | Determine whether the CPU has SSE2 features.
 --
@@ -268,12 +276,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_HasSSE3@
 foreign import ccall unsafe "hs_bindgen_c6c39cde5a6c6617"
   hs_bindgen_c6c39cde5a6c6617_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_HasSSE3@
 hs_bindgen_c6c39cde5a6c6617 :: IO BG.CBool
 hs_bindgen_c6c39cde5a6c6617 =
-  BG.fromFFIType hs_bindgen_c6c39cde5a6c6617_base
+  fmap BG.fromFFIType hs_bindgen_c6c39cde5a6c6617_base
 
 -- | Determine whether the CPU has SSE3 features.
 --
@@ -294,12 +302,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_HasSSE41@
 foreign import ccall unsafe "hs_bindgen_e0ea6c3ffa969fb3"
   hs_bindgen_e0ea6c3ffa969fb3_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_HasSSE41@
 hs_bindgen_e0ea6c3ffa969fb3 :: IO BG.CBool
 hs_bindgen_e0ea6c3ffa969fb3 =
-  BG.fromFFIType hs_bindgen_e0ea6c3ffa969fb3_base
+  fmap BG.fromFFIType hs_bindgen_e0ea6c3ffa969fb3_base
 
 -- | Determine whether the CPU has SSE4.1 features.
 --
@@ -320,12 +328,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_HasSSE42@
 foreign import ccall unsafe "hs_bindgen_963abd764eea230e"
   hs_bindgen_963abd764eea230e_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_HasSSE42@
 hs_bindgen_963abd764eea230e :: IO BG.CBool
 hs_bindgen_963abd764eea230e =
-  BG.fromFFIType hs_bindgen_963abd764eea230e_base
+  fmap BG.fromFFIType hs_bindgen_963abd764eea230e_base
 
 -- | Determine whether the CPU has SSE4.2 features.
 --
@@ -346,12 +354,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_HasAVX@
 foreign import ccall unsafe "hs_bindgen_9fd691470d9db666"
   hs_bindgen_9fd691470d9db666_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_HasAVX@
 hs_bindgen_9fd691470d9db666 :: IO BG.CBool
 hs_bindgen_9fd691470d9db666 =
-  BG.fromFFIType hs_bindgen_9fd691470d9db666_base
+  fmap BG.fromFFIType hs_bindgen_9fd691470d9db666_base
 
 -- | Determine whether the CPU has AVX features.
 --
@@ -372,12 +380,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_HasAVX2@
 foreign import ccall unsafe "hs_bindgen_124690c686028ea3"
   hs_bindgen_124690c686028ea3_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_HasAVX2@
 hs_bindgen_124690c686028ea3 :: IO BG.CBool
 hs_bindgen_124690c686028ea3 =
-  BG.fromFFIType hs_bindgen_124690c686028ea3_base
+  fmap BG.fromFFIType hs_bindgen_124690c686028ea3_base
 
 -- | Determine whether the CPU has AVX2 features.
 --
@@ -398,12 +406,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_HasAVX512F@
 foreign import ccall unsafe "hs_bindgen_3ae539db5deb14c3"
   hs_bindgen_3ae539db5deb14c3_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_HasAVX512F@
 hs_bindgen_3ae539db5deb14c3 :: IO BG.CBool
 hs_bindgen_3ae539db5deb14c3 =
-  BG.fromFFIType hs_bindgen_3ae539db5deb14c3_base
+  fmap BG.fromFFIType hs_bindgen_3ae539db5deb14c3_base
 
 -- | Determine whether the CPU has AVX-512F (foundation) features.
 --
@@ -424,12 +432,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_HasARMSIMD@
 foreign import ccall unsafe "hs_bindgen_b00e33aa275d2caa"
   hs_bindgen_b00e33aa275d2caa_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_HasARMSIMD@
 hs_bindgen_b00e33aa275d2caa :: IO BG.CBool
 hs_bindgen_b00e33aa275d2caa =
-  BG.fromFFIType hs_bindgen_b00e33aa275d2caa_base
+  fmap BG.fromFFIType hs_bindgen_b00e33aa275d2caa_base
 
 -- | Determine whether the CPU has ARM SIMD (ARMv6) features.
 --
@@ -452,12 +460,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_HasNEON@
 foreign import ccall unsafe "hs_bindgen_1bc7c765b1884ac6"
   hs_bindgen_1bc7c765b1884ac6_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_HasNEON@
 hs_bindgen_1bc7c765b1884ac6 :: IO BG.CBool
 hs_bindgen_1bc7c765b1884ac6 =
-  BG.fromFFIType hs_bindgen_1bc7c765b1884ac6_base
+  fmap BG.fromFFIType hs_bindgen_1bc7c765b1884ac6_base
 
 -- | Determine whether the CPU has NEON (ARM SIMD) features.
 --
@@ -476,12 +484,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_HasLSX@
 foreign import ccall unsafe "hs_bindgen_d7682979762c8eba"
   hs_bindgen_d7682979762c8eba_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_HasLSX@
 hs_bindgen_d7682979762c8eba :: IO BG.CBool
 hs_bindgen_d7682979762c8eba =
-  BG.fromFFIType hs_bindgen_d7682979762c8eba_base
+  fmap BG.fromFFIType hs_bindgen_d7682979762c8eba_base
 
 -- | Determine whether the CPU has LSX (LOONGARCH SIMD) features.
 --
@@ -500,12 +508,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_HasLASX@
 foreign import ccall unsafe "hs_bindgen_d5a768a4b808f80b"
   hs_bindgen_d5a768a4b808f80b_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_HasLASX@
 hs_bindgen_d5a768a4b808f80b :: IO BG.CBool
 hs_bindgen_d5a768a4b808f80b =
-  BG.fromFFIType hs_bindgen_d5a768a4b808f80b_base
+  fmap BG.fromFFIType hs_bindgen_d5a768a4b808f80b_base
 
 -- | Determine whether the CPU has LASX (LOONGARCH SIMD) features.
 --
@@ -524,12 +532,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_GetSystemRAM@
 foreign import ccall unsafe "hs_bindgen_677c5a21a3ebeb42"
   hs_bindgen_677c5a21a3ebeb42_base
-    :: IO BG.Int32
+    :: IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_GetSystemRAM@
 hs_bindgen_677c5a21a3ebeb42 :: IO BG.CInt
 hs_bindgen_677c5a21a3ebeb42 =
-  BG.fromFFIType hs_bindgen_677c5a21a3ebeb42_base
+  fmap BG.fromFFIType hs_bindgen_677c5a21a3ebeb42_base
 
 -- | Get the amount of RAM configured in the system.
 --
@@ -546,12 +554,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_GetSIMDAlignment@
 foreign import ccall unsafe "hs_bindgen_0e3c01d452c69d72"
   hs_bindgen_0e3c01d452c69d72_base
-    :: IO BG.Word64
+    :: IO HsBindgen.Runtime.LibC.CSize
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_GetSIMDAlignment@
 hs_bindgen_0e3c01d452c69d72 :: IO HsBindgen.Runtime.LibC.CSize
 hs_bindgen_0e3c01d452c69d72 =
-  BG.fromFFIType hs_bindgen_0e3c01d452c69d72_base
+  fmap BG.fromFFIType hs_bindgen_0e3c01d452c69d72_base
 
 -- | Report the alignment this system needs for SIMD allocations.
 --
@@ -572,12 +580,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_GetSystemPageSize@
 foreign import ccall unsafe "hs_bindgen_d276a10dc866cd76"
   hs_bindgen_d276a10dc866cd76_base
-    :: IO BG.Int32
+    :: IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Unsafe_SDL_GetSystemPageSize@
 hs_bindgen_d276a10dc866cd76 :: IO BG.CInt
 hs_bindgen_d276a10dc866cd76 =
-  BG.fromFFIType hs_bindgen_d276a10dc866cd76_base
+  fmap BG.fromFFIType hs_bindgen_d276a10dc866cd76_base
 
 -- | Report the size of a page of memory.
 --
diff --git a/src/SDL3/Sys/Bindgen/Dialog.hs b/src/SDL3/Sys/Bindgen/Dialog.hs
--- a/src/SDL3/Sys/Bindgen/Dialog.hs
+++ b/src/SDL3/Sys/Bindgen/Dialog.hs
@@ -6,6 +6,7 @@
 {-# LANGUAGE ExplicitForAll #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE MagicHash #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
@@ -17,6 +18,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | File dialog support.
 --
@@ -50,10 +52,13 @@
 )
 where
 
+import Prelude (Eq, IO, Int, Ord, Read, Show, fmap, pure, (<*>), (>>), type (~))
+
 import HsBindgen.Runtime.CEnum qualified as CEnum
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.Marshal qualified as Marshal
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Struct qualified as Struct
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField
 
@@ -89,6 +94,12 @@
 
 deriving via Marshal.EquivStorable SDL_DialogFileFilter instance BG.Storable SDL_DialogFileFilter
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_DialogFileFilter
+  instance
+    Struct.IsStruct SDL_DialogFileFilter
+
+-- | [C declaration]: @name@, defined at @SDL3\/SDL_dialog.h 72:17@
 instance
   (ty ~ PtrConst.PtrConst BG.CChar)
   => BG.CompatHasField.HasField "name" SDL_DialogFileFilter ty
@@ -113,6 +124,7 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | [C declaration]: @pattern@, defined at @SDL3\/SDL_dialog.h 73:17@
 instance
   (ty ~ PtrConst.PtrConst BG.CChar)
   => BG.CompatHasField.HasField "pattern'" SDL_DialogFileFilter ty
@@ -144,13 +156,12 @@
   { unwrap :: BG.Ptr BG.Void -> PtrConst.PtrConst (PtrConst.PtrConst BG.CChar) -> BG.CInt -> IO ()
   }
   deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
 
 -- __unique:__ @toSDL_DialogFileCallback_Aux@
 foreign import ccall safe "wrapper"
   hs_bindgen_99f6498d5c37dad6_base
-    :: (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Int32 -> IO ())
-    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Int32 -> IO ()))
+    :: (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.CInt -> IO ())
+    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.CInt -> IO ()))
 
 -- __unique:__ @toSDL_DialogFileCallback_Aux@
 hs_bindgen_99f6498d5c37dad6
@@ -158,15 +169,23 @@
   -> IO (BG.FunPtr SDL_DialogFileCallback_Aux)
 hs_bindgen_99f6498d5c37dad6 =
   \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_99f6498d5c37dad6_base (BG.toFFIType fun0))
+    fmap
+      BG.castFunPtr
+      ( hs_bindgen_99f6498d5c37dad6_base
+          ( \x1 ->
+              \x2 ->
+                \x3 ->
+                  BG.getField @"unwrap" fun0 (BG.fromFFIType x1) (BG.fromFFIType x2) (BG.fromFFIType x3)
+          )
+      )
 
 -- __unique:__ @fromSDL_DialogFileCallback_Aux@
 foreign import ccall safe "dynamic"
   hs_bindgen_10f8f9d1eb0aafd5_base
-    :: BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Int32 -> IO ())
+    :: BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.CInt -> IO ())
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> IO ()
 
 -- __unique:__ @fromSDL_DialogFileCallback_Aux@
@@ -175,7 +194,16 @@
   -> SDL_DialogFileCallback_Aux
 hs_bindgen_10f8f9d1eb0aafd5 =
   \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_10f8f9d1eb0aafd5_base (BG.castFunPtrToFFIType funPtr0))
+    SDL_DialogFileCallback_Aux
+      ( \x1 ->
+          \x2 ->
+            \x3 ->
+              hs_bindgen_10f8f9d1eb0aafd5_base
+                (BG.castFunPtr funPtr0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+      )
 
 instance BG.ToFunPtr SDL_DialogFileCallback_Aux where
   toFunPtr = hs_bindgen_99f6498d5c37dad6
diff --git a/src/SDL3/Sys/Bindgen/Dialog/FunPtr.hs b/src/SDL3/Sys/Bindgen/Dialog/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Dialog/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Dialog/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Dialog.FunPtr (
@@ -10,6 +12,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -19,7 +23,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_dialog.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_dialog.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Dialog_get_SDL_ShowOpenFileDialog */"
          , "__attribute__ ((const))"
          , "void (*hs_bindgen_6641ec3e92287ca2 (void)) ("
@@ -94,7 +102,7 @@
            )
        )
 hs_bindgen_6641ec3e92287ca2 =
-  BG.fromFFIType hs_bindgen_6641ec3e92287ca2_base
+  fmap BG.fromFFIType hs_bindgen_6641ec3e92287ca2_base
 
 {-# NOINLINE sDL_ShowOpenFileDialog #-}
 
@@ -164,7 +172,7 @@
            )
        )
 hs_bindgen_a4a801b9d3bede11 =
-  BG.fromFFIType hs_bindgen_a4a801b9d3bede11_base
+  fmap BG.fromFFIType hs_bindgen_a4a801b9d3bede11_base
 
 {-# NOINLINE sDL_ShowSaveFileDialog #-}
 
@@ -230,7 +238,7 @@
            )
        )
 hs_bindgen_87c736a1fcfa392e =
-  BG.fromFFIType hs_bindgen_87c736a1fcfa392e_base
+  fmap BG.fromFFIType hs_bindgen_87c736a1fcfa392e_base
 
 {-# NOINLINE sDL_ShowOpenFolderDialog #-}
 
@@ -292,7 +300,7 @@
            )
        )
 hs_bindgen_f3b5f0c530765109 =
-  BG.fromFFIType hs_bindgen_f3b5f0c530765109_base
+  fmap BG.fromFFIType hs_bindgen_f3b5f0c530765109_base
 
 {-# NOINLINE sDL_ShowFileDialogWithProperties #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Dialog/Safe.hs b/src/SDL3/Sys/Bindgen/Dialog/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Dialog/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Dialog/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Dialog.Safe (
@@ -10,6 +12,9 @@
 )
 where
 
+import Prelude (IO)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -19,7 +24,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_dialog.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_dialog.h>"
          , "void hs_bindgen_bb279e07edff0c05 ("
          , "  SDL_DialogFileCallback arg1,"
          , "  void *arg2,"
@@ -73,9 +82,9 @@
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> BG.Ptr BG.Void
-    -> BG.Word8
+    -> BG.CBool
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Dialog_Safe_SDL_ShowOpenFileDialog@
@@ -89,7 +98,21 @@
   -> BG.CBool
   -> IO ()
 hs_bindgen_bb279e07edff0c05 =
-  BG.fromFFIType hs_bindgen_bb279e07edff0c05_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                hs_bindgen_bb279e07edff0c05_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+                  (BG.toFFIType x5)
+                  (BG.toFFIType x6)
 
 -- | Displays a dialog that lets the user select a file on their filesystem.
 --
@@ -149,7 +172,7 @@
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> BG.Ptr BG.Void
     -> IO ()
 
@@ -163,7 +186,19 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO ()
 hs_bindgen_5f9b8c9a23decdee =
-  BG.fromFFIType hs_bindgen_5f9b8c9a23decdee_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              hs_bindgen_5f9b8c9a23decdee_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+                (BG.toFFIType x4)
+                (BG.toFFIType x5)
 
 -- | Displays a dialog that lets the user choose a new or existing file on their filesystem.
 --
@@ -219,7 +254,7 @@
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word8
+    -> BG.CBool
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Dialog_Safe_SDL_ShowOpenFolderDialog@
@@ -231,7 +266,17 @@
   -> BG.CBool
   -> IO ()
 hs_bindgen_ed60a60f5fbee19e =
-  BG.fromFFIType hs_bindgen_ed60a60f5fbee19e_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            hs_bindgen_ed60a60f5fbee19e_base
+              (BG.toFFIType x0)
+              (BG.toFFIType x1)
+              (BG.toFFIType x2)
+              (BG.toFFIType x3)
+              (BG.toFFIType x4)
 
 -- | Displays a dialog that lets the user select a folder on their filesystem.
 --
@@ -280,10 +325,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Dialog_Safe_SDL_ShowFileDialogWithProperties@
 foreign import ccall safe "hs_bindgen_af795bc446bca49d"
   hs_bindgen_af795bc446bca49d_base
-    :: BG.Word32
+    :: BG.CUInt
     -> BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Dialog_Safe_SDL_ShowFileDialogWithProperties@
@@ -294,7 +339,15 @@
   -> SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
   -> IO ()
 hs_bindgen_af795bc446bca49d =
-  BG.fromFFIType hs_bindgen_af795bc446bca49d_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_af795bc446bca49d_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Create and launch a file dialog with the specified properties.
 --
diff --git a/src/SDL3/Sys/Bindgen/Dialog/Unsafe.hs b/src/SDL3/Sys/Bindgen/Dialog/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Dialog/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Dialog/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Dialog.Unsafe (
@@ -10,6 +12,9 @@
 )
 where
 
+import Prelude (IO)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -19,7 +24,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_dialog.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_dialog.h>"
          , "void hs_bindgen_fda0993ea7af1749 ("
          , "  SDL_DialogFileCallback arg1,"
          , "  void *arg2,"
@@ -73,9 +82,9 @@
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> BG.Ptr BG.Void
-    -> BG.Word8
+    -> BG.CBool
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Dialog_Unsafe_SDL_ShowOpenFileDialog@
@@ -89,7 +98,21 @@
   -> BG.CBool
   -> IO ()
 hs_bindgen_fda0993ea7af1749 =
-  BG.fromFFIType hs_bindgen_fda0993ea7af1749_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                hs_bindgen_fda0993ea7af1749_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+                  (BG.toFFIType x5)
+                  (BG.toFFIType x6)
 
 -- | Displays a dialog that lets the user select a file on their filesystem.
 --
@@ -149,7 +172,7 @@
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> BG.Ptr BG.Void
     -> IO ()
 
@@ -163,7 +186,19 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO ()
 hs_bindgen_d0854a0f4506ac27 =
-  BG.fromFFIType hs_bindgen_d0854a0f4506ac27_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              hs_bindgen_d0854a0f4506ac27_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+                (BG.toFFIType x4)
+                (BG.toFFIType x5)
 
 -- | Displays a dialog that lets the user choose a new or existing file on their filesystem.
 --
@@ -219,7 +254,7 @@
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word8
+    -> BG.CBool
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Dialog_Unsafe_SDL_ShowOpenFolderDialog@
@@ -231,7 +266,17 @@
   -> BG.CBool
   -> IO ()
 hs_bindgen_ff283a0c567ee6a6 =
-  BG.fromFFIType hs_bindgen_ff283a0c567ee6a6_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            hs_bindgen_ff283a0c567ee6a6_base
+              (BG.toFFIType x0)
+              (BG.toFFIType x1)
+              (BG.toFFIType x2)
+              (BG.toFFIType x3)
+              (BG.toFFIType x4)
 
 -- | Displays a dialog that lets the user select a folder on their filesystem.
 --
@@ -280,10 +325,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Dialog_Unsafe_SDL_ShowFileDialogWithProperties@
 foreign import ccall unsafe "hs_bindgen_18ab411c9e9de6d3"
   hs_bindgen_18ab411c9e9de6d3_base
-    :: BG.Word32
+    :: BG.CUInt
     -> BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Dialog_Unsafe_SDL_ShowFileDialogWithProperties@
@@ -294,7 +339,15 @@
   -> SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
   -> IO ()
 hs_bindgen_18ab411c9e9de6d3 =
-  BG.fromFFIType hs_bindgen_18ab411c9e9de6d3_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_18ab411c9e9de6d3_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Create and launch a file dialog with the specified properties.
 --
diff --git a/src/SDL3/Sys/Bindgen/Dlopennote.hs b/src/SDL3/Sys/Bindgen/Dlopennote.hs
--- a/src/SDL3/Sys/Bindgen/Dlopennote.hs
+++ b/src/SDL3/Sys/Bindgen/Dlopennote.hs
@@ -1,5 +1,6 @@
 {-# LANGUAGE ExplicitForAll #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | This header allows you to annotate your code so external tools know about dynamic shared library dependencies.
 --
diff --git a/src/SDL3/Sys/Bindgen/Endian.hs b/src/SDL3/Sys/Bindgen/Endian.hs
--- a/src/SDL3/Sys/Bindgen/Endian.hs
+++ b/src/SDL3/Sys/Bindgen/Endian.hs
@@ -1,5 +1,6 @@
 {-# LANGUAGE ExplicitForAll #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 module SDL3.Sys.Bindgen.Endian (
   SDL3.Sys.Bindgen.Endian.sDL_LIL_ENDIAN,
diff --git a/src/SDL3/Sys/Bindgen/Endian/FunPtr.hs b/src/SDL3/Sys/Bindgen/Endian/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Endian/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Endian/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Endian.FunPtr (
@@ -7,12 +9,18 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_endian.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_endian.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Endian_get_SDL_SwapFloat */"
          , "__attribute__ ((const))"
          , "float (*hs_bindgen_a0e501e24aab59b4 (void)) ("
@@ -33,7 +41,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Endian_get_SDL_SwapFloat@
 hs_bindgen_a0e501e24aab59b4 :: IO (BG.FunPtr (BG.CFloat -> IO BG.CFloat))
 hs_bindgen_a0e501e24aab59b4 =
-  BG.fromFFIType hs_bindgen_a0e501e24aab59b4_base
+  fmap BG.fromFFIType hs_bindgen_a0e501e24aab59b4_base
 
 {-# NOINLINE sDL_SwapFloat #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Endian/Safe.hs b/src/SDL3/Sys/Bindgen/Endian/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Endian/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Endian/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Endian.Safe (
@@ -7,12 +9,18 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_endian.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_endian.h>"
          , "float hs_bindgen_3b15c524a04a103e ("
          , "  float arg1"
          , ")"
@@ -26,15 +34,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Endian_Safe_SDL_SwapFloat@
 foreign import ccall safe "hs_bindgen_3b15c524a04a103e"
   hs_bindgen_3b15c524a04a103e_base
-    :: Float
-    -> IO Float
+    :: BG.CFloat
+    -> IO BG.CFloat
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Endian_Safe_SDL_SwapFloat@
 hs_bindgen_3b15c524a04a103e
   :: BG.CFloat
   -> IO BG.CFloat
 hs_bindgen_3b15c524a04a103e =
-  BG.fromFFIType hs_bindgen_3b15c524a04a103e_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3b15c524a04a103e_base (BG.toFFIType x0))
 
 -- | Byte-swap a floating point number.
 --
diff --git a/src/SDL3/Sys/Bindgen/Endian/Unsafe.hs b/src/SDL3/Sys/Bindgen/Endian/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Endian/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Endian/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Endian.Unsafe (
@@ -7,12 +9,18 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_endian.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_endian.h>"
          , "float hs_bindgen_0b945d9b61dbd23c ("
          , "  float arg1"
          , ")"
@@ -26,15 +34,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Endian_Unsafe_SDL_SwapFloat@
 foreign import ccall unsafe "hs_bindgen_0b945d9b61dbd23c"
   hs_bindgen_0b945d9b61dbd23c_base
-    :: Float
-    -> IO Float
+    :: BG.CFloat
+    -> IO BG.CFloat
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Endian_Unsafe_SDL_SwapFloat@
 hs_bindgen_0b945d9b61dbd23c
   :: BG.CFloat
   -> IO BG.CFloat
 hs_bindgen_0b945d9b61dbd23c =
-  BG.fromFFIType hs_bindgen_0b945d9b61dbd23c_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_0b945d9b61dbd23c_base (BG.toFFIType x0))
 
 -- | Byte-swap a floating point number.
 --
diff --git a/src/SDL3/Sys/Bindgen/EndianShims/FunPtr.hs b/src/SDL3/Sys/Bindgen/EndianShims/FunPtr.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/EndianShims/FunPtr.hs
@@ -0,0 +1,459 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.EndianShims.FunPtr (
+  SDL3.Sys.Bindgen.EndianShims.FunPtr.lithon_SDL_Swap16,
+  SDL3.Sys.Bindgen.EndianShims.FunPtr.lithon_SDL_Swap32,
+  SDL3.Sys.Bindgen.EndianShims.FunPtr.lithon_SDL_Swap64,
+  SDL3.Sys.Bindgen.EndianShims.FunPtr.lithon_SDL_Swap16LE,
+  SDL3.Sys.Bindgen.EndianShims.FunPtr.lithon_SDL_Swap32LE,
+  SDL3.Sys.Bindgen.EndianShims.FunPtr.lithon_SDL_Swap64LE,
+  SDL3.Sys.Bindgen.EndianShims.FunPtr.lithon_SDL_SwapFloatLE,
+  SDL3.Sys.Bindgen.EndianShims.FunPtr.lithon_SDL_Swap16BE,
+  SDL3.Sys.Bindgen.EndianShims.FunPtr.lithon_SDL_Swap32BE,
+  SDL3.Sys.Bindgen.EndianShims.FunPtr.lithon_SDL_Swap64BE,
+  SDL3.Sys.Bindgen.EndianShims.FunPtr.lithon_SDL_SwapFloatBE,
+)
+where
+
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+import SDL3.Sys.Bindgen.Stdinc qualified
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <sdl3-bindgen-sys/SDL_endian_shims.h>"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_get_lithon_SDL_Swap16 */"
+         , "__attribute__ ((const))"
+         , "Uint16 (*hs_bindgen_7b8c5f080d1ded5e (void)) ("
+         , "  Uint16 arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_Swap16;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_get_lithon_SDL_Swap32 */"
+         , "__attribute__ ((const))"
+         , "Uint32 (*hs_bindgen_72820f6cbd65d197 (void)) ("
+         , "  Uint32 arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_Swap32;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_get_lithon_SDL_Swap64 */"
+         , "__attribute__ ((const))"
+         , "Uint64 (*hs_bindgen_a6f1eb5f1830cff7 (void)) ("
+         , "  Uint64 arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_Swap64;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_get_lithon_SDL_Swap16LE */"
+         , "__attribute__ ((const))"
+         , "Uint16 (*hs_bindgen_6da14ac6e18900ea (void)) ("
+         , "  Uint16 arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_Swap16LE;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_get_lithon_SDL_Swap32LE */"
+         , "__attribute__ ((const))"
+         , "Uint32 (*hs_bindgen_7565149a49ae8b75 (void)) ("
+         , "  Uint32 arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_Swap32LE;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_get_lithon_SDL_Swap64LE */"
+         , "__attribute__ ((const))"
+         , "Uint64 (*hs_bindgen_538b6a0639e3f6b8 (void)) ("
+         , "  Uint64 arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_Swap64LE;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_get_lithon_SDL_SwapFloatLE */"
+         , "__attribute__ ((const))"
+         , "float (*hs_bindgen_37fcf9d0fa6d7f0b (void)) ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_SwapFloatLE;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_get_lithon_SDL_Swap16BE */"
+         , "__attribute__ ((const))"
+         , "Uint16 (*hs_bindgen_e0a1dc754a468319 (void)) ("
+         , "  Uint16 arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_Swap16BE;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_get_lithon_SDL_Swap32BE */"
+         , "__attribute__ ((const))"
+         , "Uint32 (*hs_bindgen_d51d24c0ad9eeb3d (void)) ("
+         , "  Uint32 arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_Swap32BE;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_get_lithon_SDL_Swap64BE */"
+         , "__attribute__ ((const))"
+         , "Uint64 (*hs_bindgen_75711d840ca571fa (void)) ("
+         , "  Uint64 arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_Swap64BE;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_get_lithon_SDL_SwapFloatBE */"
+         , "__attribute__ ((const))"
+         , "float (*hs_bindgen_d1bcd6541629959e (void)) ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_SwapFloatBE;"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_get_lithon_SDL_Swap16@
+foreign import ccall unsafe "hs_bindgen_7b8c5f080d1ded5e"
+  hs_bindgen_7b8c5f080d1ded5e_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_get_lithon_SDL_Swap16@
+hs_bindgen_7b8c5f080d1ded5e
+  :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint16 -> IO SDL3.Sys.Bindgen.Stdinc.Uint16))
+hs_bindgen_7b8c5f080d1ded5e =
+  fmap BG.fromFFIType hs_bindgen_7b8c5f080d1ded5e_base
+
+{-# NOINLINE lithon_SDL_Swap16 #-}
+
+-- | Byte-swap an unsigned 16-bit number.
+--
+--     The SDL_Swap16 macro as a function. It always byte-swaps the value, whatever the system\'s byte order; SDL_Swap16LE or SDL_Swap16BE are what you want in most cases.
+--
+--     [@x@]: the value to byte-swap.
+--
+--     [Returns]: @x@, with its bytes in the opposite endian order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_Swap16@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 38:26@
+lithon_SDL_Swap16 :: BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint16 -> IO SDL3.Sys.Bindgen.Stdinc.Uint16)
+lithon_SDL_Swap16 =
+  BG.unsafePerformIO hs_bindgen_7b8c5f080d1ded5e
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_get_lithon_SDL_Swap32@
+foreign import ccall unsafe "hs_bindgen_72820f6cbd65d197"
+  hs_bindgen_72820f6cbd65d197_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_get_lithon_SDL_Swap32@
+hs_bindgen_72820f6cbd65d197
+  :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO SDL3.Sys.Bindgen.Stdinc.Uint32))
+hs_bindgen_72820f6cbd65d197 =
+  fmap BG.fromFFIType hs_bindgen_72820f6cbd65d197_base
+
+{-# NOINLINE lithon_SDL_Swap32 #-}
+
+-- | Byte-swap an unsigned 32-bit number.
+--
+--     The SDL_Swap32 macro as a function. It always byte-swaps the value, whatever the system\'s byte order; SDL_Swap32LE or SDL_Swap32BE are what you want in most cases.
+--
+--     [@x@]: the value to byte-swap.
+--
+--     [Returns]: @x@, with its bytes in the opposite endian order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_Swap32@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 57:26@
+lithon_SDL_Swap32 :: BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO SDL3.Sys.Bindgen.Stdinc.Uint32)
+lithon_SDL_Swap32 =
+  BG.unsafePerformIO hs_bindgen_72820f6cbd65d197
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_get_lithon_SDL_Swap64@
+foreign import ccall unsafe "hs_bindgen_a6f1eb5f1830cff7"
+  hs_bindgen_a6f1eb5f1830cff7_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_get_lithon_SDL_Swap64@
+hs_bindgen_a6f1eb5f1830cff7
+  :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint64 -> IO SDL3.Sys.Bindgen.Stdinc.Uint64))
+hs_bindgen_a6f1eb5f1830cff7 =
+  fmap BG.fromFFIType hs_bindgen_a6f1eb5f1830cff7_base
+
+{-# NOINLINE lithon_SDL_Swap64 #-}
+
+-- | Byte-swap an unsigned 64-bit number.
+--
+--     The SDL_Swap64 macro as a function. It always byte-swaps the value, whatever the system\'s byte order; SDL_Swap64LE or SDL_Swap64BE are what you want in most cases.
+--
+--     [@x@]: the value to byte-swap.
+--
+--     [Returns]: @x@, with its bytes in the opposite endian order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_Swap64@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 76:26@
+lithon_SDL_Swap64 :: BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint64 -> IO SDL3.Sys.Bindgen.Stdinc.Uint64)
+lithon_SDL_Swap64 =
+  BG.unsafePerformIO hs_bindgen_a6f1eb5f1830cff7
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_get_lithon_SDL_Swap16LE@
+foreign import ccall unsafe "hs_bindgen_6da14ac6e18900ea"
+  hs_bindgen_6da14ac6e18900ea_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_get_lithon_SDL_Swap16LE@
+hs_bindgen_6da14ac6e18900ea
+  :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint16 -> IO SDL3.Sys.Bindgen.Stdinc.Uint16))
+hs_bindgen_6da14ac6e18900ea =
+  fmap BG.fromFFIType hs_bindgen_6da14ac6e18900ea_base
+
+{-# NOINLINE lithon_SDL_Swap16LE #-}
+
+-- | Swap a 16-bit value from littleendian to native byte order.
+--
+--     The SDL_Swap16LE macro as a function. If this is running on a littleendian system, @x@ is returned unchanged.
+--
+--     [@x@]: the value to swap, in littleendian byte order.
+--
+--     [Returns]: @x@ in native byte order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_Swap16LE@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 94:26@
+lithon_SDL_Swap16LE
+  :: BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint16 -> IO SDL3.Sys.Bindgen.Stdinc.Uint16)
+lithon_SDL_Swap16LE =
+  BG.unsafePerformIO hs_bindgen_6da14ac6e18900ea
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_get_lithon_SDL_Swap32LE@
+foreign import ccall unsafe "hs_bindgen_7565149a49ae8b75"
+  hs_bindgen_7565149a49ae8b75_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_get_lithon_SDL_Swap32LE@
+hs_bindgen_7565149a49ae8b75
+  :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO SDL3.Sys.Bindgen.Stdinc.Uint32))
+hs_bindgen_7565149a49ae8b75 =
+  fmap BG.fromFFIType hs_bindgen_7565149a49ae8b75_base
+
+{-# NOINLINE lithon_SDL_Swap32LE #-}
+
+-- | Swap a 32-bit value from littleendian to native byte order.
+--
+--     The SDL_Swap32LE macro as a function. If this is running on a littleendian system, @x@ is returned unchanged.
+--
+--     [@x@]: the value to swap, in littleendian byte order.
+--
+--     [Returns]: @x@ in native byte order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_Swap32LE@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 112:26@
+lithon_SDL_Swap32LE
+  :: BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO SDL3.Sys.Bindgen.Stdinc.Uint32)
+lithon_SDL_Swap32LE =
+  BG.unsafePerformIO hs_bindgen_7565149a49ae8b75
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_get_lithon_SDL_Swap64LE@
+foreign import ccall unsafe "hs_bindgen_538b6a0639e3f6b8"
+  hs_bindgen_538b6a0639e3f6b8_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_get_lithon_SDL_Swap64LE@
+hs_bindgen_538b6a0639e3f6b8
+  :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint64 -> IO SDL3.Sys.Bindgen.Stdinc.Uint64))
+hs_bindgen_538b6a0639e3f6b8 =
+  fmap BG.fromFFIType hs_bindgen_538b6a0639e3f6b8_base
+
+{-# NOINLINE lithon_SDL_Swap64LE #-}
+
+-- | Swap a 64-bit value from littleendian to native byte order.
+--
+--     The SDL_Swap64LE macro as a function. If this is running on a littleendian system, @x@ is returned unchanged.
+--
+--     [@x@]: the value to swap, in littleendian byte order.
+--
+--     [Returns]: @x@ in native byte order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_Swap64LE@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 130:26@
+lithon_SDL_Swap64LE
+  :: BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint64 -> IO SDL3.Sys.Bindgen.Stdinc.Uint64)
+lithon_SDL_Swap64LE =
+  BG.unsafePerformIO hs_bindgen_538b6a0639e3f6b8
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_get_lithon_SDL_SwapFloatLE@
+foreign import ccall unsafe "hs_bindgen_37fcf9d0fa6d7f0b"
+  hs_bindgen_37fcf9d0fa6d7f0b_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_get_lithon_SDL_SwapFloatLE@
+hs_bindgen_37fcf9d0fa6d7f0b :: IO (BG.FunPtr (BG.CFloat -> IO BG.CFloat))
+hs_bindgen_37fcf9d0fa6d7f0b =
+  fmap BG.fromFFIType hs_bindgen_37fcf9d0fa6d7f0b_base
+
+{-# NOINLINE lithon_SDL_SwapFloatLE #-}
+
+-- | Swap a floating point value from littleendian to native byte order.
+--
+--     The SDL_SwapFloatLE macro as a function. If this is running on a littleendian system, @x@ is returned unchanged.
+--
+--     [@x@]: the value to swap, in littleendian byte order.
+--
+--     [Returns]: @x@ in native byte order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_SwapFloatLE@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 148:25@
+lithon_SDL_SwapFloatLE :: BG.FunPtr (BG.CFloat -> IO BG.CFloat)
+lithon_SDL_SwapFloatLE =
+  BG.unsafePerformIO hs_bindgen_37fcf9d0fa6d7f0b
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_get_lithon_SDL_Swap16BE@
+foreign import ccall unsafe "hs_bindgen_e0a1dc754a468319"
+  hs_bindgen_e0a1dc754a468319_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_get_lithon_SDL_Swap16BE@
+hs_bindgen_e0a1dc754a468319
+  :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint16 -> IO SDL3.Sys.Bindgen.Stdinc.Uint16))
+hs_bindgen_e0a1dc754a468319 =
+  fmap BG.fromFFIType hs_bindgen_e0a1dc754a468319_base
+
+{-# NOINLINE lithon_SDL_Swap16BE #-}
+
+-- | Swap a 16-bit value from bigendian to native byte order.
+--
+--     The SDL_Swap16BE macro as a function. If this is running on a bigendian system, @x@ is returned unchanged.
+--
+--     [@x@]: the value to swap, in bigendian byte order.
+--
+--     [Returns]: @x@ in native byte order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_Swap16BE@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 166:26@
+lithon_SDL_Swap16BE
+  :: BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint16 -> IO SDL3.Sys.Bindgen.Stdinc.Uint16)
+lithon_SDL_Swap16BE =
+  BG.unsafePerformIO hs_bindgen_e0a1dc754a468319
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_get_lithon_SDL_Swap32BE@
+foreign import ccall unsafe "hs_bindgen_d51d24c0ad9eeb3d"
+  hs_bindgen_d51d24c0ad9eeb3d_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_get_lithon_SDL_Swap32BE@
+hs_bindgen_d51d24c0ad9eeb3d
+  :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO SDL3.Sys.Bindgen.Stdinc.Uint32))
+hs_bindgen_d51d24c0ad9eeb3d =
+  fmap BG.fromFFIType hs_bindgen_d51d24c0ad9eeb3d_base
+
+{-# NOINLINE lithon_SDL_Swap32BE #-}
+
+-- | Swap a 32-bit value from bigendian to native byte order.
+--
+--     The SDL_Swap32BE macro as a function. If this is running on a bigendian system, @x@ is returned unchanged.
+--
+--     [@x@]: the value to swap, in bigendian byte order.
+--
+--     [Returns]: @x@ in native byte order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_Swap32BE@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 184:26@
+lithon_SDL_Swap32BE
+  :: BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO SDL3.Sys.Bindgen.Stdinc.Uint32)
+lithon_SDL_Swap32BE =
+  BG.unsafePerformIO hs_bindgen_d51d24c0ad9eeb3d
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_get_lithon_SDL_Swap64BE@
+foreign import ccall unsafe "hs_bindgen_75711d840ca571fa"
+  hs_bindgen_75711d840ca571fa_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_get_lithon_SDL_Swap64BE@
+hs_bindgen_75711d840ca571fa
+  :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint64 -> IO SDL3.Sys.Bindgen.Stdinc.Uint64))
+hs_bindgen_75711d840ca571fa =
+  fmap BG.fromFFIType hs_bindgen_75711d840ca571fa_base
+
+{-# NOINLINE lithon_SDL_Swap64BE #-}
+
+-- | Swap a 64-bit value from bigendian to native byte order.
+--
+--     The SDL_Swap64BE macro as a function. If this is running on a bigendian system, @x@ is returned unchanged.
+--
+--     [@x@]: the value to swap, in bigendian byte order.
+--
+--     [Returns]: @x@ in native byte order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_Swap64BE@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 202:26@
+lithon_SDL_Swap64BE
+  :: BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint64 -> IO SDL3.Sys.Bindgen.Stdinc.Uint64)
+lithon_SDL_Swap64BE =
+  BG.unsafePerformIO hs_bindgen_75711d840ca571fa
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_get_lithon_SDL_SwapFloatBE@
+foreign import ccall unsafe "hs_bindgen_d1bcd6541629959e"
+  hs_bindgen_d1bcd6541629959e_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_get_lithon_SDL_SwapFloatBE@
+hs_bindgen_d1bcd6541629959e :: IO (BG.FunPtr (BG.CFloat -> IO BG.CFloat))
+hs_bindgen_d1bcd6541629959e =
+  fmap BG.fromFFIType hs_bindgen_d1bcd6541629959e_base
+
+{-# NOINLINE lithon_SDL_SwapFloatBE #-}
+
+-- | Swap a floating point value from bigendian to native byte order.
+--
+--     The SDL_SwapFloatBE macro as a function. If this is running on a bigendian system, @x@ is returned unchanged.
+--
+--     [@x@]: the value to swap, in bigendian byte order.
+--
+--     [Returns]: @x@ in native byte order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_SwapFloatBE@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 220:25@
+lithon_SDL_SwapFloatBE :: BG.FunPtr (BG.CFloat -> IO BG.CFloat)
+lithon_SDL_SwapFloatBE =
+  BG.unsafePerformIO hs_bindgen_d1bcd6541629959e
diff --git a/src/SDL3/Sys/Bindgen/EndianShims/Safe.hs b/src/SDL3/Sys/Bindgen/EndianShims/Safe.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/EndianShims/Safe.hs
@@ -0,0 +1,467 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.EndianShims.Safe (
+  SDL3.Sys.Bindgen.EndianShims.Safe.lithon_SDL_Swap16,
+  SDL3.Sys.Bindgen.EndianShims.Safe.lithon_SDL_Swap32,
+  SDL3.Sys.Bindgen.EndianShims.Safe.lithon_SDL_Swap64,
+  SDL3.Sys.Bindgen.EndianShims.Safe.lithon_SDL_Swap16LE,
+  SDL3.Sys.Bindgen.EndianShims.Safe.lithon_SDL_Swap32LE,
+  SDL3.Sys.Bindgen.EndianShims.Safe.lithon_SDL_Swap64LE,
+  SDL3.Sys.Bindgen.EndianShims.Safe.lithon_SDL_SwapFloatLE,
+  SDL3.Sys.Bindgen.EndianShims.Safe.lithon_SDL_Swap16BE,
+  SDL3.Sys.Bindgen.EndianShims.Safe.lithon_SDL_Swap32BE,
+  SDL3.Sys.Bindgen.EndianShims.Safe.lithon_SDL_Swap64BE,
+  SDL3.Sys.Bindgen.EndianShims.Safe.lithon_SDL_SwapFloatBE,
+)
+where
+
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+import SDL3.Sys.Bindgen.Stdinc qualified
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <sdl3-bindgen-sys/SDL_endian_shims.h>"
+         , "Uint16 hs_bindgen_2ea637caeefe4aa3 ("
+         , "  Uint16 arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_Swap16)(arg1);"
+         , "}"
+         , "Uint32 hs_bindgen_d8dafdb03a84dea6 ("
+         , "  Uint32 arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_Swap32)(arg1);"
+         , "}"
+         , "Uint64 hs_bindgen_2a59fd2cead65c85 ("
+         , "  Uint64 arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_Swap64)(arg1);"
+         , "}"
+         , "Uint16 hs_bindgen_1f4c504e2d406d5d ("
+         , "  Uint16 arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_Swap16LE)(arg1);"
+         , "}"
+         , "Uint32 hs_bindgen_83c800b17676e351 ("
+         , "  Uint32 arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_Swap32LE)(arg1);"
+         , "}"
+         , "Uint64 hs_bindgen_a8299e2a08d3f0eb ("
+         , "  Uint64 arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_Swap64LE)(arg1);"
+         , "}"
+         , "float hs_bindgen_3cbb3bb4c5039011 ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_SwapFloatLE)(arg1);"
+         , "}"
+         , "Uint16 hs_bindgen_3821b24e3d8e81ce ("
+         , "  Uint16 arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_Swap16BE)(arg1);"
+         , "}"
+         , "Uint32 hs_bindgen_e3aaa35768c646a0 ("
+         , "  Uint32 arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_Swap32BE)(arg1);"
+         , "}"
+         , "Uint64 hs_bindgen_6201a0f0896f9116 ("
+         , "  Uint64 arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_Swap64BE)(arg1);"
+         , "}"
+         , "float hs_bindgen_770a79534d696eb6 ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_SwapFloatBE)(arg1);"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Safe_lithon_SDL_Swap16@
+foreign import ccall safe "hs_bindgen_2ea637caeefe4aa3"
+  hs_bindgen_2ea637caeefe4aa3_base
+    :: HsBindgen.Runtime.LibC.Word16
+    -> IO HsBindgen.Runtime.LibC.Word16
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Safe_lithon_SDL_Swap16@
+hs_bindgen_2ea637caeefe4aa3
+  :: SDL3.Sys.Bindgen.Stdinc.Uint16
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
+hs_bindgen_2ea637caeefe4aa3 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_2ea637caeefe4aa3_base (BG.toFFIType x0))
+
+-- | Byte-swap an unsigned 16-bit number.
+--
+--     The SDL_Swap16 macro as a function. It always byte-swaps the value, whatever the system\'s byte order; SDL_Swap16LE or SDL_Swap16BE are what you want in most cases.
+--
+--     [Returns]: @x@, with its bytes in the opposite endian order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_Swap16@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 38:26@
+lithon_SDL_Swap16
+  :: SDL3.Sys.Bindgen.Stdinc.Uint16
+  -- ^
+  --
+  --           [@x@]: the value to byte-swap.
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
+lithon_SDL_Swap16 = hs_bindgen_2ea637caeefe4aa3
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Safe_lithon_SDL_Swap32@
+foreign import ccall safe "hs_bindgen_d8dafdb03a84dea6"
+  hs_bindgen_d8dafdb03a84dea6_base
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Safe_lithon_SDL_Swap32@
+hs_bindgen_d8dafdb03a84dea6
+  :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
+hs_bindgen_d8dafdb03a84dea6 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d8dafdb03a84dea6_base (BG.toFFIType x0))
+
+-- | Byte-swap an unsigned 32-bit number.
+--
+--     The SDL_Swap32 macro as a function. It always byte-swaps the value, whatever the system\'s byte order; SDL_Swap32LE or SDL_Swap32BE are what you want in most cases.
+--
+--     [Returns]: @x@, with its bytes in the opposite endian order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_Swap32@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 57:26@
+lithon_SDL_Swap32
+  :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^
+  --
+  --           [@x@]: the value to byte-swap.
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
+lithon_SDL_Swap32 = hs_bindgen_d8dafdb03a84dea6
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Safe_lithon_SDL_Swap64@
+foreign import ccall safe "hs_bindgen_2a59fd2cead65c85"
+  hs_bindgen_2a59fd2cead65c85_base
+    :: HsBindgen.Runtime.LibC.Word64
+    -> IO HsBindgen.Runtime.LibC.Word64
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Safe_lithon_SDL_Swap64@
+hs_bindgen_2a59fd2cead65c85
+  :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint64
+hs_bindgen_2a59fd2cead65c85 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_2a59fd2cead65c85_base (BG.toFFIType x0))
+
+-- | Byte-swap an unsigned 64-bit number.
+--
+--     The SDL_Swap64 macro as a function. It always byte-swaps the value, whatever the system\'s byte order; SDL_Swap64LE or SDL_Swap64BE are what you want in most cases.
+--
+--     [Returns]: @x@, with its bytes in the opposite endian order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_Swap64@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 76:26@
+lithon_SDL_Swap64
+  :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^
+  --
+  --           [@x@]: the value to byte-swap.
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint64
+lithon_SDL_Swap64 = hs_bindgen_2a59fd2cead65c85
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Safe_lithon_SDL_Swap16LE@
+foreign import ccall safe "hs_bindgen_1f4c504e2d406d5d"
+  hs_bindgen_1f4c504e2d406d5d_base
+    :: HsBindgen.Runtime.LibC.Word16
+    -> IO HsBindgen.Runtime.LibC.Word16
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Safe_lithon_SDL_Swap16LE@
+hs_bindgen_1f4c504e2d406d5d
+  :: SDL3.Sys.Bindgen.Stdinc.Uint16
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
+hs_bindgen_1f4c504e2d406d5d =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_1f4c504e2d406d5d_base (BG.toFFIType x0))
+
+-- | Swap a 16-bit value from littleendian to native byte order.
+--
+--     The SDL_Swap16LE macro as a function. If this is running on a littleendian system, @x@ is returned unchanged.
+--
+--     [Returns]: @x@ in native byte order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_Swap16LE@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 94:26@
+lithon_SDL_Swap16LE
+  :: SDL3.Sys.Bindgen.Stdinc.Uint16
+  -- ^
+  --
+  --           [@x@]: the value to swap, in littleendian byte order.
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
+lithon_SDL_Swap16LE = hs_bindgen_1f4c504e2d406d5d
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Safe_lithon_SDL_Swap32LE@
+foreign import ccall safe "hs_bindgen_83c800b17676e351"
+  hs_bindgen_83c800b17676e351_base
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Safe_lithon_SDL_Swap32LE@
+hs_bindgen_83c800b17676e351
+  :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
+hs_bindgen_83c800b17676e351 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_83c800b17676e351_base (BG.toFFIType x0))
+
+-- | Swap a 32-bit value from littleendian to native byte order.
+--
+--     The SDL_Swap32LE macro as a function. If this is running on a littleendian system, @x@ is returned unchanged.
+--
+--     [Returns]: @x@ in native byte order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_Swap32LE@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 112:26@
+lithon_SDL_Swap32LE
+  :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^
+  --
+  --           [@x@]: the value to swap, in littleendian byte order.
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
+lithon_SDL_Swap32LE = hs_bindgen_83c800b17676e351
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Safe_lithon_SDL_Swap64LE@
+foreign import ccall safe "hs_bindgen_a8299e2a08d3f0eb"
+  hs_bindgen_a8299e2a08d3f0eb_base
+    :: HsBindgen.Runtime.LibC.Word64
+    -> IO HsBindgen.Runtime.LibC.Word64
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Safe_lithon_SDL_Swap64LE@
+hs_bindgen_a8299e2a08d3f0eb
+  :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint64
+hs_bindgen_a8299e2a08d3f0eb =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a8299e2a08d3f0eb_base (BG.toFFIType x0))
+
+-- | Swap a 64-bit value from littleendian to native byte order.
+--
+--     The SDL_Swap64LE macro as a function. If this is running on a littleendian system, @x@ is returned unchanged.
+--
+--     [Returns]: @x@ in native byte order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_Swap64LE@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 130:26@
+lithon_SDL_Swap64LE
+  :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^
+  --
+  --           [@x@]: the value to swap, in littleendian byte order.
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint64
+lithon_SDL_Swap64LE = hs_bindgen_a8299e2a08d3f0eb
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Safe_lithon_SDL_SwapFloatLE@
+foreign import ccall safe "hs_bindgen_3cbb3bb4c5039011"
+  hs_bindgen_3cbb3bb4c5039011_base
+    :: BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Safe_lithon_SDL_SwapFloatLE@
+hs_bindgen_3cbb3bb4c5039011
+  :: BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_3cbb3bb4c5039011 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3cbb3bb4c5039011_base (BG.toFFIType x0))
+
+-- | Swap a floating point value from littleendian to native byte order.
+--
+--     The SDL_SwapFloatLE macro as a function. If this is running on a littleendian system, @x@ is returned unchanged.
+--
+--     [Returns]: @x@ in native byte order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_SwapFloatLE@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 148:25@
+lithon_SDL_SwapFloatLE
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: the value to swap, in littleendian byte order.
+  -> IO BG.CFloat
+lithon_SDL_SwapFloatLE = hs_bindgen_3cbb3bb4c5039011
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Safe_lithon_SDL_Swap16BE@
+foreign import ccall safe "hs_bindgen_3821b24e3d8e81ce"
+  hs_bindgen_3821b24e3d8e81ce_base
+    :: HsBindgen.Runtime.LibC.Word16
+    -> IO HsBindgen.Runtime.LibC.Word16
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Safe_lithon_SDL_Swap16BE@
+hs_bindgen_3821b24e3d8e81ce
+  :: SDL3.Sys.Bindgen.Stdinc.Uint16
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
+hs_bindgen_3821b24e3d8e81ce =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3821b24e3d8e81ce_base (BG.toFFIType x0))
+
+-- | Swap a 16-bit value from bigendian to native byte order.
+--
+--     The SDL_Swap16BE macro as a function. If this is running on a bigendian system, @x@ is returned unchanged.
+--
+--     [Returns]: @x@ in native byte order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_Swap16BE@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 166:26@
+lithon_SDL_Swap16BE
+  :: SDL3.Sys.Bindgen.Stdinc.Uint16
+  -- ^
+  --
+  --           [@x@]: the value to swap, in bigendian byte order.
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
+lithon_SDL_Swap16BE = hs_bindgen_3821b24e3d8e81ce
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Safe_lithon_SDL_Swap32BE@
+foreign import ccall safe "hs_bindgen_e3aaa35768c646a0"
+  hs_bindgen_e3aaa35768c646a0_base
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Safe_lithon_SDL_Swap32BE@
+hs_bindgen_e3aaa35768c646a0
+  :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
+hs_bindgen_e3aaa35768c646a0 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_e3aaa35768c646a0_base (BG.toFFIType x0))
+
+-- | Swap a 32-bit value from bigendian to native byte order.
+--
+--     The SDL_Swap32BE macro as a function. If this is running on a bigendian system, @x@ is returned unchanged.
+--
+--     [Returns]: @x@ in native byte order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_Swap32BE@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 184:26@
+lithon_SDL_Swap32BE
+  :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^
+  --
+  --           [@x@]: the value to swap, in bigendian byte order.
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
+lithon_SDL_Swap32BE = hs_bindgen_e3aaa35768c646a0
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Safe_lithon_SDL_Swap64BE@
+foreign import ccall safe "hs_bindgen_6201a0f0896f9116"
+  hs_bindgen_6201a0f0896f9116_base
+    :: HsBindgen.Runtime.LibC.Word64
+    -> IO HsBindgen.Runtime.LibC.Word64
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Safe_lithon_SDL_Swap64BE@
+hs_bindgen_6201a0f0896f9116
+  :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint64
+hs_bindgen_6201a0f0896f9116 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_6201a0f0896f9116_base (BG.toFFIType x0))
+
+-- | Swap a 64-bit value from bigendian to native byte order.
+--
+--     The SDL_Swap64BE macro as a function. If this is running on a bigendian system, @x@ is returned unchanged.
+--
+--     [Returns]: @x@ in native byte order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_Swap64BE@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 202:26@
+lithon_SDL_Swap64BE
+  :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^
+  --
+  --           [@x@]: the value to swap, in bigendian byte order.
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint64
+lithon_SDL_Swap64BE = hs_bindgen_6201a0f0896f9116
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Safe_lithon_SDL_SwapFloatBE@
+foreign import ccall safe "hs_bindgen_770a79534d696eb6"
+  hs_bindgen_770a79534d696eb6_base
+    :: BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Safe_lithon_SDL_SwapFloatBE@
+hs_bindgen_770a79534d696eb6
+  :: BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_770a79534d696eb6 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_770a79534d696eb6_base (BG.toFFIType x0))
+
+-- | Swap a floating point value from bigendian to native byte order.
+--
+--     The SDL_SwapFloatBE macro as a function. If this is running on a bigendian system, @x@ is returned unchanged.
+--
+--     [Returns]: @x@ in native byte order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_SwapFloatBE@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 220:25@
+lithon_SDL_SwapFloatBE
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: the value to swap, in bigendian byte order.
+  -> IO BG.CFloat
+lithon_SDL_SwapFloatBE = hs_bindgen_770a79534d696eb6
diff --git a/src/SDL3/Sys/Bindgen/EndianShims/Unsafe.hs b/src/SDL3/Sys/Bindgen/EndianShims/Unsafe.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/EndianShims/Unsafe.hs
@@ -0,0 +1,467 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.EndianShims.Unsafe (
+  SDL3.Sys.Bindgen.EndianShims.Unsafe.lithon_SDL_Swap16,
+  SDL3.Sys.Bindgen.EndianShims.Unsafe.lithon_SDL_Swap32,
+  SDL3.Sys.Bindgen.EndianShims.Unsafe.lithon_SDL_Swap64,
+  SDL3.Sys.Bindgen.EndianShims.Unsafe.lithon_SDL_Swap16LE,
+  SDL3.Sys.Bindgen.EndianShims.Unsafe.lithon_SDL_Swap32LE,
+  SDL3.Sys.Bindgen.EndianShims.Unsafe.lithon_SDL_Swap64LE,
+  SDL3.Sys.Bindgen.EndianShims.Unsafe.lithon_SDL_SwapFloatLE,
+  SDL3.Sys.Bindgen.EndianShims.Unsafe.lithon_SDL_Swap16BE,
+  SDL3.Sys.Bindgen.EndianShims.Unsafe.lithon_SDL_Swap32BE,
+  SDL3.Sys.Bindgen.EndianShims.Unsafe.lithon_SDL_Swap64BE,
+  SDL3.Sys.Bindgen.EndianShims.Unsafe.lithon_SDL_SwapFloatBE,
+)
+where
+
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+import SDL3.Sys.Bindgen.Stdinc qualified
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <sdl3-bindgen-sys/SDL_endian_shims.h>"
+         , "Uint16 hs_bindgen_882f703cb333be29 ("
+         , "  Uint16 arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_Swap16)(arg1);"
+         , "}"
+         , "Uint32 hs_bindgen_af9f92ac0160930e ("
+         , "  Uint32 arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_Swap32)(arg1);"
+         , "}"
+         , "Uint64 hs_bindgen_a76e576373ba9315 ("
+         , "  Uint64 arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_Swap64)(arg1);"
+         , "}"
+         , "Uint16 hs_bindgen_ba2e727e2251e74a ("
+         , "  Uint16 arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_Swap16LE)(arg1);"
+         , "}"
+         , "Uint32 hs_bindgen_534b6cb79f9a53da ("
+         , "  Uint32 arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_Swap32LE)(arg1);"
+         , "}"
+         , "Uint64 hs_bindgen_1138811e72133911 ("
+         , "  Uint64 arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_Swap64LE)(arg1);"
+         , "}"
+         , "float hs_bindgen_14edd560fa30714a ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_SwapFloatLE)(arg1);"
+         , "}"
+         , "Uint16 hs_bindgen_cfef4dbd360a587e ("
+         , "  Uint16 arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_Swap16BE)(arg1);"
+         , "}"
+         , "Uint32 hs_bindgen_fef82eb9028f9b73 ("
+         , "  Uint32 arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_Swap32BE)(arg1);"
+         , "}"
+         , "Uint64 hs_bindgen_617e37704da5f1a9 ("
+         , "  Uint64 arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_Swap64BE)(arg1);"
+         , "}"
+         , "float hs_bindgen_1ba0c9ba8563300f ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_SwapFloatBE)(arg1);"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Unsafe_lithon_SDL_Swap16@
+foreign import ccall unsafe "hs_bindgen_882f703cb333be29"
+  hs_bindgen_882f703cb333be29_base
+    :: HsBindgen.Runtime.LibC.Word16
+    -> IO HsBindgen.Runtime.LibC.Word16
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Unsafe_lithon_SDL_Swap16@
+hs_bindgen_882f703cb333be29
+  :: SDL3.Sys.Bindgen.Stdinc.Uint16
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
+hs_bindgen_882f703cb333be29 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_882f703cb333be29_base (BG.toFFIType x0))
+
+-- | Byte-swap an unsigned 16-bit number.
+--
+--     The SDL_Swap16 macro as a function. It always byte-swaps the value, whatever the system\'s byte order; SDL_Swap16LE or SDL_Swap16BE are what you want in most cases.
+--
+--     [Returns]: @x@, with its bytes in the opposite endian order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_Swap16@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 38:26@
+lithon_SDL_Swap16
+  :: SDL3.Sys.Bindgen.Stdinc.Uint16
+  -- ^
+  --
+  --           [@x@]: the value to byte-swap.
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
+lithon_SDL_Swap16 = hs_bindgen_882f703cb333be29
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Unsafe_lithon_SDL_Swap32@
+foreign import ccall unsafe "hs_bindgen_af9f92ac0160930e"
+  hs_bindgen_af9f92ac0160930e_base
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Unsafe_lithon_SDL_Swap32@
+hs_bindgen_af9f92ac0160930e
+  :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
+hs_bindgen_af9f92ac0160930e =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_af9f92ac0160930e_base (BG.toFFIType x0))
+
+-- | Byte-swap an unsigned 32-bit number.
+--
+--     The SDL_Swap32 macro as a function. It always byte-swaps the value, whatever the system\'s byte order; SDL_Swap32LE or SDL_Swap32BE are what you want in most cases.
+--
+--     [Returns]: @x@, with its bytes in the opposite endian order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_Swap32@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 57:26@
+lithon_SDL_Swap32
+  :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^
+  --
+  --           [@x@]: the value to byte-swap.
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
+lithon_SDL_Swap32 = hs_bindgen_af9f92ac0160930e
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Unsafe_lithon_SDL_Swap64@
+foreign import ccall unsafe "hs_bindgen_a76e576373ba9315"
+  hs_bindgen_a76e576373ba9315_base
+    :: HsBindgen.Runtime.LibC.Word64
+    -> IO HsBindgen.Runtime.LibC.Word64
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Unsafe_lithon_SDL_Swap64@
+hs_bindgen_a76e576373ba9315
+  :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint64
+hs_bindgen_a76e576373ba9315 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a76e576373ba9315_base (BG.toFFIType x0))
+
+-- | Byte-swap an unsigned 64-bit number.
+--
+--     The SDL_Swap64 macro as a function. It always byte-swaps the value, whatever the system\'s byte order; SDL_Swap64LE or SDL_Swap64BE are what you want in most cases.
+--
+--     [Returns]: @x@, with its bytes in the opposite endian order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_Swap64@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 76:26@
+lithon_SDL_Swap64
+  :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^
+  --
+  --           [@x@]: the value to byte-swap.
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint64
+lithon_SDL_Swap64 = hs_bindgen_a76e576373ba9315
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Unsafe_lithon_SDL_Swap16LE@
+foreign import ccall unsafe "hs_bindgen_ba2e727e2251e74a"
+  hs_bindgen_ba2e727e2251e74a_base
+    :: HsBindgen.Runtime.LibC.Word16
+    -> IO HsBindgen.Runtime.LibC.Word16
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Unsafe_lithon_SDL_Swap16LE@
+hs_bindgen_ba2e727e2251e74a
+  :: SDL3.Sys.Bindgen.Stdinc.Uint16
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
+hs_bindgen_ba2e727e2251e74a =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_ba2e727e2251e74a_base (BG.toFFIType x0))
+
+-- | Swap a 16-bit value from littleendian to native byte order.
+--
+--     The SDL_Swap16LE macro as a function. If this is running on a littleendian system, @x@ is returned unchanged.
+--
+--     [Returns]: @x@ in native byte order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_Swap16LE@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 94:26@
+lithon_SDL_Swap16LE
+  :: SDL3.Sys.Bindgen.Stdinc.Uint16
+  -- ^
+  --
+  --           [@x@]: the value to swap, in littleendian byte order.
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
+lithon_SDL_Swap16LE = hs_bindgen_ba2e727e2251e74a
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Unsafe_lithon_SDL_Swap32LE@
+foreign import ccall unsafe "hs_bindgen_534b6cb79f9a53da"
+  hs_bindgen_534b6cb79f9a53da_base
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Unsafe_lithon_SDL_Swap32LE@
+hs_bindgen_534b6cb79f9a53da
+  :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
+hs_bindgen_534b6cb79f9a53da =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_534b6cb79f9a53da_base (BG.toFFIType x0))
+
+-- | Swap a 32-bit value from littleendian to native byte order.
+--
+--     The SDL_Swap32LE macro as a function. If this is running on a littleendian system, @x@ is returned unchanged.
+--
+--     [Returns]: @x@ in native byte order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_Swap32LE@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 112:26@
+lithon_SDL_Swap32LE
+  :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^
+  --
+  --           [@x@]: the value to swap, in littleendian byte order.
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
+lithon_SDL_Swap32LE = hs_bindgen_534b6cb79f9a53da
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Unsafe_lithon_SDL_Swap64LE@
+foreign import ccall unsafe "hs_bindgen_1138811e72133911"
+  hs_bindgen_1138811e72133911_base
+    :: HsBindgen.Runtime.LibC.Word64
+    -> IO HsBindgen.Runtime.LibC.Word64
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Unsafe_lithon_SDL_Swap64LE@
+hs_bindgen_1138811e72133911
+  :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint64
+hs_bindgen_1138811e72133911 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_1138811e72133911_base (BG.toFFIType x0))
+
+-- | Swap a 64-bit value from littleendian to native byte order.
+--
+--     The SDL_Swap64LE macro as a function. If this is running on a littleendian system, @x@ is returned unchanged.
+--
+--     [Returns]: @x@ in native byte order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_Swap64LE@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 130:26@
+lithon_SDL_Swap64LE
+  :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^
+  --
+  --           [@x@]: the value to swap, in littleendian byte order.
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint64
+lithon_SDL_Swap64LE = hs_bindgen_1138811e72133911
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Unsafe_lithon_SDL_SwapFloatLE@
+foreign import ccall unsafe "hs_bindgen_14edd560fa30714a"
+  hs_bindgen_14edd560fa30714a_base
+    :: BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Unsafe_lithon_SDL_SwapFloatLE@
+hs_bindgen_14edd560fa30714a
+  :: BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_14edd560fa30714a =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_14edd560fa30714a_base (BG.toFFIType x0))
+
+-- | Swap a floating point value from littleendian to native byte order.
+--
+--     The SDL_SwapFloatLE macro as a function. If this is running on a littleendian system, @x@ is returned unchanged.
+--
+--     [Returns]: @x@ in native byte order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_SwapFloatLE@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 148:25@
+lithon_SDL_SwapFloatLE
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: the value to swap, in littleendian byte order.
+  -> IO BG.CFloat
+lithon_SDL_SwapFloatLE = hs_bindgen_14edd560fa30714a
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Unsafe_lithon_SDL_Swap16BE@
+foreign import ccall unsafe "hs_bindgen_cfef4dbd360a587e"
+  hs_bindgen_cfef4dbd360a587e_base
+    :: HsBindgen.Runtime.LibC.Word16
+    -> IO HsBindgen.Runtime.LibC.Word16
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Unsafe_lithon_SDL_Swap16BE@
+hs_bindgen_cfef4dbd360a587e
+  :: SDL3.Sys.Bindgen.Stdinc.Uint16
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
+hs_bindgen_cfef4dbd360a587e =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_cfef4dbd360a587e_base (BG.toFFIType x0))
+
+-- | Swap a 16-bit value from bigendian to native byte order.
+--
+--     The SDL_Swap16BE macro as a function. If this is running on a bigendian system, @x@ is returned unchanged.
+--
+--     [Returns]: @x@ in native byte order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_Swap16BE@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 166:26@
+lithon_SDL_Swap16BE
+  :: SDL3.Sys.Bindgen.Stdinc.Uint16
+  -- ^
+  --
+  --           [@x@]: the value to swap, in bigendian byte order.
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
+lithon_SDL_Swap16BE = hs_bindgen_cfef4dbd360a587e
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Unsafe_lithon_SDL_Swap32BE@
+foreign import ccall unsafe "hs_bindgen_fef82eb9028f9b73"
+  hs_bindgen_fef82eb9028f9b73_base
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Unsafe_lithon_SDL_Swap32BE@
+hs_bindgen_fef82eb9028f9b73
+  :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
+hs_bindgen_fef82eb9028f9b73 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_fef82eb9028f9b73_base (BG.toFFIType x0))
+
+-- | Swap a 32-bit value from bigendian to native byte order.
+--
+--     The SDL_Swap32BE macro as a function. If this is running on a bigendian system, @x@ is returned unchanged.
+--
+--     [Returns]: @x@ in native byte order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_Swap32BE@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 184:26@
+lithon_SDL_Swap32BE
+  :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^
+  --
+  --           [@x@]: the value to swap, in bigendian byte order.
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
+lithon_SDL_Swap32BE = hs_bindgen_fef82eb9028f9b73
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Unsafe_lithon_SDL_Swap64BE@
+foreign import ccall unsafe "hs_bindgen_617e37704da5f1a9"
+  hs_bindgen_617e37704da5f1a9_base
+    :: HsBindgen.Runtime.LibC.Word64
+    -> IO HsBindgen.Runtime.LibC.Word64
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Unsafe_lithon_SDL_Swap64BE@
+hs_bindgen_617e37704da5f1a9
+  :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint64
+hs_bindgen_617e37704da5f1a9 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_617e37704da5f1a9_base (BG.toFFIType x0))
+
+-- | Swap a 64-bit value from bigendian to native byte order.
+--
+--     The SDL_Swap64BE macro as a function. If this is running on a bigendian system, @x@ is returned unchanged.
+--
+--     [Returns]: @x@ in native byte order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_Swap64BE@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 202:26@
+lithon_SDL_Swap64BE
+  :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^
+  --
+  --           [@x@]: the value to swap, in bigendian byte order.
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint64
+lithon_SDL_Swap64BE = hs_bindgen_617e37704da5f1a9
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Unsafe_lithon_SDL_SwapFloatBE@
+foreign import ccall unsafe "hs_bindgen_1ba0c9ba8563300f"
+  hs_bindgen_1ba0c9ba8563300f_base
+    :: BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.EndianShims_Unsafe_lithon_SDL_SwapFloatBE@
+hs_bindgen_1ba0c9ba8563300f
+  :: BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_1ba0c9ba8563300f =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_1ba0c9ba8563300f_base (BG.toFFIType x0))
+
+-- | Swap a floating point value from bigendian to native byte order.
+--
+--     The SDL_SwapFloatBE macro as a function. If this is running on a bigendian system, @x@ is returned unchanged.
+--
+--     [Returns]: @x@ in native byte order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_SwapFloatBE@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 220:25@
+lithon_SDL_SwapFloatBE
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: the value to swap, in bigendian byte order.
+  -> IO BG.CFloat
+lithon_SDL_SwapFloatBE = hs_bindgen_1ba0c9ba8563300f
diff --git a/src/SDL3/Sys/Bindgen/Error/FunPtr.hs b/src/SDL3/Sys/Bindgen/Error/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Error/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Error/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Error.FunPtr (
@@ -9,13 +11,19 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_error.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_error.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Error_get_SDL_OutOfMemory */"
          , "__attribute__ ((const))"
          , "_Bool (*hs_bindgen_c1c2f6095b18fb13 (void)) (void)"
@@ -46,7 +54,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Error_get_SDL_OutOfMemory@
 hs_bindgen_c1c2f6095b18fb13 :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_c1c2f6095b18fb13 =
-  BG.fromFFIType hs_bindgen_c1c2f6095b18fb13_base
+  fmap BG.fromFFIType hs_bindgen_c1c2f6095b18fb13_base
 
 {-# NOINLINE sDL_OutOfMemory #-}
 
@@ -73,7 +81,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Error_get_SDL_GetError@
 hs_bindgen_030d67d7c033781b :: IO (BG.FunPtr (IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_030d67d7c033781b =
-  BG.fromFFIType hs_bindgen_030d67d7c033781b_base
+  fmap BG.fromFFIType hs_bindgen_030d67d7c033781b_base
 
 {-# NOINLINE sDL_GetError #-}
 
@@ -110,7 +118,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Error_get_SDL_ClearError@
 hs_bindgen_000d9156b04d2f47 :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_000d9156b04d2f47 =
-  BG.fromFFIType hs_bindgen_000d9156b04d2f47_base
+  fmap BG.fromFFIType hs_bindgen_000d9156b04d2f47_base
 
 {-# NOINLINE sDL_ClearError #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Error/Safe.hs b/src/SDL3/Sys/Bindgen/Error/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Error/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Error/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Error.Safe (
@@ -9,13 +11,19 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_error.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_error.h>"
          , "_Bool hs_bindgen_b76f69013e6d2cc4 (void)"
          , "{"
          , "  return (SDL_OutOfMemory)();"
@@ -35,12 +43,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Error_Safe_SDL_OutOfMemory@
 foreign import ccall safe "hs_bindgen_b76f69013e6d2cc4"
   hs_bindgen_b76f69013e6d2cc4_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Error_Safe_SDL_OutOfMemory@
 hs_bindgen_b76f69013e6d2cc4 :: IO BG.CBool
 hs_bindgen_b76f69013e6d2cc4 =
-  BG.fromFFIType hs_bindgen_b76f69013e6d2cc4_base
+  fmap BG.fromFFIType hs_bindgen_b76f69013e6d2cc4_base
 
 -- | Set an error indicating that memory allocation failed.
 --
@@ -64,7 +72,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Error_Safe_SDL_GetError@
 hs_bindgen_af9c22d77d37c96f :: IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_af9c22d77d37c96f =
-  BG.fromFFIType hs_bindgen_af9c22d77d37c96f_base
+  fmap BG.fromFFIType hs_bindgen_af9c22d77d37c96f_base
 
 -- | Retrieve a message about the last error that occurred on the current thread.
 --
@@ -93,12 +101,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Error_Safe_SDL_ClearError@
 foreign import ccall safe "hs_bindgen_ee4e13eee0d070cc"
   hs_bindgen_ee4e13eee0d070cc_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Error_Safe_SDL_ClearError@
 hs_bindgen_ee4e13eee0d070cc :: IO BG.CBool
 hs_bindgen_ee4e13eee0d070cc =
-  BG.fromFFIType hs_bindgen_ee4e13eee0d070cc_base
+  fmap BG.fromFFIType hs_bindgen_ee4e13eee0d070cc_base
 
 -- | Clear any previous error message for this thread.
 --
diff --git a/src/SDL3/Sys/Bindgen/Error/Unsafe.hs b/src/SDL3/Sys/Bindgen/Error/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Error/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Error/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Error.Unsafe (
@@ -9,13 +11,19 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_error.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_error.h>"
          , "_Bool hs_bindgen_bdcf7fcfe4f61e9a (void)"
          , "{"
          , "  return (SDL_OutOfMemory)();"
@@ -35,12 +43,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Error_Unsafe_SDL_OutOfMemory@
 foreign import ccall unsafe "hs_bindgen_bdcf7fcfe4f61e9a"
   hs_bindgen_bdcf7fcfe4f61e9a_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Error_Unsafe_SDL_OutOfMemory@
 hs_bindgen_bdcf7fcfe4f61e9a :: IO BG.CBool
 hs_bindgen_bdcf7fcfe4f61e9a =
-  BG.fromFFIType hs_bindgen_bdcf7fcfe4f61e9a_base
+  fmap BG.fromFFIType hs_bindgen_bdcf7fcfe4f61e9a_base
 
 -- | Set an error indicating that memory allocation failed.
 --
@@ -64,7 +72,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Error_Unsafe_SDL_GetError@
 hs_bindgen_f0d75ef957ae5815 :: IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_f0d75ef957ae5815 =
-  BG.fromFFIType hs_bindgen_f0d75ef957ae5815_base
+  fmap BG.fromFFIType hs_bindgen_f0d75ef957ae5815_base
 
 -- | Retrieve a message about the last error that occurred on the current thread.
 --
@@ -93,12 +101,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Error_Unsafe_SDL_ClearError@
 foreign import ccall unsafe "hs_bindgen_c7e60181e6f1a240"
   hs_bindgen_c7e60181e6f1a240_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Error_Unsafe_SDL_ClearError@
 hs_bindgen_c7e60181e6f1a240 :: IO BG.CBool
 hs_bindgen_c7e60181e6f1a240 =
-  BG.fromFFIType hs_bindgen_c7e60181e6f1a240_base
+  fmap BG.fromFFIType hs_bindgen_c7e60181e6f1a240_base
 
 -- | Clear any previous error message for this thread.
 --
diff --git a/src/SDL3/Sys/Bindgen/ErrorShims/FunPtr.hs b/src/SDL3/Sys/Bindgen/ErrorShims/FunPtr.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/ErrorShims/FunPtr.hs
@@ -0,0 +1,144 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.ErrorShims.FunPtr (
+  SDL3.Sys.Bindgen.ErrorShims.FunPtr.lithon_SDL_SetError,
+  SDL3.Sys.Bindgen.ErrorShims.FunPtr.lithon_SDL_Unsupported,
+  SDL3.Sys.Bindgen.ErrorShims.FunPtr.lithon_SDL_InvalidParamError,
+)
+where
+
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <sdl3-bindgen-sys/SDL_error_shims.h>"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.ErrorShims_get_lithon_SDL_SetError */"
+         , "__attribute__ ((const))"
+         , "_Bool (*hs_bindgen_a66f7538e1b5fb4e (void)) ("
+         , "  char const *arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_SetError;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.ErrorShims_get_lithon_SDL_Unsupported */"
+         , "__attribute__ ((const))"
+         , "_Bool (*hs_bindgen_b1a48c819dd22277 (void)) (void)"
+         , "{"
+         , "  return &lithon_SDL_Unsupported;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.ErrorShims_get_lithon_SDL_InvalidParamError */"
+         , "__attribute__ ((const))"
+         , "_Bool (*hs_bindgen_b87b43a376c75268 (void)) ("
+         , "  char const *arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_InvalidParamError;"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.ErrorShims_get_lithon_SDL_SetError@
+foreign import ccall unsafe "hs_bindgen_a66f7538e1b5fb4e"
+  hs_bindgen_a66f7538e1b5fb4e_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.ErrorShims_get_lithon_SDL_SetError@
+hs_bindgen_a66f7538e1b5fb4e :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO BG.CBool))
+hs_bindgen_a66f7538e1b5fb4e =
+  fmap BG.fromFFIType hs_bindgen_a66f7538e1b5fb4e_base
+
+{-# NOINLINE lithon_SDL_SetError #-}
+
+-- | Set the SDL error message for the current thread.
+--
+--     A fixed-arity shim over the variadic SDL_SetError: @message@ becomes the error message verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     Calling this function will replace any previous error message that was set. It always returns false, since SDL frequently uses false to signify a failing result.
+--
+--     [@message@]: the error message, in UTF-8.
+--
+--     [Returns]: false.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_ClearError, SDL_GetError
+--
+--     [C declaration]: @lithon_SDL_SetError@, defined at @sdl3-bindgen-sys\/SDL_error_shims.h 45:24@
+lithon_SDL_SetError :: BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO BG.CBool)
+lithon_SDL_SetError =
+  BG.unsafePerformIO hs_bindgen_a66f7538e1b5fb4e
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.ErrorShims_get_lithon_SDL_Unsupported@
+foreign import ccall unsafe "hs_bindgen_b1a48c819dd22277"
+  hs_bindgen_b1a48c819dd22277_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.ErrorShims_get_lithon_SDL_Unsupported@
+hs_bindgen_b1a48c819dd22277 :: IO (BG.FunPtr (IO BG.CBool))
+hs_bindgen_b1a48c819dd22277 =
+  fmap BG.fromFFIType hs_bindgen_b1a48c819dd22277_base
+
+{-# NOINLINE lithon_SDL_Unsupported #-}
+
+-- | Report an unsupported operation with SDL\'s standard error message.
+--
+--     The SDL_Unsupported macro as a function: it sets the error message to \"That operation is not supported\".
+--
+--     [Returns]: false.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_SetError
+--
+--     [C declaration]: @lithon_SDL_Unsupported@, defined at @sdl3-bindgen-sys\/SDL_error_shims.h 64:24@
+lithon_SDL_Unsupported :: BG.FunPtr (IO BG.CBool)
+lithon_SDL_Unsupported =
+  BG.unsafePerformIO hs_bindgen_b1a48c819dd22277
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.ErrorShims_get_lithon_SDL_InvalidParamError@
+foreign import ccall unsafe "hs_bindgen_b87b43a376c75268"
+  hs_bindgen_b87b43a376c75268_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.ErrorShims_get_lithon_SDL_InvalidParamError@
+hs_bindgen_b87b43a376c75268 :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO BG.CBool))
+hs_bindgen_b87b43a376c75268 =
+  fmap BG.fromFFIType hs_bindgen_b87b43a376c75268_base
+
+{-# NOINLINE lithon_SDL_InvalidParamError #-}
+
+-- | Report an invalid parameter with SDL\'s standard error message.
+--
+--     The SDL_InvalidParamError macro as a function: it sets the error message to \"Parameter \'name\' is invalid\", with the parameter\'s name in place of name.
+--
+--     [@param@]: the name of the invalid parameter, in UTF-8.
+--
+--     [Returns]: false.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_SetError
+--
+--     [C declaration]: @lithon_SDL_InvalidParamError@, defined at @sdl3-bindgen-sys\/SDL_error_shims.h 84:24@
+lithon_SDL_InvalidParamError :: BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO BG.CBool)
+lithon_SDL_InvalidParamError =
+  BG.unsafePerformIO hs_bindgen_b87b43a376c75268
diff --git a/src/SDL3/Sys/Bindgen/ErrorShims/Safe.hs b/src/SDL3/Sys/Bindgen/ErrorShims/Safe.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/ErrorShims/Safe.hs
@@ -0,0 +1,144 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.ErrorShims.Safe (
+  SDL3.Sys.Bindgen.ErrorShims.Safe.lithon_SDL_SetError,
+  SDL3.Sys.Bindgen.ErrorShims.Safe.lithon_SDL_Unsupported,
+  SDL3.Sys.Bindgen.ErrorShims.Safe.lithon_SDL_InvalidParamError,
+)
+where
+
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <sdl3-bindgen-sys/SDL_error_shims.h>"
+         , "_Bool hs_bindgen_c73a2f11222ce000 ("
+         , "  char const *arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_SetError)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_a0235790ef732ce0 (void)"
+         , "{"
+         , "  return (lithon_SDL_Unsupported)();"
+         , "}"
+         , "_Bool hs_bindgen_ef91fbeac7b7bf79 ("
+         , "  char const *arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_InvalidParamError)(arg1);"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.ErrorShims_Safe_lithon_SDL_SetError@
+foreign import ccall safe "hs_bindgen_c73a2f11222ce000"
+  hs_bindgen_c73a2f11222ce000_base
+    :: BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.ErrorShims_Safe_lithon_SDL_SetError@
+hs_bindgen_c73a2f11222ce000
+  :: PtrConst.PtrConst BG.CChar
+  -> IO BG.CBool
+hs_bindgen_c73a2f11222ce000 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c73a2f11222ce000_base (BG.toFFIType x0))
+
+-- | Set the SDL error message for the current thread.
+--
+--     A fixed-arity shim over the variadic SDL_SetError: @message@ becomes the error message verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     Calling this function will replace any previous error message that was set. It always returns false, since SDL frequently uses false to signify a failing result.
+--
+--     [Returns]: false.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_ClearError, SDL_GetError
+--
+--     [C declaration]: @lithon_SDL_SetError@, defined at @sdl3-bindgen-sys\/SDL_error_shims.h 45:24@
+lithon_SDL_SetError
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the error message, in UTF-8.
+  -> IO BG.CBool
+lithon_SDL_SetError = hs_bindgen_c73a2f11222ce000
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.ErrorShims_Safe_lithon_SDL_Unsupported@
+foreign import ccall safe "hs_bindgen_a0235790ef732ce0"
+  hs_bindgen_a0235790ef732ce0_base
+    :: IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.ErrorShims_Safe_lithon_SDL_Unsupported@
+hs_bindgen_a0235790ef732ce0 :: IO BG.CBool
+hs_bindgen_a0235790ef732ce0 =
+  fmap BG.fromFFIType hs_bindgen_a0235790ef732ce0_base
+
+-- | Report an unsupported operation with SDL\'s standard error message.
+--
+--     The SDL_Unsupported macro as a function: it sets the error message to \"That operation is not supported\".
+--
+--     [Returns]: false.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_SetError
+--
+--     [C declaration]: @lithon_SDL_Unsupported@, defined at @sdl3-bindgen-sys\/SDL_error_shims.h 64:24@
+lithon_SDL_Unsupported :: IO BG.CBool
+lithon_SDL_Unsupported = hs_bindgen_a0235790ef732ce0
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.ErrorShims_Safe_lithon_SDL_InvalidParamError@
+foreign import ccall safe "hs_bindgen_ef91fbeac7b7bf79"
+  hs_bindgen_ef91fbeac7b7bf79_base
+    :: BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.ErrorShims_Safe_lithon_SDL_InvalidParamError@
+hs_bindgen_ef91fbeac7b7bf79
+  :: PtrConst.PtrConst BG.CChar
+  -> IO BG.CBool
+hs_bindgen_ef91fbeac7b7bf79 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_ef91fbeac7b7bf79_base (BG.toFFIType x0))
+
+-- | Report an invalid parameter with SDL\'s standard error message.
+--
+--     The SDL_InvalidParamError macro as a function: it sets the error message to \"Parameter \'name\' is invalid\", with the parameter\'s name in place of name.
+--
+--     [Returns]: false.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_SetError
+--
+--     [C declaration]: @lithon_SDL_InvalidParamError@, defined at @sdl3-bindgen-sys\/SDL_error_shims.h 84:24@
+lithon_SDL_InvalidParamError
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@param@]: the name of the invalid parameter, in UTF-8.
+  -> IO BG.CBool
+lithon_SDL_InvalidParamError =
+  hs_bindgen_ef91fbeac7b7bf79
diff --git a/src/SDL3/Sys/Bindgen/ErrorShims/Unsafe.hs b/src/SDL3/Sys/Bindgen/ErrorShims/Unsafe.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/ErrorShims/Unsafe.hs
@@ -0,0 +1,144 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.ErrorShims.Unsafe (
+  SDL3.Sys.Bindgen.ErrorShims.Unsafe.lithon_SDL_SetError,
+  SDL3.Sys.Bindgen.ErrorShims.Unsafe.lithon_SDL_Unsupported,
+  SDL3.Sys.Bindgen.ErrorShims.Unsafe.lithon_SDL_InvalidParamError,
+)
+where
+
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <sdl3-bindgen-sys/SDL_error_shims.h>"
+         , "_Bool hs_bindgen_44e349ce92676930 ("
+         , "  char const *arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_SetError)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_4a10ba5fb8669169 (void)"
+         , "{"
+         , "  return (lithon_SDL_Unsupported)();"
+         , "}"
+         , "_Bool hs_bindgen_a2fdd1e78f2ff50d ("
+         , "  char const *arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_InvalidParamError)(arg1);"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.ErrorShims_Unsafe_lithon_SDL_SetError@
+foreign import ccall unsafe "hs_bindgen_44e349ce92676930"
+  hs_bindgen_44e349ce92676930_base
+    :: BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.ErrorShims_Unsafe_lithon_SDL_SetError@
+hs_bindgen_44e349ce92676930
+  :: PtrConst.PtrConst BG.CChar
+  -> IO BG.CBool
+hs_bindgen_44e349ce92676930 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_44e349ce92676930_base (BG.toFFIType x0))
+
+-- | Set the SDL error message for the current thread.
+--
+--     A fixed-arity shim over the variadic SDL_SetError: @message@ becomes the error message verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     Calling this function will replace any previous error message that was set. It always returns false, since SDL frequently uses false to signify a failing result.
+--
+--     [Returns]: false.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_ClearError, SDL_GetError
+--
+--     [C declaration]: @lithon_SDL_SetError@, defined at @sdl3-bindgen-sys\/SDL_error_shims.h 45:24@
+lithon_SDL_SetError
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the error message, in UTF-8.
+  -> IO BG.CBool
+lithon_SDL_SetError = hs_bindgen_44e349ce92676930
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.ErrorShims_Unsafe_lithon_SDL_Unsupported@
+foreign import ccall unsafe "hs_bindgen_4a10ba5fb8669169"
+  hs_bindgen_4a10ba5fb8669169_base
+    :: IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.ErrorShims_Unsafe_lithon_SDL_Unsupported@
+hs_bindgen_4a10ba5fb8669169 :: IO BG.CBool
+hs_bindgen_4a10ba5fb8669169 =
+  fmap BG.fromFFIType hs_bindgen_4a10ba5fb8669169_base
+
+-- | Report an unsupported operation with SDL\'s standard error message.
+--
+--     The SDL_Unsupported macro as a function: it sets the error message to \"That operation is not supported\".
+--
+--     [Returns]: false.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_SetError
+--
+--     [C declaration]: @lithon_SDL_Unsupported@, defined at @sdl3-bindgen-sys\/SDL_error_shims.h 64:24@
+lithon_SDL_Unsupported :: IO BG.CBool
+lithon_SDL_Unsupported = hs_bindgen_4a10ba5fb8669169
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.ErrorShims_Unsafe_lithon_SDL_InvalidParamError@
+foreign import ccall unsafe "hs_bindgen_a2fdd1e78f2ff50d"
+  hs_bindgen_a2fdd1e78f2ff50d_base
+    :: BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.ErrorShims_Unsafe_lithon_SDL_InvalidParamError@
+hs_bindgen_a2fdd1e78f2ff50d
+  :: PtrConst.PtrConst BG.CChar
+  -> IO BG.CBool
+hs_bindgen_a2fdd1e78f2ff50d =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a2fdd1e78f2ff50d_base (BG.toFFIType x0))
+
+-- | Report an invalid parameter with SDL\'s standard error message.
+--
+--     The SDL_InvalidParamError macro as a function: it sets the error message to \"Parameter \'name\' is invalid\", with the parameter\'s name in place of name.
+--
+--     [Returns]: false.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_SetError
+--
+--     [C declaration]: @lithon_SDL_InvalidParamError@, defined at @sdl3-bindgen-sys\/SDL_error_shims.h 84:24@
+lithon_SDL_InvalidParamError
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@param@]: the name of the invalid parameter, in UTF-8.
+  -> IO BG.CBool
+lithon_SDL_InvalidParamError =
+  hs_bindgen_a2fdd1e78f2ff50d
diff --git a/src/SDL3/Sys/Bindgen/Events.hs b/src/SDL3/Sys/Bindgen/Events.hs
--- a/src/SDL3/Sys/Bindgen/Events.hs
+++ b/src/SDL3/Sys/Bindgen/Events.hs
@@ -5,14684 +5,15985 @@
 {-# LANGUAGE DuplicateRecordFields #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-{-# LANGUAGE MagicHash #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE PatternSynonyms #-}
-{-# LANGUAGE StandaloneDeriving #-}
-{-# LANGUAGE TypeApplications #-}
-{-# LANGUAGE TypeFamilies #-}
-{-# LANGUAGE TypeOperators #-}
-{-# LANGUAGE UnboxedTuples #-}
-{-# LANGUAGE UndecidableInstances #-}
-{-# LANGUAGE NoFieldSelectors #-}
-
--- | Event queue management.
---
---     It\'s extremely common often required that an app deal with SDL\'s event queue. Almost all useful information about interactions with the real world flow through here: the user interacting with the computer and app, hardware coming and going, the system changing in some way, etc.
---
---     An app generally takes a moment, perhaps at the start of a new frame, to examine any events that have occurred since the last time and process or ignore them. This is generally done by calling @SDL_PollEvent()@ in a loop until it returns false (or, if using the main callbacks, events are provided one at a time in calls to SDL_AppEvent() before the next call to SDL_AppIterate(); in this scenario, the app does not call @SDL_PollEvent()@ at all).
---
---     There is other forms of control, too: @SDL_PeepEvents()@ has more functionality at the cost of more complexity, and @SDL_WaitEvent()@ can block the process until something interesting happens, which might be beneficial for certain types of programs on low-power hardware. One may also call @SDL_AddEventWatch()@ to set a callback when new events arrive.
---
---     The app is free to generate their own events, too: SDL_PushEvent allows the app to put events onto the queue for later retrieval; SDL_RegisterEvents can guarantee that these events have a type that isn\'t in use by other parts of the system. The types of events that can be delivered.
---
---     @since 3.2.0
-module SDL3.Sys.Bindgen.Events (
-  SDL3.Sys.Bindgen.Events.SDL_EventType (..),
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_FIRST,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_QUIT,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_TERMINATING,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_LOW_MEMORY,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WILL_ENTER_BACKGROUND,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_DID_ENTER_BACKGROUND,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WILL_ENTER_FOREGROUND,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_DID_ENTER_FOREGROUND,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_LOCALE_CHANGED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_SYSTEM_THEME_CHANGED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_DISPLAY_ORIENTATION,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_DISPLAY_ADDED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_DISPLAY_REMOVED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_DISPLAY_MOVED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_DISPLAY_DESKTOP_MODE_CHANGED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_DISPLAY_CURRENT_MODE_CHANGED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_DISPLAY_CONTENT_SCALE_CHANGED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_DISPLAY_USABLE_BOUNDS_CHANGED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_DISPLAY_FIRST,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_DISPLAY_LAST,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_SHOWN,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_HIDDEN,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_EXPOSED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_MOVED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_RESIZED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_METAL_VIEW_RESIZED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_MINIMIZED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_MAXIMIZED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_RESTORED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_MOUSE_ENTER,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_MOUSE_LEAVE,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_FOCUS_GAINED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_FOCUS_LOST,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_CLOSE_REQUESTED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_HIT_TEST,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_ICCPROF_CHANGED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_DISPLAY_CHANGED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_DISPLAY_SCALE_CHANGED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_SAFE_AREA_CHANGED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_OCCLUDED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_ENTER_FULLSCREEN,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_LEAVE_FULLSCREEN,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_DESTROYED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_HDR_STATE_CHANGED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_FIRST,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_LAST,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_KEY_DOWN,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_KEY_UP,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_TEXT_EDITING,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_TEXT_INPUT,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_KEYMAP_CHANGED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_KEYBOARD_ADDED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_KEYBOARD_REMOVED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_TEXT_EDITING_CANDIDATES,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_SCREEN_KEYBOARD_SHOWN,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_SCREEN_KEYBOARD_HIDDEN,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_MOUSE_MOTION,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_MOUSE_BUTTON_DOWN,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_MOUSE_BUTTON_UP,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_MOUSE_WHEEL,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_MOUSE_ADDED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_MOUSE_REMOVED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_JOYSTICK_AXIS_MOTION,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_JOYSTICK_BALL_MOTION,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_JOYSTICK_HAT_MOTION,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_JOYSTICK_BUTTON_DOWN,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_JOYSTICK_BUTTON_UP,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_JOYSTICK_ADDED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_JOYSTICK_REMOVED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_JOYSTICK_BATTERY_UPDATED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_JOYSTICK_UPDATE_COMPLETE,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_GAMEPAD_AXIS_MOTION,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_GAMEPAD_BUTTON_DOWN,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_GAMEPAD_BUTTON_UP,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_GAMEPAD_ADDED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_GAMEPAD_REMOVED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_GAMEPAD_REMAPPED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_GAMEPAD_TOUCHPAD_DOWN,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_GAMEPAD_TOUCHPAD_MOTION,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_GAMEPAD_TOUCHPAD_UP,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_GAMEPAD_SENSOR_UPDATE,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_GAMEPAD_UPDATE_COMPLETE,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_GAMEPAD_STEAM_HANDLE_UPDATED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_FINGER_DOWN,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_FINGER_UP,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_FINGER_MOTION,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_FINGER_CANCELED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_PINCH_BEGIN,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_PINCH_UPDATE,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_PINCH_END,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_CLIPBOARD_UPDATE,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_DROP_FILE,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_DROP_TEXT,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_DROP_BEGIN,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_DROP_COMPLETE,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_DROP_POSITION,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_AUDIO_DEVICE_ADDED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_AUDIO_DEVICE_REMOVED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_AUDIO_DEVICE_FORMAT_CHANGED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_SENSOR_UPDATE,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_PEN_PROXIMITY_IN,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_PEN_PROXIMITY_OUT,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_PEN_DOWN,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_PEN_UP,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_PEN_BUTTON_DOWN,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_PEN_BUTTON_UP,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_PEN_MOTION,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_PEN_AXIS,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_CAMERA_DEVICE_ADDED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_CAMERA_DEVICE_REMOVED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_CAMERA_DEVICE_APPROVED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_CAMERA_DEVICE_DENIED,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_RENDER_TARGETS_RESET,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_RENDER_DEVICE_RESET,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_RENDER_DEVICE_LOST,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_PRIVATE0,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_PRIVATE1,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_PRIVATE2,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_PRIVATE3,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_POLL_SENTINEL,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_USER,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_LAST,
-  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_ENUM_PADDING,
-  SDL3.Sys.Bindgen.Events.SDL_CommonEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_DisplayEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_WindowEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_KeyboardDeviceEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_KeyboardEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_TextEditingEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_TextEditingCandidatesEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_TextInputEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_MouseDeviceEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_MouseMotionEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_MouseButtonEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_MouseWheelEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_JoyAxisEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_JoyBallEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_JoyHatEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_JoyButtonEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_JoyDeviceEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_JoyBatteryEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_GamepadAxisEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_GamepadButtonEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_GamepadDeviceEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_GamepadTouchpadEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_GamepadSensorEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_AudioDeviceEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_CameraDeviceEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_RenderEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_TouchFingerEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_PinchFingerEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_PenProximityEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_PenMotionEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_PenTouchEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_PenButtonEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_PenAxisEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_DropEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_ClipboardEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_SensorEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_QuitEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_UserEvent (..),
-  SDL3.Sys.Bindgen.Events.SDL_Event (..),
-  SDL3.Sys.Bindgen.Events.SDL_EventAction (..),
-  pattern SDL3.Sys.Bindgen.Events.SDL_ADDEVENT,
-  pattern SDL3.Sys.Bindgen.Events.SDL_PEEKEVENT,
-  pattern SDL3.Sys.Bindgen.Events.SDL_GETEVENT,
-  SDL3.Sys.Bindgen.Events.SDL_EventFilter_Aux (..),
-  SDL3.Sys.Bindgen.Events.SDL_EventFilter (..),
-)
-where
-
-import HsBindgen.Runtime.CEnum qualified as CEnum
-import HsBindgen.Runtime.ConstantArray qualified as CA
-import HsBindgen.Runtime.HasCField qualified as HasCField
-import HsBindgen.Runtime.Marshal qualified as Marshal
-import HsBindgen.Runtime.PtrConst qualified as PtrConst
-import HsBindgen.Runtime.Support qualified as BG
-import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField
-import HsBindgen.Runtime.Union qualified as Union
-import SDL3.Sys.Bindgen.Audio qualified
-import SDL3.Sys.Bindgen.Camera qualified
-import SDL3.Sys.Bindgen.Joystick qualified
-import SDL3.Sys.Bindgen.Keyboard qualified
-import SDL3.Sys.Bindgen.Keycode qualified
-import SDL3.Sys.Bindgen.Mouse qualified
-import SDL3.Sys.Bindgen.Pen qualified
-import SDL3.Sys.Bindgen.Power qualified
-import SDL3.Sys.Bindgen.Scancode qualified
-import SDL3.Sys.Bindgen.Sensor qualified
-import SDL3.Sys.Bindgen.Stdinc qualified
-import SDL3.Sys.Bindgen.Touch qualified
-import SDL3.Sys.Bindgen.Video qualified
-
--- | [C declaration]: @enum SDL_EventType@, defined at @SDL3\/SDL_events.h 84:14@
-newtype SDL_EventType = SDL_EventType
-  { unwrap :: BG.CUInt
-  }
-  deriving stock (BG.Generic, Eq, Ord)
-  deriving newtype (BG.HasFFIType)
-
-instance Marshal.StaticSize SDL_EventType where
-  staticSizeOf = \_ -> (4 :: Int)
-
-  staticAlignment = \_ -> (4 :: Int)
-
-instance Marshal.ReadRaw SDL_EventType where
-  readRaw =
-    \ptr0 ->
-      pure SDL_EventType
-        <*> Marshal.readRawByteOff ptr0 (0 :: Int)
-
-instance Marshal.WriteRaw SDL_EventType where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_EventType unwrap2 ->
-            Marshal.writeRawByteOff ptr0 (0 :: Int) unwrap2
-
-deriving via Marshal.EquivStorable SDL_EventType instance BG.Storable SDL_EventType
-
-deriving via BG.CUInt instance BG.Prim SDL_EventType
-
-instance CEnum.CEnum SDL_EventType where
-  type CEnumZ SDL_EventType = BG.CUInt
-
-  toCEnum = SDL_EventType
-
-  fromCEnum = BG.getField @"unwrap"
-
-  declaredValues =
-    \_ ->
-      CEnum.declaredValuesFromList
-        [ (0, BG.singleton "SDL_EVENT_FIRST")
-        , (256, BG.singleton "SDL_EVENT_QUIT")
-        , (257, BG.singleton "SDL_EVENT_TERMINATING")
-        , (258, BG.singleton "SDL_EVENT_LOW_MEMORY")
-        , (259, BG.singleton "SDL_EVENT_WILL_ENTER_BACKGROUND")
-        , (260, BG.singleton "SDL_EVENT_DID_ENTER_BACKGROUND")
-        , (261, BG.singleton "SDL_EVENT_WILL_ENTER_FOREGROUND")
-        , (262, BG.singleton "SDL_EVENT_DID_ENTER_FOREGROUND")
-        , (263, BG.singleton "SDL_EVENT_LOCALE_CHANGED")
-        , (264, BG.singleton "SDL_EVENT_SYSTEM_THEME_CHANGED")
-        , (337, ("SDL_EVENT_DISPLAY_ORIENTATION" BG.:| ["SDL_EVENT_DISPLAY_FIRST"]))
-        , (338, BG.singleton "SDL_EVENT_DISPLAY_ADDED")
-        , (339, BG.singleton "SDL_EVENT_DISPLAY_REMOVED")
-        , (340, BG.singleton "SDL_EVENT_DISPLAY_MOVED")
-        , (341, BG.singleton "SDL_EVENT_DISPLAY_DESKTOP_MODE_CHANGED")
-        , (342, BG.singleton "SDL_EVENT_DISPLAY_CURRENT_MODE_CHANGED")
-        , (343, BG.singleton "SDL_EVENT_DISPLAY_CONTENT_SCALE_CHANGED")
-        ,
-          ( 344
-          , ("SDL_EVENT_DISPLAY_USABLE_BOUNDS_CHANGED" BG.:| ["SDL_EVENT_DISPLAY_LAST"])
-          )
-        , (514, ("SDL_EVENT_WINDOW_SHOWN" BG.:| ["SDL_EVENT_WINDOW_FIRST"]))
-        , (515, BG.singleton "SDL_EVENT_WINDOW_HIDDEN")
-        , (516, BG.singleton "SDL_EVENT_WINDOW_EXPOSED")
-        , (517, BG.singleton "SDL_EVENT_WINDOW_MOVED")
-        , (518, BG.singleton "SDL_EVENT_WINDOW_RESIZED")
-        , (519, BG.singleton "SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED")
-        , (520, BG.singleton "SDL_EVENT_WINDOW_METAL_VIEW_RESIZED")
-        , (521, BG.singleton "SDL_EVENT_WINDOW_MINIMIZED")
-        , (522, BG.singleton "SDL_EVENT_WINDOW_MAXIMIZED")
-        , (523, BG.singleton "SDL_EVENT_WINDOW_RESTORED")
-        , (524, BG.singleton "SDL_EVENT_WINDOW_MOUSE_ENTER")
-        , (525, BG.singleton "SDL_EVENT_WINDOW_MOUSE_LEAVE")
-        , (526, BG.singleton "SDL_EVENT_WINDOW_FOCUS_GAINED")
-        , (527, BG.singleton "SDL_EVENT_WINDOW_FOCUS_LOST")
-        , (528, BG.singleton "SDL_EVENT_WINDOW_CLOSE_REQUESTED")
-        , (529, BG.singleton "SDL_EVENT_WINDOW_HIT_TEST")
-        , (530, BG.singleton "SDL_EVENT_WINDOW_ICCPROF_CHANGED")
-        , (531, BG.singleton "SDL_EVENT_WINDOW_DISPLAY_CHANGED")
-        , (532, BG.singleton "SDL_EVENT_WINDOW_DISPLAY_SCALE_CHANGED")
-        , (533, BG.singleton "SDL_EVENT_WINDOW_SAFE_AREA_CHANGED")
-        , (534, BG.singleton "SDL_EVENT_WINDOW_OCCLUDED")
-        , (535, BG.singleton "SDL_EVENT_WINDOW_ENTER_FULLSCREEN")
-        , (536, BG.singleton "SDL_EVENT_WINDOW_LEAVE_FULLSCREEN")
-        , (537, BG.singleton "SDL_EVENT_WINDOW_DESTROYED")
-        , (538, ("SDL_EVENT_WINDOW_HDR_STATE_CHANGED" BG.:| ["SDL_EVENT_WINDOW_LAST"]))
-        , (768, BG.singleton "SDL_EVENT_KEY_DOWN")
-        , (769, BG.singleton "SDL_EVENT_KEY_UP")
-        , (770, BG.singleton "SDL_EVENT_TEXT_EDITING")
-        , (771, BG.singleton "SDL_EVENT_TEXT_INPUT")
-        , (772, BG.singleton "SDL_EVENT_KEYMAP_CHANGED")
-        , (773, BG.singleton "SDL_EVENT_KEYBOARD_ADDED")
-        , (774, BG.singleton "SDL_EVENT_KEYBOARD_REMOVED")
-        , (775, BG.singleton "SDL_EVENT_TEXT_EDITING_CANDIDATES")
-        , (776, BG.singleton "SDL_EVENT_SCREEN_KEYBOARD_SHOWN")
-        , (777, BG.singleton "SDL_EVENT_SCREEN_KEYBOARD_HIDDEN")
-        , (1024, BG.singleton "SDL_EVENT_MOUSE_MOTION")
-        , (1025, BG.singleton "SDL_EVENT_MOUSE_BUTTON_DOWN")
-        , (1026, BG.singleton "SDL_EVENT_MOUSE_BUTTON_UP")
-        , (1027, BG.singleton "SDL_EVENT_MOUSE_WHEEL")
-        , (1028, BG.singleton "SDL_EVENT_MOUSE_ADDED")
-        , (1029, BG.singleton "SDL_EVENT_MOUSE_REMOVED")
-        , (1536, BG.singleton "SDL_EVENT_JOYSTICK_AXIS_MOTION")
-        , (1537, BG.singleton "SDL_EVENT_JOYSTICK_BALL_MOTION")
-        , (1538, BG.singleton "SDL_EVENT_JOYSTICK_HAT_MOTION")
-        , (1539, BG.singleton "SDL_EVENT_JOYSTICK_BUTTON_DOWN")
-        , (1540, BG.singleton "SDL_EVENT_JOYSTICK_BUTTON_UP")
-        , (1541, BG.singleton "SDL_EVENT_JOYSTICK_ADDED")
-        , (1542, BG.singleton "SDL_EVENT_JOYSTICK_REMOVED")
-        , (1543, BG.singleton "SDL_EVENT_JOYSTICK_BATTERY_UPDATED")
-        , (1544, BG.singleton "SDL_EVENT_JOYSTICK_UPDATE_COMPLETE")
-        , (1616, BG.singleton "SDL_EVENT_GAMEPAD_AXIS_MOTION")
-        , (1617, BG.singleton "SDL_EVENT_GAMEPAD_BUTTON_DOWN")
-        , (1618, BG.singleton "SDL_EVENT_GAMEPAD_BUTTON_UP")
-        , (1619, BG.singleton "SDL_EVENT_GAMEPAD_ADDED")
-        , (1620, BG.singleton "SDL_EVENT_GAMEPAD_REMOVED")
-        , (1621, BG.singleton "SDL_EVENT_GAMEPAD_REMAPPED")
-        , (1622, BG.singleton "SDL_EVENT_GAMEPAD_TOUCHPAD_DOWN")
-        , (1623, BG.singleton "SDL_EVENT_GAMEPAD_TOUCHPAD_MOTION")
-        , (1624, BG.singleton "SDL_EVENT_GAMEPAD_TOUCHPAD_UP")
-        , (1625, BG.singleton "SDL_EVENT_GAMEPAD_SENSOR_UPDATE")
-        , (1626, BG.singleton "SDL_EVENT_GAMEPAD_UPDATE_COMPLETE")
-        , (1627, BG.singleton "SDL_EVENT_GAMEPAD_STEAM_HANDLE_UPDATED")
-        , (1792, BG.singleton "SDL_EVENT_FINGER_DOWN")
-        , (1793, BG.singleton "SDL_EVENT_FINGER_UP")
-        , (1794, BG.singleton "SDL_EVENT_FINGER_MOTION")
-        , (1795, BG.singleton "SDL_EVENT_FINGER_CANCELED")
-        , (1808, BG.singleton "SDL_EVENT_PINCH_BEGIN")
-        , (1809, BG.singleton "SDL_EVENT_PINCH_UPDATE")
-        , (1810, BG.singleton "SDL_EVENT_PINCH_END")
-        , (2304, BG.singleton "SDL_EVENT_CLIPBOARD_UPDATE")
-        , (4096, BG.singleton "SDL_EVENT_DROP_FILE")
-        , (4097, BG.singleton "SDL_EVENT_DROP_TEXT")
-        , (4098, BG.singleton "SDL_EVENT_DROP_BEGIN")
-        , (4099, BG.singleton "SDL_EVENT_DROP_COMPLETE")
-        , (4100, BG.singleton "SDL_EVENT_DROP_POSITION")
-        , (4352, BG.singleton "SDL_EVENT_AUDIO_DEVICE_ADDED")
-        , (4353, BG.singleton "SDL_EVENT_AUDIO_DEVICE_REMOVED")
-        , (4354, BG.singleton "SDL_EVENT_AUDIO_DEVICE_FORMAT_CHANGED")
-        , (4608, BG.singleton "SDL_EVENT_SENSOR_UPDATE")
-        , (4864, BG.singleton "SDL_EVENT_PEN_PROXIMITY_IN")
-        , (4865, BG.singleton "SDL_EVENT_PEN_PROXIMITY_OUT")
-        , (4866, BG.singleton "SDL_EVENT_PEN_DOWN")
-        , (4867, BG.singleton "SDL_EVENT_PEN_UP")
-        , (4868, BG.singleton "SDL_EVENT_PEN_BUTTON_DOWN")
-        , (4869, BG.singleton "SDL_EVENT_PEN_BUTTON_UP")
-        , (4870, BG.singleton "SDL_EVENT_PEN_MOTION")
-        , (4871, BG.singleton "SDL_EVENT_PEN_AXIS")
-        , (5120, BG.singleton "SDL_EVENT_CAMERA_DEVICE_ADDED")
-        , (5121, BG.singleton "SDL_EVENT_CAMERA_DEVICE_REMOVED")
-        , (5122, BG.singleton "SDL_EVENT_CAMERA_DEVICE_APPROVED")
-        , (5123, BG.singleton "SDL_EVENT_CAMERA_DEVICE_DENIED")
-        , (8192, BG.singleton "SDL_EVENT_RENDER_TARGETS_RESET")
-        , (8193, BG.singleton "SDL_EVENT_RENDER_DEVICE_RESET")
-        , (8194, BG.singleton "SDL_EVENT_RENDER_DEVICE_LOST")
-        , (16384, BG.singleton "SDL_EVENT_PRIVATE0")
-        , (16385, BG.singleton "SDL_EVENT_PRIVATE1")
-        , (16386, BG.singleton "SDL_EVENT_PRIVATE2")
-        , (16387, BG.singleton "SDL_EVENT_PRIVATE3")
-        , (32512, BG.singleton "SDL_EVENT_POLL_SENTINEL")
-        , (32768, BG.singleton "SDL_EVENT_USER")
-        , (65535, BG.singleton "SDL_EVENT_LAST")
-        , (2147483647, BG.singleton "SDL_EVENT_ENUM_PADDING")
-        ]
-
-  showsUndeclared =
-    CEnum.showsWrappedUndeclared "SDL_EventType"
-
-  readPrecUndeclared =
-    CEnum.readPrecWrappedUndeclared "SDL_EventType"
-
-instance Show SDL_EventType where
-  showsPrec = CEnum.shows
-
-instance Read SDL_EventType where
-  readPrec = CEnum.readPrec
-
-  readList = BG.readListDefault
-
-  readListPrec = BG.readListPrecDefault
-
-instance
-  (ty ~ BG.CUInt)
-  => BG.CompatHasField.HasField "unwrap" SDL_EventType ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_EventType{unwrap = y1}
-      , BG.getField @"unwrap" x0
-      )
-
-instance
-  (ty ~ BG.CUInt)
-  => BG.HasField "unwrap" (BG.Ptr SDL_EventType) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"unwrap")
-
-instance HasCField.HasCField SDL_EventType "unwrap" where
-  type CFieldType SDL_EventType "unwrap" = BG.CUInt
-
-  offset# = \_ -> \_ -> 0
-
--- | Unused (do not remove)
---
---     [C declaration]: @SDL_EVENT_FIRST@, defined at @SDL3\/SDL_events.h 86:5@
-pattern SDL_EVENT_FIRST :: SDL_EventType
-pattern SDL_EVENT_FIRST = SDL_EventType 0
-
--- | User-requested quit
---
---     [C declaration]: @SDL_EVENT_QUIT@, defined at @SDL3\/SDL_events.h 89:5@
-pattern SDL_EVENT_QUIT :: SDL_EventType
-pattern SDL_EVENT_QUIT = SDL_EventType 256
-
--- | The application is being terminated by the OS. This event must be handled in a callback set with @SDL_AddEventWatch()@. Called on iOS in applicationWillTerminate() Called on Android in onDestroy()
---
---     [C declaration]: @SDL_EVENT_TERMINATING@, defined at @SDL3\/SDL_events.h 92:5@
-pattern SDL_EVENT_TERMINATING :: SDL_EventType
-pattern SDL_EVENT_TERMINATING = SDL_EventType 257
-
--- | The application is low on memory, free memory if possible. This event must be handled in a callback set with @SDL_AddEventWatch()@. Called on iOS in applicationDidReceiveMemoryWarning() Called on Android in onTrimMemory()
---
---     [C declaration]: @SDL_EVENT_LOW_MEMORY@, defined at @SDL3\/SDL_events.h 96:5@
-pattern SDL_EVENT_LOW_MEMORY :: SDL_EventType
-pattern SDL_EVENT_LOW_MEMORY = SDL_EventType 258
-
--- | The application is about to enter the background. This event must be handled in a callback set with @SDL_AddEventWatch()@. Called on iOS in applicationWillResignActive() Called on Android in onPause()
---
---     [C declaration]: @SDL_EVENT_WILL_ENTER_BACKGROUND@, defined at @SDL3\/SDL_events.h 100:5@
-pattern SDL_EVENT_WILL_ENTER_BACKGROUND :: SDL_EventType
-pattern SDL_EVENT_WILL_ENTER_BACKGROUND = SDL_EventType 259
-
--- | The application did enter the background and may not get CPU for some time. This event must be handled in a callback set with @SDL_AddEventWatch()@. Called on iOS in applicationDidEnterBackground() Called on Android in onPause()
---
---     [C declaration]: @SDL_EVENT_DID_ENTER_BACKGROUND@, defined at @SDL3\/SDL_events.h 104:5@
-pattern SDL_EVENT_DID_ENTER_BACKGROUND :: SDL_EventType
-pattern SDL_EVENT_DID_ENTER_BACKGROUND = SDL_EventType 260
-
--- | The application is about to enter the foreground. This event must be handled in a callback set with @SDL_AddEventWatch()@. Called on iOS in applicationWillEnterForeground() Called on Android in onResume()
---
---     [C declaration]: @SDL_EVENT_WILL_ENTER_FOREGROUND@, defined at @SDL3\/SDL_events.h 108:5@
-pattern SDL_EVENT_WILL_ENTER_FOREGROUND :: SDL_EventType
-pattern SDL_EVENT_WILL_ENTER_FOREGROUND = SDL_EventType 261
-
--- | The application is now interactive. This event must be handled in a callback set with @SDL_AddEventWatch()@. Called on iOS in applicationDidBecomeActive() Called on Android in onResume()
---
---     [C declaration]: @SDL_EVENT_DID_ENTER_FOREGROUND@, defined at @SDL3\/SDL_events.h 112:5@
-pattern SDL_EVENT_DID_ENTER_FOREGROUND :: SDL_EventType
-pattern SDL_EVENT_DID_ENTER_FOREGROUND = SDL_EventType 262
-
--- | The user\'s locale preferences have changed.
---
---     [C declaration]: @SDL_EVENT_LOCALE_CHANGED@, defined at @SDL3\/SDL_events.h 117:5@
-pattern SDL_EVENT_LOCALE_CHANGED :: SDL_EventType
-pattern SDL_EVENT_LOCALE_CHANGED = SDL_EventType 263
-
--- | The system theme changed
---
---     [C declaration]: @SDL_EVENT_SYSTEM_THEME_CHANGED@, defined at @SDL3\/SDL_events.h 119:5@
-pattern SDL_EVENT_SYSTEM_THEME_CHANGED :: SDL_EventType
-pattern SDL_EVENT_SYSTEM_THEME_CHANGED = SDL_EventType 264
-
--- | Display orientation has changed to data1
---
---     [C declaration]: @SDL_EVENT_DISPLAY_ORIENTATION@, defined at @SDL3\/SDL_events.h 123:5@
-pattern SDL_EVENT_DISPLAY_ORIENTATION :: SDL_EventType
-pattern SDL_EVENT_DISPLAY_ORIENTATION = SDL_EventType 337
-
--- | Display has been added to the system
---
---     [C declaration]: @SDL_EVENT_DISPLAY_ADDED@, defined at @SDL3\/SDL_events.h 124:5@
-pattern SDL_EVENT_DISPLAY_ADDED :: SDL_EventType
-pattern SDL_EVENT_DISPLAY_ADDED = SDL_EventType 338
-
--- | Display has been removed from the system
---
---     [C declaration]: @SDL_EVENT_DISPLAY_REMOVED@, defined at @SDL3\/SDL_events.h 125:5@
-pattern SDL_EVENT_DISPLAY_REMOVED :: SDL_EventType
-pattern SDL_EVENT_DISPLAY_REMOVED = SDL_EventType 339
-
--- | Display has changed position
---
---     [C declaration]: @SDL_EVENT_DISPLAY_MOVED@, defined at @SDL3\/SDL_events.h 126:5@
-pattern SDL_EVENT_DISPLAY_MOVED :: SDL_EventType
-pattern SDL_EVENT_DISPLAY_MOVED = SDL_EventType 340
-
--- | Display has changed desktop mode
---
---     [C declaration]: @SDL_EVENT_DISPLAY_DESKTOP_MODE_CHANGED@, defined at @SDL3\/SDL_events.h 127:5@
-pattern SDL_EVENT_DISPLAY_DESKTOP_MODE_CHANGED :: SDL_EventType
-pattern SDL_EVENT_DISPLAY_DESKTOP_MODE_CHANGED = SDL_EventType 341
-
--- | Display has changed current mode
---
---     [C declaration]: @SDL_EVENT_DISPLAY_CURRENT_MODE_CHANGED@, defined at @SDL3\/SDL_events.h 128:5@
-pattern SDL_EVENT_DISPLAY_CURRENT_MODE_CHANGED :: SDL_EventType
-pattern SDL_EVENT_DISPLAY_CURRENT_MODE_CHANGED = SDL_EventType 342
-
--- | Display has changed content scale
---
---     [C declaration]: @SDL_EVENT_DISPLAY_CONTENT_SCALE_CHANGED@, defined at @SDL3\/SDL_events.h 129:5@
-pattern SDL_EVENT_DISPLAY_CONTENT_SCALE_CHANGED :: SDL_EventType
-pattern SDL_EVENT_DISPLAY_CONTENT_SCALE_CHANGED = SDL_EventType 343
-
--- | Display has changed usable bounds
---
---     [C declaration]: @SDL_EVENT_DISPLAY_USABLE_BOUNDS_CHANGED@, defined at @SDL3\/SDL_events.h 130:5@
-pattern SDL_EVENT_DISPLAY_USABLE_BOUNDS_CHANGED :: SDL_EventType
-pattern SDL_EVENT_DISPLAY_USABLE_BOUNDS_CHANGED = SDL_EventType 344
-
--- | [C declaration]: @SDL_EVENT_DISPLAY_FIRST@, defined at @SDL3\/SDL_events.h 131:5@
-pattern SDL_EVENT_DISPLAY_FIRST :: SDL_EventType
-pattern SDL_EVENT_DISPLAY_FIRST = SDL_EventType 337
-
--- | [C declaration]: @SDL_EVENT_DISPLAY_LAST@, defined at @SDL3\/SDL_events.h 132:5@
-pattern SDL_EVENT_DISPLAY_LAST :: SDL_EventType
-pattern SDL_EVENT_DISPLAY_LAST = SDL_EventType 344
-
--- | Window has been shown
---
---     [C declaration]: @SDL_EVENT_WINDOW_SHOWN@, defined at @SDL3\/SDL_events.h 137:5@
-pattern SDL_EVENT_WINDOW_SHOWN :: SDL_EventType
-pattern SDL_EVENT_WINDOW_SHOWN = SDL_EventType 514
-
--- | Window has been hidden
---
---     [C declaration]: @SDL_EVENT_WINDOW_HIDDEN@, defined at @SDL3\/SDL_events.h 138:5@
-pattern SDL_EVENT_WINDOW_HIDDEN :: SDL_EventType
-pattern SDL_EVENT_WINDOW_HIDDEN = SDL_EventType 515
-
--- | Window has been exposed and should be redrawn, and can be redrawn directly from event watchers for this event. data1 is 1 for live-resize expose events, 0 otherwise.
---
---     [C declaration]: @SDL_EVENT_WINDOW_EXPOSED@, defined at @SDL3\/SDL_events.h 139:5@
-pattern SDL_EVENT_WINDOW_EXPOSED :: SDL_EventType
-pattern SDL_EVENT_WINDOW_EXPOSED = SDL_EventType 516
-
--- | Window has been moved to data1, data2
---
---     [C declaration]: @SDL_EVENT_WINDOW_MOVED@, defined at @SDL3\/SDL_events.h 141:5@
-pattern SDL_EVENT_WINDOW_MOVED :: SDL_EventType
-pattern SDL_EVENT_WINDOW_MOVED = SDL_EventType 517
-
--- | Window has been resized to data1xdata2
---
---     [C declaration]: @SDL_EVENT_WINDOW_RESIZED@, defined at @SDL3\/SDL_events.h 142:5@
-pattern SDL_EVENT_WINDOW_RESIZED :: SDL_EventType
-pattern SDL_EVENT_WINDOW_RESIZED = SDL_EventType 518
-
--- | The pixel size of the window has changed to data1xdata2
---
---     [C declaration]: @SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED@, defined at @SDL3\/SDL_events.h 143:5@
-pattern SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED :: SDL_EventType
-pattern SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED = SDL_EventType 519
-
--- | The pixel size of a Metal view associated with the window has changed
---
---     [C declaration]: @SDL_EVENT_WINDOW_METAL_VIEW_RESIZED@, defined at @SDL3\/SDL_events.h 144:5@
-pattern SDL_EVENT_WINDOW_METAL_VIEW_RESIZED :: SDL_EventType
-pattern SDL_EVENT_WINDOW_METAL_VIEW_RESIZED = SDL_EventType 520
-
--- | Window has been minimized
---
---     [C declaration]: @SDL_EVENT_WINDOW_MINIMIZED@, defined at @SDL3\/SDL_events.h 145:5@
-pattern SDL_EVENT_WINDOW_MINIMIZED :: SDL_EventType
-pattern SDL_EVENT_WINDOW_MINIMIZED = SDL_EventType 521
-
--- | Window has been maximized
---
---     [C declaration]: @SDL_EVENT_WINDOW_MAXIMIZED@, defined at @SDL3\/SDL_events.h 146:5@
-pattern SDL_EVENT_WINDOW_MAXIMIZED :: SDL_EventType
-pattern SDL_EVENT_WINDOW_MAXIMIZED = SDL_EventType 522
-
--- | Window has been restored to normal size and position
---
---     [C declaration]: @SDL_EVENT_WINDOW_RESTORED@, defined at @SDL3\/SDL_events.h 147:5@
-pattern SDL_EVENT_WINDOW_RESTORED :: SDL_EventType
-pattern SDL_EVENT_WINDOW_RESTORED = SDL_EventType 523
-
--- | Window has gained mouse focus
---
---     [C declaration]: @SDL_EVENT_WINDOW_MOUSE_ENTER@, defined at @SDL3\/SDL_events.h 148:5@
-pattern SDL_EVENT_WINDOW_MOUSE_ENTER :: SDL_EventType
-pattern SDL_EVENT_WINDOW_MOUSE_ENTER = SDL_EventType 524
-
--- | Window has lost mouse focus
---
---     [C declaration]: @SDL_EVENT_WINDOW_MOUSE_LEAVE@, defined at @SDL3\/SDL_events.h 149:5@
-pattern SDL_EVENT_WINDOW_MOUSE_LEAVE :: SDL_EventType
-pattern SDL_EVENT_WINDOW_MOUSE_LEAVE = SDL_EventType 525
-
--- | Window has gained keyboard focus
---
---     [C declaration]: @SDL_EVENT_WINDOW_FOCUS_GAINED@, defined at @SDL3\/SDL_events.h 150:5@
-pattern SDL_EVENT_WINDOW_FOCUS_GAINED :: SDL_EventType
-pattern SDL_EVENT_WINDOW_FOCUS_GAINED = SDL_EventType 526
-
--- | Window has lost keyboard focus
---
---     [C declaration]: @SDL_EVENT_WINDOW_FOCUS_LOST@, defined at @SDL3\/SDL_events.h 151:5@
-pattern SDL_EVENT_WINDOW_FOCUS_LOST :: SDL_EventType
-pattern SDL_EVENT_WINDOW_FOCUS_LOST = SDL_EventType 527
-
--- | The window manager requests that the window be closed
---
---     [C declaration]: @SDL_EVENT_WINDOW_CLOSE_REQUESTED@, defined at @SDL3\/SDL_events.h 152:5@
-pattern SDL_EVENT_WINDOW_CLOSE_REQUESTED :: SDL_EventType
-pattern SDL_EVENT_WINDOW_CLOSE_REQUESTED = SDL_EventType 528
-
--- | Window had a hit test that wasn\'t SDL_HITTEST_NORMAL
---
---     [C declaration]: @SDL_EVENT_WINDOW_HIT_TEST@, defined at @SDL3\/SDL_events.h 153:5@
-pattern SDL_EVENT_WINDOW_HIT_TEST :: SDL_EventType
-pattern SDL_EVENT_WINDOW_HIT_TEST = SDL_EventType 529
-
--- | The ICC profile of the window\'s display has changed
---
---     [C declaration]: @SDL_EVENT_WINDOW_ICCPROF_CHANGED@, defined at @SDL3\/SDL_events.h 154:5@
-pattern SDL_EVENT_WINDOW_ICCPROF_CHANGED :: SDL_EventType
-pattern SDL_EVENT_WINDOW_ICCPROF_CHANGED = SDL_EventType 530
-
--- | Window has been moved to display data1
---
---     [C declaration]: @SDL_EVENT_WINDOW_DISPLAY_CHANGED@, defined at @SDL3\/SDL_events.h 155:5@
-pattern SDL_EVENT_WINDOW_DISPLAY_CHANGED :: SDL_EventType
-pattern SDL_EVENT_WINDOW_DISPLAY_CHANGED = SDL_EventType 531
-
--- | Window display scale has been changed
---
---     [C declaration]: @SDL_EVENT_WINDOW_DISPLAY_SCALE_CHANGED@, defined at @SDL3\/SDL_events.h 156:5@
-pattern SDL_EVENT_WINDOW_DISPLAY_SCALE_CHANGED :: SDL_EventType
-pattern SDL_EVENT_WINDOW_DISPLAY_SCALE_CHANGED = SDL_EventType 532
-
--- | The window safe area has been changed
---
---     [C declaration]: @SDL_EVENT_WINDOW_SAFE_AREA_CHANGED@, defined at @SDL3\/SDL_events.h 157:5@
-pattern SDL_EVENT_WINDOW_SAFE_AREA_CHANGED :: SDL_EventType
-pattern SDL_EVENT_WINDOW_SAFE_AREA_CHANGED = SDL_EventType 533
-
--- | The window has been occluded
---
---     [C declaration]: @SDL_EVENT_WINDOW_OCCLUDED@, defined at @SDL3\/SDL_events.h 158:5@
-pattern SDL_EVENT_WINDOW_OCCLUDED :: SDL_EventType
-pattern SDL_EVENT_WINDOW_OCCLUDED = SDL_EventType 534
-
--- | The window has entered fullscreen mode
---
---     [C declaration]: @SDL_EVENT_WINDOW_ENTER_FULLSCREEN@, defined at @SDL3\/SDL_events.h 159:5@
-pattern SDL_EVENT_WINDOW_ENTER_FULLSCREEN :: SDL_EventType
-pattern SDL_EVENT_WINDOW_ENTER_FULLSCREEN = SDL_EventType 535
-
--- | The window has left fullscreen mode
---
---     [C declaration]: @SDL_EVENT_WINDOW_LEAVE_FULLSCREEN@, defined at @SDL3\/SDL_events.h 160:5@
-pattern SDL_EVENT_WINDOW_LEAVE_FULLSCREEN :: SDL_EventType
-pattern SDL_EVENT_WINDOW_LEAVE_FULLSCREEN = SDL_EventType 536
-
--- | The window with the associated ID is being or has been destroyed. If this message is being handled in an event watcher, the window handle is still valid and can still be used to retrieve any properties associated with the window. Otherwise, the handle has already been destroyed and all resources associated with it are invalid
---
---     [C declaration]: @SDL_EVENT_WINDOW_DESTROYED@, defined at @SDL3\/SDL_events.h 161:5@
-pattern SDL_EVENT_WINDOW_DESTROYED :: SDL_EventType
-pattern SDL_EVENT_WINDOW_DESTROYED = SDL_EventType 537
-
--- | Window HDR properties have changed
---
---     [C declaration]: @SDL_EVENT_WINDOW_HDR_STATE_CHANGED@, defined at @SDL3\/SDL_events.h 165:5@
-pattern SDL_EVENT_WINDOW_HDR_STATE_CHANGED :: SDL_EventType
-pattern SDL_EVENT_WINDOW_HDR_STATE_CHANGED = SDL_EventType 538
-
--- | [C declaration]: @SDL_EVENT_WINDOW_FIRST@, defined at @SDL3\/SDL_events.h 166:5@
-pattern SDL_EVENT_WINDOW_FIRST :: SDL_EventType
-pattern SDL_EVENT_WINDOW_FIRST = SDL_EventType 514
-
--- | [C declaration]: @SDL_EVENT_WINDOW_LAST@, defined at @SDL3\/SDL_events.h 167:5@
-pattern SDL_EVENT_WINDOW_LAST :: SDL_EventType
-pattern SDL_EVENT_WINDOW_LAST = SDL_EventType 538
-
--- | Key pressed
---
---     [C declaration]: @SDL_EVENT_KEY_DOWN@, defined at @SDL3\/SDL_events.h 170:5@
-pattern SDL_EVENT_KEY_DOWN :: SDL_EventType
-pattern SDL_EVENT_KEY_DOWN = SDL_EventType 768
-
--- | Key released
---
---     [C declaration]: @SDL_EVENT_KEY_UP@, defined at @SDL3\/SDL_events.h 171:5@
-pattern SDL_EVENT_KEY_UP :: SDL_EventType
-pattern SDL_EVENT_KEY_UP = SDL_EventType 769
-
--- | Keyboard text editing (composition)
---
---     [C declaration]: @SDL_EVENT_TEXT_EDITING@, defined at @SDL3\/SDL_events.h 172:5@
-pattern SDL_EVENT_TEXT_EDITING :: SDL_EventType
-pattern SDL_EVENT_TEXT_EDITING = SDL_EventType 770
-
--- | Keyboard text input
---
---     [C declaration]: @SDL_EVENT_TEXT_INPUT@, defined at @SDL3\/SDL_events.h 173:5@
-pattern SDL_EVENT_TEXT_INPUT :: SDL_EventType
-pattern SDL_EVENT_TEXT_INPUT = SDL_EventType 771
-
--- | Keymap changed due to a system event such as an input language or keyboard layout change.
---
---     [C declaration]: @SDL_EVENT_KEYMAP_CHANGED@, defined at @SDL3\/SDL_events.h 174:5@
-pattern SDL_EVENT_KEYMAP_CHANGED :: SDL_EventType
-pattern SDL_EVENT_KEYMAP_CHANGED = SDL_EventType 772
-
--- | A new keyboard has been inserted into the system
---
---     [C declaration]: @SDL_EVENT_KEYBOARD_ADDED@, defined at @SDL3\/SDL_events.h 176:5@
-pattern SDL_EVENT_KEYBOARD_ADDED :: SDL_EventType
-pattern SDL_EVENT_KEYBOARD_ADDED = SDL_EventType 773
-
--- | A keyboard has been removed
---
---     [C declaration]: @SDL_EVENT_KEYBOARD_REMOVED@, defined at @SDL3\/SDL_events.h 177:5@
-pattern SDL_EVENT_KEYBOARD_REMOVED :: SDL_EventType
-pattern SDL_EVENT_KEYBOARD_REMOVED = SDL_EventType 774
-
--- | Keyboard text editing candidates
---
---     [C declaration]: @SDL_EVENT_TEXT_EDITING_CANDIDATES@, defined at @SDL3\/SDL_events.h 178:5@
-pattern SDL_EVENT_TEXT_EDITING_CANDIDATES :: SDL_EventType
-pattern SDL_EVENT_TEXT_EDITING_CANDIDATES = SDL_EventType 775
-
--- | The on-screen keyboard has been shown
---
---     [C declaration]: @SDL_EVENT_SCREEN_KEYBOARD_SHOWN@, defined at @SDL3\/SDL_events.h 179:5@
-pattern SDL_EVENT_SCREEN_KEYBOARD_SHOWN :: SDL_EventType
-pattern SDL_EVENT_SCREEN_KEYBOARD_SHOWN = SDL_EventType 776
-
--- | The on-screen keyboard has been hidden
---
---     [C declaration]: @SDL_EVENT_SCREEN_KEYBOARD_HIDDEN@, defined at @SDL3\/SDL_events.h 180:5@
-pattern SDL_EVENT_SCREEN_KEYBOARD_HIDDEN :: SDL_EventType
-pattern SDL_EVENT_SCREEN_KEYBOARD_HIDDEN = SDL_EventType 777
-
--- | Mouse moved
---
---     [C declaration]: @SDL_EVENT_MOUSE_MOTION@, defined at @SDL3\/SDL_events.h 183:5@
-pattern SDL_EVENT_MOUSE_MOTION :: SDL_EventType
-pattern SDL_EVENT_MOUSE_MOTION = SDL_EventType 1024
-
--- | Mouse button pressed
---
---     [C declaration]: @SDL_EVENT_MOUSE_BUTTON_DOWN@, defined at @SDL3\/SDL_events.h 184:5@
-pattern SDL_EVENT_MOUSE_BUTTON_DOWN :: SDL_EventType
-pattern SDL_EVENT_MOUSE_BUTTON_DOWN = SDL_EventType 1025
-
--- | Mouse button released
---
---     [C declaration]: @SDL_EVENT_MOUSE_BUTTON_UP@, defined at @SDL3\/SDL_events.h 185:5@
-pattern SDL_EVENT_MOUSE_BUTTON_UP :: SDL_EventType
-pattern SDL_EVENT_MOUSE_BUTTON_UP = SDL_EventType 1026
-
--- | Mouse wheel motion
---
---     [C declaration]: @SDL_EVENT_MOUSE_WHEEL@, defined at @SDL3\/SDL_events.h 186:5@
-pattern SDL_EVENT_MOUSE_WHEEL :: SDL_EventType
-pattern SDL_EVENT_MOUSE_WHEEL = SDL_EventType 1027
-
--- | A new mouse has been inserted into the system
---
---     [C declaration]: @SDL_EVENT_MOUSE_ADDED@, defined at @SDL3\/SDL_events.h 187:5@
-pattern SDL_EVENT_MOUSE_ADDED :: SDL_EventType
-pattern SDL_EVENT_MOUSE_ADDED = SDL_EventType 1028
-
--- | A mouse has been removed
---
---     [C declaration]: @SDL_EVENT_MOUSE_REMOVED@, defined at @SDL3\/SDL_events.h 188:5@
-pattern SDL_EVENT_MOUSE_REMOVED :: SDL_EventType
-pattern SDL_EVENT_MOUSE_REMOVED = SDL_EventType 1029
-
--- | Joystick axis motion
---
---     [C declaration]: @SDL_EVENT_JOYSTICK_AXIS_MOTION@, defined at @SDL3\/SDL_events.h 191:5@
-pattern SDL_EVENT_JOYSTICK_AXIS_MOTION :: SDL_EventType
-pattern SDL_EVENT_JOYSTICK_AXIS_MOTION = SDL_EventType 1536
-
--- | Joystick trackball motion
---
---     [C declaration]: @SDL_EVENT_JOYSTICK_BALL_MOTION@, defined at @SDL3\/SDL_events.h 192:5@
-pattern SDL_EVENT_JOYSTICK_BALL_MOTION :: SDL_EventType
-pattern SDL_EVENT_JOYSTICK_BALL_MOTION = SDL_EventType 1537
-
--- | Joystick hat position change
---
---     [C declaration]: @SDL_EVENT_JOYSTICK_HAT_MOTION@, defined at @SDL3\/SDL_events.h 193:5@
-pattern SDL_EVENT_JOYSTICK_HAT_MOTION :: SDL_EventType
-pattern SDL_EVENT_JOYSTICK_HAT_MOTION = SDL_EventType 1538
-
--- | Joystick button pressed
---
---     [C declaration]: @SDL_EVENT_JOYSTICK_BUTTON_DOWN@, defined at @SDL3\/SDL_events.h 194:5@
-pattern SDL_EVENT_JOYSTICK_BUTTON_DOWN :: SDL_EventType
-pattern SDL_EVENT_JOYSTICK_BUTTON_DOWN = SDL_EventType 1539
-
--- | Joystick button released
---
---     [C declaration]: @SDL_EVENT_JOYSTICK_BUTTON_UP@, defined at @SDL3\/SDL_events.h 195:5@
-pattern SDL_EVENT_JOYSTICK_BUTTON_UP :: SDL_EventType
-pattern SDL_EVENT_JOYSTICK_BUTTON_UP = SDL_EventType 1540
-
--- | A new joystick has been inserted into the system
---
---     [C declaration]: @SDL_EVENT_JOYSTICK_ADDED@, defined at @SDL3\/SDL_events.h 196:5@
-pattern SDL_EVENT_JOYSTICK_ADDED :: SDL_EventType
-pattern SDL_EVENT_JOYSTICK_ADDED = SDL_EventType 1541
-
--- | An opened joystick has been removed
---
---     [C declaration]: @SDL_EVENT_JOYSTICK_REMOVED@, defined at @SDL3\/SDL_events.h 197:5@
-pattern SDL_EVENT_JOYSTICK_REMOVED :: SDL_EventType
-pattern SDL_EVENT_JOYSTICK_REMOVED = SDL_EventType 1542
-
--- | Joystick battery level change
---
---     [C declaration]: @SDL_EVENT_JOYSTICK_BATTERY_UPDATED@, defined at @SDL3\/SDL_events.h 198:5@
-pattern SDL_EVENT_JOYSTICK_BATTERY_UPDATED :: SDL_EventType
-pattern SDL_EVENT_JOYSTICK_BATTERY_UPDATED = SDL_EventType 1543
-
--- | Joystick update is complete
---
---     [C declaration]: @SDL_EVENT_JOYSTICK_UPDATE_COMPLETE@, defined at @SDL3\/SDL_events.h 199:5@
-pattern SDL_EVENT_JOYSTICK_UPDATE_COMPLETE :: SDL_EventType
-pattern SDL_EVENT_JOYSTICK_UPDATE_COMPLETE = SDL_EventType 1544
-
--- | Gamepad axis motion
---
---     [C declaration]: @SDL_EVENT_GAMEPAD_AXIS_MOTION@, defined at @SDL3\/SDL_events.h 202:5@
-pattern SDL_EVENT_GAMEPAD_AXIS_MOTION :: SDL_EventType
-pattern SDL_EVENT_GAMEPAD_AXIS_MOTION = SDL_EventType 1616
-
--- | Gamepad button pressed
---
---     [C declaration]: @SDL_EVENT_GAMEPAD_BUTTON_DOWN@, defined at @SDL3\/SDL_events.h 203:5@
-pattern SDL_EVENT_GAMEPAD_BUTTON_DOWN :: SDL_EventType
-pattern SDL_EVENT_GAMEPAD_BUTTON_DOWN = SDL_EventType 1617
-
--- | Gamepad button released
---
---     [C declaration]: @SDL_EVENT_GAMEPAD_BUTTON_UP@, defined at @SDL3\/SDL_events.h 204:5@
-pattern SDL_EVENT_GAMEPAD_BUTTON_UP :: SDL_EventType
-pattern SDL_EVENT_GAMEPAD_BUTTON_UP = SDL_EventType 1618
-
--- | A new gamepad has been inserted into the system
---
---     [C declaration]: @SDL_EVENT_GAMEPAD_ADDED@, defined at @SDL3\/SDL_events.h 205:5@
-pattern SDL_EVENT_GAMEPAD_ADDED :: SDL_EventType
-pattern SDL_EVENT_GAMEPAD_ADDED = SDL_EventType 1619
-
--- | A gamepad has been removed
---
---     [C declaration]: @SDL_EVENT_GAMEPAD_REMOVED@, defined at @SDL3\/SDL_events.h 206:5@
-pattern SDL_EVENT_GAMEPAD_REMOVED :: SDL_EventType
-pattern SDL_EVENT_GAMEPAD_REMOVED = SDL_EventType 1620
-
--- | The gamepad mapping was updated
---
---     [C declaration]: @SDL_EVENT_GAMEPAD_REMAPPED@, defined at @SDL3\/SDL_events.h 207:5@
-pattern SDL_EVENT_GAMEPAD_REMAPPED :: SDL_EventType
-pattern SDL_EVENT_GAMEPAD_REMAPPED = SDL_EventType 1621
-
--- | Gamepad touchpad was touched
---
---     [C declaration]: @SDL_EVENT_GAMEPAD_TOUCHPAD_DOWN@, defined at @SDL3\/SDL_events.h 208:5@
-pattern SDL_EVENT_GAMEPAD_TOUCHPAD_DOWN :: SDL_EventType
-pattern SDL_EVENT_GAMEPAD_TOUCHPAD_DOWN = SDL_EventType 1622
-
--- | Gamepad touchpad finger was moved
---
---     [C declaration]: @SDL_EVENT_GAMEPAD_TOUCHPAD_MOTION@, defined at @SDL3\/SDL_events.h 209:5@
-pattern SDL_EVENT_GAMEPAD_TOUCHPAD_MOTION :: SDL_EventType
-pattern SDL_EVENT_GAMEPAD_TOUCHPAD_MOTION = SDL_EventType 1623
-
--- | Gamepad touchpad finger was lifted
---
---     [C declaration]: @SDL_EVENT_GAMEPAD_TOUCHPAD_UP@, defined at @SDL3\/SDL_events.h 210:5@
-pattern SDL_EVENT_GAMEPAD_TOUCHPAD_UP :: SDL_EventType
-pattern SDL_EVENT_GAMEPAD_TOUCHPAD_UP = SDL_EventType 1624
-
--- | Gamepad sensor was updated
---
---     [C declaration]: @SDL_EVENT_GAMEPAD_SENSOR_UPDATE@, defined at @SDL3\/SDL_events.h 211:5@
-pattern SDL_EVENT_GAMEPAD_SENSOR_UPDATE :: SDL_EventType
-pattern SDL_EVENT_GAMEPAD_SENSOR_UPDATE = SDL_EventType 1625
-
--- | Gamepad update is complete
---
---     [C declaration]: @SDL_EVENT_GAMEPAD_UPDATE_COMPLETE@, defined at @SDL3\/SDL_events.h 212:5@
-pattern SDL_EVENT_GAMEPAD_UPDATE_COMPLETE :: SDL_EventType
-pattern SDL_EVENT_GAMEPAD_UPDATE_COMPLETE = SDL_EventType 1626
-
--- | Gamepad Steam handle has changed
---
---     [C declaration]: @SDL_EVENT_GAMEPAD_STEAM_HANDLE_UPDATED@, defined at @SDL3\/SDL_events.h 213:5@
-pattern SDL_EVENT_GAMEPAD_STEAM_HANDLE_UPDATED :: SDL_EventType
-pattern SDL_EVENT_GAMEPAD_STEAM_HANDLE_UPDATED = SDL_EventType 1627
-
--- | [C declaration]: @SDL_EVENT_FINGER_DOWN@, defined at @SDL3\/SDL_events.h 216:5@
-pattern SDL_EVENT_FINGER_DOWN :: SDL_EventType
-pattern SDL_EVENT_FINGER_DOWN = SDL_EventType 1792
-
--- | [C declaration]: @SDL_EVENT_FINGER_UP@, defined at @SDL3\/SDL_events.h 217:5@
-pattern SDL_EVENT_FINGER_UP :: SDL_EventType
-pattern SDL_EVENT_FINGER_UP = SDL_EventType 1793
-
--- | [C declaration]: @SDL_EVENT_FINGER_MOTION@, defined at @SDL3\/SDL_events.h 218:5@
-pattern SDL_EVENT_FINGER_MOTION :: SDL_EventType
-pattern SDL_EVENT_FINGER_MOTION = SDL_EventType 1794
-
--- | [C declaration]: @SDL_EVENT_FINGER_CANCELED@, defined at @SDL3\/SDL_events.h 219:5@
-pattern SDL_EVENT_FINGER_CANCELED :: SDL_EventType
-pattern SDL_EVENT_FINGER_CANCELED = SDL_EventType 1795
-
--- | Pinch gesture started
---
---     [C declaration]: @SDL_EVENT_PINCH_BEGIN@, defined at @SDL3\/SDL_events.h 222:5@
-pattern SDL_EVENT_PINCH_BEGIN :: SDL_EventType
-pattern SDL_EVENT_PINCH_BEGIN = SDL_EventType 1808
-
--- | Pinch gesture updated
---
---     [C declaration]: @SDL_EVENT_PINCH_UPDATE@, defined at @SDL3\/SDL_events.h 223:5@
-pattern SDL_EVENT_PINCH_UPDATE :: SDL_EventType
-pattern SDL_EVENT_PINCH_UPDATE = SDL_EventType 1809
-
--- | Pinch gesture ended
---
---     [C declaration]: @SDL_EVENT_PINCH_END@, defined at @SDL3\/SDL_events.h 224:5@
-pattern SDL_EVENT_PINCH_END :: SDL_EventType
-pattern SDL_EVENT_PINCH_END = SDL_EventType 1810
-
--- | The clipboard changed
---
---     [C declaration]: @SDL_EVENT_CLIPBOARD_UPDATE@, defined at @SDL3\/SDL_events.h 229:5@
-pattern SDL_EVENT_CLIPBOARD_UPDATE :: SDL_EventType
-pattern SDL_EVENT_CLIPBOARD_UPDATE = SDL_EventType 2304
-
--- | The system requests a file open
---
---     [C declaration]: @SDL_EVENT_DROP_FILE@, defined at @SDL3\/SDL_events.h 232:5@
-pattern SDL_EVENT_DROP_FILE :: SDL_EventType
-pattern SDL_EVENT_DROP_FILE = SDL_EventType 4096
-
--- | text\/plain drag-and-drop event
---
---     [C declaration]: @SDL_EVENT_DROP_TEXT@, defined at @SDL3\/SDL_events.h 233:5@
-pattern SDL_EVENT_DROP_TEXT :: SDL_EventType
-pattern SDL_EVENT_DROP_TEXT = SDL_EventType 4097
-
--- | A new set of drops is beginning (NULL filename)
---
---     [C declaration]: @SDL_EVENT_DROP_BEGIN@, defined at @SDL3\/SDL_events.h 234:5@
-pattern SDL_EVENT_DROP_BEGIN :: SDL_EventType
-pattern SDL_EVENT_DROP_BEGIN = SDL_EventType 4098
-
--- | Current set of drops is now complete (NULL filename)
---
---     [C declaration]: @SDL_EVENT_DROP_COMPLETE@, defined at @SDL3\/SDL_events.h 235:5@
-pattern SDL_EVENT_DROP_COMPLETE :: SDL_EventType
-pattern SDL_EVENT_DROP_COMPLETE = SDL_EventType 4099
-
--- | Position while moving over the window
---
---     [C declaration]: @SDL_EVENT_DROP_POSITION@, defined at @SDL3\/SDL_events.h 236:5@
-pattern SDL_EVENT_DROP_POSITION :: SDL_EventType
-pattern SDL_EVENT_DROP_POSITION = SDL_EventType 4100
-
--- | A new audio device is available
---
---     [C declaration]: @SDL_EVENT_AUDIO_DEVICE_ADDED@, defined at @SDL3\/SDL_events.h 239:5@
-pattern SDL_EVENT_AUDIO_DEVICE_ADDED :: SDL_EventType
-pattern SDL_EVENT_AUDIO_DEVICE_ADDED = SDL_EventType 4352
-
--- | An audio device has been removed.
---
---     [C declaration]: @SDL_EVENT_AUDIO_DEVICE_REMOVED@, defined at @SDL3\/SDL_events.h 240:5@
-pattern SDL_EVENT_AUDIO_DEVICE_REMOVED :: SDL_EventType
-pattern SDL_EVENT_AUDIO_DEVICE_REMOVED = SDL_EventType 4353
-
--- | An audio device\'s format has been changed by the system.
---
---     [C declaration]: @SDL_EVENT_AUDIO_DEVICE_FORMAT_CHANGED@, defined at @SDL3\/SDL_events.h 241:5@
-pattern SDL_EVENT_AUDIO_DEVICE_FORMAT_CHANGED :: SDL_EventType
-pattern SDL_EVENT_AUDIO_DEVICE_FORMAT_CHANGED = SDL_EventType 4354
-
--- | A sensor was updated
---
---     [C declaration]: @SDL_EVENT_SENSOR_UPDATE@, defined at @SDL3\/SDL_events.h 244:5@
-pattern SDL_EVENT_SENSOR_UPDATE :: SDL_EventType
-pattern SDL_EVENT_SENSOR_UPDATE = SDL_EventType 4608
-
--- | Pressure-sensitive pen has become available
---
---     [C declaration]: @SDL_EVENT_PEN_PROXIMITY_IN@, defined at @SDL3\/SDL_events.h 247:5@
-pattern SDL_EVENT_PEN_PROXIMITY_IN :: SDL_EventType
-pattern SDL_EVENT_PEN_PROXIMITY_IN = SDL_EventType 4864
-
--- | Pressure-sensitive pen has become unavailable
---
---     [C declaration]: @SDL_EVENT_PEN_PROXIMITY_OUT@, defined at @SDL3\/SDL_events.h 248:5@
-pattern SDL_EVENT_PEN_PROXIMITY_OUT :: SDL_EventType
-pattern SDL_EVENT_PEN_PROXIMITY_OUT = SDL_EventType 4865
-
--- | Pressure-sensitive pen touched drawing surface
---
---     [C declaration]: @SDL_EVENT_PEN_DOWN@, defined at @SDL3\/SDL_events.h 249:5@
-pattern SDL_EVENT_PEN_DOWN :: SDL_EventType
-pattern SDL_EVENT_PEN_DOWN = SDL_EventType 4866
-
--- | Pressure-sensitive pen stopped touching drawing surface
---
---     [C declaration]: @SDL_EVENT_PEN_UP@, defined at @SDL3\/SDL_events.h 250:5@
-pattern SDL_EVENT_PEN_UP :: SDL_EventType
-pattern SDL_EVENT_PEN_UP = SDL_EventType 4867
-
--- | Pressure-sensitive pen button pressed
---
---     [C declaration]: @SDL_EVENT_PEN_BUTTON_DOWN@, defined at @SDL3\/SDL_events.h 251:5@
-pattern SDL_EVENT_PEN_BUTTON_DOWN :: SDL_EventType
-pattern SDL_EVENT_PEN_BUTTON_DOWN = SDL_EventType 4868
-
--- | Pressure-sensitive pen button released
---
---     [C declaration]: @SDL_EVENT_PEN_BUTTON_UP@, defined at @SDL3\/SDL_events.h 252:5@
-pattern SDL_EVENT_PEN_BUTTON_UP :: SDL_EventType
-pattern SDL_EVENT_PEN_BUTTON_UP = SDL_EventType 4869
-
--- | Pressure-sensitive pen is moving on the tablet
---
---     [C declaration]: @SDL_EVENT_PEN_MOTION@, defined at @SDL3\/SDL_events.h 253:5@
-pattern SDL_EVENT_PEN_MOTION :: SDL_EventType
-pattern SDL_EVENT_PEN_MOTION = SDL_EventType 4870
-
--- | Pressure-sensitive pen angle\/pressure\/etc changed
---
---     [C declaration]: @SDL_EVENT_PEN_AXIS@, defined at @SDL3\/SDL_events.h 254:5@
-pattern SDL_EVENT_PEN_AXIS :: SDL_EventType
-pattern SDL_EVENT_PEN_AXIS = SDL_EventType 4871
-
--- | A new camera device is available
---
---     [C declaration]: @SDL_EVENT_CAMERA_DEVICE_ADDED@, defined at @SDL3\/SDL_events.h 257:5@
-pattern SDL_EVENT_CAMERA_DEVICE_ADDED :: SDL_EventType
-pattern SDL_EVENT_CAMERA_DEVICE_ADDED = SDL_EventType 5120
-
--- | A camera device has been removed.
---
---     [C declaration]: @SDL_EVENT_CAMERA_DEVICE_REMOVED@, defined at @SDL3\/SDL_events.h 258:5@
-pattern SDL_EVENT_CAMERA_DEVICE_REMOVED :: SDL_EventType
-pattern SDL_EVENT_CAMERA_DEVICE_REMOVED = SDL_EventType 5121
-
--- | A camera device has been approved for use by the user.
---
---     [C declaration]: @SDL_EVENT_CAMERA_DEVICE_APPROVED@, defined at @SDL3\/SDL_events.h 259:5@
-pattern SDL_EVENT_CAMERA_DEVICE_APPROVED :: SDL_EventType
-pattern SDL_EVENT_CAMERA_DEVICE_APPROVED = SDL_EventType 5122
-
--- | A camera device has been denied for use by the user.
---
---     [C declaration]: @SDL_EVENT_CAMERA_DEVICE_DENIED@, defined at @SDL3\/SDL_events.h 260:5@
-pattern SDL_EVENT_CAMERA_DEVICE_DENIED :: SDL_EventType
-pattern SDL_EVENT_CAMERA_DEVICE_DENIED = SDL_EventType 5123
-
--- | The render targets have been reset and their contents need to be updated
---
---     [C declaration]: @SDL_EVENT_RENDER_TARGETS_RESET@, defined at @SDL3\/SDL_events.h 263:5@
-pattern SDL_EVENT_RENDER_TARGETS_RESET :: SDL_EventType
-pattern SDL_EVENT_RENDER_TARGETS_RESET = SDL_EventType 8192
-
--- | The device has been reset and all textures need to be recreated
---
---     [C declaration]: @SDL_EVENT_RENDER_DEVICE_RESET@, defined at @SDL3\/SDL_events.h 264:5@
-pattern SDL_EVENT_RENDER_DEVICE_RESET :: SDL_EventType
-pattern SDL_EVENT_RENDER_DEVICE_RESET = SDL_EventType 8193
-
--- | The device has been lost and can\'t be recovered.
---
---     [C declaration]: @SDL_EVENT_RENDER_DEVICE_LOST@, defined at @SDL3\/SDL_events.h 265:5@
-pattern SDL_EVENT_RENDER_DEVICE_LOST :: SDL_EventType
-pattern SDL_EVENT_RENDER_DEVICE_LOST = SDL_EventType 8194
-
--- | [C declaration]: @SDL_EVENT_PRIVATE0@, defined at @SDL3\/SDL_events.h 268:5@
-pattern SDL_EVENT_PRIVATE0 :: SDL_EventType
-pattern SDL_EVENT_PRIVATE0 = SDL_EventType 16384
-
--- | [C declaration]: @SDL_EVENT_PRIVATE1@, defined at @SDL3\/SDL_events.h 269:5@
-pattern SDL_EVENT_PRIVATE1 :: SDL_EventType
-pattern SDL_EVENT_PRIVATE1 = SDL_EventType 16385
-
--- | [C declaration]: @SDL_EVENT_PRIVATE2@, defined at @SDL3\/SDL_events.h 270:5@
-pattern SDL_EVENT_PRIVATE2 :: SDL_EventType
-pattern SDL_EVENT_PRIVATE2 = SDL_EventType 16386
-
--- | [C declaration]: @SDL_EVENT_PRIVATE3@, defined at @SDL3\/SDL_events.h 271:5@
-pattern SDL_EVENT_PRIVATE3 :: SDL_EventType
-pattern SDL_EVENT_PRIVATE3 = SDL_EventType 16387
-
--- | Signals the end of an event poll cycle
---
---     [C declaration]: @SDL_EVENT_POLL_SENTINEL@, defined at @SDL3\/SDL_events.h 274:5@
-pattern SDL_EVENT_POLL_SENTINEL :: SDL_EventType
-pattern SDL_EVENT_POLL_SENTINEL = SDL_EventType 32512
-
--- | Events SDL_EVENT_USER through SDL_EVENT_LAST are for your use, and should be allocated with @SDL_RegisterEvents()@
---
---     [C declaration]: @SDL_EVENT_USER@, defined at @SDL3\/SDL_events.h 279:5@
-pattern SDL_EVENT_USER :: SDL_EventType
-pattern SDL_EVENT_USER = SDL_EventType 32768
-
--- | This last event is only for bounding internal arrays
---
---     [C declaration]: @SDL_EVENT_LAST@, defined at @SDL3\/SDL_events.h 284:5@
-pattern SDL_EVENT_LAST :: SDL_EventType
-pattern SDL_EVENT_LAST = SDL_EventType 65535
-
--- | [C declaration]: @SDL_EVENT_ENUM_PADDING@, defined at @SDL3\/SDL_events.h 287:5@
-pattern SDL_EVENT_ENUM_PADDING :: SDL_EventType
-pattern SDL_EVENT_ENUM_PADDING = SDL_EventType 2147483647
-
--- | Fields shared by every event
---
---     @since 3.2.0
---
---     [C declaration]: @struct SDL_CommonEvent@, defined at @SDL3\/SDL_events.h 296:16@
-data SDL_CommonEvent = SDL_CommonEvent
-  { type' :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ Event type, shared with all events, Uint32 to cover user events which are not in the 'SDL_EventType' enumeration
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 298:12@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 299:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 300:12@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_CommonEvent where
-  staticSizeOf = \_ -> (16 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_CommonEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_CommonEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-
-instance Marshal.WriteRaw SDL_CommonEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_CommonEvent type'2 reserved3 timestamp4 ->
-            HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-              >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-              >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-
-deriving via Marshal.EquivStorable SDL_CommonEvent instance BG.Storable SDL_CommonEvent
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "type'" SDL_CommonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_CommonEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "type'" (BG.Ptr SDL_CommonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_CommonEvent "type'" where
-  type
-    CFieldType SDL_CommonEvent "type'" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_CommonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_CommonEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_CommonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_CommonEvent "reserved" where
-  type
-    CFieldType SDL_CommonEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_CommonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_CommonEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_CommonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_CommonEvent "timestamp" where
-  type
-    CFieldType SDL_CommonEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
--- | Display state change event data (event.display.*)
---
---     @since 3.2.0
---
---     [C declaration]: @struct SDL_DisplayEvent@, defined at @SDL3\/SDL_events.h 308:16@
-data SDL_DisplayEvent = SDL_DisplayEvent
-  { type' :: SDL_EventType
-  -- ^ SDL_EVENT_DISPLAY_*
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 310:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 311:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 312:12@
-  , displayID :: SDL3.Sys.Bindgen.Video.SDL_DisplayID
-  -- ^ The associated display
-  --
-  --          [C declaration]: @displayID@, defined at @SDL3\/SDL_events.h 313:19@
-  , data1 :: SDL3.Sys.Bindgen.Stdinc.Sint32
-  -- ^ event dependent data
-  --
-  --          [C declaration]: @data1@, defined at @SDL3\/SDL_events.h 314:12@
-  , data2 :: SDL3.Sys.Bindgen.Stdinc.Sint32
-  -- ^ event dependent data
-  --
-  --          [C declaration]: @data2@, defined at @SDL3\/SDL_events.h 315:12@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_DisplayEvent where
-  staticSizeOf = \_ -> (32 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_DisplayEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_DisplayEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"displayID") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"data1") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"data2") ptr0
-
-instance Marshal.WriteRaw SDL_DisplayEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_DisplayEvent type'2 reserved3 timestamp4 displayID5 data16 data27 ->
-            HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-              >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-              >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-              >> HasCField.writeRaw (BG.Proxy @"displayID") ptr0 displayID5
-              >> HasCField.writeRaw (BG.Proxy @"data1") ptr0 data16
-              >> HasCField.writeRaw (BG.Proxy @"data2") ptr0 data27
-
-deriving via Marshal.EquivStorable SDL_DisplayEvent instance BG.Storable SDL_DisplayEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_DisplayEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_DisplayEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , displayID = BG.getField @"displayID" x0
-            , data1 = BG.getField @"data1" x0
-            , data2 = BG.getField @"data2" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_DisplayEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_DisplayEvent "type'" where
-  type
-    CFieldType SDL_DisplayEvent "type'" =
-      SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_DisplayEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_DisplayEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , displayID = BG.getField @"displayID" x0
-            , data1 = BG.getField @"data1" x0
-            , data2 = BG.getField @"data2" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_DisplayEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_DisplayEvent "reserved" where
-  type
-    CFieldType SDL_DisplayEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_DisplayEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_DisplayEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , displayID = BG.getField @"displayID" x0
-            , data1 = BG.getField @"data1" x0
-            , data2 = BG.getField @"data2" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_DisplayEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_DisplayEvent "timestamp" where
-  type
-    CFieldType SDL_DisplayEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_DisplayID)
-  => BG.CompatHasField.HasField "displayID" SDL_DisplayEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_DisplayEvent
-            { displayID = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , data1 = BG.getField @"data1" x0
-            , data2 = BG.getField @"data2" x0
-            }
-      , BG.getField @"displayID" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_DisplayID)
-  => BG.HasField "displayID" (BG.Ptr SDL_DisplayEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"displayID")
-
-instance HasCField.HasCField SDL_DisplayEvent "displayID" where
-  type
-    CFieldType SDL_DisplayEvent "displayID" =
-      SDL3.Sys.Bindgen.Video.SDL_DisplayID
-
-  offset# = \_ -> \_ -> 16
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
-  => BG.CompatHasField.HasField "data1" SDL_DisplayEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_DisplayEvent
-            { data1 = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , displayID = BG.getField @"displayID" x0
-            , data2 = BG.getField @"data2" x0
-            }
-      , BG.getField @"data1" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
-  => BG.HasField "data1" (BG.Ptr SDL_DisplayEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"data1")
-
-instance HasCField.HasCField SDL_DisplayEvent "data1" where
-  type
-    CFieldType SDL_DisplayEvent "data1" =
-      SDL3.Sys.Bindgen.Stdinc.Sint32
-
-  offset# = \_ -> \_ -> 20
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
-  => BG.CompatHasField.HasField "data2" SDL_DisplayEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_DisplayEvent
-            { data2 = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , displayID = BG.getField @"displayID" x0
-            , data1 = BG.getField @"data1" x0
-            }
-      , BG.getField @"data2" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
-  => BG.HasField "data2" (BG.Ptr SDL_DisplayEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"data2")
-
-instance HasCField.HasCField SDL_DisplayEvent "data2" where
-  type
-    CFieldType SDL_DisplayEvent "data2" =
-      SDL3.Sys.Bindgen.Stdinc.Sint32
-
-  offset# = \_ -> \_ -> 24
-
--- | Window state change event data (event.window.*)
---
---     @since 3.2.0
---
---     [C declaration]: @struct SDL_WindowEvent@, defined at @SDL3\/SDL_events.h 323:16@
-data SDL_WindowEvent = SDL_WindowEvent
-  { type' :: SDL_EventType
-  -- ^ SDL_EVENT_WINDOW_*
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 325:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 326:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 327:12@
-  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
-  -- ^ The associated window
-  --
-  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 328:18@
-  , data1 :: SDL3.Sys.Bindgen.Stdinc.Sint32
-  -- ^ event dependent data
-  --
-  --          [C declaration]: @data1@, defined at @SDL3\/SDL_events.h 329:12@
-  , data2 :: SDL3.Sys.Bindgen.Stdinc.Sint32
-  -- ^ event dependent data
-  --
-  --          [C declaration]: @data2@, defined at @SDL3\/SDL_events.h 330:12@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_WindowEvent where
-  staticSizeOf = \_ -> (32 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_WindowEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_WindowEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"data1") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"data2") ptr0
-
-instance Marshal.WriteRaw SDL_WindowEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_WindowEvent type'2 reserved3 timestamp4 windowID5 data16 data27 ->
-            HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-              >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-              >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-              >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID5
-              >> HasCField.writeRaw (BG.Proxy @"data1") ptr0 data16
-              >> HasCField.writeRaw (BG.Proxy @"data2") ptr0 data27
-
-deriving via Marshal.EquivStorable SDL_WindowEvent instance BG.Storable SDL_WindowEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_WindowEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_WindowEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , data1 = BG.getField @"data1" x0
-            , data2 = BG.getField @"data2" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_WindowEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_WindowEvent "type'" where
-  type
-    CFieldType SDL_WindowEvent "type'" =
-      SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_WindowEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_WindowEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , data1 = BG.getField @"data1" x0
-            , data2 = BG.getField @"data2" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_WindowEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_WindowEvent "reserved" where
-  type
-    CFieldType SDL_WindowEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_WindowEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_WindowEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , windowID = BG.getField @"windowID" x0
-            , data1 = BG.getField @"data1" x0
-            , data2 = BG.getField @"data2" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_WindowEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_WindowEvent "timestamp" where
-  type
-    CFieldType SDL_WindowEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.CompatHasField.HasField "windowID" SDL_WindowEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_WindowEvent
-            { windowID = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , data1 = BG.getField @"data1" x0
-            , data2 = BG.getField @"data2" x0
-            }
-      , BG.getField @"windowID" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.HasField "windowID" (BG.Ptr SDL_WindowEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"windowID")
-
-instance HasCField.HasCField SDL_WindowEvent "windowID" where
-  type
-    CFieldType SDL_WindowEvent "windowID" =
-      SDL3.Sys.Bindgen.Video.SDL_WindowID
-
-  offset# = \_ -> \_ -> 16
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
-  => BG.CompatHasField.HasField "data1" SDL_WindowEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_WindowEvent
-            { data1 = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , data2 = BG.getField @"data2" x0
-            }
-      , BG.getField @"data1" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
-  => BG.HasField "data1" (BG.Ptr SDL_WindowEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"data1")
-
-instance HasCField.HasCField SDL_WindowEvent "data1" where
-  type
-    CFieldType SDL_WindowEvent "data1" =
-      SDL3.Sys.Bindgen.Stdinc.Sint32
-
-  offset# = \_ -> \_ -> 20
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
-  => BG.CompatHasField.HasField "data2" SDL_WindowEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_WindowEvent
-            { data2 = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , data1 = BG.getField @"data1" x0
-            }
-      , BG.getField @"data2" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
-  => BG.HasField "data2" (BG.Ptr SDL_WindowEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"data2")
-
-instance HasCField.HasCField SDL_WindowEvent "data2" where
-  type
-    CFieldType SDL_WindowEvent "data2" =
-      SDL3.Sys.Bindgen.Stdinc.Sint32
-
-  offset# = \_ -> \_ -> 24
-
--- | Keyboard device event structure (event.kdevice.*)
---
---     @since 3.2.0
---
---     [C declaration]: @struct SDL_KeyboardDeviceEvent@, defined at @SDL3\/SDL_events.h 338:16@
-data SDL_KeyboardDeviceEvent = SDL_KeyboardDeviceEvent
-  { type' :: SDL_EventType
-  -- ^ SDL_EVENT_KEYBOARD_ADDED or SDL_EVENT_KEYBOARD_REMOVED
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 340:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 341:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 342:12@
-  , which :: SDL3.Sys.Bindgen.Keyboard.SDL_KeyboardID
-  -- ^ The keyboard instance id
-  --
-  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 343:20@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_KeyboardDeviceEvent where
-  staticSizeOf = \_ -> (24 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_KeyboardDeviceEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_KeyboardDeviceEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
-
-instance Marshal.WriteRaw SDL_KeyboardDeviceEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_KeyboardDeviceEvent type'2 reserved3 timestamp4 which5 ->
-            HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-              >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-              >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-              >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which5
-
-deriving via
-  Marshal.EquivStorable SDL_KeyboardDeviceEvent
-  instance
-    BG.Storable SDL_KeyboardDeviceEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_KeyboardDeviceEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_KeyboardDeviceEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_KeyboardDeviceEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_KeyboardDeviceEvent "type'" where
-  type
-    CFieldType SDL_KeyboardDeviceEvent "type'" =
-      SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_KeyboardDeviceEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_KeyboardDeviceEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_KeyboardDeviceEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_KeyboardDeviceEvent "reserved" where
-  type
-    CFieldType SDL_KeyboardDeviceEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_KeyboardDeviceEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_KeyboardDeviceEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , which = BG.getField @"which" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_KeyboardDeviceEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_KeyboardDeviceEvent "timestamp" where
-  type
-    CFieldType SDL_KeyboardDeviceEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Keyboard.SDL_KeyboardID)
-  => BG.CompatHasField.HasField "which" SDL_KeyboardDeviceEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_KeyboardDeviceEvent
-            { which = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            }
-      , BG.getField @"which" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Keyboard.SDL_KeyboardID)
-  => BG.HasField "which" (BG.Ptr SDL_KeyboardDeviceEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"which")
-
-instance HasCField.HasCField SDL_KeyboardDeviceEvent "which" where
-  type
-    CFieldType SDL_KeyboardDeviceEvent "which" =
-      SDL3.Sys.Bindgen.Keyboard.SDL_KeyboardID
-
-  offset# = \_ -> \_ -> 16
-
--- | Keyboard button event structure (event.key.*)
---
---     The @key@ is the base SDL_Keycode generated by pressing the @scancode@ using the current keyboard layout, applying any options specified in SDL_HINT_KEYCODE_OPTIONS. You can get the SDL_Keycode corresponding to the event scancode and modifiers directly from the keyboard layout, bypassing SDL_HINT_KEYCODE_OPTIONS, by calling SDL_GetKeyFromScancode().
---
---     @since 3.2.0
---
---     [See also]: SDL_GetKeyFromScancode, SDL_HINT_KEYCODE_OPTIONS
---
---     [C declaration]: @struct SDL_KeyboardEvent@, defined at @SDL3\/SDL_events.h 360:16@
-data SDL_KeyboardEvent = SDL_KeyboardEvent
-  { type' :: SDL_EventType
-  -- ^ SDL_EVENT_KEY_DOWN or SDL_EVENT_KEY_UP
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 362:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 363:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 364:12@
-  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
-  -- ^ The window with keyboard focus, if any
-  --
-  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 365:18@
-  , which :: SDL3.Sys.Bindgen.Keyboard.SDL_KeyboardID
-  -- ^ The keyboard instance id, or 0 if unknown or virtual
-  --
-  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 366:20@
-  , scancode :: SDL3.Sys.Bindgen.Scancode.SDL_Scancode
-  -- ^ SDL physical key code
-  --
-  --          [C declaration]: @scancode@, defined at @SDL3\/SDL_events.h 367:18@
-  , key :: SDL3.Sys.Bindgen.Keycode.SDL_Keycode
-  -- ^ SDL virtual key code
-  --
-  --          [C declaration]: @key@, defined at @SDL3\/SDL_events.h 368:17@
-  , mod :: SDL3.Sys.Bindgen.Keycode.SDL_Keymod
-  -- ^ current key modifiers
-  --
-  --          [C declaration]: @mod@, defined at @SDL3\/SDL_events.h 369:16@
-  , raw :: SDL3.Sys.Bindgen.Stdinc.Uint16
-  -- ^ The platform dependent scancode for this event
-  --
-  --          [C declaration]: @raw@, defined at @SDL3\/SDL_events.h 370:12@
-  , down :: BG.CBool
-  -- ^ true if the key is pressed
-  --
-  --          [C declaration]: @down@, defined at @SDL3\/SDL_events.h 371:10@
-  , repeat :: BG.CBool
-  -- ^ true if this is a key repeat
-  --
-  --          [C declaration]: @repeat@, defined at @SDL3\/SDL_events.h 372:10@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_KeyboardEvent where
-  staticSizeOf = \_ -> (40 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_KeyboardEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_KeyboardEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"scancode") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"key") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"mod") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"raw") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"down") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"repeat") ptr0
-
-instance Marshal.WriteRaw SDL_KeyboardEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_KeyboardEvent
-            type'2
-            reserved3
-            timestamp4
-            windowID5
-            which6
-            scancode7
-            key8
-            mod9
-            raw10
-            down11
-            repeat12 ->
-              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-                >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID5
-                >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which6
-                >> HasCField.writeRaw (BG.Proxy @"scancode") ptr0 scancode7
-                >> HasCField.writeRaw (BG.Proxy @"key") ptr0 key8
-                >> HasCField.writeRaw (BG.Proxy @"mod") ptr0 mod9
-                >> HasCField.writeRaw (BG.Proxy @"raw") ptr0 raw10
-                >> HasCField.writeRaw (BG.Proxy @"down") ptr0 down11
-                >> HasCField.writeRaw (BG.Proxy @"repeat") ptr0 repeat12
-
-deriving via Marshal.EquivStorable SDL_KeyboardEvent instance BG.Storable SDL_KeyboardEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_KeyboardEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_KeyboardEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , scancode = BG.getField @"scancode" x0
-            , key = BG.getField @"key" x0
-            , mod = BG.getField @"mod" x0
-            , raw = BG.getField @"raw" x0
-            , down = BG.getField @"down" x0
-            , repeat = BG.getField @"repeat" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_KeyboardEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_KeyboardEvent "type'" where
-  type
-    CFieldType SDL_KeyboardEvent "type'" =
-      SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_KeyboardEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_KeyboardEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , scancode = BG.getField @"scancode" x0
-            , key = BG.getField @"key" x0
-            , mod = BG.getField @"mod" x0
-            , raw = BG.getField @"raw" x0
-            , down = BG.getField @"down" x0
-            , repeat = BG.getField @"repeat" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_KeyboardEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_KeyboardEvent "reserved" where
-  type
-    CFieldType SDL_KeyboardEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_KeyboardEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_KeyboardEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , scancode = BG.getField @"scancode" x0
-            , key = BG.getField @"key" x0
-            , mod = BG.getField @"mod" x0
-            , raw = BG.getField @"raw" x0
-            , down = BG.getField @"down" x0
-            , repeat = BG.getField @"repeat" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_KeyboardEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_KeyboardEvent "timestamp" where
-  type
-    CFieldType SDL_KeyboardEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.CompatHasField.HasField "windowID" SDL_KeyboardEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_KeyboardEvent
-            { windowID = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , scancode = BG.getField @"scancode" x0
-            , key = BG.getField @"key" x0
-            , mod = BG.getField @"mod" x0
-            , raw = BG.getField @"raw" x0
-            , down = BG.getField @"down" x0
-            , repeat = BG.getField @"repeat" x0
-            }
-      , BG.getField @"windowID" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.HasField "windowID" (BG.Ptr SDL_KeyboardEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"windowID")
-
-instance HasCField.HasCField SDL_KeyboardEvent "windowID" where
-  type
-    CFieldType SDL_KeyboardEvent "windowID" =
-      SDL3.Sys.Bindgen.Video.SDL_WindowID
-
-  offset# = \_ -> \_ -> 16
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Keyboard.SDL_KeyboardID)
-  => BG.CompatHasField.HasField "which" SDL_KeyboardEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_KeyboardEvent
-            { which = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , scancode = BG.getField @"scancode" x0
-            , key = BG.getField @"key" x0
-            , mod = BG.getField @"mod" x0
-            , raw = BG.getField @"raw" x0
-            , down = BG.getField @"down" x0
-            , repeat = BG.getField @"repeat" x0
-            }
-      , BG.getField @"which" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Keyboard.SDL_KeyboardID)
-  => BG.HasField "which" (BG.Ptr SDL_KeyboardEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"which")
-
-instance HasCField.HasCField SDL_KeyboardEvent "which" where
-  type
-    CFieldType SDL_KeyboardEvent "which" =
-      SDL3.Sys.Bindgen.Keyboard.SDL_KeyboardID
-
-  offset# = \_ -> \_ -> 20
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Scancode.SDL_Scancode)
-  => BG.CompatHasField.HasField "scancode" SDL_KeyboardEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_KeyboardEvent
-            { scancode = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , key = BG.getField @"key" x0
-            , mod = BG.getField @"mod" x0
-            , raw = BG.getField @"raw" x0
-            , down = BG.getField @"down" x0
-            , repeat = BG.getField @"repeat" x0
-            }
-      , BG.getField @"scancode" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Scancode.SDL_Scancode)
-  => BG.HasField "scancode" (BG.Ptr SDL_KeyboardEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"scancode")
-
-instance HasCField.HasCField SDL_KeyboardEvent "scancode" where
-  type
-    CFieldType SDL_KeyboardEvent "scancode" =
-      SDL3.Sys.Bindgen.Scancode.SDL_Scancode
-
-  offset# = \_ -> \_ -> 24
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Keycode.SDL_Keycode)
-  => BG.CompatHasField.HasField "key" SDL_KeyboardEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_KeyboardEvent
-            { key = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , scancode = BG.getField @"scancode" x0
-            , mod = BG.getField @"mod" x0
-            , raw = BG.getField @"raw" x0
-            , down = BG.getField @"down" x0
-            , repeat = BG.getField @"repeat" x0
-            }
-      , BG.getField @"key" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Keycode.SDL_Keycode)
-  => BG.HasField "key" (BG.Ptr SDL_KeyboardEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"key")
-
-instance HasCField.HasCField SDL_KeyboardEvent "key" where
-  type
-    CFieldType SDL_KeyboardEvent "key" =
-      SDL3.Sys.Bindgen.Keycode.SDL_Keycode
-
-  offset# = \_ -> \_ -> 28
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Keycode.SDL_Keymod)
-  => BG.CompatHasField.HasField "mod" SDL_KeyboardEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_KeyboardEvent
-            { mod = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , scancode = BG.getField @"scancode" x0
-            , key = BG.getField @"key" x0
-            , raw = BG.getField @"raw" x0
-            , down = BG.getField @"down" x0
-            , repeat = BG.getField @"repeat" x0
-            }
-      , BG.getField @"mod" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Keycode.SDL_Keymod)
-  => BG.HasField "mod" (BG.Ptr SDL_KeyboardEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"mod")
-
-instance HasCField.HasCField SDL_KeyboardEvent "mod" where
-  type
-    CFieldType SDL_KeyboardEvent "mod" =
-      SDL3.Sys.Bindgen.Keycode.SDL_Keymod
-
-  offset# = \_ -> \_ -> 32
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
-  => BG.CompatHasField.HasField "raw" SDL_KeyboardEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_KeyboardEvent
-            { raw = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , scancode = BG.getField @"scancode" x0
-            , key = BG.getField @"key" x0
-            , mod = BG.getField @"mod" x0
-            , down = BG.getField @"down" x0
-            , repeat = BG.getField @"repeat" x0
-            }
-      , BG.getField @"raw" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
-  => BG.HasField "raw" (BG.Ptr SDL_KeyboardEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"raw")
-
-instance HasCField.HasCField SDL_KeyboardEvent "raw" where
-  type
-    CFieldType SDL_KeyboardEvent "raw" =
-      SDL3.Sys.Bindgen.Stdinc.Uint16
-
-  offset# = \_ -> \_ -> 34
-
-instance
-  (ty ~ BG.CBool)
-  => BG.CompatHasField.HasField "down" SDL_KeyboardEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_KeyboardEvent
-            { down = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , scancode = BG.getField @"scancode" x0
-            , key = BG.getField @"key" x0
-            , mod = BG.getField @"mod" x0
-            , raw = BG.getField @"raw" x0
-            , repeat = BG.getField @"repeat" x0
-            }
-      , BG.getField @"down" x0
-      )
-
-instance
-  (ty ~ BG.CBool)
-  => BG.HasField "down" (BG.Ptr SDL_KeyboardEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"down")
-
-instance HasCField.HasCField SDL_KeyboardEvent "down" where
-  type CFieldType SDL_KeyboardEvent "down" = BG.CBool
-
-  offset# = \_ -> \_ -> 36
-
-instance
-  (ty ~ BG.CBool)
-  => BG.CompatHasField.HasField "repeat" SDL_KeyboardEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_KeyboardEvent
-            { repeat = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , scancode = BG.getField @"scancode" x0
-            , key = BG.getField @"key" x0
-            , mod = BG.getField @"mod" x0
-            , raw = BG.getField @"raw" x0
-            , down = BG.getField @"down" x0
-            }
-      , BG.getField @"repeat" x0
-      )
-
-instance
-  (ty ~ BG.CBool)
-  => BG.HasField "repeat" (BG.Ptr SDL_KeyboardEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"repeat")
-
-instance HasCField.HasCField SDL_KeyboardEvent "repeat" where
-  type CFieldType SDL_KeyboardEvent "repeat" = BG.CBool
-
-  offset# = \_ -> \_ -> 37
-
--- | Keyboard text editing event structure (event.edit.*)
---
---     The start cursor is the position, in UTF-8 characters, where new typing will be inserted into the editing text. The length is the number of UTF-8 characters that will be replaced by new typing.
---
---     @since 3.2.0
---
---     [C declaration]: @struct SDL_TextEditingEvent@, defined at @SDL3\/SDL_events.h 384:16@
-data SDL_TextEditingEvent = SDL_TextEditingEvent
-  { type' :: SDL_EventType
-  -- ^ SDL_EVENT_TEXT_EDITING
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 386:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 387:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 388:12@
-  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
-  -- ^ The window with keyboard focus, if any
-  --
-  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 389:18@
-  , text :: PtrConst.PtrConst BG.CChar
-  -- ^ The editing text
-  --
-  --          [C declaration]: @text@, defined at @SDL3\/SDL_events.h 390:17@
-  , start :: SDL3.Sys.Bindgen.Stdinc.Sint32
-  -- ^ The start cursor of selected editing text, or -1 if not set
-  --
-  --          [C declaration]: @start@, defined at @SDL3\/SDL_events.h 391:12@
-  , length :: SDL3.Sys.Bindgen.Stdinc.Sint32
-  -- ^ The length of selected editing text, or -1 if not set
-  --
-  --          [C declaration]: @length@, defined at @SDL3\/SDL_events.h 392:12@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_TextEditingEvent where
-  staticSizeOf = \_ -> (40 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_TextEditingEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_TextEditingEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"text") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"start") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"length") ptr0
-
-instance Marshal.WriteRaw SDL_TextEditingEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_TextEditingEvent
-            type'2
-            reserved3
-            timestamp4
-            windowID5
-            text6
-            start7
-            length8 ->
-              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-                >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID5
-                >> HasCField.writeRaw (BG.Proxy @"text") ptr0 text6
-                >> HasCField.writeRaw (BG.Proxy @"start") ptr0 start7
-                >> HasCField.writeRaw (BG.Proxy @"length") ptr0 length8
-
-deriving via Marshal.EquivStorable SDL_TextEditingEvent instance BG.Storable SDL_TextEditingEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_TextEditingEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_TextEditingEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , text = BG.getField @"text" x0
-            , start = BG.getField @"start" x0
-            , length = BG.getField @"length" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_TextEditingEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_TextEditingEvent "type'" where
-  type
-    CFieldType SDL_TextEditingEvent "type'" =
-      SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_TextEditingEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_TextEditingEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , text = BG.getField @"text" x0
-            , start = BG.getField @"start" x0
-            , length = BG.getField @"length" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_TextEditingEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_TextEditingEvent "reserved" where
-  type
-    CFieldType SDL_TextEditingEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_TextEditingEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_TextEditingEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , windowID = BG.getField @"windowID" x0
-            , text = BG.getField @"text" x0
-            , start = BG.getField @"start" x0
-            , length = BG.getField @"length" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_TextEditingEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_TextEditingEvent "timestamp" where
-  type
-    CFieldType SDL_TextEditingEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.CompatHasField.HasField "windowID" SDL_TextEditingEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_TextEditingEvent
-            { windowID = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , text = BG.getField @"text" x0
-            , start = BG.getField @"start" x0
-            , length = BG.getField @"length" x0
-            }
-      , BG.getField @"windowID" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.HasField "windowID" (BG.Ptr SDL_TextEditingEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"windowID")
-
-instance HasCField.HasCField SDL_TextEditingEvent "windowID" where
-  type
-    CFieldType SDL_TextEditingEvent "windowID" =
-      SDL3.Sys.Bindgen.Video.SDL_WindowID
-
-  offset# = \_ -> \_ -> 16
-
-instance
-  (ty ~ PtrConst.PtrConst BG.CChar)
-  => BG.CompatHasField.HasField "text" SDL_TextEditingEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_TextEditingEvent
-            { text = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , start = BG.getField @"start" x0
-            , length = BG.getField @"length" x0
-            }
-      , BG.getField @"text" x0
-      )
-
-instance
-  (ty ~ PtrConst.PtrConst BG.CChar)
-  => BG.HasField "text" (BG.Ptr SDL_TextEditingEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"text")
-
-instance HasCField.HasCField SDL_TextEditingEvent "text" where
-  type
-    CFieldType SDL_TextEditingEvent "text" =
-      PtrConst.PtrConst BG.CChar
-
-  offset# = \_ -> \_ -> 24
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
-  => BG.CompatHasField.HasField "start" SDL_TextEditingEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_TextEditingEvent
-            { start = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , text = BG.getField @"text" x0
-            , length = BG.getField @"length" x0
-            }
-      , BG.getField @"start" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
-  => BG.HasField "start" (BG.Ptr SDL_TextEditingEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"start")
-
-instance HasCField.HasCField SDL_TextEditingEvent "start" where
-  type
-    CFieldType SDL_TextEditingEvent "start" =
-      SDL3.Sys.Bindgen.Stdinc.Sint32
-
-  offset# = \_ -> \_ -> 32
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
-  => BG.CompatHasField.HasField "length" SDL_TextEditingEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_TextEditingEvent
-            { length = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , text = BG.getField @"text" x0
-            , start = BG.getField @"start" x0
-            }
-      , BG.getField @"length" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
-  => BG.HasField "length" (BG.Ptr SDL_TextEditingEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"length")
-
-instance HasCField.HasCField SDL_TextEditingEvent "length" where
-  type
-    CFieldType SDL_TextEditingEvent "length" =
-      SDL3.Sys.Bindgen.Stdinc.Sint32
-
-  offset# = \_ -> \_ -> 36
-
--- | Keyboard IME candidates event structure (event.edit_candidates.*)
---
---     @since 3.2.0
---
---     [C declaration]: @struct SDL_TextEditingCandidatesEvent@, defined at @SDL3\/SDL_events.h 400:16@
-data SDL_TextEditingCandidatesEvent = SDL_TextEditingCandidatesEvent
-  { type' :: SDL_EventType
-  -- ^ SDL_EVENT_TEXT_EDITING_CANDIDATES
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 402:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 403:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 404:12@
-  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
-  -- ^ The window with keyboard focus, if any
-  --
-  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 405:18@
-  , candidates :: PtrConst.PtrConst (PtrConst.PtrConst BG.CChar)
-  -- ^ The list of candidates, or NULL if there are no candidates available
-  --
-  --          [C declaration]: @candidates@, defined at @SDL3\/SDL_events.h 406:25@
-  , num_candidates :: SDL3.Sys.Bindgen.Stdinc.Sint32
-  -- ^ The number of strings in @candidates@
-  --
-  --          [C declaration]: @num_candidates@, defined at @SDL3\/SDL_events.h 407:12@
-  , selected_candidate :: SDL3.Sys.Bindgen.Stdinc.Sint32
-  -- ^ The index of the selected candidate, or -1 if no candidate is selected
-  --
-  --          [C declaration]: @selected_candidate@, defined at @SDL3\/SDL_events.h 408:12@
-  , horizontal :: BG.CBool
-  -- ^ true if the list is horizontal, false if it\'s vertical
-  --
-  --          [C declaration]: @horizontal@, defined at @SDL3\/SDL_events.h 409:10@
-  , padding1 :: SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^ [C declaration]: @padding1@, defined at @SDL3\/SDL_events.h 410:11@
-  , padding2 :: SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^ [C declaration]: @padding2@, defined at @SDL3\/SDL_events.h 411:11@
-  , padding3 :: SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^ [C declaration]: @padding3@, defined at @SDL3\/SDL_events.h 412:11@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_TextEditingCandidatesEvent where
-  staticSizeOf = \_ -> (48 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_TextEditingCandidatesEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_TextEditingCandidatesEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"candidates") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"num_candidates") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"selected_candidate") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"horizontal") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"padding1") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"padding2") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"padding3") ptr0
-
-instance Marshal.WriteRaw SDL_TextEditingCandidatesEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_TextEditingCandidatesEvent
-            type'2
-            reserved3
-            timestamp4
-            windowID5
-            candidates6
-            num_candidates7
-            selected_candidate8
-            horizontal9
-            padding110
-            padding211
-            padding312 ->
-              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-                >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID5
-                >> HasCField.writeRaw (BG.Proxy @"candidates") ptr0 candidates6
-                >> HasCField.writeRaw (BG.Proxy @"num_candidates") ptr0 num_candidates7
-                >> HasCField.writeRaw (BG.Proxy @"selected_candidate") ptr0 selected_candidate8
-                >> HasCField.writeRaw (BG.Proxy @"horizontal") ptr0 horizontal9
-                >> HasCField.writeRaw (BG.Proxy @"padding1") ptr0 padding110
-                >> HasCField.writeRaw (BG.Proxy @"padding2") ptr0 padding211
-                >> HasCField.writeRaw (BG.Proxy @"padding3") ptr0 padding312
-
-deriving via
-  Marshal.EquivStorable SDL_TextEditingCandidatesEvent
-  instance
-    BG.Storable SDL_TextEditingCandidatesEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_TextEditingCandidatesEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_TextEditingCandidatesEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , candidates = BG.getField @"candidates" x0
-            , num_candidates = BG.getField @"num_candidates" x0
-            , selected_candidate = BG.getField @"selected_candidate" x0
-            , horizontal = BG.getField @"horizontal" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_TextEditingCandidatesEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_TextEditingCandidatesEvent "type'" where
-  type
-    CFieldType SDL_TextEditingCandidatesEvent "type'" =
-      SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_TextEditingCandidatesEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_TextEditingCandidatesEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , candidates = BG.getField @"candidates" x0
-            , num_candidates = BG.getField @"num_candidates" x0
-            , selected_candidate = BG.getField @"selected_candidate" x0
-            , horizontal = BG.getField @"horizontal" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_TextEditingCandidatesEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_TextEditingCandidatesEvent "reserved" where
-  type
-    CFieldType SDL_TextEditingCandidatesEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_TextEditingCandidatesEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_TextEditingCandidatesEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , windowID = BG.getField @"windowID" x0
-            , candidates = BG.getField @"candidates" x0
-            , num_candidates = BG.getField @"num_candidates" x0
-            , selected_candidate = BG.getField @"selected_candidate" x0
-            , horizontal = BG.getField @"horizontal" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_TextEditingCandidatesEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_TextEditingCandidatesEvent "timestamp" where
-  type
-    CFieldType SDL_TextEditingCandidatesEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.CompatHasField.HasField "windowID" SDL_TextEditingCandidatesEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_TextEditingCandidatesEvent
-            { windowID = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , candidates = BG.getField @"candidates" x0
-            , num_candidates = BG.getField @"num_candidates" x0
-            , selected_candidate = BG.getField @"selected_candidate" x0
-            , horizontal = BG.getField @"horizontal" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            }
-      , BG.getField @"windowID" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.HasField "windowID" (BG.Ptr SDL_TextEditingCandidatesEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"windowID")
-
-instance HasCField.HasCField SDL_TextEditingCandidatesEvent "windowID" where
-  type
-    CFieldType SDL_TextEditingCandidatesEvent "windowID" =
-      SDL3.Sys.Bindgen.Video.SDL_WindowID
-
-  offset# = \_ -> \_ -> 16
-
-instance
-  (ty ~ PtrConst.PtrConst (PtrConst.PtrConst BG.CChar))
-  => BG.CompatHasField.HasField "candidates" SDL_TextEditingCandidatesEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_TextEditingCandidatesEvent
-            { candidates = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , num_candidates = BG.getField @"num_candidates" x0
-            , selected_candidate = BG.getField @"selected_candidate" x0
-            , horizontal = BG.getField @"horizontal" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            }
-      , BG.getField @"candidates" x0
-      )
-
-instance
-  (ty ~ PtrConst.PtrConst (PtrConst.PtrConst BG.CChar))
-  => BG.HasField "candidates" (BG.Ptr SDL_TextEditingCandidatesEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"candidates")
-
-instance HasCField.HasCField SDL_TextEditingCandidatesEvent "candidates" where
-  type
-    CFieldType SDL_TextEditingCandidatesEvent "candidates" =
-      PtrConst.PtrConst (PtrConst.PtrConst BG.CChar)
-
-  offset# = \_ -> \_ -> 24
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
-  => BG.CompatHasField.HasField "num_candidates" SDL_TextEditingCandidatesEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_TextEditingCandidatesEvent
-            { num_candidates = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , candidates = BG.getField @"candidates" x0
-            , selected_candidate = BG.getField @"selected_candidate" x0
-            , horizontal = BG.getField @"horizontal" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            }
-      , BG.getField @"num_candidates" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
-  => BG.HasField "num_candidates" (BG.Ptr SDL_TextEditingCandidatesEvent) (BG.Ptr ty)
-  where
-  getField =
-    HasCField.fromPtr (BG.Proxy @"num_candidates")
-
-instance HasCField.HasCField SDL_TextEditingCandidatesEvent "num_candidates" where
-  type
-    CFieldType SDL_TextEditingCandidatesEvent "num_candidates" =
-      SDL3.Sys.Bindgen.Stdinc.Sint32
-
-  offset# = \_ -> \_ -> 32
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
-  => BG.CompatHasField.HasField "selected_candidate" SDL_TextEditingCandidatesEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_TextEditingCandidatesEvent
-            { selected_candidate = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , candidates = BG.getField @"candidates" x0
-            , num_candidates = BG.getField @"num_candidates" x0
-            , horizontal = BG.getField @"horizontal" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            }
-      , BG.getField @"selected_candidate" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
-  => BG.HasField "selected_candidate" (BG.Ptr SDL_TextEditingCandidatesEvent) (BG.Ptr ty)
-  where
-  getField =
-    HasCField.fromPtr (BG.Proxy @"selected_candidate")
-
-instance HasCField.HasCField SDL_TextEditingCandidatesEvent "selected_candidate" where
-  type
-    CFieldType SDL_TextEditingCandidatesEvent "selected_candidate" =
-      SDL3.Sys.Bindgen.Stdinc.Sint32
-
-  offset# = \_ -> \_ -> 36
-
-instance
-  (ty ~ BG.CBool)
-  => BG.CompatHasField.HasField "horizontal" SDL_TextEditingCandidatesEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_TextEditingCandidatesEvent
-            { horizontal = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , candidates = BG.getField @"candidates" x0
-            , num_candidates = BG.getField @"num_candidates" x0
-            , selected_candidate = BG.getField @"selected_candidate" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            }
-      , BG.getField @"horizontal" x0
-      )
-
-instance
-  (ty ~ BG.CBool)
-  => BG.HasField "horizontal" (BG.Ptr SDL_TextEditingCandidatesEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"horizontal")
-
-instance HasCField.HasCField SDL_TextEditingCandidatesEvent "horizontal" where
-  type
-    CFieldType SDL_TextEditingCandidatesEvent "horizontal" =
-      BG.CBool
-
-  offset# = \_ -> \_ -> 40
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.CompatHasField.HasField "padding1" SDL_TextEditingCandidatesEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_TextEditingCandidatesEvent
-            { padding1 = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , candidates = BG.getField @"candidates" x0
-            , num_candidates = BG.getField @"num_candidates" x0
-            , selected_candidate = BG.getField @"selected_candidate" x0
-            , horizontal = BG.getField @"horizontal" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            }
-      , BG.getField @"padding1" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.HasField "padding1" (BG.Ptr SDL_TextEditingCandidatesEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"padding1")
-
-instance HasCField.HasCField SDL_TextEditingCandidatesEvent "padding1" where
-  type
-    CFieldType SDL_TextEditingCandidatesEvent "padding1" =
-      SDL3.Sys.Bindgen.Stdinc.Uint8
-
-  offset# = \_ -> \_ -> 41
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.CompatHasField.HasField "padding2" SDL_TextEditingCandidatesEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_TextEditingCandidatesEvent
-            { padding2 = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , candidates = BG.getField @"candidates" x0
-            , num_candidates = BG.getField @"num_candidates" x0
-            , selected_candidate = BG.getField @"selected_candidate" x0
-            , horizontal = BG.getField @"horizontal" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding3 = BG.getField @"padding3" x0
-            }
-      , BG.getField @"padding2" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.HasField "padding2" (BG.Ptr SDL_TextEditingCandidatesEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"padding2")
-
-instance HasCField.HasCField SDL_TextEditingCandidatesEvent "padding2" where
-  type
-    CFieldType SDL_TextEditingCandidatesEvent "padding2" =
-      SDL3.Sys.Bindgen.Stdinc.Uint8
-
-  offset# = \_ -> \_ -> 42
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.CompatHasField.HasField "padding3" SDL_TextEditingCandidatesEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_TextEditingCandidatesEvent
-            { padding3 = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , candidates = BG.getField @"candidates" x0
-            , num_candidates = BG.getField @"num_candidates" x0
-            , selected_candidate = BG.getField @"selected_candidate" x0
-            , horizontal = BG.getField @"horizontal" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            }
-      , BG.getField @"padding3" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.HasField "padding3" (BG.Ptr SDL_TextEditingCandidatesEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"padding3")
-
-instance HasCField.HasCField SDL_TextEditingCandidatesEvent "padding3" where
-  type
-    CFieldType SDL_TextEditingCandidatesEvent "padding3" =
-      SDL3.Sys.Bindgen.Stdinc.Uint8
-
-  offset# = \_ -> \_ -> 43
-
--- | Keyboard text input event structure (event.text.*)
---
---     This event will never be delivered unless text input is enabled by calling SDL_StartTextInput(). Text input is disabled by default!
---
---     @since 3.2.0
---
---     [See also]: SDL_StartTextInput, SDL_StopTextInput
---
---     [C declaration]: @struct SDL_TextInputEvent@, defined at @SDL3\/SDL_events.h 426:16@
-data SDL_TextInputEvent = SDL_TextInputEvent
-  { type' :: SDL_EventType
-  -- ^ SDL_EVENT_TEXT_INPUT
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 428:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 429:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 430:12@
-  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
-  -- ^ The window with keyboard focus, if any
-  --
-  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 431:18@
-  , text :: PtrConst.PtrConst BG.CChar
-  -- ^ The input text, UTF-8 encoded
-  --
-  --          [C declaration]: @text@, defined at @SDL3\/SDL_events.h 432:17@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_TextInputEvent where
-  staticSizeOf = \_ -> (32 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_TextInputEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_TextInputEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"text") ptr0
-
-instance Marshal.WriteRaw SDL_TextInputEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_TextInputEvent type'2 reserved3 timestamp4 windowID5 text6 ->
-            HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-              >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-              >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-              >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID5
-              >> HasCField.writeRaw (BG.Proxy @"text") ptr0 text6
-
-deriving via Marshal.EquivStorable SDL_TextInputEvent instance BG.Storable SDL_TextInputEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_TextInputEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_TextInputEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , text = BG.getField @"text" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_TextInputEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_TextInputEvent "type'" where
-  type
-    CFieldType SDL_TextInputEvent "type'" =
-      SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_TextInputEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_TextInputEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , text = BG.getField @"text" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_TextInputEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_TextInputEvent "reserved" where
-  type
-    CFieldType SDL_TextInputEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_TextInputEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_TextInputEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , windowID = BG.getField @"windowID" x0
-            , text = BG.getField @"text" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_TextInputEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_TextInputEvent "timestamp" where
-  type
-    CFieldType SDL_TextInputEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.CompatHasField.HasField "windowID" SDL_TextInputEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_TextInputEvent
-            { windowID = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , text = BG.getField @"text" x0
-            }
-      , BG.getField @"windowID" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.HasField "windowID" (BG.Ptr SDL_TextInputEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"windowID")
-
-instance HasCField.HasCField SDL_TextInputEvent "windowID" where
-  type
-    CFieldType SDL_TextInputEvent "windowID" =
-      SDL3.Sys.Bindgen.Video.SDL_WindowID
-
-  offset# = \_ -> \_ -> 16
-
-instance
-  (ty ~ PtrConst.PtrConst BG.CChar)
-  => BG.CompatHasField.HasField "text" SDL_TextInputEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_TextInputEvent
-            { text = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            }
-      , BG.getField @"text" x0
-      )
-
-instance
-  (ty ~ PtrConst.PtrConst BG.CChar)
-  => BG.HasField "text" (BG.Ptr SDL_TextInputEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"text")
-
-instance HasCField.HasCField SDL_TextInputEvent "text" where
-  type
-    CFieldType SDL_TextInputEvent "text" =
-      PtrConst.PtrConst BG.CChar
-
-  offset# = \_ -> \_ -> 24
-
--- | Mouse device event structure (event.mdevice.*)
---
---     @since 3.2.0
---
---     [C declaration]: @struct SDL_MouseDeviceEvent@, defined at @SDL3\/SDL_events.h 440:16@
-data SDL_MouseDeviceEvent = SDL_MouseDeviceEvent
-  { type' :: SDL_EventType
-  -- ^ SDL_EVENT_MOUSE_ADDED or SDL_EVENT_MOUSE_REMOVED
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 442:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 443:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 444:12@
-  , which :: SDL3.Sys.Bindgen.Mouse.SDL_MouseID
-  -- ^ The mouse instance id
-  --
-  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 445:17@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_MouseDeviceEvent where
-  staticSizeOf = \_ -> (24 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_MouseDeviceEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_MouseDeviceEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
-
-instance Marshal.WriteRaw SDL_MouseDeviceEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_MouseDeviceEvent type'2 reserved3 timestamp4 which5 ->
-            HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-              >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-              >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-              >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which5
-
-deriving via Marshal.EquivStorable SDL_MouseDeviceEvent instance BG.Storable SDL_MouseDeviceEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_MouseDeviceEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseDeviceEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_MouseDeviceEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_MouseDeviceEvent "type'" where
-  type
-    CFieldType SDL_MouseDeviceEvent "type'" =
-      SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_MouseDeviceEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseDeviceEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_MouseDeviceEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_MouseDeviceEvent "reserved" where
-  type
-    CFieldType SDL_MouseDeviceEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_MouseDeviceEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseDeviceEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , which = BG.getField @"which" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_MouseDeviceEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_MouseDeviceEvent "timestamp" where
-  type
-    CFieldType SDL_MouseDeviceEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Mouse.SDL_MouseID)
-  => BG.CompatHasField.HasField "which" SDL_MouseDeviceEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseDeviceEvent
-            { which = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            }
-      , BG.getField @"which" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Mouse.SDL_MouseID)
-  => BG.HasField "which" (BG.Ptr SDL_MouseDeviceEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"which")
-
-instance HasCField.HasCField SDL_MouseDeviceEvent "which" where
-  type
-    CFieldType SDL_MouseDeviceEvent "which" =
-      SDL3.Sys.Bindgen.Mouse.SDL_MouseID
-
-  offset# = \_ -> \_ -> 16
-
--- | Mouse motion event structure (event.motion.*)
---
---     @since 3.2.0
---
---     [C declaration]: @struct SDL_MouseMotionEvent@, defined at @SDL3\/SDL_events.h 453:16@
-data SDL_MouseMotionEvent = SDL_MouseMotionEvent
-  { type' :: SDL_EventType
-  -- ^ SDL_EVENT_MOUSE_MOTION
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 455:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 456:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 457:12@
-  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
-  -- ^ The window with mouse focus, if any
-  --
-  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 458:18@
-  , which :: SDL3.Sys.Bindgen.Mouse.SDL_MouseID
-  -- ^ The mouse instance id in relative mode, SDL_TOUCH_MOUSEID for touch events, SDL_PEN_MOUSEID for pen events, or 0
-  --
-  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 459:17@
-  , state :: SDL3.Sys.Bindgen.Mouse.SDL_MouseButtonFlags
-  -- ^ The current button state
-  --
-  --          [C declaration]: @state@, defined at @SDL3\/SDL_events.h 460:26@
-  , x :: BG.CFloat
-  -- ^ X coordinate, relative to window
-  --
-  --          [C declaration]: @x@, defined at @SDL3\/SDL_events.h 461:11@
-  , y :: BG.CFloat
-  -- ^ Y coordinate, relative to window
-  --
-  --          [C declaration]: @y@, defined at @SDL3\/SDL_events.h 462:11@
-  , xrel :: BG.CFloat
-  -- ^ The relative motion in the X direction
-  --
-  --          [C declaration]: @xrel@, defined at @SDL3\/SDL_events.h 463:11@
-  , yrel :: BG.CFloat
-  -- ^ The relative motion in the Y direction
-  --
-  --          [C declaration]: @yrel@, defined at @SDL3\/SDL_events.h 464:11@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_MouseMotionEvent where
-  staticSizeOf = \_ -> (48 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_MouseMotionEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_MouseMotionEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"state") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"x") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"y") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"xrel") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"yrel") ptr0
-
-instance Marshal.WriteRaw SDL_MouseMotionEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_MouseMotionEvent
-            type'2
-            reserved3
-            timestamp4
-            windowID5
-            which6
-            state7
-            x8
-            y9
-            xrel10
-            yrel11 ->
-              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-                >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID5
-                >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which6
-                >> HasCField.writeRaw (BG.Proxy @"state") ptr0 state7
-                >> HasCField.writeRaw (BG.Proxy @"x") ptr0 x8
-                >> HasCField.writeRaw (BG.Proxy @"y") ptr0 y9
-                >> HasCField.writeRaw (BG.Proxy @"xrel") ptr0 xrel10
-                >> HasCField.writeRaw (BG.Proxy @"yrel") ptr0 yrel11
-
-deriving via Marshal.EquivStorable SDL_MouseMotionEvent instance BG.Storable SDL_MouseMotionEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_MouseMotionEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseMotionEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , state = BG.getField @"state" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , xrel = BG.getField @"xrel" x0
-            , yrel = BG.getField @"yrel" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_MouseMotionEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_MouseMotionEvent "type'" where
-  type
-    CFieldType SDL_MouseMotionEvent "type'" =
-      SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_MouseMotionEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseMotionEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , state = BG.getField @"state" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , xrel = BG.getField @"xrel" x0
-            , yrel = BG.getField @"yrel" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_MouseMotionEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_MouseMotionEvent "reserved" where
-  type
-    CFieldType SDL_MouseMotionEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_MouseMotionEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseMotionEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , state = BG.getField @"state" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , xrel = BG.getField @"xrel" x0
-            , yrel = BG.getField @"yrel" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_MouseMotionEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_MouseMotionEvent "timestamp" where
-  type
-    CFieldType SDL_MouseMotionEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.CompatHasField.HasField "windowID" SDL_MouseMotionEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseMotionEvent
-            { windowID = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , state = BG.getField @"state" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , xrel = BG.getField @"xrel" x0
-            , yrel = BG.getField @"yrel" x0
-            }
-      , BG.getField @"windowID" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.HasField "windowID" (BG.Ptr SDL_MouseMotionEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"windowID")
-
-instance HasCField.HasCField SDL_MouseMotionEvent "windowID" where
-  type
-    CFieldType SDL_MouseMotionEvent "windowID" =
-      SDL3.Sys.Bindgen.Video.SDL_WindowID
-
-  offset# = \_ -> \_ -> 16
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Mouse.SDL_MouseID)
-  => BG.CompatHasField.HasField "which" SDL_MouseMotionEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseMotionEvent
-            { which = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , state = BG.getField @"state" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , xrel = BG.getField @"xrel" x0
-            , yrel = BG.getField @"yrel" x0
-            }
-      , BG.getField @"which" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Mouse.SDL_MouseID)
-  => BG.HasField "which" (BG.Ptr SDL_MouseMotionEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"which")
-
-instance HasCField.HasCField SDL_MouseMotionEvent "which" where
-  type
-    CFieldType SDL_MouseMotionEvent "which" =
-      SDL3.Sys.Bindgen.Mouse.SDL_MouseID
-
-  offset# = \_ -> \_ -> 20
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Mouse.SDL_MouseButtonFlags)
-  => BG.CompatHasField.HasField "state" SDL_MouseMotionEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseMotionEvent
-            { state = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , xrel = BG.getField @"xrel" x0
-            , yrel = BG.getField @"yrel" x0
-            }
-      , BG.getField @"state" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Mouse.SDL_MouseButtonFlags)
-  => BG.HasField "state" (BG.Ptr SDL_MouseMotionEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"state")
-
-instance HasCField.HasCField SDL_MouseMotionEvent "state" where
-  type
-    CFieldType SDL_MouseMotionEvent "state" =
-      SDL3.Sys.Bindgen.Mouse.SDL_MouseButtonFlags
-
-  offset# = \_ -> \_ -> 24
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.CompatHasField.HasField "x" SDL_MouseMotionEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseMotionEvent
-            { x = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , state = BG.getField @"state" x0
-            , y = BG.getField @"y" x0
-            , xrel = BG.getField @"xrel" x0
-            , yrel = BG.getField @"yrel" x0
-            }
-      , BG.getField @"x" x0
-      )
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.HasField "x" (BG.Ptr SDL_MouseMotionEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"x")
-
-instance HasCField.HasCField SDL_MouseMotionEvent "x" where
-  type CFieldType SDL_MouseMotionEvent "x" = BG.CFloat
-
-  offset# = \_ -> \_ -> 28
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.CompatHasField.HasField "y" SDL_MouseMotionEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseMotionEvent
-            { y = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , state = BG.getField @"state" x0
-            , x = BG.getField @"x" x0
-            , xrel = BG.getField @"xrel" x0
-            , yrel = BG.getField @"yrel" x0
-            }
-      , BG.getField @"y" x0
-      )
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.HasField "y" (BG.Ptr SDL_MouseMotionEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"y")
-
-instance HasCField.HasCField SDL_MouseMotionEvent "y" where
-  type CFieldType SDL_MouseMotionEvent "y" = BG.CFloat
-
-  offset# = \_ -> \_ -> 32
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.CompatHasField.HasField "xrel" SDL_MouseMotionEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseMotionEvent
-            { xrel = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , state = BG.getField @"state" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , yrel = BG.getField @"yrel" x0
-            }
-      , BG.getField @"xrel" x0
-      )
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.HasField "xrel" (BG.Ptr SDL_MouseMotionEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"xrel")
-
-instance HasCField.HasCField SDL_MouseMotionEvent "xrel" where
-  type
-    CFieldType SDL_MouseMotionEvent "xrel" =
-      BG.CFloat
-
-  offset# = \_ -> \_ -> 36
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.CompatHasField.HasField "yrel" SDL_MouseMotionEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseMotionEvent
-            { yrel = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , state = BG.getField @"state" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , xrel = BG.getField @"xrel" x0
-            }
-      , BG.getField @"yrel" x0
-      )
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.HasField "yrel" (BG.Ptr SDL_MouseMotionEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"yrel")
-
-instance HasCField.HasCField SDL_MouseMotionEvent "yrel" where
-  type
-    CFieldType SDL_MouseMotionEvent "yrel" =
-      BG.CFloat
-
-  offset# = \_ -> \_ -> 40
-
--- | Mouse button event structure (event.button.*)
---
---     @since 3.2.0
---
---     [C declaration]: @struct SDL_MouseButtonEvent@, defined at @SDL3\/SDL_events.h 472:16@
-data SDL_MouseButtonEvent = SDL_MouseButtonEvent
-  { type' :: SDL_EventType
-  -- ^ SDL_EVENT_MOUSE_BUTTON_DOWN or SDL_EVENT_MOUSE_BUTTON_UP
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 474:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 475:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 476:12@
-  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
-  -- ^ The window with mouse focus, if any
-  --
-  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 477:18@
-  , which :: SDL3.Sys.Bindgen.Mouse.SDL_MouseID
-  -- ^ The mouse instance id in relative mode, SDL_TOUCH_MOUSEID for touch events, or 0
-  --
-  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 478:17@
-  , button :: SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^ The mouse button index
-  --
-  --          [C declaration]: @button@, defined at @SDL3\/SDL_events.h 479:11@
-  , down :: BG.CBool
-  -- ^ true if the button is pressed
-  --
-  --          [C declaration]: @down@, defined at @SDL3\/SDL_events.h 480:10@
-  , clicks :: SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^ 1 for single-click, 2 for double-click, etc.
-  --
-  --          [C declaration]: @clicks@, defined at @SDL3\/SDL_events.h 481:11@
-  , padding :: SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^ [C declaration]: @padding@, defined at @SDL3\/SDL_events.h 482:11@
-  , x :: BG.CFloat
-  -- ^ X coordinate, relative to window
-  --
-  --          [C declaration]: @x@, defined at @SDL3\/SDL_events.h 483:11@
-  , y :: BG.CFloat
-  -- ^ Y coordinate, relative to window
-  --
-  --          [C declaration]: @y@, defined at @SDL3\/SDL_events.h 484:11@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_MouseButtonEvent where
-  staticSizeOf = \_ -> (40 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_MouseButtonEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_MouseButtonEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"button") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"down") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"clicks") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"padding") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"x") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"y") ptr0
-
-instance Marshal.WriteRaw SDL_MouseButtonEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_MouseButtonEvent
-            type'2
-            reserved3
-            timestamp4
-            windowID5
-            which6
-            button7
-            down8
-            clicks9
-            padding10
-            x11
-            y12 ->
-              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-                >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID5
-                >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which6
-                >> HasCField.writeRaw (BG.Proxy @"button") ptr0 button7
-                >> HasCField.writeRaw (BG.Proxy @"down") ptr0 down8
-                >> HasCField.writeRaw (BG.Proxy @"clicks") ptr0 clicks9
-                >> HasCField.writeRaw (BG.Proxy @"padding") ptr0 padding10
-                >> HasCField.writeRaw (BG.Proxy @"x") ptr0 x11
-                >> HasCField.writeRaw (BG.Proxy @"y") ptr0 y12
-
-deriving via Marshal.EquivStorable SDL_MouseButtonEvent instance BG.Storable SDL_MouseButtonEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_MouseButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseButtonEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , button = BG.getField @"button" x0
-            , down = BG.getField @"down" x0
-            , clicks = BG.getField @"clicks" x0
-            , padding = BG.getField @"padding" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_MouseButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_MouseButtonEvent "type'" where
-  type
-    CFieldType SDL_MouseButtonEvent "type'" =
-      SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_MouseButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseButtonEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , button = BG.getField @"button" x0
-            , down = BG.getField @"down" x0
-            , clicks = BG.getField @"clicks" x0
-            , padding = BG.getField @"padding" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_MouseButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_MouseButtonEvent "reserved" where
-  type
-    CFieldType SDL_MouseButtonEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_MouseButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseButtonEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , button = BG.getField @"button" x0
-            , down = BG.getField @"down" x0
-            , clicks = BG.getField @"clicks" x0
-            , padding = BG.getField @"padding" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_MouseButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_MouseButtonEvent "timestamp" where
-  type
-    CFieldType SDL_MouseButtonEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.CompatHasField.HasField "windowID" SDL_MouseButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseButtonEvent
-            { windowID = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , button = BG.getField @"button" x0
-            , down = BG.getField @"down" x0
-            , clicks = BG.getField @"clicks" x0
-            , padding = BG.getField @"padding" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            }
-      , BG.getField @"windowID" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.HasField "windowID" (BG.Ptr SDL_MouseButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"windowID")
-
-instance HasCField.HasCField SDL_MouseButtonEvent "windowID" where
-  type
-    CFieldType SDL_MouseButtonEvent "windowID" =
-      SDL3.Sys.Bindgen.Video.SDL_WindowID
-
-  offset# = \_ -> \_ -> 16
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Mouse.SDL_MouseID)
-  => BG.CompatHasField.HasField "which" SDL_MouseButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseButtonEvent
-            { which = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , button = BG.getField @"button" x0
-            , down = BG.getField @"down" x0
-            , clicks = BG.getField @"clicks" x0
-            , padding = BG.getField @"padding" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            }
-      , BG.getField @"which" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Mouse.SDL_MouseID)
-  => BG.HasField "which" (BG.Ptr SDL_MouseButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"which")
-
-instance HasCField.HasCField SDL_MouseButtonEvent "which" where
-  type
-    CFieldType SDL_MouseButtonEvent "which" =
-      SDL3.Sys.Bindgen.Mouse.SDL_MouseID
-
-  offset# = \_ -> \_ -> 20
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.CompatHasField.HasField "button" SDL_MouseButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseButtonEvent
-            { button = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , down = BG.getField @"down" x0
-            , clicks = BG.getField @"clicks" x0
-            , padding = BG.getField @"padding" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            }
-      , BG.getField @"button" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.HasField "button" (BG.Ptr SDL_MouseButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"button")
-
-instance HasCField.HasCField SDL_MouseButtonEvent "button" where
-  type
-    CFieldType SDL_MouseButtonEvent "button" =
-      SDL3.Sys.Bindgen.Stdinc.Uint8
-
-  offset# = \_ -> \_ -> 24
-
-instance
-  (ty ~ BG.CBool)
-  => BG.CompatHasField.HasField "down" SDL_MouseButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseButtonEvent
-            { down = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , button = BG.getField @"button" x0
-            , clicks = BG.getField @"clicks" x0
-            , padding = BG.getField @"padding" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            }
-      , BG.getField @"down" x0
-      )
-
-instance
-  (ty ~ BG.CBool)
-  => BG.HasField "down" (BG.Ptr SDL_MouseButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"down")
-
-instance HasCField.HasCField SDL_MouseButtonEvent "down" where
-  type
-    CFieldType SDL_MouseButtonEvent "down" =
-      BG.CBool
-
-  offset# = \_ -> \_ -> 25
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.CompatHasField.HasField "clicks" SDL_MouseButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseButtonEvent
-            { clicks = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , button = BG.getField @"button" x0
-            , down = BG.getField @"down" x0
-            , padding = BG.getField @"padding" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            }
-      , BG.getField @"clicks" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.HasField "clicks" (BG.Ptr SDL_MouseButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"clicks")
-
-instance HasCField.HasCField SDL_MouseButtonEvent "clicks" where
-  type
-    CFieldType SDL_MouseButtonEvent "clicks" =
-      SDL3.Sys.Bindgen.Stdinc.Uint8
-
-  offset# = \_ -> \_ -> 26
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.CompatHasField.HasField "padding" SDL_MouseButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseButtonEvent
-            { padding = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , button = BG.getField @"button" x0
-            , down = BG.getField @"down" x0
-            , clicks = BG.getField @"clicks" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            }
-      , BG.getField @"padding" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.HasField "padding" (BG.Ptr SDL_MouseButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"padding")
-
-instance HasCField.HasCField SDL_MouseButtonEvent "padding" where
-  type
-    CFieldType SDL_MouseButtonEvent "padding" =
-      SDL3.Sys.Bindgen.Stdinc.Uint8
-
-  offset# = \_ -> \_ -> 27
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.CompatHasField.HasField "x" SDL_MouseButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseButtonEvent
-            { x = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , button = BG.getField @"button" x0
-            , down = BG.getField @"down" x0
-            , clicks = BG.getField @"clicks" x0
-            , padding = BG.getField @"padding" x0
-            , y = BG.getField @"y" x0
-            }
-      , BG.getField @"x" x0
-      )
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.HasField "x" (BG.Ptr SDL_MouseButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"x")
-
-instance HasCField.HasCField SDL_MouseButtonEvent "x" where
-  type CFieldType SDL_MouseButtonEvent "x" = BG.CFloat
-
-  offset# = \_ -> \_ -> 28
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.CompatHasField.HasField "y" SDL_MouseButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseButtonEvent
-            { y = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , button = BG.getField @"button" x0
-            , down = BG.getField @"down" x0
-            , clicks = BG.getField @"clicks" x0
-            , padding = BG.getField @"padding" x0
-            , x = BG.getField @"x" x0
-            }
-      , BG.getField @"y" x0
-      )
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.HasField "y" (BG.Ptr SDL_MouseButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"y")
-
-instance HasCField.HasCField SDL_MouseButtonEvent "y" where
-  type CFieldType SDL_MouseButtonEvent "y" = BG.CFloat
-
-  offset# = \_ -> \_ -> 32
-
--- | Mouse wheel event structure (event.wheel.*)
---
---     @since 3.2.0
---
---     [C declaration]: @struct SDL_MouseWheelEvent@, defined at @SDL3\/SDL_events.h 492:16@
-data SDL_MouseWheelEvent = SDL_MouseWheelEvent
-  { type' :: SDL_EventType
-  -- ^ SDL_EVENT_MOUSE_WHEEL
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 494:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 495:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 496:12@
-  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
-  -- ^ The window with mouse focus, if any
-  --
-  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 497:18@
-  , which :: SDL3.Sys.Bindgen.Mouse.SDL_MouseID
-  -- ^ The mouse instance id in relative mode or 0
-  --
-  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 498:17@
-  , x :: BG.CFloat
-  -- ^ The amount scrolled horizontally, positive to the right and negative to the left
-  --
-  --          [C declaration]: @x@, defined at @SDL3\/SDL_events.h 499:11@
-  , y :: BG.CFloat
-  -- ^ The amount scrolled vertically, positive away from the user and negative toward the user
-  --
-  --          [C declaration]: @y@, defined at @SDL3\/SDL_events.h 500:11@
-  , direction :: SDL3.Sys.Bindgen.Mouse.SDL_MouseWheelDirection
-  -- ^ Set to one of the SDL_MOUSEWHEEL_* defines. When FLIPPED the values in X and Y will be opposite. Multiply by -1 to change them back
-  --
-  --          [C declaration]: @direction@, defined at @SDL3\/SDL_events.h 501:29@
-  , mouse_x :: BG.CFloat
-  -- ^ X coordinate, relative to window
-  --
-  --          [C declaration]: @mouse_x@, defined at @SDL3\/SDL_events.h 502:11@
-  , mouse_y :: BG.CFloat
-  -- ^ Y coordinate, relative to window
-  --
-  --          [C declaration]: @mouse_y@, defined at @SDL3\/SDL_events.h 503:11@
-  , integer_x :: SDL3.Sys.Bindgen.Stdinc.Sint32
-  -- ^ The amount scrolled horizontally, accumulated to whole scroll \"ticks\" (added in 3.2.12)
-  --
-  --          [C declaration]: @integer_x@, defined at @SDL3\/SDL_events.h 504:12@
-  , integer_y :: SDL3.Sys.Bindgen.Stdinc.Sint32
-  -- ^ The amount scrolled vertically, accumulated to whole scroll \"ticks\" (added in 3.2.12)
-  --
-  --          [C declaration]: @integer_y@, defined at @SDL3\/SDL_events.h 505:12@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_MouseWheelEvent where
-  staticSizeOf = \_ -> (56 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_MouseWheelEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_MouseWheelEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"x") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"y") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"direction") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"mouse_x") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"mouse_y") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"integer_x") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"integer_y") ptr0
-
-instance Marshal.WriteRaw SDL_MouseWheelEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_MouseWheelEvent
-            type'2
-            reserved3
-            timestamp4
-            windowID5
-            which6
-            x7
-            y8
-            direction9
-            mouse_x10
-            mouse_y11
-            integer_x12
-            integer_y13 ->
-              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-                >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID5
-                >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which6
-                >> HasCField.writeRaw (BG.Proxy @"x") ptr0 x7
-                >> HasCField.writeRaw (BG.Proxy @"y") ptr0 y8
-                >> HasCField.writeRaw (BG.Proxy @"direction") ptr0 direction9
-                >> HasCField.writeRaw (BG.Proxy @"mouse_x") ptr0 mouse_x10
-                >> HasCField.writeRaw (BG.Proxy @"mouse_y") ptr0 mouse_y11
-                >> HasCField.writeRaw (BG.Proxy @"integer_x") ptr0 integer_x12
-                >> HasCField.writeRaw (BG.Proxy @"integer_y") ptr0 integer_y13
-
-deriving via Marshal.EquivStorable SDL_MouseWheelEvent instance BG.Storable SDL_MouseWheelEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_MouseWheelEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseWheelEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , direction = BG.getField @"direction" x0
-            , mouse_x = BG.getField @"mouse_x" x0
-            , mouse_y = BG.getField @"mouse_y" x0
-            , integer_x = BG.getField @"integer_x" x0
-            , integer_y = BG.getField @"integer_y" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_MouseWheelEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_MouseWheelEvent "type'" where
-  type
-    CFieldType SDL_MouseWheelEvent "type'" =
-      SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_MouseWheelEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseWheelEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , direction = BG.getField @"direction" x0
-            , mouse_x = BG.getField @"mouse_x" x0
-            , mouse_y = BG.getField @"mouse_y" x0
-            , integer_x = BG.getField @"integer_x" x0
-            , integer_y = BG.getField @"integer_y" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_MouseWheelEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_MouseWheelEvent "reserved" where
-  type
-    CFieldType SDL_MouseWheelEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_MouseWheelEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseWheelEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , direction = BG.getField @"direction" x0
-            , mouse_x = BG.getField @"mouse_x" x0
-            , mouse_y = BG.getField @"mouse_y" x0
-            , integer_x = BG.getField @"integer_x" x0
-            , integer_y = BG.getField @"integer_y" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_MouseWheelEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_MouseWheelEvent "timestamp" where
-  type
-    CFieldType SDL_MouseWheelEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.CompatHasField.HasField "windowID" SDL_MouseWheelEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseWheelEvent
-            { windowID = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , direction = BG.getField @"direction" x0
-            , mouse_x = BG.getField @"mouse_x" x0
-            , mouse_y = BG.getField @"mouse_y" x0
-            , integer_x = BG.getField @"integer_x" x0
-            , integer_y = BG.getField @"integer_y" x0
-            }
-      , BG.getField @"windowID" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.HasField "windowID" (BG.Ptr SDL_MouseWheelEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"windowID")
-
-instance HasCField.HasCField SDL_MouseWheelEvent "windowID" where
-  type
-    CFieldType SDL_MouseWheelEvent "windowID" =
-      SDL3.Sys.Bindgen.Video.SDL_WindowID
-
-  offset# = \_ -> \_ -> 16
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Mouse.SDL_MouseID)
-  => BG.CompatHasField.HasField "which" SDL_MouseWheelEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseWheelEvent
-            { which = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , direction = BG.getField @"direction" x0
-            , mouse_x = BG.getField @"mouse_x" x0
-            , mouse_y = BG.getField @"mouse_y" x0
-            , integer_x = BG.getField @"integer_x" x0
-            , integer_y = BG.getField @"integer_y" x0
-            }
-      , BG.getField @"which" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Mouse.SDL_MouseID)
-  => BG.HasField "which" (BG.Ptr SDL_MouseWheelEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"which")
-
-instance HasCField.HasCField SDL_MouseWheelEvent "which" where
-  type
-    CFieldType SDL_MouseWheelEvent "which" =
-      SDL3.Sys.Bindgen.Mouse.SDL_MouseID
-
-  offset# = \_ -> \_ -> 20
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.CompatHasField.HasField "x" SDL_MouseWheelEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseWheelEvent
-            { x = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , y = BG.getField @"y" x0
-            , direction = BG.getField @"direction" x0
-            , mouse_x = BG.getField @"mouse_x" x0
-            , mouse_y = BG.getField @"mouse_y" x0
-            , integer_x = BG.getField @"integer_x" x0
-            , integer_y = BG.getField @"integer_y" x0
-            }
-      , BG.getField @"x" x0
-      )
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.HasField "x" (BG.Ptr SDL_MouseWheelEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"x")
-
-instance HasCField.HasCField SDL_MouseWheelEvent "x" where
-  type CFieldType SDL_MouseWheelEvent "x" = BG.CFloat
-
-  offset# = \_ -> \_ -> 24
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.CompatHasField.HasField "y" SDL_MouseWheelEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseWheelEvent
-            { y = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , x = BG.getField @"x" x0
-            , direction = BG.getField @"direction" x0
-            , mouse_x = BG.getField @"mouse_x" x0
-            , mouse_y = BG.getField @"mouse_y" x0
-            , integer_x = BG.getField @"integer_x" x0
-            , integer_y = BG.getField @"integer_y" x0
-            }
-      , BG.getField @"y" x0
-      )
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.HasField "y" (BG.Ptr SDL_MouseWheelEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"y")
-
-instance HasCField.HasCField SDL_MouseWheelEvent "y" where
-  type CFieldType SDL_MouseWheelEvent "y" = BG.CFloat
-
-  offset# = \_ -> \_ -> 28
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Mouse.SDL_MouseWheelDirection)
-  => BG.CompatHasField.HasField "direction" SDL_MouseWheelEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseWheelEvent
-            { direction = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , mouse_x = BG.getField @"mouse_x" x0
-            , mouse_y = BG.getField @"mouse_y" x0
-            , integer_x = BG.getField @"integer_x" x0
-            , integer_y = BG.getField @"integer_y" x0
-            }
-      , BG.getField @"direction" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Mouse.SDL_MouseWheelDirection)
-  => BG.HasField "direction" (BG.Ptr SDL_MouseWheelEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"direction")
-
-instance HasCField.HasCField SDL_MouseWheelEvent "direction" where
-  type
-    CFieldType SDL_MouseWheelEvent "direction" =
-      SDL3.Sys.Bindgen.Mouse.SDL_MouseWheelDirection
-
-  offset# = \_ -> \_ -> 32
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.CompatHasField.HasField "mouse_x" SDL_MouseWheelEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseWheelEvent
-            { mouse_x = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , direction = BG.getField @"direction" x0
-            , mouse_y = BG.getField @"mouse_y" x0
-            , integer_x = BG.getField @"integer_x" x0
-            , integer_y = BG.getField @"integer_y" x0
-            }
-      , BG.getField @"mouse_x" x0
-      )
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.HasField "mouse_x" (BG.Ptr SDL_MouseWheelEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"mouse_x")
-
-instance HasCField.HasCField SDL_MouseWheelEvent "mouse_x" where
-  type
-    CFieldType SDL_MouseWheelEvent "mouse_x" =
-      BG.CFloat
-
-  offset# = \_ -> \_ -> 36
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.CompatHasField.HasField "mouse_y" SDL_MouseWheelEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseWheelEvent
-            { mouse_y = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , direction = BG.getField @"direction" x0
-            , mouse_x = BG.getField @"mouse_x" x0
-            , integer_x = BG.getField @"integer_x" x0
-            , integer_y = BG.getField @"integer_y" x0
-            }
-      , BG.getField @"mouse_y" x0
-      )
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.HasField "mouse_y" (BG.Ptr SDL_MouseWheelEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"mouse_y")
-
-instance HasCField.HasCField SDL_MouseWheelEvent "mouse_y" where
-  type
-    CFieldType SDL_MouseWheelEvent "mouse_y" =
-      BG.CFloat
-
-  offset# = \_ -> \_ -> 40
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
-  => BG.CompatHasField.HasField "integer_x" SDL_MouseWheelEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseWheelEvent
-            { integer_x = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , direction = BG.getField @"direction" x0
-            , mouse_x = BG.getField @"mouse_x" x0
-            , mouse_y = BG.getField @"mouse_y" x0
-            , integer_y = BG.getField @"integer_y" x0
-            }
-      , BG.getField @"integer_x" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
-  => BG.HasField "integer_x" (BG.Ptr SDL_MouseWheelEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"integer_x")
-
-instance HasCField.HasCField SDL_MouseWheelEvent "integer_x" where
-  type
-    CFieldType SDL_MouseWheelEvent "integer_x" =
-      SDL3.Sys.Bindgen.Stdinc.Sint32
-
-  offset# = \_ -> \_ -> 44
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
-  => BG.CompatHasField.HasField "integer_y" SDL_MouseWheelEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_MouseWheelEvent
-            { integer_y = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , direction = BG.getField @"direction" x0
-            , mouse_x = BG.getField @"mouse_x" x0
-            , mouse_y = BG.getField @"mouse_y" x0
-            , integer_x = BG.getField @"integer_x" x0
-            }
-      , BG.getField @"integer_y" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
-  => BG.HasField "integer_y" (BG.Ptr SDL_MouseWheelEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"integer_y")
-
-instance HasCField.HasCField SDL_MouseWheelEvent "integer_y" where
-  type
-    CFieldType SDL_MouseWheelEvent "integer_y" =
-      SDL3.Sys.Bindgen.Stdinc.Sint32
-
-  offset# = \_ -> \_ -> 48
-
--- | Joystick axis motion event structure (event.jaxis.*)
---
---     @since 3.2.0
---
---     [C declaration]: @struct SDL_JoyAxisEvent@, defined at @SDL3\/SDL_events.h 513:16@
-data SDL_JoyAxisEvent = SDL_JoyAxisEvent
-  { type' :: SDL_EventType
-  -- ^ SDL_EVENT_JOYSTICK_AXIS_MOTION
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 515:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 516:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 517:12@
-  , which :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
-  -- ^ The joystick instance id
-  --
-  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 518:20@
-  , axis :: SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^ The joystick axis index
-  --
-  --          [C declaration]: @axis@, defined at @SDL3\/SDL_events.h 519:11@
-  , padding1 :: SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^ [C declaration]: @padding1@, defined at @SDL3\/SDL_events.h 520:11@
-  , padding2 :: SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^ [C declaration]: @padding2@, defined at @SDL3\/SDL_events.h 521:11@
-  , padding3 :: SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^ [C declaration]: @padding3@, defined at @SDL3\/SDL_events.h 522:11@
-  , value :: SDL3.Sys.Bindgen.Stdinc.Sint16
-  -- ^ The axis value (range: -32768 to 32767)
-  --
-  --          [C declaration]: @value@, defined at @SDL3\/SDL_events.h 523:12@
-  , padding4 :: SDL3.Sys.Bindgen.Stdinc.Uint16
-  -- ^ [C declaration]: @padding4@, defined at @SDL3\/SDL_events.h 524:12@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_JoyAxisEvent where
-  staticSizeOf = \_ -> (32 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_JoyAxisEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_JoyAxisEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"axis") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"padding1") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"padding2") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"padding3") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"value") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"padding4") ptr0
-
-instance Marshal.WriteRaw SDL_JoyAxisEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_JoyAxisEvent
-            type'2
-            reserved3
-            timestamp4
-            which5
-            axis6
-            padding17
-            padding28
-            padding39
-            value10
-            padding411 ->
-              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-                >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which5
-                >> HasCField.writeRaw (BG.Proxy @"axis") ptr0 axis6
-                >> HasCField.writeRaw (BG.Proxy @"padding1") ptr0 padding17
-                >> HasCField.writeRaw (BG.Proxy @"padding2") ptr0 padding28
-                >> HasCField.writeRaw (BG.Proxy @"padding3") ptr0 padding39
-                >> HasCField.writeRaw (BG.Proxy @"value") ptr0 value10
-                >> HasCField.writeRaw (BG.Proxy @"padding4") ptr0 padding411
-
-deriving via Marshal.EquivStorable SDL_JoyAxisEvent instance BG.Storable SDL_JoyAxisEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_JoyAxisEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyAxisEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , axis = BG.getField @"axis" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            , value = BG.getField @"value" x0
-            , padding4 = BG.getField @"padding4" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_JoyAxisEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_JoyAxisEvent "type'" where
-  type
-    CFieldType SDL_JoyAxisEvent "type'" =
-      SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_JoyAxisEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyAxisEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , axis = BG.getField @"axis" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            , value = BG.getField @"value" x0
-            , padding4 = BG.getField @"padding4" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_JoyAxisEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_JoyAxisEvent "reserved" where
-  type
-    CFieldType SDL_JoyAxisEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_JoyAxisEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyAxisEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , which = BG.getField @"which" x0
-            , axis = BG.getField @"axis" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            , value = BG.getField @"value" x0
-            , padding4 = BG.getField @"padding4" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_JoyAxisEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_JoyAxisEvent "timestamp" where
-  type
-    CFieldType SDL_JoyAxisEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
-  => BG.CompatHasField.HasField "which" SDL_JoyAxisEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyAxisEvent
-            { which = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , axis = BG.getField @"axis" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            , value = BG.getField @"value" x0
-            , padding4 = BG.getField @"padding4" x0
-            }
-      , BG.getField @"which" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
-  => BG.HasField "which" (BG.Ptr SDL_JoyAxisEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"which")
-
-instance HasCField.HasCField SDL_JoyAxisEvent "which" where
-  type
-    CFieldType SDL_JoyAxisEvent "which" =
-      SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
-
-  offset# = \_ -> \_ -> 16
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.CompatHasField.HasField "axis" SDL_JoyAxisEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyAxisEvent
-            { axis = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            , value = BG.getField @"value" x0
-            , padding4 = BG.getField @"padding4" x0
-            }
-      , BG.getField @"axis" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.HasField "axis" (BG.Ptr SDL_JoyAxisEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"axis")
-
-instance HasCField.HasCField SDL_JoyAxisEvent "axis" where
-  type
-    CFieldType SDL_JoyAxisEvent "axis" =
-      SDL3.Sys.Bindgen.Stdinc.Uint8
-
-  offset# = \_ -> \_ -> 20
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.CompatHasField.HasField "padding1" SDL_JoyAxisEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyAxisEvent
-            { padding1 = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , axis = BG.getField @"axis" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            , value = BG.getField @"value" x0
-            , padding4 = BG.getField @"padding4" x0
-            }
-      , BG.getField @"padding1" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.HasField "padding1" (BG.Ptr SDL_JoyAxisEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"padding1")
-
-instance HasCField.HasCField SDL_JoyAxisEvent "padding1" where
-  type
-    CFieldType SDL_JoyAxisEvent "padding1" =
-      SDL3.Sys.Bindgen.Stdinc.Uint8
-
-  offset# = \_ -> \_ -> 21
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.CompatHasField.HasField "padding2" SDL_JoyAxisEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyAxisEvent
-            { padding2 = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , axis = BG.getField @"axis" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding3 = BG.getField @"padding3" x0
-            , value = BG.getField @"value" x0
-            , padding4 = BG.getField @"padding4" x0
-            }
-      , BG.getField @"padding2" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.HasField "padding2" (BG.Ptr SDL_JoyAxisEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"padding2")
-
-instance HasCField.HasCField SDL_JoyAxisEvent "padding2" where
-  type
-    CFieldType SDL_JoyAxisEvent "padding2" =
-      SDL3.Sys.Bindgen.Stdinc.Uint8
-
-  offset# = \_ -> \_ -> 22
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.CompatHasField.HasField "padding3" SDL_JoyAxisEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyAxisEvent
-            { padding3 = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , axis = BG.getField @"axis" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , value = BG.getField @"value" x0
-            , padding4 = BG.getField @"padding4" x0
-            }
-      , BG.getField @"padding3" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.HasField "padding3" (BG.Ptr SDL_JoyAxisEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"padding3")
-
-instance HasCField.HasCField SDL_JoyAxisEvent "padding3" where
-  type
-    CFieldType SDL_JoyAxisEvent "padding3" =
-      SDL3.Sys.Bindgen.Stdinc.Uint8
-
-  offset# = \_ -> \_ -> 23
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint16)
-  => BG.CompatHasField.HasField "value" SDL_JoyAxisEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyAxisEvent
-            { value = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , axis = BG.getField @"axis" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            , padding4 = BG.getField @"padding4" x0
-            }
-      , BG.getField @"value" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint16)
-  => BG.HasField "value" (BG.Ptr SDL_JoyAxisEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"value")
-
-instance HasCField.HasCField SDL_JoyAxisEvent "value" where
-  type
-    CFieldType SDL_JoyAxisEvent "value" =
-      SDL3.Sys.Bindgen.Stdinc.Sint16
-
-  offset# = \_ -> \_ -> 24
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
-  => BG.CompatHasField.HasField "padding4" SDL_JoyAxisEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyAxisEvent
-            { padding4 = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , axis = BG.getField @"axis" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            , value = BG.getField @"value" x0
-            }
-      , BG.getField @"padding4" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
-  => BG.HasField "padding4" (BG.Ptr SDL_JoyAxisEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"padding4")
-
-instance HasCField.HasCField SDL_JoyAxisEvent "padding4" where
-  type
-    CFieldType SDL_JoyAxisEvent "padding4" =
-      SDL3.Sys.Bindgen.Stdinc.Uint16
-
-  offset# = \_ -> \_ -> 26
-
--- | Joystick trackball motion event structure (event.jball.*)
---
---     @since 3.2.0
---
---     [C declaration]: @struct SDL_JoyBallEvent@, defined at @SDL3\/SDL_events.h 532:16@
-data SDL_JoyBallEvent = SDL_JoyBallEvent
-  { type' :: SDL_EventType
-  -- ^ SDL_EVENT_JOYSTICK_BALL_MOTION
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 534:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 535:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 536:12@
-  , which :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
-  -- ^ The joystick instance id
-  --
-  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 537:20@
-  , ball :: SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^ The joystick trackball index
-  --
-  --          [C declaration]: @ball@, defined at @SDL3\/SDL_events.h 538:11@
-  , padding1 :: SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^ [C declaration]: @padding1@, defined at @SDL3\/SDL_events.h 539:11@
-  , padding2 :: SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^ [C declaration]: @padding2@, defined at @SDL3\/SDL_events.h 540:11@
-  , padding3 :: SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^ [C declaration]: @padding3@, defined at @SDL3\/SDL_events.h 541:11@
-  , xrel :: SDL3.Sys.Bindgen.Stdinc.Sint16
-  -- ^ The relative motion in the X direction
-  --
-  --          [C declaration]: @xrel@, defined at @SDL3\/SDL_events.h 542:12@
-  , yrel :: SDL3.Sys.Bindgen.Stdinc.Sint16
-  -- ^ The relative motion in the Y direction
-  --
-  --          [C declaration]: @yrel@, defined at @SDL3\/SDL_events.h 543:12@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_JoyBallEvent where
-  staticSizeOf = \_ -> (32 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_JoyBallEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_JoyBallEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"ball") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"padding1") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"padding2") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"padding3") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"xrel") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"yrel") ptr0
-
-instance Marshal.WriteRaw SDL_JoyBallEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_JoyBallEvent
-            type'2
-            reserved3
-            timestamp4
-            which5
-            ball6
-            padding17
-            padding28
-            padding39
-            xrel10
-            yrel11 ->
-              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-                >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which5
-                >> HasCField.writeRaw (BG.Proxy @"ball") ptr0 ball6
-                >> HasCField.writeRaw (BG.Proxy @"padding1") ptr0 padding17
-                >> HasCField.writeRaw (BG.Proxy @"padding2") ptr0 padding28
-                >> HasCField.writeRaw (BG.Proxy @"padding3") ptr0 padding39
-                >> HasCField.writeRaw (BG.Proxy @"xrel") ptr0 xrel10
-                >> HasCField.writeRaw (BG.Proxy @"yrel") ptr0 yrel11
-
-deriving via Marshal.EquivStorable SDL_JoyBallEvent instance BG.Storable SDL_JoyBallEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_JoyBallEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyBallEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , ball = BG.getField @"ball" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            , xrel = BG.getField @"xrel" x0
-            , yrel = BG.getField @"yrel" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_JoyBallEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_JoyBallEvent "type'" where
-  type
-    CFieldType SDL_JoyBallEvent "type'" =
-      SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_JoyBallEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyBallEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , ball = BG.getField @"ball" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            , xrel = BG.getField @"xrel" x0
-            , yrel = BG.getField @"yrel" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_JoyBallEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_JoyBallEvent "reserved" where
-  type
-    CFieldType SDL_JoyBallEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_JoyBallEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyBallEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , which = BG.getField @"which" x0
-            , ball = BG.getField @"ball" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            , xrel = BG.getField @"xrel" x0
-            , yrel = BG.getField @"yrel" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_JoyBallEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_JoyBallEvent "timestamp" where
-  type
-    CFieldType SDL_JoyBallEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
-  => BG.CompatHasField.HasField "which" SDL_JoyBallEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyBallEvent
-            { which = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , ball = BG.getField @"ball" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            , xrel = BG.getField @"xrel" x0
-            , yrel = BG.getField @"yrel" x0
-            }
-      , BG.getField @"which" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
-  => BG.HasField "which" (BG.Ptr SDL_JoyBallEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"which")
-
-instance HasCField.HasCField SDL_JoyBallEvent "which" where
-  type
-    CFieldType SDL_JoyBallEvent "which" =
-      SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
-
-  offset# = \_ -> \_ -> 16
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.CompatHasField.HasField "ball" SDL_JoyBallEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyBallEvent
-            { ball = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            , xrel = BG.getField @"xrel" x0
-            , yrel = BG.getField @"yrel" x0
-            }
-      , BG.getField @"ball" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.HasField "ball" (BG.Ptr SDL_JoyBallEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"ball")
-
-instance HasCField.HasCField SDL_JoyBallEvent "ball" where
-  type
-    CFieldType SDL_JoyBallEvent "ball" =
-      SDL3.Sys.Bindgen.Stdinc.Uint8
-
-  offset# = \_ -> \_ -> 20
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.CompatHasField.HasField "padding1" SDL_JoyBallEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyBallEvent
-            { padding1 = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , ball = BG.getField @"ball" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            , xrel = BG.getField @"xrel" x0
-            , yrel = BG.getField @"yrel" x0
-            }
-      , BG.getField @"padding1" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.HasField "padding1" (BG.Ptr SDL_JoyBallEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"padding1")
-
-instance HasCField.HasCField SDL_JoyBallEvent "padding1" where
-  type
-    CFieldType SDL_JoyBallEvent "padding1" =
-      SDL3.Sys.Bindgen.Stdinc.Uint8
-
-  offset# = \_ -> \_ -> 21
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.CompatHasField.HasField "padding2" SDL_JoyBallEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyBallEvent
-            { padding2 = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , ball = BG.getField @"ball" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding3 = BG.getField @"padding3" x0
-            , xrel = BG.getField @"xrel" x0
-            , yrel = BG.getField @"yrel" x0
-            }
-      , BG.getField @"padding2" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.HasField "padding2" (BG.Ptr SDL_JoyBallEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"padding2")
-
-instance HasCField.HasCField SDL_JoyBallEvent "padding2" where
-  type
-    CFieldType SDL_JoyBallEvent "padding2" =
-      SDL3.Sys.Bindgen.Stdinc.Uint8
-
-  offset# = \_ -> \_ -> 22
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.CompatHasField.HasField "padding3" SDL_JoyBallEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyBallEvent
-            { padding3 = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , ball = BG.getField @"ball" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , xrel = BG.getField @"xrel" x0
-            , yrel = BG.getField @"yrel" x0
-            }
-      , BG.getField @"padding3" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.HasField "padding3" (BG.Ptr SDL_JoyBallEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"padding3")
-
-instance HasCField.HasCField SDL_JoyBallEvent "padding3" where
-  type
-    CFieldType SDL_JoyBallEvent "padding3" =
-      SDL3.Sys.Bindgen.Stdinc.Uint8
-
-  offset# = \_ -> \_ -> 23
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint16)
-  => BG.CompatHasField.HasField "xrel" SDL_JoyBallEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyBallEvent
-            { xrel = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , ball = BG.getField @"ball" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            , yrel = BG.getField @"yrel" x0
-            }
-      , BG.getField @"xrel" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint16)
-  => BG.HasField "xrel" (BG.Ptr SDL_JoyBallEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"xrel")
-
-instance HasCField.HasCField SDL_JoyBallEvent "xrel" where
-  type
-    CFieldType SDL_JoyBallEvent "xrel" =
-      SDL3.Sys.Bindgen.Stdinc.Sint16
-
-  offset# = \_ -> \_ -> 24
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint16)
-  => BG.CompatHasField.HasField "yrel" SDL_JoyBallEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyBallEvent
-            { yrel = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , ball = BG.getField @"ball" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            , xrel = BG.getField @"xrel" x0
-            }
-      , BG.getField @"yrel" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint16)
-  => BG.HasField "yrel" (BG.Ptr SDL_JoyBallEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"yrel")
-
-instance HasCField.HasCField SDL_JoyBallEvent "yrel" where
-  type
-    CFieldType SDL_JoyBallEvent "yrel" =
-      SDL3.Sys.Bindgen.Stdinc.Sint16
-
-  offset# = \_ -> \_ -> 26
-
--- | Joystick hat position change event structure (event.jhat.*)
---
---     @since 3.2.0
---
---     [C declaration]: @struct SDL_JoyHatEvent@, defined at @SDL3\/SDL_events.h 551:16@
-data SDL_JoyHatEvent = SDL_JoyHatEvent
-  { type' :: SDL_EventType
-  -- ^ SDL_EVENT_JOYSTICK_HAT_MOTION
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 553:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 554:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 555:12@
-  , which :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
-  -- ^ The joystick instance id
-  --
-  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 556:20@
-  , hat :: SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^ The joystick hat index
-  --
-  --          [C declaration]: @hat@, defined at @SDL3\/SDL_events.h 557:11@
-  , value :: SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^ The hat position value. Note that zero means the POV is centered.
-  --
-  --          [See also]: SDL_HAT_LEFTUP SDL_HAT_UP SDL_HAT_RIGHTUP, SDL_HAT_LEFT SDL_HAT_CENTERED SDL_HAT_RIGHT, SDL_HAT_LEFTDOWN SDL_HAT_DOWN SDL_HAT_RIGHTDOWN
-  --
-  --          [C declaration]: @value@, defined at @SDL3\/SDL_events.h 558:11@
-  , padding1 :: SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^ [C declaration]: @padding1@, defined at @SDL3\/SDL_events.h 565:11@
-  , padding2 :: SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^ [C declaration]: @padding2@, defined at @SDL3\/SDL_events.h 566:11@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_JoyHatEvent where
-  staticSizeOf = \_ -> (24 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_JoyHatEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_JoyHatEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"hat") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"value") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"padding1") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"padding2") ptr0
-
-instance Marshal.WriteRaw SDL_JoyHatEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_JoyHatEvent
-            type'2
-            reserved3
-            timestamp4
-            which5
-            hat6
-            value7
-            padding18
-            padding29 ->
-              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-                >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which5
-                >> HasCField.writeRaw (BG.Proxy @"hat") ptr0 hat6
-                >> HasCField.writeRaw (BG.Proxy @"value") ptr0 value7
-                >> HasCField.writeRaw (BG.Proxy @"padding1") ptr0 padding18
-                >> HasCField.writeRaw (BG.Proxy @"padding2") ptr0 padding29
-
-deriving via Marshal.EquivStorable SDL_JoyHatEvent instance BG.Storable SDL_JoyHatEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_JoyHatEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyHatEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , hat = BG.getField @"hat" x0
-            , value = BG.getField @"value" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_JoyHatEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_JoyHatEvent "type'" where
-  type
-    CFieldType SDL_JoyHatEvent "type'" =
-      SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_JoyHatEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyHatEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , hat = BG.getField @"hat" x0
-            , value = BG.getField @"value" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_JoyHatEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_JoyHatEvent "reserved" where
-  type
-    CFieldType SDL_JoyHatEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_JoyHatEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyHatEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , which = BG.getField @"which" x0
-            , hat = BG.getField @"hat" x0
-            , value = BG.getField @"value" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_JoyHatEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_JoyHatEvent "timestamp" where
-  type
-    CFieldType SDL_JoyHatEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
-  => BG.CompatHasField.HasField "which" SDL_JoyHatEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyHatEvent
-            { which = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , hat = BG.getField @"hat" x0
-            , value = BG.getField @"value" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            }
-      , BG.getField @"which" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
-  => BG.HasField "which" (BG.Ptr SDL_JoyHatEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"which")
-
-instance HasCField.HasCField SDL_JoyHatEvent "which" where
-  type
-    CFieldType SDL_JoyHatEvent "which" =
-      SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
-
-  offset# = \_ -> \_ -> 16
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.CompatHasField.HasField "hat" SDL_JoyHatEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyHatEvent
-            { hat = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , value = BG.getField @"value" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            }
-      , BG.getField @"hat" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.HasField "hat" (BG.Ptr SDL_JoyHatEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"hat")
-
-instance HasCField.HasCField SDL_JoyHatEvent "hat" where
-  type
-    CFieldType SDL_JoyHatEvent "hat" =
-      SDL3.Sys.Bindgen.Stdinc.Uint8
-
-  offset# = \_ -> \_ -> 20
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.CompatHasField.HasField "value" SDL_JoyHatEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyHatEvent
-            { value = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , hat = BG.getField @"hat" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            }
-      , BG.getField @"value" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.HasField "value" (BG.Ptr SDL_JoyHatEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"value")
-
-instance HasCField.HasCField SDL_JoyHatEvent "value" where
-  type
-    CFieldType SDL_JoyHatEvent "value" =
-      SDL3.Sys.Bindgen.Stdinc.Uint8
-
-  offset# = \_ -> \_ -> 21
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.CompatHasField.HasField "padding1" SDL_JoyHatEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyHatEvent
-            { padding1 = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , hat = BG.getField @"hat" x0
-            , value = BG.getField @"value" x0
-            , padding2 = BG.getField @"padding2" x0
-            }
-      , BG.getField @"padding1" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.HasField "padding1" (BG.Ptr SDL_JoyHatEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"padding1")
-
-instance HasCField.HasCField SDL_JoyHatEvent "padding1" where
-  type
-    CFieldType SDL_JoyHatEvent "padding1" =
-      SDL3.Sys.Bindgen.Stdinc.Uint8
-
-  offset# = \_ -> \_ -> 22
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.CompatHasField.HasField "padding2" SDL_JoyHatEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyHatEvent
-            { padding2 = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , hat = BG.getField @"hat" x0
-            , value = BG.getField @"value" x0
-            , padding1 = BG.getField @"padding1" x0
-            }
-      , BG.getField @"padding2" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.HasField "padding2" (BG.Ptr SDL_JoyHatEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"padding2")
-
-instance HasCField.HasCField SDL_JoyHatEvent "padding2" where
-  type
-    CFieldType SDL_JoyHatEvent "padding2" =
-      SDL3.Sys.Bindgen.Stdinc.Uint8
-
-  offset# = \_ -> \_ -> 23
-
--- | Joystick button event structure (event.jbutton.*)
---
---     @since 3.2.0
---
---     [C declaration]: @struct SDL_JoyButtonEvent@, defined at @SDL3\/SDL_events.h 574:16@
-data SDL_JoyButtonEvent = SDL_JoyButtonEvent
-  { type' :: SDL_EventType
-  -- ^ SDL_EVENT_JOYSTICK_BUTTON_DOWN or SDL_EVENT_JOYSTICK_BUTTON_UP
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 576:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 577:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 578:12@
-  , which :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
-  -- ^ The joystick instance id
-  --
-  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 579:20@
-  , button :: SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^ The joystick button index
-  --
-  --          [C declaration]: @button@, defined at @SDL3\/SDL_events.h 580:11@
-  , down :: BG.CBool
-  -- ^ true if the button is pressed
-  --
-  --          [C declaration]: @down@, defined at @SDL3\/SDL_events.h 581:10@
-  , padding1 :: SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^ [C declaration]: @padding1@, defined at @SDL3\/SDL_events.h 582:11@
-  , padding2 :: SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^ [C declaration]: @padding2@, defined at @SDL3\/SDL_events.h 583:11@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_JoyButtonEvent where
-  staticSizeOf = \_ -> (24 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_JoyButtonEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_JoyButtonEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"button") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"down") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"padding1") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"padding2") ptr0
-
-instance Marshal.WriteRaw SDL_JoyButtonEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_JoyButtonEvent
-            type'2
-            reserved3
-            timestamp4
-            which5
-            button6
-            down7
-            padding18
-            padding29 ->
-              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-                >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which5
-                >> HasCField.writeRaw (BG.Proxy @"button") ptr0 button6
-                >> HasCField.writeRaw (BG.Proxy @"down") ptr0 down7
-                >> HasCField.writeRaw (BG.Proxy @"padding1") ptr0 padding18
-                >> HasCField.writeRaw (BG.Proxy @"padding2") ptr0 padding29
-
-deriving via Marshal.EquivStorable SDL_JoyButtonEvent instance BG.Storable SDL_JoyButtonEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_JoyButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyButtonEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , button = BG.getField @"button" x0
-            , down = BG.getField @"down" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_JoyButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_JoyButtonEvent "type'" where
-  type
-    CFieldType SDL_JoyButtonEvent "type'" =
-      SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_JoyButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyButtonEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , button = BG.getField @"button" x0
-            , down = BG.getField @"down" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_JoyButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_JoyButtonEvent "reserved" where
-  type
-    CFieldType SDL_JoyButtonEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_JoyButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyButtonEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , which = BG.getField @"which" x0
-            , button = BG.getField @"button" x0
-            , down = BG.getField @"down" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_JoyButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_JoyButtonEvent "timestamp" where
-  type
-    CFieldType SDL_JoyButtonEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
-  => BG.CompatHasField.HasField "which" SDL_JoyButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyButtonEvent
-            { which = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , button = BG.getField @"button" x0
-            , down = BG.getField @"down" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            }
-      , BG.getField @"which" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
-  => BG.HasField "which" (BG.Ptr SDL_JoyButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"which")
-
-instance HasCField.HasCField SDL_JoyButtonEvent "which" where
-  type
-    CFieldType SDL_JoyButtonEvent "which" =
-      SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
-
-  offset# = \_ -> \_ -> 16
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.CompatHasField.HasField "button" SDL_JoyButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyButtonEvent
-            { button = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , down = BG.getField @"down" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            }
-      , BG.getField @"button" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.HasField "button" (BG.Ptr SDL_JoyButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"button")
-
-instance HasCField.HasCField SDL_JoyButtonEvent "button" where
-  type
-    CFieldType SDL_JoyButtonEvent "button" =
-      SDL3.Sys.Bindgen.Stdinc.Uint8
-
-  offset# = \_ -> \_ -> 20
-
-instance
-  (ty ~ BG.CBool)
-  => BG.CompatHasField.HasField "down" SDL_JoyButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyButtonEvent
-            { down = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , button = BG.getField @"button" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            }
-      , BG.getField @"down" x0
-      )
-
-instance
-  (ty ~ BG.CBool)
-  => BG.HasField "down" (BG.Ptr SDL_JoyButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"down")
-
-instance HasCField.HasCField SDL_JoyButtonEvent "down" where
-  type CFieldType SDL_JoyButtonEvent "down" = BG.CBool
-
-  offset# = \_ -> \_ -> 21
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.CompatHasField.HasField "padding1" SDL_JoyButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyButtonEvent
-            { padding1 = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , button = BG.getField @"button" x0
-            , down = BG.getField @"down" x0
-            , padding2 = BG.getField @"padding2" x0
-            }
-      , BG.getField @"padding1" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.HasField "padding1" (BG.Ptr SDL_JoyButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"padding1")
-
-instance HasCField.HasCField SDL_JoyButtonEvent "padding1" where
-  type
-    CFieldType SDL_JoyButtonEvent "padding1" =
-      SDL3.Sys.Bindgen.Stdinc.Uint8
-
-  offset# = \_ -> \_ -> 22
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.CompatHasField.HasField "padding2" SDL_JoyButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyButtonEvent
-            { padding2 = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , button = BG.getField @"button" x0
-            , down = BG.getField @"down" x0
-            , padding1 = BG.getField @"padding1" x0
-            }
-      , BG.getField @"padding2" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.HasField "padding2" (BG.Ptr SDL_JoyButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"padding2")
-
-instance HasCField.HasCField SDL_JoyButtonEvent "padding2" where
-  type
-    CFieldType SDL_JoyButtonEvent "padding2" =
-      SDL3.Sys.Bindgen.Stdinc.Uint8
-
-  offset# = \_ -> \_ -> 23
-
--- | Joystick device event structure (event.jdevice.*)
---
---     SDL will send JOYSTICK_ADDED events for devices that are already plugged in during SDL_Init.
---
---     @since 3.2.0
---
---     [See also]: 'SDL_GamepadDeviceEvent'
---
---     [C declaration]: @struct SDL_JoyDeviceEvent@, defined at @SDL3\/SDL_events.h 596:16@
-data SDL_JoyDeviceEvent = SDL_JoyDeviceEvent
-  { type' :: SDL_EventType
-  -- ^ SDL_EVENT_JOYSTICK_ADDED or SDL_EVENT_JOYSTICK_REMOVED or SDL_EVENT_JOYSTICK_UPDATE_COMPLETE
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 598:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 599:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 600:12@
-  , which :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
-  -- ^ The joystick instance id
-  --
-  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 601:20@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_JoyDeviceEvent where
-  staticSizeOf = \_ -> (24 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_JoyDeviceEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_JoyDeviceEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
-
-instance Marshal.WriteRaw SDL_JoyDeviceEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_JoyDeviceEvent type'2 reserved3 timestamp4 which5 ->
-            HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-              >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-              >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-              >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which5
-
-deriving via Marshal.EquivStorable SDL_JoyDeviceEvent instance BG.Storable SDL_JoyDeviceEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_JoyDeviceEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyDeviceEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_JoyDeviceEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_JoyDeviceEvent "type'" where
-  type
-    CFieldType SDL_JoyDeviceEvent "type'" =
-      SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_JoyDeviceEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyDeviceEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_JoyDeviceEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_JoyDeviceEvent "reserved" where
-  type
-    CFieldType SDL_JoyDeviceEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_JoyDeviceEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyDeviceEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , which = BG.getField @"which" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_JoyDeviceEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_JoyDeviceEvent "timestamp" where
-  type
-    CFieldType SDL_JoyDeviceEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
-  => BG.CompatHasField.HasField "which" SDL_JoyDeviceEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyDeviceEvent
-            { which = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            }
-      , BG.getField @"which" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
-  => BG.HasField "which" (BG.Ptr SDL_JoyDeviceEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"which")
-
-instance HasCField.HasCField SDL_JoyDeviceEvent "which" where
-  type
-    CFieldType SDL_JoyDeviceEvent "which" =
-      SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
-
-  offset# = \_ -> \_ -> 16
-
--- | Joystick battery level change event structure (event.jbattery.*)
---
---     @since 3.2.0
---
---     [C declaration]: @struct SDL_JoyBatteryEvent@, defined at @SDL3\/SDL_events.h 609:16@
-data SDL_JoyBatteryEvent = SDL_JoyBatteryEvent
-  { type' :: SDL_EventType
-  -- ^ SDL_EVENT_JOYSTICK_BATTERY_UPDATED
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 611:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 612:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 613:12@
-  , which :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
-  -- ^ The joystick instance id
-  --
-  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 614:20@
-  , state :: SDL3.Sys.Bindgen.Power.SDL_PowerState
-  -- ^ The joystick battery state
-  --
-  --          [C declaration]: @state@, defined at @SDL3\/SDL_events.h 615:20@
-  , percent :: BG.CInt
-  -- ^ The joystick battery percent charge remaining
-  --
-  --          [C declaration]: @percent@, defined at @SDL3\/SDL_events.h 616:9@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_JoyBatteryEvent where
-  staticSizeOf = \_ -> (32 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_JoyBatteryEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_JoyBatteryEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"state") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"percent") ptr0
-
-instance Marshal.WriteRaw SDL_JoyBatteryEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_JoyBatteryEvent type'2 reserved3 timestamp4 which5 state6 percent7 ->
-            HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-              >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-              >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-              >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which5
-              >> HasCField.writeRaw (BG.Proxy @"state") ptr0 state6
-              >> HasCField.writeRaw (BG.Proxy @"percent") ptr0 percent7
-
-deriving via Marshal.EquivStorable SDL_JoyBatteryEvent instance BG.Storable SDL_JoyBatteryEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_JoyBatteryEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyBatteryEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , state = BG.getField @"state" x0
-            , percent = BG.getField @"percent" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_JoyBatteryEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_JoyBatteryEvent "type'" where
-  type
-    CFieldType SDL_JoyBatteryEvent "type'" =
-      SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_JoyBatteryEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyBatteryEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , state = BG.getField @"state" x0
-            , percent = BG.getField @"percent" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_JoyBatteryEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_JoyBatteryEvent "reserved" where
-  type
-    CFieldType SDL_JoyBatteryEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_JoyBatteryEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyBatteryEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , which = BG.getField @"which" x0
-            , state = BG.getField @"state" x0
-            , percent = BG.getField @"percent" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_JoyBatteryEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_JoyBatteryEvent "timestamp" where
-  type
-    CFieldType SDL_JoyBatteryEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
-  => BG.CompatHasField.HasField "which" SDL_JoyBatteryEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyBatteryEvent
-            { which = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , state = BG.getField @"state" x0
-            , percent = BG.getField @"percent" x0
-            }
-      , BG.getField @"which" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
-  => BG.HasField "which" (BG.Ptr SDL_JoyBatteryEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"which")
-
-instance HasCField.HasCField SDL_JoyBatteryEvent "which" where
-  type
-    CFieldType SDL_JoyBatteryEvent "which" =
-      SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
-
-  offset# = \_ -> \_ -> 16
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Power.SDL_PowerState)
-  => BG.CompatHasField.HasField "state" SDL_JoyBatteryEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyBatteryEvent
-            { state = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , percent = BG.getField @"percent" x0
-            }
-      , BG.getField @"state" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Power.SDL_PowerState)
-  => BG.HasField "state" (BG.Ptr SDL_JoyBatteryEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"state")
-
-instance HasCField.HasCField SDL_JoyBatteryEvent "state" where
-  type
-    CFieldType SDL_JoyBatteryEvent "state" =
-      SDL3.Sys.Bindgen.Power.SDL_PowerState
-
-  offset# = \_ -> \_ -> 20
-
-instance
-  (ty ~ BG.CInt)
-  => BG.CompatHasField.HasField "percent" SDL_JoyBatteryEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_JoyBatteryEvent
-            { percent = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , state = BG.getField @"state" x0
-            }
-      , BG.getField @"percent" x0
-      )
-
-instance
-  (ty ~ BG.CInt)
-  => BG.HasField "percent" (BG.Ptr SDL_JoyBatteryEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"percent")
-
-instance HasCField.HasCField SDL_JoyBatteryEvent "percent" where
-  type
-    CFieldType SDL_JoyBatteryEvent "percent" =
-      BG.CInt
-
-  offset# = \_ -> \_ -> 24
-
--- | Gamepad axis motion event structure (event.gaxis.*)
---
---     @since 3.2.0
---
---     [C declaration]: @struct SDL_GamepadAxisEvent@, defined at @SDL3\/SDL_events.h 624:16@
-data SDL_GamepadAxisEvent = SDL_GamepadAxisEvent
-  { type' :: SDL_EventType
-  -- ^ SDL_EVENT_GAMEPAD_AXIS_MOTION
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 626:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 627:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 628:12@
-  , which :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
-  -- ^ The joystick instance id
-  --
-  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 629:20@
-  , axis :: SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^ The gamepad axis (SDL_GamepadAxis)
-  --
-  --          [C declaration]: @axis@, defined at @SDL3\/SDL_events.h 630:11@
-  , padding1 :: SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^ [C declaration]: @padding1@, defined at @SDL3\/SDL_events.h 631:11@
-  , padding2 :: SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^ [C declaration]: @padding2@, defined at @SDL3\/SDL_events.h 632:11@
-  , padding3 :: SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^ [C declaration]: @padding3@, defined at @SDL3\/SDL_events.h 633:11@
-  , value :: SDL3.Sys.Bindgen.Stdinc.Sint16
-  -- ^ The axis value (range: -32768 to 32767)
-  --
-  --          [C declaration]: @value@, defined at @SDL3\/SDL_events.h 634:12@
-  , padding4 :: SDL3.Sys.Bindgen.Stdinc.Uint16
-  -- ^ [C declaration]: @padding4@, defined at @SDL3\/SDL_events.h 635:12@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_GamepadAxisEvent where
-  staticSizeOf = \_ -> (32 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_GamepadAxisEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_GamepadAxisEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"axis") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"padding1") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"padding2") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"padding3") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"value") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"padding4") ptr0
-
-instance Marshal.WriteRaw SDL_GamepadAxisEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_GamepadAxisEvent
-            type'2
-            reserved3
-            timestamp4
-            which5
-            axis6
-            padding17
-            padding28
-            padding39
-            value10
-            padding411 ->
-              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-                >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which5
-                >> HasCField.writeRaw (BG.Proxy @"axis") ptr0 axis6
-                >> HasCField.writeRaw (BG.Proxy @"padding1") ptr0 padding17
-                >> HasCField.writeRaw (BG.Proxy @"padding2") ptr0 padding28
-                >> HasCField.writeRaw (BG.Proxy @"padding3") ptr0 padding39
-                >> HasCField.writeRaw (BG.Proxy @"value") ptr0 value10
-                >> HasCField.writeRaw (BG.Proxy @"padding4") ptr0 padding411
-
-deriving via Marshal.EquivStorable SDL_GamepadAxisEvent instance BG.Storable SDL_GamepadAxisEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_GamepadAxisEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadAxisEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , axis = BG.getField @"axis" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            , value = BG.getField @"value" x0
-            , padding4 = BG.getField @"padding4" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_GamepadAxisEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_GamepadAxisEvent "type'" where
-  type
-    CFieldType SDL_GamepadAxisEvent "type'" =
-      SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_GamepadAxisEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadAxisEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , axis = BG.getField @"axis" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            , value = BG.getField @"value" x0
-            , padding4 = BG.getField @"padding4" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_GamepadAxisEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_GamepadAxisEvent "reserved" where
-  type
-    CFieldType SDL_GamepadAxisEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_GamepadAxisEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadAxisEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , which = BG.getField @"which" x0
-            , axis = BG.getField @"axis" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            , value = BG.getField @"value" x0
-            , padding4 = BG.getField @"padding4" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_GamepadAxisEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_GamepadAxisEvent "timestamp" where
-  type
-    CFieldType SDL_GamepadAxisEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
-  => BG.CompatHasField.HasField "which" SDL_GamepadAxisEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadAxisEvent
-            { which = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , axis = BG.getField @"axis" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            , value = BG.getField @"value" x0
-            , padding4 = BG.getField @"padding4" x0
-            }
-      , BG.getField @"which" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
-  => BG.HasField "which" (BG.Ptr SDL_GamepadAxisEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"which")
-
-instance HasCField.HasCField SDL_GamepadAxisEvent "which" where
-  type
-    CFieldType SDL_GamepadAxisEvent "which" =
-      SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
-
-  offset# = \_ -> \_ -> 16
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.CompatHasField.HasField "axis" SDL_GamepadAxisEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadAxisEvent
-            { axis = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            , value = BG.getField @"value" x0
-            , padding4 = BG.getField @"padding4" x0
-            }
-      , BG.getField @"axis" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.HasField "axis" (BG.Ptr SDL_GamepadAxisEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"axis")
-
-instance HasCField.HasCField SDL_GamepadAxisEvent "axis" where
-  type
-    CFieldType SDL_GamepadAxisEvent "axis" =
-      SDL3.Sys.Bindgen.Stdinc.Uint8
-
-  offset# = \_ -> \_ -> 20
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.CompatHasField.HasField "padding1" SDL_GamepadAxisEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadAxisEvent
-            { padding1 = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , axis = BG.getField @"axis" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            , value = BG.getField @"value" x0
-            , padding4 = BG.getField @"padding4" x0
-            }
-      , BG.getField @"padding1" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.HasField "padding1" (BG.Ptr SDL_GamepadAxisEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"padding1")
-
-instance HasCField.HasCField SDL_GamepadAxisEvent "padding1" where
-  type
-    CFieldType SDL_GamepadAxisEvent "padding1" =
-      SDL3.Sys.Bindgen.Stdinc.Uint8
-
-  offset# = \_ -> \_ -> 21
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.CompatHasField.HasField "padding2" SDL_GamepadAxisEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadAxisEvent
-            { padding2 = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , axis = BG.getField @"axis" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding3 = BG.getField @"padding3" x0
-            , value = BG.getField @"value" x0
-            , padding4 = BG.getField @"padding4" x0
-            }
-      , BG.getField @"padding2" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.HasField "padding2" (BG.Ptr SDL_GamepadAxisEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"padding2")
-
-instance HasCField.HasCField SDL_GamepadAxisEvent "padding2" where
-  type
-    CFieldType SDL_GamepadAxisEvent "padding2" =
-      SDL3.Sys.Bindgen.Stdinc.Uint8
-
-  offset# = \_ -> \_ -> 22
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.CompatHasField.HasField "padding3" SDL_GamepadAxisEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadAxisEvent
-            { padding3 = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , axis = BG.getField @"axis" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , value = BG.getField @"value" x0
-            , padding4 = BG.getField @"padding4" x0
-            }
-      , BG.getField @"padding3" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.HasField "padding3" (BG.Ptr SDL_GamepadAxisEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"padding3")
-
-instance HasCField.HasCField SDL_GamepadAxisEvent "padding3" where
-  type
-    CFieldType SDL_GamepadAxisEvent "padding3" =
-      SDL3.Sys.Bindgen.Stdinc.Uint8
-
-  offset# = \_ -> \_ -> 23
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint16)
-  => BG.CompatHasField.HasField "value" SDL_GamepadAxisEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadAxisEvent
-            { value = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , axis = BG.getField @"axis" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            , padding4 = BG.getField @"padding4" x0
-            }
-      , BG.getField @"value" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint16)
-  => BG.HasField "value" (BG.Ptr SDL_GamepadAxisEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"value")
-
-instance HasCField.HasCField SDL_GamepadAxisEvent "value" where
-  type
-    CFieldType SDL_GamepadAxisEvent "value" =
-      SDL3.Sys.Bindgen.Stdinc.Sint16
-
-  offset# = \_ -> \_ -> 24
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
-  => BG.CompatHasField.HasField "padding4" SDL_GamepadAxisEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadAxisEvent
-            { padding4 = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , axis = BG.getField @"axis" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            , value = BG.getField @"value" x0
-            }
-      , BG.getField @"padding4" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
-  => BG.HasField "padding4" (BG.Ptr SDL_GamepadAxisEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"padding4")
-
-instance HasCField.HasCField SDL_GamepadAxisEvent "padding4" where
-  type
-    CFieldType SDL_GamepadAxisEvent "padding4" =
-      SDL3.Sys.Bindgen.Stdinc.Uint16
-
-  offset# = \_ -> \_ -> 26
-
--- | Gamepad button event structure (event.gbutton.*)
---
---     @since 3.2.0
---
---     [C declaration]: @struct SDL_GamepadButtonEvent@, defined at @SDL3\/SDL_events.h 644:16@
-data SDL_GamepadButtonEvent = SDL_GamepadButtonEvent
-  { type' :: SDL_EventType
-  -- ^ SDL_EVENT_GAMEPAD_BUTTON_DOWN or SDL_EVENT_GAMEPAD_BUTTON_UP
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 646:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 647:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 648:12@
-  , which :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
-  -- ^ The joystick instance id
-  --
-  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 649:20@
-  , button :: SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^ The gamepad button (SDL_GamepadButton)
-  --
-  --          [C declaration]: @button@, defined at @SDL3\/SDL_events.h 650:11@
-  , down :: BG.CBool
-  -- ^ true if the button is pressed
-  --
-  --          [C declaration]: @down@, defined at @SDL3\/SDL_events.h 651:10@
-  , padding1 :: SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^ [C declaration]: @padding1@, defined at @SDL3\/SDL_events.h 652:11@
-  , padding2 :: SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^ [C declaration]: @padding2@, defined at @SDL3\/SDL_events.h 653:11@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_GamepadButtonEvent where
-  staticSizeOf = \_ -> (24 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_GamepadButtonEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_GamepadButtonEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"button") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"down") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"padding1") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"padding2") ptr0
-
-instance Marshal.WriteRaw SDL_GamepadButtonEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_GamepadButtonEvent
-            type'2
-            reserved3
-            timestamp4
-            which5
-            button6
-            down7
-            padding18
-            padding29 ->
-              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-                >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which5
-                >> HasCField.writeRaw (BG.Proxy @"button") ptr0 button6
-                >> HasCField.writeRaw (BG.Proxy @"down") ptr0 down7
-                >> HasCField.writeRaw (BG.Proxy @"padding1") ptr0 padding18
-                >> HasCField.writeRaw (BG.Proxy @"padding2") ptr0 padding29
-
-deriving via
-  Marshal.EquivStorable SDL_GamepadButtonEvent
-  instance
-    BG.Storable SDL_GamepadButtonEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_GamepadButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadButtonEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , button = BG.getField @"button" x0
-            , down = BG.getField @"down" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_GamepadButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_GamepadButtonEvent "type'" where
-  type
-    CFieldType SDL_GamepadButtonEvent "type'" =
-      SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_GamepadButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadButtonEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , button = BG.getField @"button" x0
-            , down = BG.getField @"down" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_GamepadButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_GamepadButtonEvent "reserved" where
-  type
-    CFieldType SDL_GamepadButtonEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_GamepadButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadButtonEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , which = BG.getField @"which" x0
-            , button = BG.getField @"button" x0
-            , down = BG.getField @"down" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_GamepadButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_GamepadButtonEvent "timestamp" where
-  type
-    CFieldType SDL_GamepadButtonEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
-  => BG.CompatHasField.HasField "which" SDL_GamepadButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadButtonEvent
-            { which = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , button = BG.getField @"button" x0
-            , down = BG.getField @"down" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            }
-      , BG.getField @"which" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
-  => BG.HasField "which" (BG.Ptr SDL_GamepadButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"which")
-
-instance HasCField.HasCField SDL_GamepadButtonEvent "which" where
-  type
-    CFieldType SDL_GamepadButtonEvent "which" =
-      SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
-
-  offset# = \_ -> \_ -> 16
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.CompatHasField.HasField "button" SDL_GamepadButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadButtonEvent
-            { button = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , down = BG.getField @"down" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            }
-      , BG.getField @"button" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.HasField "button" (BG.Ptr SDL_GamepadButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"button")
-
-instance HasCField.HasCField SDL_GamepadButtonEvent "button" where
-  type
-    CFieldType SDL_GamepadButtonEvent "button" =
-      SDL3.Sys.Bindgen.Stdinc.Uint8
-
-  offset# = \_ -> \_ -> 20
-
-instance
-  (ty ~ BG.CBool)
-  => BG.CompatHasField.HasField "down" SDL_GamepadButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadButtonEvent
-            { down = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , button = BG.getField @"button" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            }
-      , BG.getField @"down" x0
-      )
-
-instance
-  (ty ~ BG.CBool)
-  => BG.HasField "down" (BG.Ptr SDL_GamepadButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"down")
-
-instance HasCField.HasCField SDL_GamepadButtonEvent "down" where
-  type
-    CFieldType SDL_GamepadButtonEvent "down" =
-      BG.CBool
-
-  offset# = \_ -> \_ -> 21
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.CompatHasField.HasField "padding1" SDL_GamepadButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadButtonEvent
-            { padding1 = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , button = BG.getField @"button" x0
-            , down = BG.getField @"down" x0
-            , padding2 = BG.getField @"padding2" x0
-            }
-      , BG.getField @"padding1" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.HasField "padding1" (BG.Ptr SDL_GamepadButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"padding1")
-
-instance HasCField.HasCField SDL_GamepadButtonEvent "padding1" where
-  type
-    CFieldType SDL_GamepadButtonEvent "padding1" =
-      SDL3.Sys.Bindgen.Stdinc.Uint8
-
-  offset# = \_ -> \_ -> 22
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.CompatHasField.HasField "padding2" SDL_GamepadButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadButtonEvent
-            { padding2 = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , button = BG.getField @"button" x0
-            , down = BG.getField @"down" x0
-            , padding1 = BG.getField @"padding1" x0
-            }
-      , BG.getField @"padding2" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.HasField "padding2" (BG.Ptr SDL_GamepadButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"padding2")
-
-instance HasCField.HasCField SDL_GamepadButtonEvent "padding2" where
-  type
-    CFieldType SDL_GamepadButtonEvent "padding2" =
-      SDL3.Sys.Bindgen.Stdinc.Uint8
-
-  offset# = \_ -> \_ -> 23
-
--- | Gamepad device event structure (event.gdevice.*)
---
---     Joysticks that are supported gamepads receive both an 'SDL_JoyDeviceEvent' and an 'SDL_GamepadDeviceEvent'.
---
---     SDL will send GAMEPAD_ADDED events for joysticks that are already plugged in during SDL_Init() and are recognized as gamepads. It will also send events for joysticks that get gamepad mappings at runtime.
---
---     @since 3.2.0
---
---     [See also]: 'SDL_JoyDeviceEvent'
---
---     [C declaration]: @struct SDL_GamepadDeviceEvent@, defined at @SDL3\/SDL_events.h 671:16@
-data SDL_GamepadDeviceEvent = SDL_GamepadDeviceEvent
-  { type' :: SDL_EventType
-  -- ^ SDL_EVENT_GAMEPAD_ADDED, SDL_EVENT_GAMEPAD_REMOVED, or SDL_EVENT_GAMEPAD_REMAPPED, SDL_EVENT_GAMEPAD_UPDATE_COMPLETE or SDL_EVENT_GAMEPAD_STEAM_HANDLE_UPDATED
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 673:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 674:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 675:12@
-  , which :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
-  -- ^ The joystick instance id
-  --
-  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 676:20@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_GamepadDeviceEvent where
-  staticSizeOf = \_ -> (24 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_GamepadDeviceEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_GamepadDeviceEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
-
-instance Marshal.WriteRaw SDL_GamepadDeviceEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_GamepadDeviceEvent type'2 reserved3 timestamp4 which5 ->
-            HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-              >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-              >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-              >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which5
-
-deriving via
-  Marshal.EquivStorable SDL_GamepadDeviceEvent
-  instance
-    BG.Storable SDL_GamepadDeviceEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_GamepadDeviceEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadDeviceEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_GamepadDeviceEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_GamepadDeviceEvent "type'" where
-  type
-    CFieldType SDL_GamepadDeviceEvent "type'" =
-      SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_GamepadDeviceEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadDeviceEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_GamepadDeviceEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_GamepadDeviceEvent "reserved" where
-  type
-    CFieldType SDL_GamepadDeviceEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_GamepadDeviceEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadDeviceEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , which = BG.getField @"which" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_GamepadDeviceEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_GamepadDeviceEvent "timestamp" where
-  type
-    CFieldType SDL_GamepadDeviceEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
-  => BG.CompatHasField.HasField "which" SDL_GamepadDeviceEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadDeviceEvent
-            { which = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            }
-      , BG.getField @"which" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
-  => BG.HasField "which" (BG.Ptr SDL_GamepadDeviceEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"which")
-
-instance HasCField.HasCField SDL_GamepadDeviceEvent "which" where
-  type
-    CFieldType SDL_GamepadDeviceEvent "which" =
-      SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
-
-  offset# = \_ -> \_ -> 16
-
--- | Gamepad touchpad event structure (event.gtouchpad.*)
---
---     @since 3.2.0
---
---     [C declaration]: @struct SDL_GamepadTouchpadEvent@, defined at @SDL3\/SDL_events.h 684:16@
-data SDL_GamepadTouchpadEvent = SDL_GamepadTouchpadEvent
-  { type' :: SDL_EventType
-  -- ^ SDL_EVENT_GAMEPAD_TOUCHPAD_DOWN or SDL_EVENT_GAMEPAD_TOUCHPAD_MOTION or SDL_EVENT_GAMEPAD_TOUCHPAD_UP
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 686:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 687:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 688:12@
-  , which :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
-  -- ^ The joystick instance id
-  --
-  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 689:20@
-  , touchpad :: SDL3.Sys.Bindgen.Stdinc.Sint32
-  -- ^ The index of the touchpad
-  --
-  --          [C declaration]: @touchpad@, defined at @SDL3\/SDL_events.h 690:12@
-  , finger :: SDL3.Sys.Bindgen.Stdinc.Sint32
-  -- ^ The index of the finger on the touchpad
-  --
-  --          [C declaration]: @finger@, defined at @SDL3\/SDL_events.h 691:12@
-  , x :: BG.CFloat
-  -- ^ Normalized in the range 0...1 with 0 being on the left
-  --
-  --          [C declaration]: @x@, defined at @SDL3\/SDL_events.h 692:11@
-  , y :: BG.CFloat
-  -- ^ Normalized in the range 0...1 with 0 being at the top
-  --
-  --          [C declaration]: @y@, defined at @SDL3\/SDL_events.h 693:11@
-  , pressure :: BG.CFloat
-  -- ^ Normalized in the range 0...1
-  --
-  --          [C declaration]: @pressure@, defined at @SDL3\/SDL_events.h 694:11@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_GamepadTouchpadEvent where
-  staticSizeOf = \_ -> (40 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_GamepadTouchpadEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_GamepadTouchpadEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"touchpad") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"finger") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"x") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"y") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"pressure") ptr0
-
-instance Marshal.WriteRaw SDL_GamepadTouchpadEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_GamepadTouchpadEvent
-            type'2
-            reserved3
-            timestamp4
-            which5
-            touchpad6
-            finger7
-            x8
-            y9
-            pressure10 ->
-              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-                >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which5
-                >> HasCField.writeRaw (BG.Proxy @"touchpad") ptr0 touchpad6
-                >> HasCField.writeRaw (BG.Proxy @"finger") ptr0 finger7
-                >> HasCField.writeRaw (BG.Proxy @"x") ptr0 x8
-                >> HasCField.writeRaw (BG.Proxy @"y") ptr0 y9
-                >> HasCField.writeRaw (BG.Proxy @"pressure") ptr0 pressure10
-
-deriving via
-  Marshal.EquivStorable SDL_GamepadTouchpadEvent
-  instance
-    BG.Storable SDL_GamepadTouchpadEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_GamepadTouchpadEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadTouchpadEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , touchpad = BG.getField @"touchpad" x0
-            , finger = BG.getField @"finger" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , pressure = BG.getField @"pressure" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_GamepadTouchpadEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_GamepadTouchpadEvent "type'" where
-  type
-    CFieldType SDL_GamepadTouchpadEvent "type'" =
-      SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_GamepadTouchpadEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadTouchpadEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , touchpad = BG.getField @"touchpad" x0
-            , finger = BG.getField @"finger" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , pressure = BG.getField @"pressure" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_GamepadTouchpadEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_GamepadTouchpadEvent "reserved" where
-  type
-    CFieldType SDL_GamepadTouchpadEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_GamepadTouchpadEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadTouchpadEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , which = BG.getField @"which" x0
-            , touchpad = BG.getField @"touchpad" x0
-            , finger = BG.getField @"finger" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , pressure = BG.getField @"pressure" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_GamepadTouchpadEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_GamepadTouchpadEvent "timestamp" where
-  type
-    CFieldType SDL_GamepadTouchpadEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
-  => BG.CompatHasField.HasField "which" SDL_GamepadTouchpadEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadTouchpadEvent
-            { which = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , touchpad = BG.getField @"touchpad" x0
-            , finger = BG.getField @"finger" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , pressure = BG.getField @"pressure" x0
-            }
-      , BG.getField @"which" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
-  => BG.HasField "which" (BG.Ptr SDL_GamepadTouchpadEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"which")
-
-instance HasCField.HasCField SDL_GamepadTouchpadEvent "which" where
-  type
-    CFieldType SDL_GamepadTouchpadEvent "which" =
-      SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
-
-  offset# = \_ -> \_ -> 16
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
-  => BG.CompatHasField.HasField "touchpad" SDL_GamepadTouchpadEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadTouchpadEvent
-            { touchpad = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , finger = BG.getField @"finger" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , pressure = BG.getField @"pressure" x0
-            }
-      , BG.getField @"touchpad" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
-  => BG.HasField "touchpad" (BG.Ptr SDL_GamepadTouchpadEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"touchpad")
-
-instance HasCField.HasCField SDL_GamepadTouchpadEvent "touchpad" where
-  type
-    CFieldType SDL_GamepadTouchpadEvent "touchpad" =
-      SDL3.Sys.Bindgen.Stdinc.Sint32
-
-  offset# = \_ -> \_ -> 20
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
-  => BG.CompatHasField.HasField "finger" SDL_GamepadTouchpadEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadTouchpadEvent
-            { finger = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , touchpad = BG.getField @"touchpad" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , pressure = BG.getField @"pressure" x0
-            }
-      , BG.getField @"finger" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
-  => BG.HasField "finger" (BG.Ptr SDL_GamepadTouchpadEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"finger")
-
-instance HasCField.HasCField SDL_GamepadTouchpadEvent "finger" where
-  type
-    CFieldType SDL_GamepadTouchpadEvent "finger" =
-      SDL3.Sys.Bindgen.Stdinc.Sint32
-
-  offset# = \_ -> \_ -> 24
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.CompatHasField.HasField "x" SDL_GamepadTouchpadEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadTouchpadEvent
-            { x = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , touchpad = BG.getField @"touchpad" x0
-            , finger = BG.getField @"finger" x0
-            , y = BG.getField @"y" x0
-            , pressure = BG.getField @"pressure" x0
-            }
-      , BG.getField @"x" x0
-      )
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.HasField "x" (BG.Ptr SDL_GamepadTouchpadEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"x")
-
-instance HasCField.HasCField SDL_GamepadTouchpadEvent "x" where
-  type
-    CFieldType SDL_GamepadTouchpadEvent "x" =
-      BG.CFloat
-
-  offset# = \_ -> \_ -> 28
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.CompatHasField.HasField "y" SDL_GamepadTouchpadEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadTouchpadEvent
-            { y = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , touchpad = BG.getField @"touchpad" x0
-            , finger = BG.getField @"finger" x0
-            , x = BG.getField @"x" x0
-            , pressure = BG.getField @"pressure" x0
-            }
-      , BG.getField @"y" x0
-      )
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.HasField "y" (BG.Ptr SDL_GamepadTouchpadEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"y")
-
-instance HasCField.HasCField SDL_GamepadTouchpadEvent "y" where
-  type
-    CFieldType SDL_GamepadTouchpadEvent "y" =
-      BG.CFloat
-
-  offset# = \_ -> \_ -> 32
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.CompatHasField.HasField "pressure" SDL_GamepadTouchpadEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadTouchpadEvent
-            { pressure = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , touchpad = BG.getField @"touchpad" x0
-            , finger = BG.getField @"finger" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            }
-      , BG.getField @"pressure" x0
-      )
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.HasField "pressure" (BG.Ptr SDL_GamepadTouchpadEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"pressure")
-
-instance HasCField.HasCField SDL_GamepadTouchpadEvent "pressure" where
-  type
-    CFieldType SDL_GamepadTouchpadEvent "pressure" =
-      BG.CFloat
-
-  offset# = \_ -> \_ -> 36
-
--- | Gamepad sensor event structure (event.gsensor.*)
---
---     @since 3.2.0
---
---     [C declaration]: @struct SDL_GamepadSensorEvent@, defined at @SDL3\/SDL_events.h 702:16@
-data SDL_GamepadSensorEvent = SDL_GamepadSensorEvent
-  { type' :: SDL_EventType
-  -- ^ SDL_EVENT_GAMEPAD_SENSOR_UPDATE
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 704:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 705:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 706:12@
-  , which :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
-  -- ^ The joystick instance id
-  --
-  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 707:20@
-  , sensor :: SDL3.Sys.Bindgen.Stdinc.Sint32
-  -- ^ The type of the sensor, one of the values of SDL_SensorType
-  --
-  --          [C declaration]: @sensor@, defined at @SDL3\/SDL_events.h 708:12@
-  , data' :: CA.ConstantArray 3 BG.CFloat
-  -- ^ Up to 3 values from the sensor, as defined in SDL_sensor.h
-  --
-  --          [C declaration]: @data@, defined at @SDL3\/SDL_events.h 709:11@
-  , sensor_timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ The timestamp of the sensor reading in nanoseconds, not necessarily synchronized with the system clock
-  --
-  --          [C declaration]: @sensor_timestamp@, defined at @SDL3\/SDL_events.h 710:12@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_GamepadSensorEvent where
-  staticSizeOf = \_ -> (48 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_GamepadSensorEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_GamepadSensorEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"sensor") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"data'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"sensor_timestamp") ptr0
-
-instance Marshal.WriteRaw SDL_GamepadSensorEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_GamepadSensorEvent
-            type'2
-            reserved3
-            timestamp4
-            which5
-            sensor6
-            data'7
-            sensor_timestamp8 ->
-              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-                >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which5
-                >> HasCField.writeRaw (BG.Proxy @"sensor") ptr0 sensor6
-                >> HasCField.writeRaw (BG.Proxy @"data'") ptr0 data'7
-                >> HasCField.writeRaw (BG.Proxy @"sensor_timestamp") ptr0 sensor_timestamp8
-
-deriving via
-  Marshal.EquivStorable SDL_GamepadSensorEvent
-  instance
-    BG.Storable SDL_GamepadSensorEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_GamepadSensorEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadSensorEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , sensor = BG.getField @"sensor" x0
-            , data' = BG.getField @"data'" x0
-            , sensor_timestamp = BG.getField @"sensor_timestamp" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_GamepadSensorEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_GamepadSensorEvent "type'" where
-  type
-    CFieldType SDL_GamepadSensorEvent "type'" =
-      SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_GamepadSensorEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadSensorEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , sensor = BG.getField @"sensor" x0
-            , data' = BG.getField @"data'" x0
-            , sensor_timestamp = BG.getField @"sensor_timestamp" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_GamepadSensorEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_GamepadSensorEvent "reserved" where
-  type
-    CFieldType SDL_GamepadSensorEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_GamepadSensorEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadSensorEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , which = BG.getField @"which" x0
-            , sensor = BG.getField @"sensor" x0
-            , data' = BG.getField @"data'" x0
-            , sensor_timestamp = BG.getField @"sensor_timestamp" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_GamepadSensorEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_GamepadSensorEvent "timestamp" where
-  type
-    CFieldType SDL_GamepadSensorEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
-  => BG.CompatHasField.HasField "which" SDL_GamepadSensorEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadSensorEvent
-            { which = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , sensor = BG.getField @"sensor" x0
-            , data' = BG.getField @"data'" x0
-            , sensor_timestamp = BG.getField @"sensor_timestamp" x0
-            }
-      , BG.getField @"which" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
-  => BG.HasField "which" (BG.Ptr SDL_GamepadSensorEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"which")
-
-instance HasCField.HasCField SDL_GamepadSensorEvent "which" where
-  type
-    CFieldType SDL_GamepadSensorEvent "which" =
-      SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
-
-  offset# = \_ -> \_ -> 16
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
-  => BG.CompatHasField.HasField "sensor" SDL_GamepadSensorEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadSensorEvent
-            { sensor = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , data' = BG.getField @"data'" x0
-            , sensor_timestamp = BG.getField @"sensor_timestamp" x0
-            }
-      , BG.getField @"sensor" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
-  => BG.HasField "sensor" (BG.Ptr SDL_GamepadSensorEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"sensor")
-
-instance HasCField.HasCField SDL_GamepadSensorEvent "sensor" where
-  type
-    CFieldType SDL_GamepadSensorEvent "sensor" =
-      SDL3.Sys.Bindgen.Stdinc.Sint32
-
-  offset# = \_ -> \_ -> 20
-
-instance
-  (ty ~ CA.ConstantArray 3 BG.CFloat)
-  => BG.CompatHasField.HasField "data'" SDL_GamepadSensorEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadSensorEvent
-            { data' = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , sensor = BG.getField @"sensor" x0
-            , sensor_timestamp = BG.getField @"sensor_timestamp" x0
-            }
-      , BG.getField @"data'" x0
-      )
-
-instance
-  (ty ~ CA.ConstantArray 3 BG.CFloat)
-  => BG.HasField "data'" (BG.Ptr SDL_GamepadSensorEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"data'")
-
-instance HasCField.HasCField SDL_GamepadSensorEvent "data'" where
-  type
-    CFieldType SDL_GamepadSensorEvent "data'" =
-      CA.ConstantArray 3 BG.CFloat
-
-  offset# = \_ -> \_ -> 24
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "sensor_timestamp" SDL_GamepadSensorEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_GamepadSensorEvent
-            { sensor_timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , sensor = BG.getField @"sensor" x0
-            , data' = BG.getField @"data'" x0
-            }
-      , BG.getField @"sensor_timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "sensor_timestamp" (BG.Ptr SDL_GamepadSensorEvent) (BG.Ptr ty)
-  where
-  getField =
-    HasCField.fromPtr (BG.Proxy @"sensor_timestamp")
-
-instance HasCField.HasCField SDL_GamepadSensorEvent "sensor_timestamp" where
-  type
-    CFieldType SDL_GamepadSensorEvent "sensor_timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 40
-
--- | Audio device event structure (event.adevice.*)
---
---     Note that SDL will send a SDL_EVENT_AUDIO_DEVICE_ADDED event for every device it discovers during initialization. After that, this event will only arrive when a device is hotplugged during the program\'s run.
---
---     @since 3.2.0
---
---     [C declaration]: @struct SDL_AudioDeviceEvent@, defined at @SDL3\/SDL_events.h 722:16@
-data SDL_AudioDeviceEvent = SDL_AudioDeviceEvent
-  { type' :: SDL_EventType
-  -- ^ SDL_EVENT_AUDIO_DEVICE_ADDED, or SDL_EVENT_AUDIO_DEVICE_REMOVED, or SDL_EVENT_AUDIO_DEVICE_FORMAT_CHANGED
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 724:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 725:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 726:12@
-  , which :: SDL3.Sys.Bindgen.Audio.SDL_AudioDeviceID
-  -- ^ SDL_AudioDeviceID for the device being added or removed or changing
-  --
-  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 727:23@
-  , recording :: BG.CBool
-  -- ^ false if a playback device, true if a recording device.
-  --
-  --          [C declaration]: @recording@, defined at @SDL3\/SDL_events.h 728:10@
-  , padding1 :: SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^ [C declaration]: @padding1@, defined at @SDL3\/SDL_events.h 729:11@
-  , padding2 :: SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^ [C declaration]: @padding2@, defined at @SDL3\/SDL_events.h 730:11@
-  , padding3 :: SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^ [C declaration]: @padding3@, defined at @SDL3\/SDL_events.h 731:11@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_AudioDeviceEvent where
-  staticSizeOf = \_ -> (24 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_AudioDeviceEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_AudioDeviceEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"recording") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"padding1") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"padding2") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"padding3") ptr0
-
-instance Marshal.WriteRaw SDL_AudioDeviceEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_AudioDeviceEvent
-            type'2
-            reserved3
-            timestamp4
-            which5
-            recording6
-            padding17
-            padding28
-            padding39 ->
-              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-                >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which5
-                >> HasCField.writeRaw (BG.Proxy @"recording") ptr0 recording6
-                >> HasCField.writeRaw (BG.Proxy @"padding1") ptr0 padding17
-                >> HasCField.writeRaw (BG.Proxy @"padding2") ptr0 padding28
-                >> HasCField.writeRaw (BG.Proxy @"padding3") ptr0 padding39
-
-deriving via Marshal.EquivStorable SDL_AudioDeviceEvent instance BG.Storable SDL_AudioDeviceEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_AudioDeviceEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_AudioDeviceEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , recording = BG.getField @"recording" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_AudioDeviceEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_AudioDeviceEvent "type'" where
-  type
-    CFieldType SDL_AudioDeviceEvent "type'" =
-      SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_AudioDeviceEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_AudioDeviceEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , recording = BG.getField @"recording" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_AudioDeviceEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_AudioDeviceEvent "reserved" where
-  type
-    CFieldType SDL_AudioDeviceEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_AudioDeviceEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_AudioDeviceEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , which = BG.getField @"which" x0
-            , recording = BG.getField @"recording" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_AudioDeviceEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_AudioDeviceEvent "timestamp" where
-  type
-    CFieldType SDL_AudioDeviceEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Audio.SDL_AudioDeviceID)
-  => BG.CompatHasField.HasField "which" SDL_AudioDeviceEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_AudioDeviceEvent
-            { which = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , recording = BG.getField @"recording" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            }
-      , BG.getField @"which" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Audio.SDL_AudioDeviceID)
-  => BG.HasField "which" (BG.Ptr SDL_AudioDeviceEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"which")
-
-instance HasCField.HasCField SDL_AudioDeviceEvent "which" where
-  type
-    CFieldType SDL_AudioDeviceEvent "which" =
-      SDL3.Sys.Bindgen.Audio.SDL_AudioDeviceID
-
-  offset# = \_ -> \_ -> 16
-
-instance
-  (ty ~ BG.CBool)
-  => BG.CompatHasField.HasField "recording" SDL_AudioDeviceEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_AudioDeviceEvent
-            { recording = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            }
-      , BG.getField @"recording" x0
-      )
-
-instance
-  (ty ~ BG.CBool)
-  => BG.HasField "recording" (BG.Ptr SDL_AudioDeviceEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"recording")
-
-instance HasCField.HasCField SDL_AudioDeviceEvent "recording" where
-  type
-    CFieldType SDL_AudioDeviceEvent "recording" =
-      BG.CBool
-
-  offset# = \_ -> \_ -> 20
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.CompatHasField.HasField "padding1" SDL_AudioDeviceEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_AudioDeviceEvent
-            { padding1 = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , recording = BG.getField @"recording" x0
-            , padding2 = BG.getField @"padding2" x0
-            , padding3 = BG.getField @"padding3" x0
-            }
-      , BG.getField @"padding1" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.HasField "padding1" (BG.Ptr SDL_AudioDeviceEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"padding1")
-
-instance HasCField.HasCField SDL_AudioDeviceEvent "padding1" where
-  type
-    CFieldType SDL_AudioDeviceEvent "padding1" =
-      SDL3.Sys.Bindgen.Stdinc.Uint8
-
-  offset# = \_ -> \_ -> 21
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.CompatHasField.HasField "padding2" SDL_AudioDeviceEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_AudioDeviceEvent
-            { padding2 = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , recording = BG.getField @"recording" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding3 = BG.getField @"padding3" x0
-            }
-      , BG.getField @"padding2" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.HasField "padding2" (BG.Ptr SDL_AudioDeviceEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"padding2")
-
-instance HasCField.HasCField SDL_AudioDeviceEvent "padding2" where
-  type
-    CFieldType SDL_AudioDeviceEvent "padding2" =
-      SDL3.Sys.Bindgen.Stdinc.Uint8
-
-  offset# = \_ -> \_ -> 22
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.CompatHasField.HasField "padding3" SDL_AudioDeviceEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_AudioDeviceEvent
-            { padding3 = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , recording = BG.getField @"recording" x0
-            , padding1 = BG.getField @"padding1" x0
-            , padding2 = BG.getField @"padding2" x0
-            }
-      , BG.getField @"padding3" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.HasField "padding3" (BG.Ptr SDL_AudioDeviceEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"padding3")
-
-instance HasCField.HasCField SDL_AudioDeviceEvent "padding3" where
-  type
-    CFieldType SDL_AudioDeviceEvent "padding3" =
-      SDL3.Sys.Bindgen.Stdinc.Uint8
-
-  offset# = \_ -> \_ -> 23
-
--- | Camera device event structure (event.cdevice.*)
---
---     @since 3.2.0
---
---     [C declaration]: @struct SDL_CameraDeviceEvent@, defined at @SDL3\/SDL_events.h 739:16@
-data SDL_CameraDeviceEvent = SDL_CameraDeviceEvent
-  { type' :: SDL_EventType
-  -- ^ SDL_EVENT_CAMERA_DEVICE_ADDED, SDL_EVENT_CAMERA_DEVICE_REMOVED, SDL_EVENT_CAMERA_DEVICE_APPROVED, SDL_EVENT_CAMERA_DEVICE_DENIED
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 741:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 742:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 743:12@
-  , which :: SDL3.Sys.Bindgen.Camera.SDL_CameraID
-  -- ^ SDL_CameraID for the device being added or removed or changing
-  --
-  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 744:18@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_CameraDeviceEvent where
-  staticSizeOf = \_ -> (24 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_CameraDeviceEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_CameraDeviceEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
-
-instance Marshal.WriteRaw SDL_CameraDeviceEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_CameraDeviceEvent type'2 reserved3 timestamp4 which5 ->
-            HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-              >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-              >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-              >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which5
-
-deriving via Marshal.EquivStorable SDL_CameraDeviceEvent instance BG.Storable SDL_CameraDeviceEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_CameraDeviceEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_CameraDeviceEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_CameraDeviceEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_CameraDeviceEvent "type'" where
-  type
-    CFieldType SDL_CameraDeviceEvent "type'" =
-      SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_CameraDeviceEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_CameraDeviceEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_CameraDeviceEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_CameraDeviceEvent "reserved" where
-  type
-    CFieldType SDL_CameraDeviceEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_CameraDeviceEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_CameraDeviceEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , which = BG.getField @"which" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_CameraDeviceEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_CameraDeviceEvent "timestamp" where
-  type
-    CFieldType SDL_CameraDeviceEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Camera.SDL_CameraID)
-  => BG.CompatHasField.HasField "which" SDL_CameraDeviceEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_CameraDeviceEvent
-            { which = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            }
-      , BG.getField @"which" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Camera.SDL_CameraID)
-  => BG.HasField "which" (BG.Ptr SDL_CameraDeviceEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"which")
-
-instance HasCField.HasCField SDL_CameraDeviceEvent "which" where
-  type
-    CFieldType SDL_CameraDeviceEvent "which" =
-      SDL3.Sys.Bindgen.Camera.SDL_CameraID
-
-  offset# = \_ -> \_ -> 16
-
--- | Renderer event structure (event.render.*)
---
---     @since 3.2.0
---
---     [C declaration]: @struct SDL_RenderEvent@, defined at @SDL3\/SDL_events.h 753:16@
-data SDL_RenderEvent = SDL_RenderEvent
-  { type' :: SDL_EventType
-  -- ^ SDL_EVENT_RENDER_TARGETS_RESET, SDL_EVENT_RENDER_DEVICE_RESET, SDL_EVENT_RENDER_DEVICE_LOST
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 755:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 756:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 757:12@
-  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
-  -- ^ The window containing the renderer in question.
-  --
-  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 758:18@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_RenderEvent where
-  staticSizeOf = \_ -> (24 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_RenderEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_RenderEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
-
-instance Marshal.WriteRaw SDL_RenderEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_RenderEvent type'2 reserved3 timestamp4 windowID5 ->
-            HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-              >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-              >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-              >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID5
-
-deriving via Marshal.EquivStorable SDL_RenderEvent instance BG.Storable SDL_RenderEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_RenderEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_RenderEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_RenderEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_RenderEvent "type'" where
-  type
-    CFieldType SDL_RenderEvent "type'" =
-      SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_RenderEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_RenderEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_RenderEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_RenderEvent "reserved" where
-  type
-    CFieldType SDL_RenderEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_RenderEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_RenderEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , windowID = BG.getField @"windowID" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_RenderEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_RenderEvent "timestamp" where
-  type
-    CFieldType SDL_RenderEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.CompatHasField.HasField "windowID" SDL_RenderEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_RenderEvent
-            { windowID = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            }
-      , BG.getField @"windowID" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.HasField "windowID" (BG.Ptr SDL_RenderEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"windowID")
-
-instance HasCField.HasCField SDL_RenderEvent "windowID" where
-  type
-    CFieldType SDL_RenderEvent "windowID" =
-      SDL3.Sys.Bindgen.Video.SDL_WindowID
-
-  offset# = \_ -> \_ -> 16
-
--- | Touch finger event structure (event.tfinger.*)
---
---     Coordinates in this event are normalized. @x@ and @y@ are normalized to a range between 0.0f and 1.0f, relative to the window, so (0,0) is the top left and (1,1) is the bottom right. Delta coordinates @dx@ and @dy@ are normalized in the ranges of -1.0f (traversed all the way from the bottom or right to all the way up or left) to 1.0f (traversed all the way from the top or left to all the way down or right).
---
---     Note that while the coordinates are /normalized/, they are not /clamped/, which means in some circumstances you can get a value outside of this range. For example, a renderer using logical presentation might give a negative value when the touch is in the letterboxing. Some platforms might report a touch outside of the window, which will also be outside of the range.
---
---     @since 3.2.0
---
---     [C declaration]: @struct SDL_TouchFingerEvent@, defined at @SDL3\/SDL_events.h 781:16@
-data SDL_TouchFingerEvent = SDL_TouchFingerEvent
-  { type' :: SDL_EventType
-  -- ^ SDL_EVENT_FINGER_DOWN, SDL_EVENT_FINGER_UP, SDL_EVENT_FINGER_MOTION, or SDL_EVENT_FINGER_CANCELED
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 783:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 784:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 785:12@
-  , touchID :: SDL3.Sys.Bindgen.Touch.SDL_TouchID
-  -- ^ The touch device id
-  --
-  --          [C declaration]: @touchID@, defined at @SDL3\/SDL_events.h 786:17@
-  , fingerID :: SDL3.Sys.Bindgen.Touch.SDL_FingerID
-  -- ^ [C declaration]: @fingerID@, defined at @SDL3\/SDL_events.h 787:18@
-  , x :: BG.CFloat
-  -- ^ Normalized in the range 0...1
-  --
-  --          [C declaration]: @x@, defined at @SDL3\/SDL_events.h 788:11@
-  , y :: BG.CFloat
-  -- ^ Normalized in the range 0...1
-  --
-  --          [C declaration]: @y@, defined at @SDL3\/SDL_events.h 789:11@
-  , dx :: BG.CFloat
-  -- ^ Normalized in the range -1...1
-  --
-  --          [C declaration]: @dx@, defined at @SDL3\/SDL_events.h 790:11@
-  , dy :: BG.CFloat
-  -- ^ Normalized in the range -1...1
-  --
-  --          [C declaration]: @dy@, defined at @SDL3\/SDL_events.h 791:11@
-  , pressure :: BG.CFloat
-  -- ^ Normalized in the range 0...1
-  --
-  --          [C declaration]: @pressure@, defined at @SDL3\/SDL_events.h 792:11@
-  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
-  -- ^ The window underneath the finger, if any
-  --
-  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 793:18@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_TouchFingerEvent where
-  staticSizeOf = \_ -> (56 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_TouchFingerEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_TouchFingerEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"touchID") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"fingerID") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"x") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"y") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"dx") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"dy") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"pressure") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
-
-instance Marshal.WriteRaw SDL_TouchFingerEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_TouchFingerEvent
-            type'2
-            reserved3
-            timestamp4
-            touchID5
-            fingerID6
-            x7
-            y8
-            dx9
-            dy10
-            pressure11
-            windowID12 ->
-              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-                >> HasCField.writeRaw (BG.Proxy @"touchID") ptr0 touchID5
-                >> HasCField.writeRaw (BG.Proxy @"fingerID") ptr0 fingerID6
-                >> HasCField.writeRaw (BG.Proxy @"x") ptr0 x7
-                >> HasCField.writeRaw (BG.Proxy @"y") ptr0 y8
-                >> HasCField.writeRaw (BG.Proxy @"dx") ptr0 dx9
-                >> HasCField.writeRaw (BG.Proxy @"dy") ptr0 dy10
-                >> HasCField.writeRaw (BG.Proxy @"pressure") ptr0 pressure11
-                >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID12
-
-deriving via Marshal.EquivStorable SDL_TouchFingerEvent instance BG.Storable SDL_TouchFingerEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_TouchFingerEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_TouchFingerEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , touchID = BG.getField @"touchID" x0
-            , fingerID = BG.getField @"fingerID" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , dx = BG.getField @"dx" x0
-            , dy = BG.getField @"dy" x0
-            , pressure = BG.getField @"pressure" x0
-            , windowID = BG.getField @"windowID" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_TouchFingerEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_TouchFingerEvent "type'" where
-  type
-    CFieldType SDL_TouchFingerEvent "type'" =
-      SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_TouchFingerEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_TouchFingerEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , touchID = BG.getField @"touchID" x0
-            , fingerID = BG.getField @"fingerID" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , dx = BG.getField @"dx" x0
-            , dy = BG.getField @"dy" x0
-            , pressure = BG.getField @"pressure" x0
-            , windowID = BG.getField @"windowID" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_TouchFingerEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_TouchFingerEvent "reserved" where
-  type
-    CFieldType SDL_TouchFingerEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_TouchFingerEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_TouchFingerEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , touchID = BG.getField @"touchID" x0
-            , fingerID = BG.getField @"fingerID" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , dx = BG.getField @"dx" x0
-            , dy = BG.getField @"dy" x0
-            , pressure = BG.getField @"pressure" x0
-            , windowID = BG.getField @"windowID" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_TouchFingerEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_TouchFingerEvent "timestamp" where
-  type
-    CFieldType SDL_TouchFingerEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Touch.SDL_TouchID)
-  => BG.CompatHasField.HasField "touchID" SDL_TouchFingerEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_TouchFingerEvent
-            { touchID = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , fingerID = BG.getField @"fingerID" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , dx = BG.getField @"dx" x0
-            , dy = BG.getField @"dy" x0
-            , pressure = BG.getField @"pressure" x0
-            , windowID = BG.getField @"windowID" x0
-            }
-      , BG.getField @"touchID" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Touch.SDL_TouchID)
-  => BG.HasField "touchID" (BG.Ptr SDL_TouchFingerEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"touchID")
-
-instance HasCField.HasCField SDL_TouchFingerEvent "touchID" where
-  type
-    CFieldType SDL_TouchFingerEvent "touchID" =
-      SDL3.Sys.Bindgen.Touch.SDL_TouchID
-
-  offset# = \_ -> \_ -> 16
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Touch.SDL_FingerID)
-  => BG.CompatHasField.HasField "fingerID" SDL_TouchFingerEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_TouchFingerEvent
-            { fingerID = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , touchID = BG.getField @"touchID" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , dx = BG.getField @"dx" x0
-            , dy = BG.getField @"dy" x0
-            , pressure = BG.getField @"pressure" x0
-            , windowID = BG.getField @"windowID" x0
-            }
-      , BG.getField @"fingerID" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Touch.SDL_FingerID)
-  => BG.HasField "fingerID" (BG.Ptr SDL_TouchFingerEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"fingerID")
-
-instance HasCField.HasCField SDL_TouchFingerEvent "fingerID" where
-  type
-    CFieldType SDL_TouchFingerEvent "fingerID" =
-      SDL3.Sys.Bindgen.Touch.SDL_FingerID
-
-  offset# = \_ -> \_ -> 24
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.CompatHasField.HasField "x" SDL_TouchFingerEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_TouchFingerEvent
-            { x = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , touchID = BG.getField @"touchID" x0
-            , fingerID = BG.getField @"fingerID" x0
-            , y = BG.getField @"y" x0
-            , dx = BG.getField @"dx" x0
-            , dy = BG.getField @"dy" x0
-            , pressure = BG.getField @"pressure" x0
-            , windowID = BG.getField @"windowID" x0
-            }
-      , BG.getField @"x" x0
-      )
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.HasField "x" (BG.Ptr SDL_TouchFingerEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"x")
-
-instance HasCField.HasCField SDL_TouchFingerEvent "x" where
-  type CFieldType SDL_TouchFingerEvent "x" = BG.CFloat
-
-  offset# = \_ -> \_ -> 32
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.CompatHasField.HasField "y" SDL_TouchFingerEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_TouchFingerEvent
-            { y = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , touchID = BG.getField @"touchID" x0
-            , fingerID = BG.getField @"fingerID" x0
-            , x = BG.getField @"x" x0
-            , dx = BG.getField @"dx" x0
-            , dy = BG.getField @"dy" x0
-            , pressure = BG.getField @"pressure" x0
-            , windowID = BG.getField @"windowID" x0
-            }
-      , BG.getField @"y" x0
-      )
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.HasField "y" (BG.Ptr SDL_TouchFingerEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"y")
-
-instance HasCField.HasCField SDL_TouchFingerEvent "y" where
-  type CFieldType SDL_TouchFingerEvent "y" = BG.CFloat
-
-  offset# = \_ -> \_ -> 36
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.CompatHasField.HasField "dx" SDL_TouchFingerEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_TouchFingerEvent
-            { dx = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , touchID = BG.getField @"touchID" x0
-            , fingerID = BG.getField @"fingerID" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , dy = BG.getField @"dy" x0
-            , pressure = BG.getField @"pressure" x0
-            , windowID = BG.getField @"windowID" x0
-            }
-      , BG.getField @"dx" x0
-      )
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.HasField "dx" (BG.Ptr SDL_TouchFingerEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"dx")
-
-instance HasCField.HasCField SDL_TouchFingerEvent "dx" where
-  type CFieldType SDL_TouchFingerEvent "dx" = BG.CFloat
-
-  offset# = \_ -> \_ -> 40
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.CompatHasField.HasField "dy" SDL_TouchFingerEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_TouchFingerEvent
-            { dy = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , touchID = BG.getField @"touchID" x0
-            , fingerID = BG.getField @"fingerID" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , dx = BG.getField @"dx" x0
-            , pressure = BG.getField @"pressure" x0
-            , windowID = BG.getField @"windowID" x0
-            }
-      , BG.getField @"dy" x0
-      )
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.HasField "dy" (BG.Ptr SDL_TouchFingerEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"dy")
-
-instance HasCField.HasCField SDL_TouchFingerEvent "dy" where
-  type CFieldType SDL_TouchFingerEvent "dy" = BG.CFloat
-
-  offset# = \_ -> \_ -> 44
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.CompatHasField.HasField "pressure" SDL_TouchFingerEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_TouchFingerEvent
-            { pressure = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , touchID = BG.getField @"touchID" x0
-            , fingerID = BG.getField @"fingerID" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , dx = BG.getField @"dx" x0
-            , dy = BG.getField @"dy" x0
-            , windowID = BG.getField @"windowID" x0
-            }
-      , BG.getField @"pressure" x0
-      )
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.HasField "pressure" (BG.Ptr SDL_TouchFingerEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"pressure")
-
-instance HasCField.HasCField SDL_TouchFingerEvent "pressure" where
-  type
-    CFieldType SDL_TouchFingerEvent "pressure" =
-      BG.CFloat
-
-  offset# = \_ -> \_ -> 48
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.CompatHasField.HasField "windowID" SDL_TouchFingerEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_TouchFingerEvent
-            { windowID = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , touchID = BG.getField @"touchID" x0
-            , fingerID = BG.getField @"fingerID" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , dx = BG.getField @"dx" x0
-            , dy = BG.getField @"dy" x0
-            , pressure = BG.getField @"pressure" x0
-            }
-      , BG.getField @"windowID" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.HasField "windowID" (BG.Ptr SDL_TouchFingerEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"windowID")
-
-instance HasCField.HasCField SDL_TouchFingerEvent "windowID" where
-  type
-    CFieldType SDL_TouchFingerEvent "windowID" =
-      SDL3.Sys.Bindgen.Video.SDL_WindowID
-
-  offset# = \_ -> \_ -> 52
-
--- | Pinch event structure (event.pinch.*)
---
---     [C declaration]: @struct SDL_PinchFingerEvent@, defined at @SDL3\/SDL_events.h 799:16@
-data SDL_PinchFingerEvent = SDL_PinchFingerEvent
-  { type' :: SDL_EventType
-  -- ^ @SDL_EVENT_PINCH_BEGIN@ or @SDL_EVENT_PINCH_UPDATE@ or @SDL_EVENT_PINCH_END@
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 801:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 802:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 803:12@
-  , scale :: BG.CFloat
-  -- ^ The scale change since the last SDL_EVENT_PINCH_UPDATE. Scale \< 1 is \"zoom out\". Scale > 1 is \"zoom in\".
-  --
-  --          [C declaration]: @scale@, defined at @SDL3\/SDL_events.h 804:11@
-  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
-  -- ^ The window underneath the finger, if any
-  --
-  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 805:18@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_PinchFingerEvent where
-  staticSizeOf = \_ -> (24 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_PinchFingerEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_PinchFingerEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"scale") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
-
-instance Marshal.WriteRaw SDL_PinchFingerEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_PinchFingerEvent type'2 reserved3 timestamp4 scale5 windowID6 ->
-            HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-              >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-              >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-              >> HasCField.writeRaw (BG.Proxy @"scale") ptr0 scale5
-              >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID6
-
-deriving via Marshal.EquivStorable SDL_PinchFingerEvent instance BG.Storable SDL_PinchFingerEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_PinchFingerEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PinchFingerEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , scale = BG.getField @"scale" x0
-            , windowID = BG.getField @"windowID" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_PinchFingerEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_PinchFingerEvent "type'" where
-  type
-    CFieldType SDL_PinchFingerEvent "type'" =
-      SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_PinchFingerEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PinchFingerEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , scale = BG.getField @"scale" x0
-            , windowID = BG.getField @"windowID" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_PinchFingerEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_PinchFingerEvent "reserved" where
-  type
-    CFieldType SDL_PinchFingerEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_PinchFingerEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PinchFingerEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , scale = BG.getField @"scale" x0
-            , windowID = BG.getField @"windowID" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_PinchFingerEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_PinchFingerEvent "timestamp" where
-  type
-    CFieldType SDL_PinchFingerEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.CompatHasField.HasField "scale" SDL_PinchFingerEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PinchFingerEvent
-            { scale = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            }
-      , BG.getField @"scale" x0
-      )
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.HasField "scale" (BG.Ptr SDL_PinchFingerEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"scale")
-
-instance HasCField.HasCField SDL_PinchFingerEvent "scale" where
-  type
-    CFieldType SDL_PinchFingerEvent "scale" =
-      BG.CFloat
-
-  offset# = \_ -> \_ -> 16
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.CompatHasField.HasField "windowID" SDL_PinchFingerEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PinchFingerEvent
-            { windowID = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , scale = BG.getField @"scale" x0
-            }
-      , BG.getField @"windowID" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.HasField "windowID" (BG.Ptr SDL_PinchFingerEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"windowID")
-
-instance HasCField.HasCField SDL_PinchFingerEvent "windowID" where
-  type
-    CFieldType SDL_PinchFingerEvent "windowID" =
-      SDL3.Sys.Bindgen.Video.SDL_WindowID
-
-  offset# = \_ -> \_ -> 20
-
--- | Pressure-sensitive pen proximity event structure (event.pproximity.*)
---
---     When a pen becomes visible to the system (it is close enough to a tablet, etc), SDL will send an SDL_EVENT_PEN_PROXIMITY_IN event with the new pen\'s ID. This ID is valid until the pen leaves proximity again (has been removed from the tablet\'s area, the tablet has been unplugged, etc). If the same pen reenters proximity again, it will be given a new ID.
---
---     Note that \"proximity\" means \"close enough for the tablet to know the tool is there.\" The pen touching and lifting off from the tablet while not leaving the area are handled by SDL_EVENT_PEN_DOWN and SDL_EVENT_PEN_UP.
---
---     Not all platforms have a window associated with the pen during proximity events. Some wait until motion\/button\/etc events to offer this info.
---
---     @since 3.2.0
---
---     [C declaration]: @struct SDL_PenProximityEvent@, defined at @SDL3\/SDL_events.h 826:16@
-data SDL_PenProximityEvent = SDL_PenProximityEvent
-  { type' :: SDL_EventType
-  -- ^ SDL_EVENT_PEN_PROXIMITY_IN or SDL_EVENT_PEN_PROXIMITY_OUT
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 828:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 829:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 830:12@
-  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
-  -- ^ The window with pen focus, if any
-  --
-  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 831:18@
-  , which :: SDL3.Sys.Bindgen.Pen.SDL_PenID
-  -- ^ The pen instance id
-  --
-  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 832:15@
-  , pen_state :: SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags
-  -- ^ Complete pen input state at time of event (added in 3.4.16).
-  --
-  --          [C declaration]: @pen_state@, defined at @SDL3\/SDL_events.h 833:23@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_PenProximityEvent where
-  staticSizeOf = \_ -> (32 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_PenProximityEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_PenProximityEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"pen_state") ptr0
-
-instance Marshal.WriteRaw SDL_PenProximityEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_PenProximityEvent type'2 reserved3 timestamp4 windowID5 which6 pen_state7 ->
-            HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-              >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-              >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-              >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID5
-              >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which6
-              >> HasCField.writeRaw (BG.Proxy @"pen_state") ptr0 pen_state7
-
-deriving via Marshal.EquivStorable SDL_PenProximityEvent instance BG.Storable SDL_PenProximityEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_PenProximityEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenProximityEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , pen_state = BG.getField @"pen_state" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_PenProximityEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_PenProximityEvent "type'" where
-  type
-    CFieldType SDL_PenProximityEvent "type'" =
-      SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_PenProximityEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenProximityEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , pen_state = BG.getField @"pen_state" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_PenProximityEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_PenProximityEvent "reserved" where
-  type
-    CFieldType SDL_PenProximityEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_PenProximityEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenProximityEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , pen_state = BG.getField @"pen_state" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_PenProximityEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_PenProximityEvent "timestamp" where
-  type
-    CFieldType SDL_PenProximityEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.CompatHasField.HasField "windowID" SDL_PenProximityEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenProximityEvent
-            { windowID = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , pen_state = BG.getField @"pen_state" x0
-            }
-      , BG.getField @"windowID" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.HasField "windowID" (BG.Ptr SDL_PenProximityEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"windowID")
-
-instance HasCField.HasCField SDL_PenProximityEvent "windowID" where
-  type
-    CFieldType SDL_PenProximityEvent "windowID" =
-      SDL3.Sys.Bindgen.Video.SDL_WindowID
-
-  offset# = \_ -> \_ -> 16
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenID)
-  => BG.CompatHasField.HasField "which" SDL_PenProximityEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenProximityEvent
-            { which = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , pen_state = BG.getField @"pen_state" x0
-            }
-      , BG.getField @"which" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenID)
-  => BG.HasField "which" (BG.Ptr SDL_PenProximityEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"which")
-
-instance HasCField.HasCField SDL_PenProximityEvent "which" where
-  type
-    CFieldType SDL_PenProximityEvent "which" =
-      SDL3.Sys.Bindgen.Pen.SDL_PenID
-
-  offset# = \_ -> \_ -> 20
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags)
-  => BG.CompatHasField.HasField "pen_state" SDL_PenProximityEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenProximityEvent
-            { pen_state = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            }
-      , BG.getField @"pen_state" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags)
-  => BG.HasField "pen_state" (BG.Ptr SDL_PenProximityEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"pen_state")
-
-instance HasCField.HasCField SDL_PenProximityEvent "pen_state" where
-  type
-    CFieldType SDL_PenProximityEvent "pen_state" =
-      SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags
-
-  offset# = \_ -> \_ -> 24
-
--- | Pressure-sensitive pen motion event structure (event.pmotion.*)
---
---     Depending on the hardware, you may get motion events when the pen is not touching a tablet, for tracking a pen even when it isn\'t drawing. You should listen for SDL_EVENT_PEN_DOWN and SDL_EVENT_PEN_UP events, or check @pen_state & SDL_PEN_INPUT_DOWN@ to decide if a pen is \"drawing\" when dealing with pen motion.
---
---     @since 3.2.0
---
---     [C declaration]: @struct SDL_PenMotionEvent@, defined at @SDL3\/SDL_events.h 847:16@
-data SDL_PenMotionEvent = SDL_PenMotionEvent
-  { type' :: SDL_EventType
-  -- ^ SDL_EVENT_PEN_MOTION
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 849:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 850:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 851:12@
-  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
-  -- ^ The window with pen focus, if any
-  --
-  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 852:18@
-  , which :: SDL3.Sys.Bindgen.Pen.SDL_PenID
-  -- ^ The pen instance id
-  --
-  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 853:15@
-  , pen_state :: SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags
-  -- ^ Complete pen input state at time of event
-  --
-  --          [C declaration]: @pen_state@, defined at @SDL3\/SDL_events.h 854:23@
-  , x :: BG.CFloat
-  -- ^ X coordinate, relative to window
-  --
-  --          [C declaration]: @x@, defined at @SDL3\/SDL_events.h 855:11@
-  , y :: BG.CFloat
-  -- ^ Y coordinate, relative to window
-  --
-  --          [C declaration]: @y@, defined at @SDL3\/SDL_events.h 856:11@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_PenMotionEvent where
-  staticSizeOf = \_ -> (40 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_PenMotionEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_PenMotionEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"pen_state") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"x") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"y") ptr0
-
-instance Marshal.WriteRaw SDL_PenMotionEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_PenMotionEvent
-            type'2
-            reserved3
-            timestamp4
-            windowID5
-            which6
-            pen_state7
-            x8
-            y9 ->
-              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-                >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID5
-                >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which6
-                >> HasCField.writeRaw (BG.Proxy @"pen_state") ptr0 pen_state7
-                >> HasCField.writeRaw (BG.Proxy @"x") ptr0 x8
-                >> HasCField.writeRaw (BG.Proxy @"y") ptr0 y9
-
-deriving via Marshal.EquivStorable SDL_PenMotionEvent instance BG.Storable SDL_PenMotionEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_PenMotionEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenMotionEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , pen_state = BG.getField @"pen_state" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_PenMotionEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_PenMotionEvent "type'" where
-  type
-    CFieldType SDL_PenMotionEvent "type'" =
-      SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_PenMotionEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenMotionEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , pen_state = BG.getField @"pen_state" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_PenMotionEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_PenMotionEvent "reserved" where
-  type
-    CFieldType SDL_PenMotionEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_PenMotionEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenMotionEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , pen_state = BG.getField @"pen_state" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_PenMotionEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_PenMotionEvent "timestamp" where
-  type
-    CFieldType SDL_PenMotionEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.CompatHasField.HasField "windowID" SDL_PenMotionEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenMotionEvent
-            { windowID = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , pen_state = BG.getField @"pen_state" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            }
-      , BG.getField @"windowID" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.HasField "windowID" (BG.Ptr SDL_PenMotionEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"windowID")
-
-instance HasCField.HasCField SDL_PenMotionEvent "windowID" where
-  type
-    CFieldType SDL_PenMotionEvent "windowID" =
-      SDL3.Sys.Bindgen.Video.SDL_WindowID
-
-  offset# = \_ -> \_ -> 16
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenID)
-  => BG.CompatHasField.HasField "which" SDL_PenMotionEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenMotionEvent
-            { which = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , pen_state = BG.getField @"pen_state" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            }
-      , BG.getField @"which" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenID)
-  => BG.HasField "which" (BG.Ptr SDL_PenMotionEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"which")
-
-instance HasCField.HasCField SDL_PenMotionEvent "which" where
-  type
-    CFieldType SDL_PenMotionEvent "which" =
-      SDL3.Sys.Bindgen.Pen.SDL_PenID
-
-  offset# = \_ -> \_ -> 20
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags)
-  => BG.CompatHasField.HasField "pen_state" SDL_PenMotionEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenMotionEvent
-            { pen_state = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            }
-      , BG.getField @"pen_state" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags)
-  => BG.HasField "pen_state" (BG.Ptr SDL_PenMotionEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"pen_state")
-
-instance HasCField.HasCField SDL_PenMotionEvent "pen_state" where
-  type
-    CFieldType SDL_PenMotionEvent "pen_state" =
-      SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags
-
-  offset# = \_ -> \_ -> 24
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.CompatHasField.HasField "x" SDL_PenMotionEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenMotionEvent
-            { x = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , pen_state = BG.getField @"pen_state" x0
-            , y = BG.getField @"y" x0
-            }
-      , BG.getField @"x" x0
-      )
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.HasField "x" (BG.Ptr SDL_PenMotionEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"x")
-
-instance HasCField.HasCField SDL_PenMotionEvent "x" where
-  type CFieldType SDL_PenMotionEvent "x" = BG.CFloat
-
-  offset# = \_ -> \_ -> 28
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.CompatHasField.HasField "y" SDL_PenMotionEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenMotionEvent
-            { y = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , pen_state = BG.getField @"pen_state" x0
-            , x = BG.getField @"x" x0
-            }
-      , BG.getField @"y" x0
-      )
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.HasField "y" (BG.Ptr SDL_PenMotionEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"y")
-
-instance HasCField.HasCField SDL_PenMotionEvent "y" where
-  type CFieldType SDL_PenMotionEvent "y" = BG.CFloat
-
-  offset# = \_ -> \_ -> 32
-
--- | Pressure-sensitive pen touched event structure (event.ptouch.*)
---
---     These events come when a pen touches a surface (a tablet, etc), or lifts off from one.
---
---     @since 3.2.0
---
---     [C declaration]: @struct SDL_PenTouchEvent@, defined at @SDL3\/SDL_events.h 867:16@
-data SDL_PenTouchEvent = SDL_PenTouchEvent
-  { type' :: SDL_EventType
-  -- ^ SDL_EVENT_PEN_DOWN or SDL_EVENT_PEN_UP
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 869:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 870:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 871:12@
-  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
-  -- ^ The window with pen focus, if any
-  --
-  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 872:18@
-  , which :: SDL3.Sys.Bindgen.Pen.SDL_PenID
-  -- ^ The pen instance id
-  --
-  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 873:15@
-  , pen_state :: SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags
-  -- ^ Complete pen input state at time of event
-  --
-  --          [C declaration]: @pen_state@, defined at @SDL3\/SDL_events.h 874:23@
-  , x :: BG.CFloat
-  -- ^ X coordinate, relative to window
-  --
-  --          [C declaration]: @x@, defined at @SDL3\/SDL_events.h 875:11@
-  , y :: BG.CFloat
-  -- ^ Y coordinate, relative to window
-  --
-  --          [C declaration]: @y@, defined at @SDL3\/SDL_events.h 876:11@
-  , eraser :: BG.CBool
-  -- ^ true if eraser end is used (not all pens support this).
-  --
-  --          [C declaration]: @eraser@, defined at @SDL3\/SDL_events.h 877:10@
-  , down :: BG.CBool
-  -- ^ true if the pen is touching or false if the pen is lifted off
-  --
-  --          [C declaration]: @down@, defined at @SDL3\/SDL_events.h 878:10@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_PenTouchEvent where
-  staticSizeOf = \_ -> (40 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_PenTouchEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_PenTouchEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"pen_state") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"x") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"y") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"eraser") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"down") ptr0
-
-instance Marshal.WriteRaw SDL_PenTouchEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_PenTouchEvent
-            type'2
-            reserved3
-            timestamp4
-            windowID5
-            which6
-            pen_state7
-            x8
-            y9
-            eraser10
-            down11 ->
-              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-                >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID5
-                >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which6
-                >> HasCField.writeRaw (BG.Proxy @"pen_state") ptr0 pen_state7
-                >> HasCField.writeRaw (BG.Proxy @"x") ptr0 x8
-                >> HasCField.writeRaw (BG.Proxy @"y") ptr0 y9
-                >> HasCField.writeRaw (BG.Proxy @"eraser") ptr0 eraser10
-                >> HasCField.writeRaw (BG.Proxy @"down") ptr0 down11
-
-deriving via Marshal.EquivStorable SDL_PenTouchEvent instance BG.Storable SDL_PenTouchEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_PenTouchEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenTouchEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , pen_state = BG.getField @"pen_state" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , eraser = BG.getField @"eraser" x0
-            , down = BG.getField @"down" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_PenTouchEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_PenTouchEvent "type'" where
-  type
-    CFieldType SDL_PenTouchEvent "type'" =
-      SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_PenTouchEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenTouchEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , pen_state = BG.getField @"pen_state" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , eraser = BG.getField @"eraser" x0
-            , down = BG.getField @"down" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_PenTouchEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_PenTouchEvent "reserved" where
-  type
-    CFieldType SDL_PenTouchEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_PenTouchEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenTouchEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , pen_state = BG.getField @"pen_state" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , eraser = BG.getField @"eraser" x0
-            , down = BG.getField @"down" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_PenTouchEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_PenTouchEvent "timestamp" where
-  type
-    CFieldType SDL_PenTouchEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.CompatHasField.HasField "windowID" SDL_PenTouchEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenTouchEvent
-            { windowID = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , pen_state = BG.getField @"pen_state" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , eraser = BG.getField @"eraser" x0
-            , down = BG.getField @"down" x0
-            }
-      , BG.getField @"windowID" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.HasField "windowID" (BG.Ptr SDL_PenTouchEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"windowID")
-
-instance HasCField.HasCField SDL_PenTouchEvent "windowID" where
-  type
-    CFieldType SDL_PenTouchEvent "windowID" =
-      SDL3.Sys.Bindgen.Video.SDL_WindowID
-
-  offset# = \_ -> \_ -> 16
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenID)
-  => BG.CompatHasField.HasField "which" SDL_PenTouchEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenTouchEvent
-            { which = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , pen_state = BG.getField @"pen_state" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , eraser = BG.getField @"eraser" x0
-            , down = BG.getField @"down" x0
-            }
-      , BG.getField @"which" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenID)
-  => BG.HasField "which" (BG.Ptr SDL_PenTouchEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"which")
-
-instance HasCField.HasCField SDL_PenTouchEvent "which" where
-  type
-    CFieldType SDL_PenTouchEvent "which" =
-      SDL3.Sys.Bindgen.Pen.SDL_PenID
-
-  offset# = \_ -> \_ -> 20
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags)
-  => BG.CompatHasField.HasField "pen_state" SDL_PenTouchEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenTouchEvent
-            { pen_state = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , eraser = BG.getField @"eraser" x0
-            , down = BG.getField @"down" x0
-            }
-      , BG.getField @"pen_state" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags)
-  => BG.HasField "pen_state" (BG.Ptr SDL_PenTouchEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"pen_state")
-
-instance HasCField.HasCField SDL_PenTouchEvent "pen_state" where
-  type
-    CFieldType SDL_PenTouchEvent "pen_state" =
-      SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags
-
-  offset# = \_ -> \_ -> 24
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.CompatHasField.HasField "x" SDL_PenTouchEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenTouchEvent
-            { x = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , pen_state = BG.getField @"pen_state" x0
-            , y = BG.getField @"y" x0
-            , eraser = BG.getField @"eraser" x0
-            , down = BG.getField @"down" x0
-            }
-      , BG.getField @"x" x0
-      )
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.HasField "x" (BG.Ptr SDL_PenTouchEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"x")
-
-instance HasCField.HasCField SDL_PenTouchEvent "x" where
-  type CFieldType SDL_PenTouchEvent "x" = BG.CFloat
-
-  offset# = \_ -> \_ -> 28
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.CompatHasField.HasField "y" SDL_PenTouchEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenTouchEvent
-            { y = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , pen_state = BG.getField @"pen_state" x0
-            , x = BG.getField @"x" x0
-            , eraser = BG.getField @"eraser" x0
-            , down = BG.getField @"down" x0
-            }
-      , BG.getField @"y" x0
-      )
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.HasField "y" (BG.Ptr SDL_PenTouchEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"y")
-
-instance HasCField.HasCField SDL_PenTouchEvent "y" where
-  type CFieldType SDL_PenTouchEvent "y" = BG.CFloat
-
-  offset# = \_ -> \_ -> 32
-
-instance
-  (ty ~ BG.CBool)
-  => BG.CompatHasField.HasField "eraser" SDL_PenTouchEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenTouchEvent
-            { eraser = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , pen_state = BG.getField @"pen_state" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , down = BG.getField @"down" x0
-            }
-      , BG.getField @"eraser" x0
-      )
-
-instance
-  (ty ~ BG.CBool)
-  => BG.HasField "eraser" (BG.Ptr SDL_PenTouchEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"eraser")
-
-instance HasCField.HasCField SDL_PenTouchEvent "eraser" where
-  type CFieldType SDL_PenTouchEvent "eraser" = BG.CBool
-
-  offset# = \_ -> \_ -> 36
-
-instance
-  (ty ~ BG.CBool)
-  => BG.CompatHasField.HasField "down" SDL_PenTouchEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenTouchEvent
-            { down = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , pen_state = BG.getField @"pen_state" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , eraser = BG.getField @"eraser" x0
-            }
-      , BG.getField @"down" x0
-      )
-
-instance
-  (ty ~ BG.CBool)
-  => BG.HasField "down" (BG.Ptr SDL_PenTouchEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"down")
-
-instance HasCField.HasCField SDL_PenTouchEvent "down" where
-  type CFieldType SDL_PenTouchEvent "down" = BG.CBool
-
-  offset# = \_ -> \_ -> 37
-
--- | Pressure-sensitive pen button event structure (event.pbutton.*)
---
---     This is for buttons on the pen itself that the user might click. The pen itself pressing down to draw triggers a SDL_EVENT_PEN_DOWN event instead.
---
---     @since 3.2.0
---
---     [C declaration]: @struct SDL_PenButtonEvent@, defined at @SDL3\/SDL_events.h 889:16@
-data SDL_PenButtonEvent = SDL_PenButtonEvent
-  { type' :: SDL_EventType
-  -- ^ SDL_EVENT_PEN_BUTTON_DOWN or SDL_EVENT_PEN_BUTTON_UP
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 891:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 892:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 893:12@
-  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
-  -- ^ The window with mouse focus, if any
-  --
-  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 894:18@
-  , which :: SDL3.Sys.Bindgen.Pen.SDL_PenID
-  -- ^ The pen instance id
-  --
-  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 895:15@
-  , pen_state :: SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags
-  -- ^ Complete pen input state at time of event
-  --
-  --          [C declaration]: @pen_state@, defined at @SDL3\/SDL_events.h 896:23@
-  , x :: BG.CFloat
-  -- ^ X coordinate, relative to window
-  --
-  --          [C declaration]: @x@, defined at @SDL3\/SDL_events.h 897:11@
-  , y :: BG.CFloat
-  -- ^ Y coordinate, relative to window
-  --
-  --          [C declaration]: @y@, defined at @SDL3\/SDL_events.h 898:11@
-  , button :: SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^ The pen button index (first button is 1).
-  --
-  --          [C declaration]: @button@, defined at @SDL3\/SDL_events.h 899:11@
-  , down :: BG.CBool
-  -- ^ true if the button is pressed
-  --
-  --          [C declaration]: @down@, defined at @SDL3\/SDL_events.h 900:10@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_PenButtonEvent where
-  staticSizeOf = \_ -> (40 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_PenButtonEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_PenButtonEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"pen_state") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"x") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"y") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"button") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"down") ptr0
-
-instance Marshal.WriteRaw SDL_PenButtonEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_PenButtonEvent
-            type'2
-            reserved3
-            timestamp4
-            windowID5
-            which6
-            pen_state7
-            x8
-            y9
-            button10
-            down11 ->
-              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-                >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID5
-                >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which6
-                >> HasCField.writeRaw (BG.Proxy @"pen_state") ptr0 pen_state7
-                >> HasCField.writeRaw (BG.Proxy @"x") ptr0 x8
-                >> HasCField.writeRaw (BG.Proxy @"y") ptr0 y9
-                >> HasCField.writeRaw (BG.Proxy @"button") ptr0 button10
-                >> HasCField.writeRaw (BG.Proxy @"down") ptr0 down11
-
-deriving via Marshal.EquivStorable SDL_PenButtonEvent instance BG.Storable SDL_PenButtonEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_PenButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenButtonEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , pen_state = BG.getField @"pen_state" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , button = BG.getField @"button" x0
-            , down = BG.getField @"down" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_PenButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_PenButtonEvent "type'" where
-  type
-    CFieldType SDL_PenButtonEvent "type'" =
-      SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_PenButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenButtonEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , pen_state = BG.getField @"pen_state" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , button = BG.getField @"button" x0
-            , down = BG.getField @"down" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_PenButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_PenButtonEvent "reserved" where
-  type
-    CFieldType SDL_PenButtonEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_PenButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenButtonEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , pen_state = BG.getField @"pen_state" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , button = BG.getField @"button" x0
-            , down = BG.getField @"down" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_PenButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_PenButtonEvent "timestamp" where
-  type
-    CFieldType SDL_PenButtonEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.CompatHasField.HasField "windowID" SDL_PenButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenButtonEvent
-            { windowID = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , pen_state = BG.getField @"pen_state" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , button = BG.getField @"button" x0
-            , down = BG.getField @"down" x0
-            }
-      , BG.getField @"windowID" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.HasField "windowID" (BG.Ptr SDL_PenButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"windowID")
-
-instance HasCField.HasCField SDL_PenButtonEvent "windowID" where
-  type
-    CFieldType SDL_PenButtonEvent "windowID" =
-      SDL3.Sys.Bindgen.Video.SDL_WindowID
-
-  offset# = \_ -> \_ -> 16
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenID)
-  => BG.CompatHasField.HasField "which" SDL_PenButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenButtonEvent
-            { which = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , pen_state = BG.getField @"pen_state" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , button = BG.getField @"button" x0
-            , down = BG.getField @"down" x0
-            }
-      , BG.getField @"which" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenID)
-  => BG.HasField "which" (BG.Ptr SDL_PenButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"which")
-
-instance HasCField.HasCField SDL_PenButtonEvent "which" where
-  type
-    CFieldType SDL_PenButtonEvent "which" =
-      SDL3.Sys.Bindgen.Pen.SDL_PenID
-
-  offset# = \_ -> \_ -> 20
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags)
-  => BG.CompatHasField.HasField "pen_state" SDL_PenButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenButtonEvent
-            { pen_state = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , button = BG.getField @"button" x0
-            , down = BG.getField @"down" x0
-            }
-      , BG.getField @"pen_state" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags)
-  => BG.HasField "pen_state" (BG.Ptr SDL_PenButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"pen_state")
-
-instance HasCField.HasCField SDL_PenButtonEvent "pen_state" where
-  type
-    CFieldType SDL_PenButtonEvent "pen_state" =
-      SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags
-
-  offset# = \_ -> \_ -> 24
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.CompatHasField.HasField "x" SDL_PenButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenButtonEvent
-            { x = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , pen_state = BG.getField @"pen_state" x0
-            , y = BG.getField @"y" x0
-            , button = BG.getField @"button" x0
-            , down = BG.getField @"down" x0
-            }
-      , BG.getField @"x" x0
-      )
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.HasField "x" (BG.Ptr SDL_PenButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"x")
-
-instance HasCField.HasCField SDL_PenButtonEvent "x" where
-  type CFieldType SDL_PenButtonEvent "x" = BG.CFloat
-
-  offset# = \_ -> \_ -> 28
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.CompatHasField.HasField "y" SDL_PenButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenButtonEvent
-            { y = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , pen_state = BG.getField @"pen_state" x0
-            , x = BG.getField @"x" x0
-            , button = BG.getField @"button" x0
-            , down = BG.getField @"down" x0
-            }
-      , BG.getField @"y" x0
-      )
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.HasField "y" (BG.Ptr SDL_PenButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"y")
-
-instance HasCField.HasCField SDL_PenButtonEvent "y" where
-  type CFieldType SDL_PenButtonEvent "y" = BG.CFloat
-
-  offset# = \_ -> \_ -> 32
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.CompatHasField.HasField "button" SDL_PenButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenButtonEvent
-            { button = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , pen_state = BG.getField @"pen_state" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , down = BG.getField @"down" x0
-            }
-      , BG.getField @"button" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.HasField "button" (BG.Ptr SDL_PenButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"button")
-
-instance HasCField.HasCField SDL_PenButtonEvent "button" where
-  type
-    CFieldType SDL_PenButtonEvent "button" =
-      SDL3.Sys.Bindgen.Stdinc.Uint8
-
-  offset# = \_ -> \_ -> 36
-
-instance
-  (ty ~ BG.CBool)
-  => BG.CompatHasField.HasField "down" SDL_PenButtonEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenButtonEvent
-            { down = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , pen_state = BG.getField @"pen_state" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , button = BG.getField @"button" x0
-            }
-      , BG.getField @"down" x0
-      )
-
-instance
-  (ty ~ BG.CBool)
-  => BG.HasField "down" (BG.Ptr SDL_PenButtonEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"down")
-
-instance HasCField.HasCField SDL_PenButtonEvent "down" where
-  type CFieldType SDL_PenButtonEvent "down" = BG.CBool
-
-  offset# = \_ -> \_ -> 37
-
--- | Pressure-sensitive pen pressure \/ angle event structure (event.paxis.*)
---
---     You might get some of these events even if the pen isn\'t touching the tablet.
---
---     @since 3.2.0
---
---     [C declaration]: @struct SDL_PenAxisEvent@, defined at @SDL3\/SDL_events.h 911:16@
-data SDL_PenAxisEvent = SDL_PenAxisEvent
-  { type' :: SDL_EventType
-  -- ^ SDL_EVENT_PEN_AXIS
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 913:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 914:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 915:12@
-  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
-  -- ^ The window with pen focus, if any
-  --
-  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 916:18@
-  , which :: SDL3.Sys.Bindgen.Pen.SDL_PenID
-  -- ^ The pen instance id
-  --
-  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 917:15@
-  , pen_state :: SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags
-  -- ^ Complete pen input state at time of event
-  --
-  --          [C declaration]: @pen_state@, defined at @SDL3\/SDL_events.h 918:23@
-  , x :: BG.CFloat
-  -- ^ X coordinate, relative to window
-  --
-  --          [C declaration]: @x@, defined at @SDL3\/SDL_events.h 919:11@
-  , y :: BG.CFloat
-  -- ^ Y coordinate, relative to window
-  --
-  --          [C declaration]: @y@, defined at @SDL3\/SDL_events.h 920:11@
-  , axis :: SDL3.Sys.Bindgen.Pen.SDL_PenAxis
-  -- ^ Axis that has changed
-  --
-  --          [C declaration]: @axis@, defined at @SDL3\/SDL_events.h 921:17@
-  , value :: BG.CFloat
-  -- ^ New value of axis
-  --
-  --          [C declaration]: @value@, defined at @SDL3\/SDL_events.h 922:11@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_PenAxisEvent where
-  staticSizeOf = \_ -> (48 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_PenAxisEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_PenAxisEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"pen_state") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"x") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"y") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"axis") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"value") ptr0
-
-instance Marshal.WriteRaw SDL_PenAxisEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_PenAxisEvent
-            type'2
-            reserved3
-            timestamp4
-            windowID5
-            which6
-            pen_state7
-            x8
-            y9
-            axis10
-            value11 ->
-              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-                >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID5
-                >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which6
-                >> HasCField.writeRaw (BG.Proxy @"pen_state") ptr0 pen_state7
-                >> HasCField.writeRaw (BG.Proxy @"x") ptr0 x8
-                >> HasCField.writeRaw (BG.Proxy @"y") ptr0 y9
-                >> HasCField.writeRaw (BG.Proxy @"axis") ptr0 axis10
-                >> HasCField.writeRaw (BG.Proxy @"value") ptr0 value11
-
-deriving via Marshal.EquivStorable SDL_PenAxisEvent instance BG.Storable SDL_PenAxisEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_PenAxisEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenAxisEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , pen_state = BG.getField @"pen_state" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , axis = BG.getField @"axis" x0
-            , value = BG.getField @"value" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_PenAxisEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_PenAxisEvent "type'" where
-  type
-    CFieldType SDL_PenAxisEvent "type'" =
-      SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_PenAxisEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenAxisEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , pen_state = BG.getField @"pen_state" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , axis = BG.getField @"axis" x0
-            , value = BG.getField @"value" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_PenAxisEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_PenAxisEvent "reserved" where
-  type
-    CFieldType SDL_PenAxisEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_PenAxisEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenAxisEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , pen_state = BG.getField @"pen_state" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , axis = BG.getField @"axis" x0
-            , value = BG.getField @"value" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_PenAxisEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_PenAxisEvent "timestamp" where
-  type
-    CFieldType SDL_PenAxisEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.CompatHasField.HasField "windowID" SDL_PenAxisEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenAxisEvent
-            { windowID = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , pen_state = BG.getField @"pen_state" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , axis = BG.getField @"axis" x0
-            , value = BG.getField @"value" x0
-            }
-      , BG.getField @"windowID" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.HasField "windowID" (BG.Ptr SDL_PenAxisEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"windowID")
-
-instance HasCField.HasCField SDL_PenAxisEvent "windowID" where
-  type
-    CFieldType SDL_PenAxisEvent "windowID" =
-      SDL3.Sys.Bindgen.Video.SDL_WindowID
-
-  offset# = \_ -> \_ -> 16
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenID)
-  => BG.CompatHasField.HasField "which" SDL_PenAxisEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenAxisEvent
-            { which = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , pen_state = BG.getField @"pen_state" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , axis = BG.getField @"axis" x0
-            , value = BG.getField @"value" x0
-            }
-      , BG.getField @"which" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenID)
-  => BG.HasField "which" (BG.Ptr SDL_PenAxisEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"which")
-
-instance HasCField.HasCField SDL_PenAxisEvent "which" where
-  type
-    CFieldType SDL_PenAxisEvent "which" =
-      SDL3.Sys.Bindgen.Pen.SDL_PenID
-
-  offset# = \_ -> \_ -> 20
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags)
-  => BG.CompatHasField.HasField "pen_state" SDL_PenAxisEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenAxisEvent
-            { pen_state = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , axis = BG.getField @"axis" x0
-            , value = BG.getField @"value" x0
-            }
-      , BG.getField @"pen_state" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags)
-  => BG.HasField "pen_state" (BG.Ptr SDL_PenAxisEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"pen_state")
-
-instance HasCField.HasCField SDL_PenAxisEvent "pen_state" where
-  type
-    CFieldType SDL_PenAxisEvent "pen_state" =
-      SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags
-
-  offset# = \_ -> \_ -> 24
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.CompatHasField.HasField "x" SDL_PenAxisEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenAxisEvent
-            { x = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , pen_state = BG.getField @"pen_state" x0
-            , y = BG.getField @"y" x0
-            , axis = BG.getField @"axis" x0
-            , value = BG.getField @"value" x0
-            }
-      , BG.getField @"x" x0
-      )
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.HasField "x" (BG.Ptr SDL_PenAxisEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"x")
-
-instance HasCField.HasCField SDL_PenAxisEvent "x" where
-  type CFieldType SDL_PenAxisEvent "x" = BG.CFloat
-
-  offset# = \_ -> \_ -> 28
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.CompatHasField.HasField "y" SDL_PenAxisEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenAxisEvent
-            { y = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , pen_state = BG.getField @"pen_state" x0
-            , x = BG.getField @"x" x0
-            , axis = BG.getField @"axis" x0
-            , value = BG.getField @"value" x0
-            }
-      , BG.getField @"y" x0
-      )
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.HasField "y" (BG.Ptr SDL_PenAxisEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"y")
-
-instance HasCField.HasCField SDL_PenAxisEvent "y" where
-  type CFieldType SDL_PenAxisEvent "y" = BG.CFloat
-
-  offset# = \_ -> \_ -> 32
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenAxis)
-  => BG.CompatHasField.HasField "axis" SDL_PenAxisEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenAxisEvent
-            { axis = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , pen_state = BG.getField @"pen_state" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , value = BG.getField @"value" x0
-            }
-      , BG.getField @"axis" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenAxis)
-  => BG.HasField "axis" (BG.Ptr SDL_PenAxisEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"axis")
-
-instance HasCField.HasCField SDL_PenAxisEvent "axis" where
-  type
-    CFieldType SDL_PenAxisEvent "axis" =
-      SDL3.Sys.Bindgen.Pen.SDL_PenAxis
-
-  offset# = \_ -> \_ -> 36
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.CompatHasField.HasField "value" SDL_PenAxisEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_PenAxisEvent
-            { value = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , which = BG.getField @"which" x0
-            , pen_state = BG.getField @"pen_state" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , axis = BG.getField @"axis" x0
-            }
-      , BG.getField @"value" x0
-      )
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.HasField "value" (BG.Ptr SDL_PenAxisEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"value")
-
-instance HasCField.HasCField SDL_PenAxisEvent "value" where
-  type CFieldType SDL_PenAxisEvent "value" = BG.CFloat
-
-  offset# = \_ -> \_ -> 40
-
--- | An event used to drop text or request a file open by the system (event.drop.*)
---
---     @since 3.2.0
---
---     [C declaration]: @struct SDL_DropEvent@, defined at @SDL3\/SDL_events.h 931:16@
-data SDL_DropEvent = SDL_DropEvent
-  { type' :: SDL_EventType
-  -- ^ SDL_EVENT_DROP_BEGIN or SDL_EVENT_DROP_FILE or SDL_EVENT_DROP_TEXT or SDL_EVENT_DROP_COMPLETE or SDL_EVENT_DROP_POSITION
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 933:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 934:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 935:12@
-  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
-  -- ^ The window that was dropped on, if any
-  --
-  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 936:18@
-  , x :: BG.CFloat
-  -- ^ X coordinate, relative to window (not on begin)
-  --
-  --          [C declaration]: @x@, defined at @SDL3\/SDL_events.h 937:11@
-  , y :: BG.CFloat
-  -- ^ Y coordinate, relative to window (not on begin)
-  --
-  --          [C declaration]: @y@, defined at @SDL3\/SDL_events.h 938:11@
-  , source :: PtrConst.PtrConst BG.CChar
-  -- ^ The source app that sent this drop event, or NULL if that isn\'t available
-  --
-  --          [C declaration]: @source@, defined at @SDL3\/SDL_events.h 939:17@
-  , data' :: PtrConst.PtrConst BG.CChar
-  -- ^ The text for SDL_EVENT_DROP_TEXT and the file name for SDL_EVENT_DROP_FILE, NULL for other events
-  --
-  --          [C declaration]: @data@, defined at @SDL3\/SDL_events.h 940:17@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_DropEvent where
-  staticSizeOf = \_ -> (48 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_DropEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_DropEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"x") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"y") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"source") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"data'") ptr0
-
-instance Marshal.WriteRaw SDL_DropEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_DropEvent type'2 reserved3 timestamp4 windowID5 x6 y7 source8 data'9 ->
-            HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-              >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-              >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-              >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID5
-              >> HasCField.writeRaw (BG.Proxy @"x") ptr0 x6
-              >> HasCField.writeRaw (BG.Proxy @"y") ptr0 y7
-              >> HasCField.writeRaw (BG.Proxy @"source") ptr0 source8
-              >> HasCField.writeRaw (BG.Proxy @"data'") ptr0 data'9
-
-deriving via Marshal.EquivStorable SDL_DropEvent instance BG.Storable SDL_DropEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_DropEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_DropEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , source = BG.getField @"source" x0
-            , data' = BG.getField @"data'" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_DropEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_DropEvent "type'" where
-  type CFieldType SDL_DropEvent "type'" = SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_DropEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_DropEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , source = BG.getField @"source" x0
-            , data' = BG.getField @"data'" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_DropEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_DropEvent "reserved" where
-  type
-    CFieldType SDL_DropEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_DropEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_DropEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , windowID = BG.getField @"windowID" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , source = BG.getField @"source" x0
-            , data' = BG.getField @"data'" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_DropEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_DropEvent "timestamp" where
-  type
-    CFieldType SDL_DropEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.CompatHasField.HasField "windowID" SDL_DropEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_DropEvent
-            { windowID = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , source = BG.getField @"source" x0
-            , data' = BG.getField @"data'" x0
-            }
-      , BG.getField @"windowID" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.HasField "windowID" (BG.Ptr SDL_DropEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"windowID")
-
-instance HasCField.HasCField SDL_DropEvent "windowID" where
-  type
-    CFieldType SDL_DropEvent "windowID" =
-      SDL3.Sys.Bindgen.Video.SDL_WindowID
-
-  offset# = \_ -> \_ -> 16
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.CompatHasField.HasField "x" SDL_DropEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_DropEvent
-            { x = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , y = BG.getField @"y" x0
-            , source = BG.getField @"source" x0
-            , data' = BG.getField @"data'" x0
-            }
-      , BG.getField @"x" x0
-      )
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.HasField "x" (BG.Ptr SDL_DropEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"x")
-
-instance HasCField.HasCField SDL_DropEvent "x" where
-  type CFieldType SDL_DropEvent "x" = BG.CFloat
-
-  offset# = \_ -> \_ -> 20
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.CompatHasField.HasField "y" SDL_DropEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_DropEvent
-            { y = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , x = BG.getField @"x" x0
-            , source = BG.getField @"source" x0
-            , data' = BG.getField @"data'" x0
-            }
-      , BG.getField @"y" x0
-      )
-
-instance
-  (ty ~ BG.CFloat)
-  => BG.HasField "y" (BG.Ptr SDL_DropEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"y")
-
-instance HasCField.HasCField SDL_DropEvent "y" where
-  type CFieldType SDL_DropEvent "y" = BG.CFloat
-
-  offset# = \_ -> \_ -> 24
-
-instance
-  (ty ~ PtrConst.PtrConst BG.CChar)
-  => BG.CompatHasField.HasField "source" SDL_DropEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_DropEvent
-            { source = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , data' = BG.getField @"data'" x0
-            }
-      , BG.getField @"source" x0
-      )
-
-instance
-  (ty ~ PtrConst.PtrConst BG.CChar)
-  => BG.HasField "source" (BG.Ptr SDL_DropEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"source")
-
-instance HasCField.HasCField SDL_DropEvent "source" where
-  type
-    CFieldType SDL_DropEvent "source" =
-      PtrConst.PtrConst BG.CChar
-
-  offset# = \_ -> \_ -> 32
-
-instance
-  (ty ~ PtrConst.PtrConst BG.CChar)
-  => BG.CompatHasField.HasField "data'" SDL_DropEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_DropEvent
-            { data' = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , x = BG.getField @"x" x0
-            , y = BG.getField @"y" x0
-            , source = BG.getField @"source" x0
-            }
-      , BG.getField @"data'" x0
-      )
-
-instance
-  (ty ~ PtrConst.PtrConst BG.CChar)
-  => BG.HasField "data'" (BG.Ptr SDL_DropEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"data'")
-
-instance HasCField.HasCField SDL_DropEvent "data'" where
-  type
-    CFieldType SDL_DropEvent "data'" =
-      PtrConst.PtrConst BG.CChar
-
-  offset# = \_ -> \_ -> 40
-
--- | An event triggered when the clipboard contents have changed (event.clipboard.*)
---
---     @since 3.2.0
---
---     [C declaration]: @struct SDL_ClipboardEvent@, defined at @SDL3\/SDL_events.h 949:16@
-data SDL_ClipboardEvent = SDL_ClipboardEvent
-  { type' :: SDL_EventType
-  -- ^ SDL_EVENT_CLIPBOARD_UPDATE
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 951:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 952:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 953:12@
-  , owner :: BG.CBool
-  -- ^ are we owning the clipboard (internal update)
-  --
-  --          [C declaration]: @owner@, defined at @SDL3\/SDL_events.h 954:10@
-  , num_mime_types :: SDL3.Sys.Bindgen.Stdinc.Sint32
-  -- ^ number of mime types
-  --
-  --          [C declaration]: @num_mime_types@, defined at @SDL3\/SDL_events.h 955:12@
-  , mime_types :: BG.Ptr (PtrConst.PtrConst BG.CChar)
-  -- ^ current mime types
-  --
-  --          [C declaration]: @mime_types@, defined at @SDL3\/SDL_events.h 956:18@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_ClipboardEvent where
-  staticSizeOf = \_ -> (32 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_ClipboardEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_ClipboardEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"owner") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"num_mime_types") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"mime_types") ptr0
-
-instance Marshal.WriteRaw SDL_ClipboardEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_ClipboardEvent
-            type'2
-            reserved3
-            timestamp4
-            owner5
-            num_mime_types6
-            mime_types7 ->
-              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-                >> HasCField.writeRaw (BG.Proxy @"owner") ptr0 owner5
-                >> HasCField.writeRaw (BG.Proxy @"num_mime_types") ptr0 num_mime_types6
-                >> HasCField.writeRaw (BG.Proxy @"mime_types") ptr0 mime_types7
-
-deriving via Marshal.EquivStorable SDL_ClipboardEvent instance BG.Storable SDL_ClipboardEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_ClipboardEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_ClipboardEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , owner = BG.getField @"owner" x0
-            , num_mime_types = BG.getField @"num_mime_types" x0
-            , mime_types = BG.getField @"mime_types" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_ClipboardEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_ClipboardEvent "type'" where
-  type
-    CFieldType SDL_ClipboardEvent "type'" =
-      SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_ClipboardEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_ClipboardEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , owner = BG.getField @"owner" x0
-            , num_mime_types = BG.getField @"num_mime_types" x0
-            , mime_types = BG.getField @"mime_types" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_ClipboardEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_ClipboardEvent "reserved" where
-  type
-    CFieldType SDL_ClipboardEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_ClipboardEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_ClipboardEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , owner = BG.getField @"owner" x0
-            , num_mime_types = BG.getField @"num_mime_types" x0
-            , mime_types = BG.getField @"mime_types" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_ClipboardEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_ClipboardEvent "timestamp" where
-  type
-    CFieldType SDL_ClipboardEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ BG.CBool)
-  => BG.CompatHasField.HasField "owner" SDL_ClipboardEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_ClipboardEvent
-            { owner = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , num_mime_types = BG.getField @"num_mime_types" x0
-            , mime_types = BG.getField @"mime_types" x0
-            }
-      , BG.getField @"owner" x0
-      )
-
-instance
-  (ty ~ BG.CBool)
-  => BG.HasField "owner" (BG.Ptr SDL_ClipboardEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"owner")
-
-instance HasCField.HasCField SDL_ClipboardEvent "owner" where
-  type CFieldType SDL_ClipboardEvent "owner" = BG.CBool
-
-  offset# = \_ -> \_ -> 16
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
-  => BG.CompatHasField.HasField "num_mime_types" SDL_ClipboardEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_ClipboardEvent
-            { num_mime_types = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , owner = BG.getField @"owner" x0
-            , mime_types = BG.getField @"mime_types" x0
-            }
-      , BG.getField @"num_mime_types" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
-  => BG.HasField "num_mime_types" (BG.Ptr SDL_ClipboardEvent) (BG.Ptr ty)
-  where
-  getField =
-    HasCField.fromPtr (BG.Proxy @"num_mime_types")
-
-instance HasCField.HasCField SDL_ClipboardEvent "num_mime_types" where
-  type
-    CFieldType SDL_ClipboardEvent "num_mime_types" =
-      SDL3.Sys.Bindgen.Stdinc.Sint32
-
-  offset# = \_ -> \_ -> 20
-
-instance
-  (ty ~ BG.Ptr (PtrConst.PtrConst BG.CChar))
-  => BG.CompatHasField.HasField "mime_types" SDL_ClipboardEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_ClipboardEvent
-            { mime_types = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , owner = BG.getField @"owner" x0
-            , num_mime_types = BG.getField @"num_mime_types" x0
-            }
-      , BG.getField @"mime_types" x0
-      )
-
-instance
-  (ty ~ BG.Ptr (PtrConst.PtrConst BG.CChar))
-  => BG.HasField "mime_types" (BG.Ptr SDL_ClipboardEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"mime_types")
-
-instance HasCField.HasCField SDL_ClipboardEvent "mime_types" where
-  type
-    CFieldType SDL_ClipboardEvent "mime_types" =
-      BG.Ptr (PtrConst.PtrConst BG.CChar)
-
-  offset# = \_ -> \_ -> 24
-
--- | Sensor event structure (event.sensor.*)
---
---     @since 3.2.0
---
---     [C declaration]: @struct SDL_SensorEvent@, defined at @SDL3\/SDL_events.h 964:16@
-data SDL_SensorEvent = SDL_SensorEvent
-  { type' :: SDL_EventType
-  -- ^ SDL_EVENT_SENSOR_UPDATE
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 966:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 967:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 968:12@
-  , which :: SDL3.Sys.Bindgen.Sensor.SDL_SensorID
-  -- ^ The instance ID of the sensor
-  --
-  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 969:18@
-  , data' :: CA.ConstantArray 6 BG.CFloat
-  -- ^ Up to 6 values from the sensor - additional values can be queried using SDL_GetSensorData()
-  --
-  --          [C declaration]: @data@, defined at @SDL3\/SDL_events.h 970:11@
-  , sensor_timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ The timestamp of the sensor reading in nanoseconds, not necessarily synchronized with the system clock
-  --
-  --          [C declaration]: @sensor_timestamp@, defined at @SDL3\/SDL_events.h 971:12@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_SensorEvent where
-  staticSizeOf = \_ -> (56 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_SensorEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_SensorEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"data'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"sensor_timestamp") ptr0
-
-instance Marshal.WriteRaw SDL_SensorEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_SensorEvent type'2 reserved3 timestamp4 which5 data'6 sensor_timestamp7 ->
-            HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-              >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-              >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-              >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which5
-              >> HasCField.writeRaw (BG.Proxy @"data'") ptr0 data'6
-              >> HasCField.writeRaw (BG.Proxy @"sensor_timestamp") ptr0 sensor_timestamp7
-
-deriving via Marshal.EquivStorable SDL_SensorEvent instance BG.Storable SDL_SensorEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_SensorEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_SensorEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , data' = BG.getField @"data'" x0
-            , sensor_timestamp = BG.getField @"sensor_timestamp" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_SensorEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_SensorEvent "type'" where
-  type
-    CFieldType SDL_SensorEvent "type'" =
-      SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_SensorEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_SensorEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , data' = BG.getField @"data'" x0
-            , sensor_timestamp = BG.getField @"sensor_timestamp" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_SensorEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_SensorEvent "reserved" where
-  type
-    CFieldType SDL_SensorEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_SensorEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_SensorEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , which = BG.getField @"which" x0
-            , data' = BG.getField @"data'" x0
-            , sensor_timestamp = BG.getField @"sensor_timestamp" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_SensorEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_SensorEvent "timestamp" where
-  type
-    CFieldType SDL_SensorEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Sensor.SDL_SensorID)
-  => BG.CompatHasField.HasField "which" SDL_SensorEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_SensorEvent
-            { which = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , data' = BG.getField @"data'" x0
-            , sensor_timestamp = BG.getField @"sensor_timestamp" x0
-            }
-      , BG.getField @"which" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Sensor.SDL_SensorID)
-  => BG.HasField "which" (BG.Ptr SDL_SensorEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"which")
-
-instance HasCField.HasCField SDL_SensorEvent "which" where
-  type
-    CFieldType SDL_SensorEvent "which" =
-      SDL3.Sys.Bindgen.Sensor.SDL_SensorID
-
-  offset# = \_ -> \_ -> 16
-
-instance
-  (ty ~ CA.ConstantArray 6 BG.CFloat)
-  => BG.CompatHasField.HasField "data'" SDL_SensorEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_SensorEvent
-            { data' = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , sensor_timestamp = BG.getField @"sensor_timestamp" x0
-            }
-      , BG.getField @"data'" x0
-      )
-
-instance
-  (ty ~ CA.ConstantArray 6 BG.CFloat)
-  => BG.HasField "data'" (BG.Ptr SDL_SensorEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"data'")
-
-instance HasCField.HasCField SDL_SensorEvent "data'" where
-  type
-    CFieldType SDL_SensorEvent "data'" =
-      CA.ConstantArray 6 BG.CFloat
-
-  offset# = \_ -> \_ -> 20
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "sensor_timestamp" SDL_SensorEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_SensorEvent
-            { sensor_timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , which = BG.getField @"which" x0
-            , data' = BG.getField @"data'" x0
-            }
-      , BG.getField @"sensor_timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "sensor_timestamp" (BG.Ptr SDL_SensorEvent) (BG.Ptr ty)
-  where
-  getField =
-    HasCField.fromPtr (BG.Proxy @"sensor_timestamp")
-
-instance HasCField.HasCField SDL_SensorEvent "sensor_timestamp" where
-  type
-    CFieldType SDL_SensorEvent "sensor_timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 48
-
--- | The \"quit requested\" event
---
---     @since 3.2.0
---
---     [C declaration]: @struct SDL_QuitEvent@, defined at @SDL3\/SDL_events.h 979:16@
-data SDL_QuitEvent = SDL_QuitEvent
-  { type' :: SDL_EventType
-  -- ^ SDL_EVENT_QUIT
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 981:19@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 982:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 983:12@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_QuitEvent where
-  staticSizeOf = \_ -> (16 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_QuitEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_QuitEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-
-instance Marshal.WriteRaw SDL_QuitEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_QuitEvent type'2 reserved3 timestamp4 ->
-            HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-              >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-              >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-
-deriving via Marshal.EquivStorable SDL_QuitEvent instance BG.Storable SDL_QuitEvent
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.CompatHasField.HasField "type'" SDL_QuitEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_QuitEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL_EventType)
-  => BG.HasField "type'" (BG.Ptr SDL_QuitEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_QuitEvent "type'" where
-  type CFieldType SDL_QuitEvent "type'" = SDL_EventType
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_QuitEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_QuitEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_QuitEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_QuitEvent "reserved" where
-  type
-    CFieldType SDL_QuitEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_QuitEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_QuitEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_QuitEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_QuitEvent "timestamp" where
-  type
-    CFieldType SDL_QuitEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
--- | A user-defined event type (event.user.*)
---
---     This event is unique; it is never created by SDL, but only by the application. The event can be pushed onto the event queue using @SDL_PushEvent()@. The contents of the structure members are completely up to the programmer; the only requirement is that \'\'\'type\'\'\' is a value obtained from @SDL_RegisterEvents()@.
---
---     @since 3.2.0
---
---     [C declaration]: @struct SDL_UserEvent@, defined at @SDL3\/SDL_events.h 997:16@
-data SDL_UserEvent = SDL_UserEvent
-  { type' :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ SDL_EVENT_USER through SDL_EVENT_LAST, Uint32 because these are not in the 'SDL_EventType' enumeration
-  --
-  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 999:12@
-  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 1000:12@
-  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
-  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
-  --
-  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 1001:12@
-  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
-  -- ^ The associated window if any
-  --
-  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 1002:18@
-  , code :: SDL3.Sys.Bindgen.Stdinc.Sint32
-  -- ^ User defined event code
-  --
-  --          [C declaration]: @code@, defined at @SDL3\/SDL_events.h 1003:12@
-  , data1 :: BG.Ptr BG.Void
-  -- ^ User defined data pointer
-  --
-  --          [C declaration]: @data1@, defined at @SDL3\/SDL_events.h 1004:11@
-  , data2 :: BG.Ptr BG.Void
-  -- ^ User defined data pointer
-  --
-  --          [C declaration]: @data2@, defined at @SDL3\/SDL_events.h 1005:11@
-  }
-  deriving stock (BG.Generic, Eq, Show)
-
-instance Marshal.StaticSize SDL_UserEvent where
-  staticSizeOf = \_ -> (40 :: Int)
-
-  staticAlignment = \_ -> (8 :: Int)
-
-instance Marshal.ReadRaw SDL_UserEvent where
-  readRaw =
-    \ptr0 ->
-      pure SDL_UserEvent
-        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"code") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"data1") ptr0
-        <*> HasCField.readRaw (BG.Proxy @"data2") ptr0
-
-instance Marshal.WriteRaw SDL_UserEvent where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_UserEvent type'2 reserved3 timestamp4 windowID5 code6 data17 data28 ->
-            HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
-              >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
-              >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
-              >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID5
-              >> HasCField.writeRaw (BG.Proxy @"code") ptr0 code6
-              >> HasCField.writeRaw (BG.Proxy @"data1") ptr0 data17
-              >> HasCField.writeRaw (BG.Proxy @"data2") ptr0 data28
-
-deriving via Marshal.EquivStorable SDL_UserEvent instance BG.Storable SDL_UserEvent
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "type'" SDL_UserEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_UserEvent
-            { type' = y1
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , code = BG.getField @"code" x0
-            , data1 = BG.getField @"data1" x0
-            , data2 = BG.getField @"data2" x0
-            }
-      , BG.getField @"type'" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "type'" (BG.Ptr SDL_UserEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_UserEvent "type'" where
-  type
-    CFieldType SDL_UserEvent "type'" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 0
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "reserved" SDL_UserEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_UserEvent
-            { reserved = y1
-            , type' = BG.getField @"type'" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , code = BG.getField @"code" x0
-            , data1 = BG.getField @"data1" x0
-            , data2 = BG.getField @"data2" x0
-            }
-      , BG.getField @"reserved" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "reserved" (BG.Ptr SDL_UserEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"reserved")
-
-instance HasCField.HasCField SDL_UserEvent "reserved" where
-  type
-    CFieldType SDL_UserEvent "reserved" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 4
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.CompatHasField.HasField "timestamp" SDL_UserEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_UserEvent
-            { timestamp = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , windowID = BG.getField @"windowID" x0
-            , code = BG.getField @"code" x0
-            , data1 = BG.getField @"data1" x0
-            , data2 = BG.getField @"data2" x0
-            }
-      , BG.getField @"timestamp" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
-  => BG.HasField "timestamp" (BG.Ptr SDL_UserEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
-
-instance HasCField.HasCField SDL_UserEvent "timestamp" where
-  type
-    CFieldType SDL_UserEvent "timestamp" =
-      SDL3.Sys.Bindgen.Stdinc.Uint64
-
-  offset# = \_ -> \_ -> 8
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.CompatHasField.HasField "windowID" SDL_UserEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_UserEvent
-            { windowID = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , code = BG.getField @"code" x0
-            , data1 = BG.getField @"data1" x0
-            , data2 = BG.getField @"data2" x0
-            }
-      , BG.getField @"windowID" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
-  => BG.HasField "windowID" (BG.Ptr SDL_UserEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"windowID")
-
-instance HasCField.HasCField SDL_UserEvent "windowID" where
-  type
-    CFieldType SDL_UserEvent "windowID" =
-      SDL3.Sys.Bindgen.Video.SDL_WindowID
-
-  offset# = \_ -> \_ -> 16
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
-  => BG.CompatHasField.HasField "code" SDL_UserEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_UserEvent
-            { code = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , data1 = BG.getField @"data1" x0
-            , data2 = BG.getField @"data2" x0
-            }
-      , BG.getField @"code" x0
-      )
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
-  => BG.HasField "code" (BG.Ptr SDL_UserEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"code")
-
-instance HasCField.HasCField SDL_UserEvent "code" where
-  type
-    CFieldType SDL_UserEvent "code" =
-      SDL3.Sys.Bindgen.Stdinc.Sint32
-
-  offset# = \_ -> \_ -> 20
-
-instance
-  (ty ~ BG.Ptr BG.Void)
-  => BG.CompatHasField.HasField "data1" SDL_UserEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_UserEvent
-            { data1 = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , code = BG.getField @"code" x0
-            , data2 = BG.getField @"data2" x0
-            }
-      , BG.getField @"data1" x0
-      )
-
-instance
-  (ty ~ BG.Ptr BG.Void)
-  => BG.HasField "data1" (BG.Ptr SDL_UserEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"data1")
-
-instance HasCField.HasCField SDL_UserEvent "data1" where
-  type
-    CFieldType SDL_UserEvent "data1" =
-      BG.Ptr BG.Void
-
-  offset# = \_ -> \_ -> 24
-
-instance
-  (ty ~ BG.Ptr BG.Void)
-  => BG.CompatHasField.HasField "data2" SDL_UserEvent ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_UserEvent
-            { data2 = y1
-            , type' = BG.getField @"type'" x0
-            , reserved = BG.getField @"reserved" x0
-            , timestamp = BG.getField @"timestamp" x0
-            , windowID = BG.getField @"windowID" x0
-            , code = BG.getField @"code" x0
-            , data1 = BG.getField @"data1" x0
-            }
-      , BG.getField @"data2" x0
-      )
-
-instance
-  (ty ~ BG.Ptr BG.Void)
-  => BG.HasField "data2" (BG.Ptr SDL_UserEvent) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"data2")
-
-instance HasCField.HasCField SDL_UserEvent "data2" where
-  type
-    CFieldType SDL_UserEvent "data2" =
-      BG.Ptr BG.Void
-
-  offset# = \_ -> \_ -> 32
-
--- | The structure for all events in SDL.
---
---     The 'SDL_Event' structure is the core of all event handling in SDL. 'SDL_Event' is a union of all event structures used in SDL.
---
---     @since 3.2.0
---
---     [C declaration]: @union SDL_Event@, defined at @SDL3\/SDL_events.h 1017:15@
-newtype SDL_Event = SDL_Event
-  { unwrap :: BG.ByteArray
-  }
-  deriving stock (BG.Generic)
-
-deriving via BG.SizedByteArray 128 8 instance Marshal.StaticSize SDL_Event
-
-deriving via BG.SizedByteArray 128 8 instance Marshal.ReadRaw SDL_Event
-
-deriving via BG.SizedByteArray 128 8 instance Marshal.WriteRaw SDL_Event
-
-deriving via Marshal.EquivStorable SDL_Event instance BG.Storable SDL_Event
-
-deriving via BG.SizedByteArray 128 8 instance Union.IsUnion SDL_Event
-
--- | Event type, shared with all events, Uint32 to cover user events which are not in the 'SDL_EventType' enumeration
---
---     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 1019:12@
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "type'" SDL_Event ty
-  where
-  getField = BG.getUnionPayload
-
--- | Event type, shared with all events, Uint32 to cover user events which are not in the 'SDL_EventType' enumeration
---
---     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 1019:12@
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.CompatHasField.HasField "type'" SDL_Event ty
-  where
-  hasField =
-    \x0 -> (BG.setUnionPayload, BG.getField @"type'" x0)
-
-instance
-  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
-  => BG.HasField "type'" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"type'")
-
-instance HasCField.HasCField SDL_Event "type'" where
-  type
-    CFieldType SDL_Event "type'" =
-      SDL3.Sys.Bindgen.Stdinc.Uint32
-
-  offset# = \_ -> \_ -> 0
-
--- | Common event data
---
---     [C declaration]: @common@, defined at @SDL3\/SDL_events.h 1020:21@
-instance (ty ~ SDL_CommonEvent) => BG.HasField "common" SDL_Event ty where
-  getField = BG.getUnionPayload
-
--- | Common event data
---
---     [C declaration]: @common@, defined at @SDL3\/SDL_events.h 1020:21@
-instance
-  (ty ~ SDL_CommonEvent)
-  => BG.CompatHasField.HasField "common" SDL_Event ty
-  where
-  hasField =
-    \x0 -> (BG.setUnionPayload, BG.getField @"common" x0)
-
-instance
-  (ty ~ SDL_CommonEvent)
-  => BG.HasField "common" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"common")
-
-instance HasCField.HasCField SDL_Event "common" where
-  type CFieldType SDL_Event "common" = SDL_CommonEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Display event data
---
---     [C declaration]: @display@, defined at @SDL3\/SDL_events.h 1021:22@
-instance (ty ~ SDL_DisplayEvent) => BG.HasField "display" SDL_Event ty where
-  getField = BG.getUnionPayload
-
--- | Display event data
---
---     [C declaration]: @display@, defined at @SDL3\/SDL_events.h 1021:22@
-instance
-  (ty ~ SDL_DisplayEvent)
-  => BG.CompatHasField.HasField "display" SDL_Event ty
-  where
-  hasField =
-    \x0 ->
-      (BG.setUnionPayload, BG.getField @"display" x0)
-
-instance
-  (ty ~ SDL_DisplayEvent)
-  => BG.HasField "display" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"display")
-
-instance HasCField.HasCField SDL_Event "display" where
-  type
-    CFieldType SDL_Event "display" =
-      SDL_DisplayEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Window event data
---
---     [C declaration]: @window@, defined at @SDL3\/SDL_events.h 1022:21@
-instance (ty ~ SDL_WindowEvent) => BG.HasField "window" SDL_Event ty where
-  getField = BG.getUnionPayload
-
--- | Window event data
---
---     [C declaration]: @window@, defined at @SDL3\/SDL_events.h 1022:21@
-instance
-  (ty ~ SDL_WindowEvent)
-  => BG.CompatHasField.HasField "window" SDL_Event ty
-  where
-  hasField =
-    \x0 -> (BG.setUnionPayload, BG.getField @"window" x0)
-
-instance
-  (ty ~ SDL_WindowEvent)
-  => BG.HasField "window" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"window")
-
-instance HasCField.HasCField SDL_Event "window" where
-  type CFieldType SDL_Event "window" = SDL_WindowEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Keyboard device change event data
---
---     [C declaration]: @kdevice@, defined at @SDL3\/SDL_events.h 1023:29@
-instance
-  (ty ~ SDL_KeyboardDeviceEvent)
-  => BG.HasField "kdevice" SDL_Event ty
-  where
-  getField = BG.getUnionPayload
-
--- | Keyboard device change event data
---
---     [C declaration]: @kdevice@, defined at @SDL3\/SDL_events.h 1023:29@
-instance
-  (ty ~ SDL_KeyboardDeviceEvent)
-  => BG.CompatHasField.HasField "kdevice" SDL_Event ty
-  where
-  hasField =
-    \x0 ->
-      (BG.setUnionPayload, BG.getField @"kdevice" x0)
-
-instance
-  (ty ~ SDL_KeyboardDeviceEvent)
-  => BG.HasField "kdevice" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"kdevice")
-
-instance HasCField.HasCField SDL_Event "kdevice" where
-  type
-    CFieldType SDL_Event "kdevice" =
-      SDL_KeyboardDeviceEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Keyboard event data
---
---     [C declaration]: @key@, defined at @SDL3\/SDL_events.h 1024:23@
-instance (ty ~ SDL_KeyboardEvent) => BG.HasField "key" SDL_Event ty where
-  getField = BG.getUnionPayload
-
--- | Keyboard event data
---
---     [C declaration]: @key@, defined at @SDL3\/SDL_events.h 1024:23@
-instance
-  (ty ~ SDL_KeyboardEvent)
-  => BG.CompatHasField.HasField "key" SDL_Event ty
-  where
-  hasField =
-    \x0 -> (BG.setUnionPayload, BG.getField @"key" x0)
-
-instance
-  (ty ~ SDL_KeyboardEvent)
-  => BG.HasField "key" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"key")
-
-instance HasCField.HasCField SDL_Event "key" where
-  type CFieldType SDL_Event "key" = SDL_KeyboardEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Text editing event data
---
---     [C declaration]: @edit@, defined at @SDL3\/SDL_events.h 1025:26@
-instance (ty ~ SDL_TextEditingEvent) => BG.HasField "edit" SDL_Event ty where
-  getField = BG.getUnionPayload
-
--- | Text editing event data
---
---     [C declaration]: @edit@, defined at @SDL3\/SDL_events.h 1025:26@
-instance
-  (ty ~ SDL_TextEditingEvent)
-  => BG.CompatHasField.HasField "edit" SDL_Event ty
-  where
-  hasField =
-    \x0 -> (BG.setUnionPayload, BG.getField @"edit" x0)
-
-instance
-  (ty ~ SDL_TextEditingEvent)
-  => BG.HasField "edit" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"edit")
-
-instance HasCField.HasCField SDL_Event "edit" where
-  type
-    CFieldType SDL_Event "edit" =
-      SDL_TextEditingEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Text editing candidates event data
---
---     [C declaration]: @edit_candidates@, defined at @SDL3\/SDL_events.h 1026:36@
-instance
-  (ty ~ SDL_TextEditingCandidatesEvent)
-  => BG.HasField "edit_candidates" SDL_Event ty
-  where
-  getField = BG.getUnionPayload
-
--- | Text editing candidates event data
---
---     [C declaration]: @edit_candidates@, defined at @SDL3\/SDL_events.h 1026:36@
-instance
-  (ty ~ SDL_TextEditingCandidatesEvent)
-  => BG.CompatHasField.HasField "edit_candidates" SDL_Event ty
-  where
-  hasField =
-    \x0 ->
-      (BG.setUnionPayload, BG.getField @"edit_candidates" x0)
-
-instance
-  (ty ~ SDL_TextEditingCandidatesEvent)
-  => BG.HasField "edit_candidates" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField =
-    HasCField.fromPtr (BG.Proxy @"edit_candidates")
-
-instance HasCField.HasCField SDL_Event "edit_candidates" where
-  type
-    CFieldType SDL_Event "edit_candidates" =
-      SDL_TextEditingCandidatesEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Text input event data
---
---     [C declaration]: @text@, defined at @SDL3\/SDL_events.h 1027:24@
-instance (ty ~ SDL_TextInputEvent) => BG.HasField "text" SDL_Event ty where
-  getField = BG.getUnionPayload
-
--- | Text input event data
---
---     [C declaration]: @text@, defined at @SDL3\/SDL_events.h 1027:24@
-instance
-  (ty ~ SDL_TextInputEvent)
-  => BG.CompatHasField.HasField "text" SDL_Event ty
-  where
-  hasField =
-    \x0 -> (BG.setUnionPayload, BG.getField @"text" x0)
-
-instance
-  (ty ~ SDL_TextInputEvent)
-  => BG.HasField "text" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"text")
-
-instance HasCField.HasCField SDL_Event "text" where
-  type CFieldType SDL_Event "text" = SDL_TextInputEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Mouse device change event data
---
---     [C declaration]: @mdevice@, defined at @SDL3\/SDL_events.h 1028:26@
-instance (ty ~ SDL_MouseDeviceEvent) => BG.HasField "mdevice" SDL_Event ty where
-  getField = BG.getUnionPayload
-
--- | Mouse device change event data
---
---     [C declaration]: @mdevice@, defined at @SDL3\/SDL_events.h 1028:26@
-instance
-  (ty ~ SDL_MouseDeviceEvent)
-  => BG.CompatHasField.HasField "mdevice" SDL_Event ty
-  where
-  hasField =
-    \x0 ->
-      (BG.setUnionPayload, BG.getField @"mdevice" x0)
-
-instance
-  (ty ~ SDL_MouseDeviceEvent)
-  => BG.HasField "mdevice" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"mdevice")
-
-instance HasCField.HasCField SDL_Event "mdevice" where
-  type
-    CFieldType SDL_Event "mdevice" =
-      SDL_MouseDeviceEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Mouse motion event data
---
---     [C declaration]: @motion@, defined at @SDL3\/SDL_events.h 1029:26@
-instance (ty ~ SDL_MouseMotionEvent) => BG.HasField "motion" SDL_Event ty where
-  getField = BG.getUnionPayload
-
--- | Mouse motion event data
---
---     [C declaration]: @motion@, defined at @SDL3\/SDL_events.h 1029:26@
-instance
-  (ty ~ SDL_MouseMotionEvent)
-  => BG.CompatHasField.HasField "motion" SDL_Event ty
-  where
-  hasField =
-    \x0 -> (BG.setUnionPayload, BG.getField @"motion" x0)
-
-instance
-  (ty ~ SDL_MouseMotionEvent)
-  => BG.HasField "motion" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"motion")
-
-instance HasCField.HasCField SDL_Event "motion" where
-  type
-    CFieldType SDL_Event "motion" =
-      SDL_MouseMotionEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Mouse button event data
---
---     [C declaration]: @button@, defined at @SDL3\/SDL_events.h 1030:26@
-instance (ty ~ SDL_MouseButtonEvent) => BG.HasField "button" SDL_Event ty where
-  getField = BG.getUnionPayload
-
--- | Mouse button event data
---
---     [C declaration]: @button@, defined at @SDL3\/SDL_events.h 1030:26@
-instance
-  (ty ~ SDL_MouseButtonEvent)
-  => BG.CompatHasField.HasField "button" SDL_Event ty
-  where
-  hasField =
-    \x0 -> (BG.setUnionPayload, BG.getField @"button" x0)
-
-instance
-  (ty ~ SDL_MouseButtonEvent)
-  => BG.HasField "button" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"button")
-
-instance HasCField.HasCField SDL_Event "button" where
-  type
-    CFieldType SDL_Event "button" =
-      SDL_MouseButtonEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Mouse wheel event data
---
---     [C declaration]: @wheel@, defined at @SDL3\/SDL_events.h 1031:25@
-instance (ty ~ SDL_MouseWheelEvent) => BG.HasField "wheel" SDL_Event ty where
-  getField = BG.getUnionPayload
-
--- | Mouse wheel event data
---
---     [C declaration]: @wheel@, defined at @SDL3\/SDL_events.h 1031:25@
-instance
-  (ty ~ SDL_MouseWheelEvent)
-  => BG.CompatHasField.HasField "wheel" SDL_Event ty
-  where
-  hasField =
-    \x0 -> (BG.setUnionPayload, BG.getField @"wheel" x0)
-
-instance
-  (ty ~ SDL_MouseWheelEvent)
-  => BG.HasField "wheel" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"wheel")
-
-instance HasCField.HasCField SDL_Event "wheel" where
-  type
-    CFieldType SDL_Event "wheel" =
-      SDL_MouseWheelEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Joystick device change event data
---
---     [C declaration]: @jdevice@, defined at @SDL3\/SDL_events.h 1032:24@
-instance (ty ~ SDL_JoyDeviceEvent) => BG.HasField "jdevice" SDL_Event ty where
-  getField = BG.getUnionPayload
-
--- | Joystick device change event data
---
---     [C declaration]: @jdevice@, defined at @SDL3\/SDL_events.h 1032:24@
-instance
-  (ty ~ SDL_JoyDeviceEvent)
-  => BG.CompatHasField.HasField "jdevice" SDL_Event ty
-  where
-  hasField =
-    \x0 ->
-      (BG.setUnionPayload, BG.getField @"jdevice" x0)
-
-instance
-  (ty ~ SDL_JoyDeviceEvent)
-  => BG.HasField "jdevice" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"jdevice")
-
-instance HasCField.HasCField SDL_Event "jdevice" where
-  type
-    CFieldType SDL_Event "jdevice" =
-      SDL_JoyDeviceEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Joystick axis event data
---
---     [C declaration]: @jaxis@, defined at @SDL3\/SDL_events.h 1033:22@
-instance (ty ~ SDL_JoyAxisEvent) => BG.HasField "jaxis" SDL_Event ty where
-  getField = BG.getUnionPayload
-
--- | Joystick axis event data
---
---     [C declaration]: @jaxis@, defined at @SDL3\/SDL_events.h 1033:22@
-instance
-  (ty ~ SDL_JoyAxisEvent)
-  => BG.CompatHasField.HasField "jaxis" SDL_Event ty
-  where
-  hasField =
-    \x0 -> (BG.setUnionPayload, BG.getField @"jaxis" x0)
-
-instance
-  (ty ~ SDL_JoyAxisEvent)
-  => BG.HasField "jaxis" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"jaxis")
-
-instance HasCField.HasCField SDL_Event "jaxis" where
-  type CFieldType SDL_Event "jaxis" = SDL_JoyAxisEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Joystick ball event data
---
---     [C declaration]: @jball@, defined at @SDL3\/SDL_events.h 1034:22@
-instance (ty ~ SDL_JoyBallEvent) => BG.HasField "jball" SDL_Event ty where
-  getField = BG.getUnionPayload
-
--- | Joystick ball event data
---
---     [C declaration]: @jball@, defined at @SDL3\/SDL_events.h 1034:22@
-instance
-  (ty ~ SDL_JoyBallEvent)
-  => BG.CompatHasField.HasField "jball" SDL_Event ty
-  where
-  hasField =
-    \x0 -> (BG.setUnionPayload, BG.getField @"jball" x0)
-
-instance
-  (ty ~ SDL_JoyBallEvent)
-  => BG.HasField "jball" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"jball")
-
-instance HasCField.HasCField SDL_Event "jball" where
-  type CFieldType SDL_Event "jball" = SDL_JoyBallEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Joystick hat event data
---
---     [C declaration]: @jhat@, defined at @SDL3\/SDL_events.h 1035:21@
-instance (ty ~ SDL_JoyHatEvent) => BG.HasField "jhat" SDL_Event ty where
-  getField = BG.getUnionPayload
-
--- | Joystick hat event data
---
---     [C declaration]: @jhat@, defined at @SDL3\/SDL_events.h 1035:21@
-instance
-  (ty ~ SDL_JoyHatEvent)
-  => BG.CompatHasField.HasField "jhat" SDL_Event ty
-  where
-  hasField =
-    \x0 -> (BG.setUnionPayload, BG.getField @"jhat" x0)
-
-instance
-  (ty ~ SDL_JoyHatEvent)
-  => BG.HasField "jhat" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"jhat")
-
-instance HasCField.HasCField SDL_Event "jhat" where
-  type CFieldType SDL_Event "jhat" = SDL_JoyHatEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Joystick button event data
---
---     [C declaration]: @jbutton@, defined at @SDL3\/SDL_events.h 1036:24@
-instance (ty ~ SDL_JoyButtonEvent) => BG.HasField "jbutton" SDL_Event ty where
-  getField = BG.getUnionPayload
-
--- | Joystick button event data
---
---     [C declaration]: @jbutton@, defined at @SDL3\/SDL_events.h 1036:24@
-instance
-  (ty ~ SDL_JoyButtonEvent)
-  => BG.CompatHasField.HasField "jbutton" SDL_Event ty
-  where
-  hasField =
-    \x0 ->
-      (BG.setUnionPayload, BG.getField @"jbutton" x0)
-
-instance
-  (ty ~ SDL_JoyButtonEvent)
-  => BG.HasField "jbutton" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"jbutton")
-
-instance HasCField.HasCField SDL_Event "jbutton" where
-  type
-    CFieldType SDL_Event "jbutton" =
-      SDL_JoyButtonEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Joystick battery event data
---
---     [C declaration]: @jbattery@, defined at @SDL3\/SDL_events.h 1037:25@
-instance (ty ~ SDL_JoyBatteryEvent) => BG.HasField "jbattery" SDL_Event ty where
-  getField = BG.getUnionPayload
-
--- | Joystick battery event data
---
---     [C declaration]: @jbattery@, defined at @SDL3\/SDL_events.h 1037:25@
-instance
-  (ty ~ SDL_JoyBatteryEvent)
-  => BG.CompatHasField.HasField "jbattery" SDL_Event ty
-  where
-  hasField =
-    \x0 ->
-      (BG.setUnionPayload, BG.getField @"jbattery" x0)
-
-instance
-  (ty ~ SDL_JoyBatteryEvent)
-  => BG.HasField "jbattery" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"jbattery")
-
-instance HasCField.HasCField SDL_Event "jbattery" where
-  type
-    CFieldType SDL_Event "jbattery" =
-      SDL_JoyBatteryEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Gamepad device event data
---
---     [C declaration]: @gdevice@, defined at @SDL3\/SDL_events.h 1038:28@
-instance
-  (ty ~ SDL_GamepadDeviceEvent)
-  => BG.HasField "gdevice" SDL_Event ty
-  where
-  getField = BG.getUnionPayload
-
--- | Gamepad device event data
---
---     [C declaration]: @gdevice@, defined at @SDL3\/SDL_events.h 1038:28@
-instance
-  (ty ~ SDL_GamepadDeviceEvent)
-  => BG.CompatHasField.HasField "gdevice" SDL_Event ty
-  where
-  hasField =
-    \x0 ->
-      (BG.setUnionPayload, BG.getField @"gdevice" x0)
-
-instance
-  (ty ~ SDL_GamepadDeviceEvent)
-  => BG.HasField "gdevice" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"gdevice")
-
-instance HasCField.HasCField SDL_Event "gdevice" where
-  type
-    CFieldType SDL_Event "gdevice" =
-      SDL_GamepadDeviceEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Gamepad axis event data
---
---     [C declaration]: @gaxis@, defined at @SDL3\/SDL_events.h 1039:26@
-instance (ty ~ SDL_GamepadAxisEvent) => BG.HasField "gaxis" SDL_Event ty where
-  getField = BG.getUnionPayload
-
--- | Gamepad axis event data
---
---     [C declaration]: @gaxis@, defined at @SDL3\/SDL_events.h 1039:26@
-instance
-  (ty ~ SDL_GamepadAxisEvent)
-  => BG.CompatHasField.HasField "gaxis" SDL_Event ty
-  where
-  hasField =
-    \x0 -> (BG.setUnionPayload, BG.getField @"gaxis" x0)
-
-instance
-  (ty ~ SDL_GamepadAxisEvent)
-  => BG.HasField "gaxis" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"gaxis")
-
-instance HasCField.HasCField SDL_Event "gaxis" where
-  type
-    CFieldType SDL_Event "gaxis" =
-      SDL_GamepadAxisEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Gamepad button event data
---
---     [C declaration]: @gbutton@, defined at @SDL3\/SDL_events.h 1040:28@
-instance
-  (ty ~ SDL_GamepadButtonEvent)
-  => BG.HasField "gbutton" SDL_Event ty
-  where
-  getField = BG.getUnionPayload
-
--- | Gamepad button event data
---
---     [C declaration]: @gbutton@, defined at @SDL3\/SDL_events.h 1040:28@
-instance
-  (ty ~ SDL_GamepadButtonEvent)
-  => BG.CompatHasField.HasField "gbutton" SDL_Event ty
-  where
-  hasField =
-    \x0 ->
-      (BG.setUnionPayload, BG.getField @"gbutton" x0)
-
-instance
-  (ty ~ SDL_GamepadButtonEvent)
-  => BG.HasField "gbutton" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"gbutton")
-
-instance HasCField.HasCField SDL_Event "gbutton" where
-  type
-    CFieldType SDL_Event "gbutton" =
-      SDL_GamepadButtonEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Gamepad touchpad event data
---
---     [C declaration]: @gtouchpad@, defined at @SDL3\/SDL_events.h 1041:30@
-instance
-  (ty ~ SDL_GamepadTouchpadEvent)
-  => BG.HasField "gtouchpad" SDL_Event ty
-  where
-  getField = BG.getUnionPayload
-
--- | Gamepad touchpad event data
---
---     [C declaration]: @gtouchpad@, defined at @SDL3\/SDL_events.h 1041:30@
-instance
-  (ty ~ SDL_GamepadTouchpadEvent)
-  => BG.CompatHasField.HasField "gtouchpad" SDL_Event ty
-  where
-  hasField =
-    \x0 ->
-      (BG.setUnionPayload, BG.getField @"gtouchpad" x0)
-
-instance
-  (ty ~ SDL_GamepadTouchpadEvent)
-  => BG.HasField "gtouchpad" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"gtouchpad")
-
-instance HasCField.HasCField SDL_Event "gtouchpad" where
-  type
-    CFieldType SDL_Event "gtouchpad" =
-      SDL_GamepadTouchpadEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Gamepad sensor event data
---
---     [C declaration]: @gsensor@, defined at @SDL3\/SDL_events.h 1042:28@
-instance
-  (ty ~ SDL_GamepadSensorEvent)
-  => BG.HasField "gsensor" SDL_Event ty
-  where
-  getField = BG.getUnionPayload
-
--- | Gamepad sensor event data
---
---     [C declaration]: @gsensor@, defined at @SDL3\/SDL_events.h 1042:28@
-instance
-  (ty ~ SDL_GamepadSensorEvent)
-  => BG.CompatHasField.HasField "gsensor" SDL_Event ty
-  where
-  hasField =
-    \x0 ->
-      (BG.setUnionPayload, BG.getField @"gsensor" x0)
-
-instance
-  (ty ~ SDL_GamepadSensorEvent)
-  => BG.HasField "gsensor" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"gsensor")
-
-instance HasCField.HasCField SDL_Event "gsensor" where
-  type
-    CFieldType SDL_Event "gsensor" =
-      SDL_GamepadSensorEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Audio device event data
---
---     [C declaration]: @adevice@, defined at @SDL3\/SDL_events.h 1043:26@
-instance (ty ~ SDL_AudioDeviceEvent) => BG.HasField "adevice" SDL_Event ty where
-  getField = BG.getUnionPayload
-
--- | Audio device event data
---
---     [C declaration]: @adevice@, defined at @SDL3\/SDL_events.h 1043:26@
-instance
-  (ty ~ SDL_AudioDeviceEvent)
-  => BG.CompatHasField.HasField "adevice" SDL_Event ty
-  where
-  hasField =
-    \x0 ->
-      (BG.setUnionPayload, BG.getField @"adevice" x0)
-
-instance
-  (ty ~ SDL_AudioDeviceEvent)
-  => BG.HasField "adevice" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"adevice")
-
-instance HasCField.HasCField SDL_Event "adevice" where
-  type
-    CFieldType SDL_Event "adevice" =
-      SDL_AudioDeviceEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Camera device event data
---
---     [C declaration]: @cdevice@, defined at @SDL3\/SDL_events.h 1044:27@
-instance
-  (ty ~ SDL_CameraDeviceEvent)
-  => BG.HasField "cdevice" SDL_Event ty
-  where
-  getField = BG.getUnionPayload
-
--- | Camera device event data
---
---     [C declaration]: @cdevice@, defined at @SDL3\/SDL_events.h 1044:27@
-instance
-  (ty ~ SDL_CameraDeviceEvent)
-  => BG.CompatHasField.HasField "cdevice" SDL_Event ty
-  where
-  hasField =
-    \x0 ->
-      (BG.setUnionPayload, BG.getField @"cdevice" x0)
-
-instance
-  (ty ~ SDL_CameraDeviceEvent)
-  => BG.HasField "cdevice" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"cdevice")
-
-instance HasCField.HasCField SDL_Event "cdevice" where
-  type
-    CFieldType SDL_Event "cdevice" =
-      SDL_CameraDeviceEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Sensor event data
---
---     [C declaration]: @sensor@, defined at @SDL3\/SDL_events.h 1045:21@
-instance (ty ~ SDL_SensorEvent) => BG.HasField "sensor" SDL_Event ty where
-  getField = BG.getUnionPayload
-
--- | Sensor event data
---
---     [C declaration]: @sensor@, defined at @SDL3\/SDL_events.h 1045:21@
-instance
-  (ty ~ SDL_SensorEvent)
-  => BG.CompatHasField.HasField "sensor" SDL_Event ty
-  where
-  hasField =
-    \x0 -> (BG.setUnionPayload, BG.getField @"sensor" x0)
-
-instance
-  (ty ~ SDL_SensorEvent)
-  => BG.HasField "sensor" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"sensor")
-
-instance HasCField.HasCField SDL_Event "sensor" where
-  type CFieldType SDL_Event "sensor" = SDL_SensorEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Quit request event data
---
---     [C declaration]: @quit@, defined at @SDL3\/SDL_events.h 1046:19@
-instance (ty ~ SDL_QuitEvent) => BG.HasField "quit" SDL_Event ty where
-  getField = BG.getUnionPayload
-
--- | Quit request event data
---
---     [C declaration]: @quit@, defined at @SDL3\/SDL_events.h 1046:19@
-instance
-  (ty ~ SDL_QuitEvent)
-  => BG.CompatHasField.HasField "quit" SDL_Event ty
-  where
-  hasField =
-    \x0 -> (BG.setUnionPayload, BG.getField @"quit" x0)
-
-instance
-  (ty ~ SDL_QuitEvent)
-  => BG.HasField "quit" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"quit")
-
-instance HasCField.HasCField SDL_Event "quit" where
-  type CFieldType SDL_Event "quit" = SDL_QuitEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Custom event data
---
---     [C declaration]: @user@, defined at @SDL3\/SDL_events.h 1047:19@
-instance (ty ~ SDL_UserEvent) => BG.HasField "user" SDL_Event ty where
-  getField = BG.getUnionPayload
-
--- | Custom event data
---
---     [C declaration]: @user@, defined at @SDL3\/SDL_events.h 1047:19@
-instance
-  (ty ~ SDL_UserEvent)
-  => BG.CompatHasField.HasField "user" SDL_Event ty
-  where
-  hasField =
-    \x0 -> (BG.setUnionPayload, BG.getField @"user" x0)
-
-instance
-  (ty ~ SDL_UserEvent)
-  => BG.HasField "user" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"user")
-
-instance HasCField.HasCField SDL_Event "user" where
-  type CFieldType SDL_Event "user" = SDL_UserEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Touch finger event data
---
---     [C declaration]: @tfinger@, defined at @SDL3\/SDL_events.h 1048:26@
-instance (ty ~ SDL_TouchFingerEvent) => BG.HasField "tfinger" SDL_Event ty where
-  getField = BG.getUnionPayload
-
--- | Touch finger event data
---
---     [C declaration]: @tfinger@, defined at @SDL3\/SDL_events.h 1048:26@
-instance
-  (ty ~ SDL_TouchFingerEvent)
-  => BG.CompatHasField.HasField "tfinger" SDL_Event ty
-  where
-  hasField =
-    \x0 ->
-      (BG.setUnionPayload, BG.getField @"tfinger" x0)
-
-instance
-  (ty ~ SDL_TouchFingerEvent)
-  => BG.HasField "tfinger" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"tfinger")
-
-instance HasCField.HasCField SDL_Event "tfinger" where
-  type
-    CFieldType SDL_Event "tfinger" =
-      SDL_TouchFingerEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Pinch event data
---
---     [C declaration]: @pinch@, defined at @SDL3\/SDL_events.h 1049:26@
-instance (ty ~ SDL_PinchFingerEvent) => BG.HasField "pinch" SDL_Event ty where
-  getField = BG.getUnionPayload
-
--- | Pinch event data
---
---     [C declaration]: @pinch@, defined at @SDL3\/SDL_events.h 1049:26@
-instance
-  (ty ~ SDL_PinchFingerEvent)
-  => BG.CompatHasField.HasField "pinch" SDL_Event ty
-  where
-  hasField =
-    \x0 -> (BG.setUnionPayload, BG.getField @"pinch" x0)
-
-instance
-  (ty ~ SDL_PinchFingerEvent)
-  => BG.HasField "pinch" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"pinch")
-
-instance HasCField.HasCField SDL_Event "pinch" where
-  type
-    CFieldType SDL_Event "pinch" =
-      SDL_PinchFingerEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Pen proximity event data
---
---     [C declaration]: @pproximity@, defined at @SDL3\/SDL_events.h 1050:27@
-instance
-  (ty ~ SDL_PenProximityEvent)
-  => BG.HasField "pproximity" SDL_Event ty
-  where
-  getField = BG.getUnionPayload
-
--- | Pen proximity event data
---
---     [C declaration]: @pproximity@, defined at @SDL3\/SDL_events.h 1050:27@
-instance
-  (ty ~ SDL_PenProximityEvent)
-  => BG.CompatHasField.HasField "pproximity" SDL_Event ty
-  where
-  hasField =
-    \x0 ->
-      (BG.setUnionPayload, BG.getField @"pproximity" x0)
-
-instance
-  (ty ~ SDL_PenProximityEvent)
-  => BG.HasField "pproximity" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"pproximity")
-
-instance HasCField.HasCField SDL_Event "pproximity" where
-  type
-    CFieldType SDL_Event "pproximity" =
-      SDL_PenProximityEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Pen tip touching event data
---
---     [C declaration]: @ptouch@, defined at @SDL3\/SDL_events.h 1051:23@
-instance (ty ~ SDL_PenTouchEvent) => BG.HasField "ptouch" SDL_Event ty where
-  getField = BG.getUnionPayload
-
--- | Pen tip touching event data
---
---     [C declaration]: @ptouch@, defined at @SDL3\/SDL_events.h 1051:23@
-instance
-  (ty ~ SDL_PenTouchEvent)
-  => BG.CompatHasField.HasField "ptouch" SDL_Event ty
-  where
-  hasField =
-    \x0 -> (BG.setUnionPayload, BG.getField @"ptouch" x0)
-
-instance
-  (ty ~ SDL_PenTouchEvent)
-  => BG.HasField "ptouch" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"ptouch")
-
-instance HasCField.HasCField SDL_Event "ptouch" where
-  type
-    CFieldType SDL_Event "ptouch" =
-      SDL_PenTouchEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Pen motion event data
---
---     [C declaration]: @pmotion@, defined at @SDL3\/SDL_events.h 1052:24@
-instance (ty ~ SDL_PenMotionEvent) => BG.HasField "pmotion" SDL_Event ty where
-  getField = BG.getUnionPayload
-
--- | Pen motion event data
---
---     [C declaration]: @pmotion@, defined at @SDL3\/SDL_events.h 1052:24@
-instance
-  (ty ~ SDL_PenMotionEvent)
-  => BG.CompatHasField.HasField "pmotion" SDL_Event ty
-  where
-  hasField =
-    \x0 ->
-      (BG.setUnionPayload, BG.getField @"pmotion" x0)
-
-instance
-  (ty ~ SDL_PenMotionEvent)
-  => BG.HasField "pmotion" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"pmotion")
-
-instance HasCField.HasCField SDL_Event "pmotion" where
-  type
-    CFieldType SDL_Event "pmotion" =
-      SDL_PenMotionEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Pen button event data
---
---     [C declaration]: @pbutton@, defined at @SDL3\/SDL_events.h 1053:24@
-instance (ty ~ SDL_PenButtonEvent) => BG.HasField "pbutton" SDL_Event ty where
-  getField = BG.getUnionPayload
-
--- | Pen button event data
---
---     [C declaration]: @pbutton@, defined at @SDL3\/SDL_events.h 1053:24@
-instance
-  (ty ~ SDL_PenButtonEvent)
-  => BG.CompatHasField.HasField "pbutton" SDL_Event ty
-  where
-  hasField =
-    \x0 ->
-      (BG.setUnionPayload, BG.getField @"pbutton" x0)
-
-instance
-  (ty ~ SDL_PenButtonEvent)
-  => BG.HasField "pbutton" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"pbutton")
-
-instance HasCField.HasCField SDL_Event "pbutton" where
-  type
-    CFieldType SDL_Event "pbutton" =
-      SDL_PenButtonEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Pen axis event data
---
---     [C declaration]: @paxis@, defined at @SDL3\/SDL_events.h 1054:22@
-instance (ty ~ SDL_PenAxisEvent) => BG.HasField "paxis" SDL_Event ty where
-  getField = BG.getUnionPayload
-
--- | Pen axis event data
---
---     [C declaration]: @paxis@, defined at @SDL3\/SDL_events.h 1054:22@
-instance
-  (ty ~ SDL_PenAxisEvent)
-  => BG.CompatHasField.HasField "paxis" SDL_Event ty
-  where
-  hasField =
-    \x0 -> (BG.setUnionPayload, BG.getField @"paxis" x0)
-
-instance
-  (ty ~ SDL_PenAxisEvent)
-  => BG.HasField "paxis" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"paxis")
-
-instance HasCField.HasCField SDL_Event "paxis" where
-  type CFieldType SDL_Event "paxis" = SDL_PenAxisEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Render event data
---
---     [C declaration]: @render@, defined at @SDL3\/SDL_events.h 1055:21@
-instance (ty ~ SDL_RenderEvent) => BG.HasField "render" SDL_Event ty where
-  getField = BG.getUnionPayload
-
--- | Render event data
---
---     [C declaration]: @render@, defined at @SDL3\/SDL_events.h 1055:21@
-instance
-  (ty ~ SDL_RenderEvent)
-  => BG.CompatHasField.HasField "render" SDL_Event ty
-  where
-  hasField =
-    \x0 -> (BG.setUnionPayload, BG.getField @"render" x0)
-
-instance
-  (ty ~ SDL_RenderEvent)
-  => BG.HasField "render" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"render")
-
-instance HasCField.HasCField SDL_Event "render" where
-  type CFieldType SDL_Event "render" = SDL_RenderEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Drag and drop event data
---
---     [C declaration]: @drop@, defined at @SDL3\/SDL_events.h 1056:19@
-instance (ty ~ SDL_DropEvent) => BG.HasField "drop" SDL_Event ty where
-  getField = BG.getUnionPayload
-
--- | Drag and drop event data
---
---     [C declaration]: @drop@, defined at @SDL3\/SDL_events.h 1056:19@
-instance
-  (ty ~ SDL_DropEvent)
-  => BG.CompatHasField.HasField "drop" SDL_Event ty
-  where
-  hasField =
-    \x0 -> (BG.setUnionPayload, BG.getField @"drop" x0)
-
-instance
-  (ty ~ SDL_DropEvent)
-  => BG.HasField "drop" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"drop")
-
-instance HasCField.HasCField SDL_Event "drop" where
-  type CFieldType SDL_Event "drop" = SDL_DropEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | Clipboard event data
---
---     [C declaration]: @clipboard@, defined at @SDL3\/SDL_events.h 1057:24@
-instance (ty ~ SDL_ClipboardEvent) => BG.HasField "clipboard" SDL_Event ty where
-  getField = BG.getUnionPayload
-
--- | Clipboard event data
---
---     [C declaration]: @clipboard@, defined at @SDL3\/SDL_events.h 1057:24@
-instance
-  (ty ~ SDL_ClipboardEvent)
-  => BG.CompatHasField.HasField "clipboard" SDL_Event ty
-  where
-  hasField =
-    \x0 ->
-      (BG.setUnionPayload, BG.getField @"clipboard" x0)
-
-instance
-  (ty ~ SDL_ClipboardEvent)
-  => BG.HasField "clipboard" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"clipboard")
-
-instance HasCField.HasCField SDL_Event "clipboard" where
-  type
-    CFieldType SDL_Event "clipboard" =
-      SDL_ClipboardEvent
-
-  offset# = \_ -> \_ -> 0
-
--- | [C declaration]: @padding@, defined at @SDL3\/SDL_events.h 1072:11@
-instance
-  (ty ~ CA.ConstantArray 128 SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.HasField "padding" SDL_Event ty
-  where
-  getField = BG.getUnionPayload
-
--- | [C declaration]: @padding@, defined at @SDL3\/SDL_events.h 1072:11@
-instance
-  (ty ~ CA.ConstantArray 128 SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.CompatHasField.HasField "padding" SDL_Event ty
-  where
-  hasField =
-    \x0 ->
-      (BG.setUnionPayload, BG.getField @"padding" x0)
-
-instance
-  (ty ~ CA.ConstantArray 128 SDL3.Sys.Bindgen.Stdinc.Uint8)
-  => BG.HasField "padding" (BG.Ptr SDL_Event) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"padding")
-
-instance HasCField.HasCField SDL_Event "padding" where
-  type
-    CFieldType SDL_Event "padding" =
-      CA.ConstantArray 128 SDL3.Sys.Bindgen.Stdinc.Uint8
-
-  offset# = \_ -> \_ -> 0
-
--- | The type of action to request from @SDL_PeepEvents()@.
---
---     @since 3.2.0
---
---     [C declaration]: @enum SDL_EventAction@, defined at @SDL3\/SDL_events.h 1110:14@
-newtype SDL_EventAction = SDL_EventAction
-  { unwrap :: BG.CUInt
-  }
-  deriving stock (BG.Generic, Eq, Ord)
-  deriving newtype (BG.HasFFIType)
-
-instance Marshal.StaticSize SDL_EventAction where
-  staticSizeOf = \_ -> (4 :: Int)
-
-  staticAlignment = \_ -> (4 :: Int)
-
-instance Marshal.ReadRaw SDL_EventAction where
-  readRaw =
-    \ptr0 ->
-      pure SDL_EventAction
-        <*> Marshal.readRawByteOff ptr0 (0 :: Int)
-
-instance Marshal.WriteRaw SDL_EventAction where
-  writeRaw =
-    \ptr0 ->
-      \s1 ->
-        case s1 of
-          SDL_EventAction unwrap2 ->
-            Marshal.writeRawByteOff ptr0 (0 :: Int) unwrap2
-
-deriving via Marshal.EquivStorable SDL_EventAction instance BG.Storable SDL_EventAction
-
-deriving via BG.CUInt instance BG.Prim SDL_EventAction
-
-instance CEnum.CEnum SDL_EventAction where
-  type CEnumZ SDL_EventAction = BG.CUInt
-
-  toCEnum = SDL_EventAction
-
-  fromCEnum = BG.getField @"unwrap"
-
-  declaredValues =
-    \_ ->
-      CEnum.declaredValuesFromList
-        [ (0, BG.singleton "SDL_ADDEVENT")
-        , (1, BG.singleton "SDL_PEEKEVENT")
-        , (2, BG.singleton "SDL_GETEVENT")
-        ]
-
-  showsUndeclared =
-    CEnum.showsWrappedUndeclared "SDL_EventAction"
-
-  readPrecUndeclared =
-    CEnum.readPrecWrappedUndeclared "SDL_EventAction"
-
-  isDeclared = CEnum.seqIsDeclared
-
-  mkDeclared = CEnum.seqMkDeclared
-
-instance CEnum.SequentialCEnum SDL_EventAction where
-  minDeclaredValue = SDL_ADDEVENT
-
-  maxDeclaredValue = SDL_GETEVENT
-
-instance Show SDL_EventAction where
-  showsPrec = CEnum.shows
-
-instance Read SDL_EventAction where
-  readPrec = CEnum.readPrec
-
-  readList = BG.readListDefault
-
-  readListPrec = BG.readListPrecDefault
-
-instance
-  (ty ~ BG.CUInt)
-  => BG.CompatHasField.HasField "unwrap" SDL_EventAction ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_EventAction{unwrap = y1}
-      , BG.getField @"unwrap" x0
-      )
-
-instance
-  (ty ~ BG.CUInt)
-  => BG.HasField "unwrap" (BG.Ptr SDL_EventAction) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"unwrap")
-
-instance HasCField.HasCField SDL_EventAction "unwrap" where
-  type CFieldType SDL_EventAction "unwrap" = BG.CUInt
-
-  offset# = \_ -> \_ -> 0
-
--- | Add events to the back of the queue.
---
---     [C declaration]: @SDL_ADDEVENT@, defined at @SDL3\/SDL_events.h 1112:5@
-pattern SDL_ADDEVENT :: SDL_EventAction
-pattern SDL_ADDEVENT = SDL_EventAction 0
-
--- | Check but don\'t remove events from the queue front.
---
---     [C declaration]: @SDL_PEEKEVENT@, defined at @SDL3\/SDL_events.h 1113:5@
-pattern SDL_PEEKEVENT :: SDL_EventAction
-pattern SDL_PEEKEVENT = SDL_EventAction 1
-
--- | Retrieve\/remove events from the front of the queue.
---
---     [C declaration]: @SDL_GETEVENT@, defined at @SDL3\/SDL_events.h 1114:5@
-pattern SDL_GETEVENT :: SDL_EventAction
-pattern SDL_GETEVENT = SDL_EventAction 2
-
--- | Auxiliary type used by 'SDL_EventFilter'
---
---     [C declaration]: @SDL_EventFilter@, defined at @SDL3\/SDL_events.h 1414:24@
-newtype SDL_EventFilter_Aux = SDL_EventFilter_Aux
-  { unwrap :: BG.Ptr BG.Void -> BG.Ptr SDL_Event -> IO BG.CBool
-  }
-  deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
-
--- __unique:__ @toSDL_EventFilter_Aux@
-foreign import ccall safe "wrapper"
-  hs_bindgen_eb1994b3ef52d185_base
-    :: (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.Word8)
-    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.Word8))
-
--- __unique:__ @toSDL_EventFilter_Aux@
-hs_bindgen_eb1994b3ef52d185
-  :: SDL_EventFilter_Aux
-  -> IO (BG.FunPtr SDL_EventFilter_Aux)
-hs_bindgen_eb1994b3ef52d185 =
-  \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_eb1994b3ef52d185_base (BG.toFFIType fun0))
-
--- __unique:__ @fromSDL_EventFilter_Aux@
-foreign import ccall safe "dynamic"
-  hs_bindgen_fff801095df0ae67_base
-    :: BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.Word8)
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @fromSDL_EventFilter_Aux@
-hs_bindgen_fff801095df0ae67
-  :: BG.FunPtr SDL_EventFilter_Aux
-  -> SDL_EventFilter_Aux
-hs_bindgen_fff801095df0ae67 =
-  \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_fff801095df0ae67_base (BG.castFunPtrToFFIType funPtr0))
-
-instance BG.ToFunPtr SDL_EventFilter_Aux where
-  toFunPtr = hs_bindgen_eb1994b3ef52d185
-
-instance BG.FromFunPtr SDL_EventFilter_Aux where
-  fromFunPtr = hs_bindgen_fff801095df0ae67
-
-instance
-  (ty ~ (BG.Ptr BG.Void -> BG.Ptr SDL_Event -> IO BG.CBool))
-  => BG.CompatHasField.HasField "unwrap" SDL_EventFilter_Aux ty
-  where
-  hasField =
-    \x0 ->
-      ( \y1 ->
-          SDL_EventFilter_Aux{unwrap = y1}
-      , BG.getField @"unwrap" x0
-      )
-
-instance
-  (ty ~ (BG.Ptr BG.Void -> BG.Ptr SDL_Event -> IO BG.CBool))
-  => BG.HasField "unwrap" (BG.Ptr SDL_EventFilter_Aux) (BG.Ptr ty)
-  where
-  getField = HasCField.fromPtr (BG.Proxy @"unwrap")
-
-instance HasCField.HasCField SDL_EventFilter_Aux "unwrap" where
-  type
-    CFieldType SDL_EventFilter_Aux "unwrap" =
-      BG.Ptr BG.Void -> BG.Ptr SDL_Event -> IO BG.CBool
-
-  offset# = \_ -> \_ -> 0
-
--- | A function pointer used for callbacks that watch the event queue.
---
---     [@userdata@]: what was passed as @userdata@ to @SDL_SetEventFilter()@ or SDL_AddEventWatch, etc.
---
---     [@event@]: the event that triggered the callback.
---
---     [Returns]: true to permit event to be added to the queue, and false to disallow it. When used with SDL_AddEventWatch, the return value is ignored.
---
---     [Thread safety]: SDL may call this callback at any time from any thread; the application is responsible for locking resources the callback touches that need to be protected.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_SetEventFilter', 'sDL_AddEventWatch'
---
---     [C declaration]: @SDL_EventFilter@, defined at @SDL3\/SDL_events.h 1414:24@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE MagicHash #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StandaloneDeriving #-}
+{-# LANGUAGE TypeApplications #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE UnboxedTuples #-}
+{-# LANGUAGE UndecidableInstances #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+
+-- | Event queue management.
+--
+--     It\'s extremely common often required that an app deal with SDL\'s event queue. Almost all useful information about interactions with the real world flow through here: the user interacting with the computer and app, hardware coming and going, the system changing in some way, etc.
+--
+--     An app generally takes a moment, perhaps at the start of a new frame, to examine any events that have occurred since the last time and process or ignore them. This is generally done by calling @SDL_PollEvent()@ in a loop until it returns false (or, if using the main callbacks, events are provided one at a time in calls to SDL_AppEvent() before the next call to SDL_AppIterate(); in this scenario, the app does not call @SDL_PollEvent()@ at all).
+--
+--     There is other forms of control, too: @SDL_PeepEvents()@ has more functionality at the cost of more complexity, and @SDL_WaitEvent()@ can block the process until something interesting happens, which might be beneficial for certain types of programs on low-power hardware. One may also call @SDL_AddEventWatch()@ to set a callback when new events arrive.
+--
+--     The app is free to generate their own events, too: SDL_PushEvent allows the app to put events onto the queue for later retrieval; SDL_RegisterEvents can guarantee that these events have a type that isn\'t in use by other parts of the system. The types of events that can be delivered.
+--
+--     @since 3.2.0
+module SDL3.Sys.Bindgen.Events (
+  SDL3.Sys.Bindgen.Events.SDL_EventType (..),
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_FIRST,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_QUIT,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_TERMINATING,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_LOW_MEMORY,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WILL_ENTER_BACKGROUND,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_DID_ENTER_BACKGROUND,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WILL_ENTER_FOREGROUND,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_DID_ENTER_FOREGROUND,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_LOCALE_CHANGED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_SYSTEM_THEME_CHANGED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_DISPLAY_ORIENTATION,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_DISPLAY_ADDED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_DISPLAY_REMOVED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_DISPLAY_MOVED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_DISPLAY_DESKTOP_MODE_CHANGED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_DISPLAY_CURRENT_MODE_CHANGED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_DISPLAY_CONTENT_SCALE_CHANGED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_DISPLAY_USABLE_BOUNDS_CHANGED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_DISPLAY_FIRST,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_DISPLAY_LAST,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_SHOWN,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_HIDDEN,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_EXPOSED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_MOVED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_RESIZED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_METAL_VIEW_RESIZED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_MINIMIZED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_MAXIMIZED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_RESTORED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_MOUSE_ENTER,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_MOUSE_LEAVE,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_FOCUS_GAINED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_FOCUS_LOST,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_CLOSE_REQUESTED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_HIT_TEST,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_ICCPROF_CHANGED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_DISPLAY_CHANGED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_DISPLAY_SCALE_CHANGED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_SAFE_AREA_CHANGED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_OCCLUDED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_ENTER_FULLSCREEN,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_LEAVE_FULLSCREEN,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_DESTROYED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_HDR_STATE_CHANGED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_FIRST,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_WINDOW_LAST,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_KEY_DOWN,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_KEY_UP,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_TEXT_EDITING,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_TEXT_INPUT,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_KEYMAP_CHANGED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_KEYBOARD_ADDED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_KEYBOARD_REMOVED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_TEXT_EDITING_CANDIDATES,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_SCREEN_KEYBOARD_SHOWN,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_SCREEN_KEYBOARD_HIDDEN,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_MOUSE_MOTION,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_MOUSE_BUTTON_DOWN,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_MOUSE_BUTTON_UP,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_MOUSE_WHEEL,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_MOUSE_ADDED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_MOUSE_REMOVED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_JOYSTICK_AXIS_MOTION,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_JOYSTICK_BALL_MOTION,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_JOYSTICK_HAT_MOTION,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_JOYSTICK_BUTTON_DOWN,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_JOYSTICK_BUTTON_UP,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_JOYSTICK_ADDED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_JOYSTICK_REMOVED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_JOYSTICK_BATTERY_UPDATED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_JOYSTICK_UPDATE_COMPLETE,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_GAMEPAD_AXIS_MOTION,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_GAMEPAD_BUTTON_DOWN,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_GAMEPAD_BUTTON_UP,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_GAMEPAD_ADDED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_GAMEPAD_REMOVED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_GAMEPAD_REMAPPED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_GAMEPAD_TOUCHPAD_DOWN,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_GAMEPAD_TOUCHPAD_MOTION,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_GAMEPAD_TOUCHPAD_UP,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_GAMEPAD_SENSOR_UPDATE,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_GAMEPAD_UPDATE_COMPLETE,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_GAMEPAD_STEAM_HANDLE_UPDATED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_FINGER_DOWN,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_FINGER_UP,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_FINGER_MOTION,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_FINGER_CANCELED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_PINCH_BEGIN,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_PINCH_UPDATE,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_PINCH_END,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_CLIPBOARD_UPDATE,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_DROP_FILE,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_DROP_TEXT,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_DROP_BEGIN,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_DROP_COMPLETE,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_DROP_POSITION,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_AUDIO_DEVICE_ADDED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_AUDIO_DEVICE_REMOVED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_AUDIO_DEVICE_FORMAT_CHANGED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_SENSOR_UPDATE,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_PEN_PROXIMITY_IN,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_PEN_PROXIMITY_OUT,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_PEN_DOWN,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_PEN_UP,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_PEN_BUTTON_DOWN,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_PEN_BUTTON_UP,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_PEN_MOTION,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_PEN_AXIS,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_CAMERA_DEVICE_ADDED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_CAMERA_DEVICE_REMOVED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_CAMERA_DEVICE_APPROVED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_CAMERA_DEVICE_DENIED,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_RENDER_TARGETS_RESET,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_RENDER_DEVICE_RESET,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_RENDER_DEVICE_LOST,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_PRIVATE0,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_PRIVATE1,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_PRIVATE2,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_PRIVATE3,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_POLL_SENTINEL,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_USER,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_LAST,
+  pattern SDL3.Sys.Bindgen.Events.SDL_EVENT_ENUM_PADDING,
+  SDL3.Sys.Bindgen.Events.SDL_CommonEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_DisplayEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_WindowEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_KeyboardDeviceEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_KeyboardEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_TextEditingEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_TextEditingCandidatesEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_TextInputEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_MouseDeviceEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_MouseMotionEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_MouseButtonEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_MouseWheelEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_JoyAxisEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_JoyBallEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_JoyHatEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_JoyButtonEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_JoyDeviceEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_JoyBatteryEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_GamepadAxisEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_GamepadButtonEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_GamepadDeviceEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_GamepadTouchpadEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_GamepadSensorEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_AudioDeviceEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_CameraDeviceEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_RenderEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_TouchFingerEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_PinchFingerEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_PenProximityEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_PenMotionEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_PenTouchEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_PenButtonEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_PenAxisEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_DropEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_ClipboardEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_SensorEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_QuitEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_UserEvent (..),
+  SDL3.Sys.Bindgen.Events.SDL_Event (..),
+  SDL3.Sys.Bindgen.Events.SDL_EventAction (..),
+  pattern SDL3.Sys.Bindgen.Events.SDL_ADDEVENT,
+  pattern SDL3.Sys.Bindgen.Events.SDL_PEEKEVENT,
+  pattern SDL3.Sys.Bindgen.Events.SDL_GETEVENT,
+  SDL3.Sys.Bindgen.Events.SDL_EventFilter_Aux (..),
+  SDL3.Sys.Bindgen.Events.SDL_EventFilter (..),
+)
+where
+
+import Prelude (Eq, IO, Int, Ord, Read, Show, fmap, pure, (<*>), (>>), type (~))
+
+import HsBindgen.Runtime.CEnum qualified as CEnum
+import HsBindgen.Runtime.ConstantArray qualified as CA
+import HsBindgen.Runtime.HasCField qualified as HasCField
+import HsBindgen.Runtime.Marshal qualified as Marshal
+import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Struct qualified as Struct
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField
+import HsBindgen.Runtime.Union qualified as Union
+import SDL3.Sys.Bindgen.Audio qualified
+import SDL3.Sys.Bindgen.Camera qualified
+import SDL3.Sys.Bindgen.Joystick qualified
+import SDL3.Sys.Bindgen.Keyboard qualified
+import SDL3.Sys.Bindgen.Keycode qualified
+import SDL3.Sys.Bindgen.Mouse qualified
+import SDL3.Sys.Bindgen.Pen qualified
+import SDL3.Sys.Bindgen.Power qualified
+import SDL3.Sys.Bindgen.Scancode qualified
+import SDL3.Sys.Bindgen.Sensor qualified
+import SDL3.Sys.Bindgen.Stdinc qualified
+import SDL3.Sys.Bindgen.Touch qualified
+import SDL3.Sys.Bindgen.Video qualified
+
+-- | [C declaration]: @enum SDL_EventType@, defined at @SDL3\/SDL_events.h 84:14@
+newtype SDL_EventType = SDL_EventType
+  { unwrap :: BG.CUInt
+  }
+  deriving stock (BG.Generic, Eq, Ord)
+  deriving newtype (BG.HasFFIType)
+
+instance Marshal.StaticSize SDL_EventType where
+  staticSizeOf = \_ -> (4 :: Int)
+
+  staticAlignment = \_ -> (4 :: Int)
+
+instance Marshal.ReadRaw SDL_EventType where
+  readRaw =
+    \ptr0 ->
+      pure SDL_EventType
+        <*> Marshal.readRawByteOff ptr0 (0 :: Int)
+
+instance Marshal.WriteRaw SDL_EventType where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_EventType unwrap2 ->
+            Marshal.writeRawByteOff ptr0 (0 :: Int) unwrap2
+
+deriving via Marshal.EquivStorable SDL_EventType instance BG.Storable SDL_EventType
+
+deriving via BG.CUInt instance BG.Prim SDL_EventType
+
+instance CEnum.CEnum SDL_EventType where
+  type CEnumZ SDL_EventType = BG.CUInt
+
+  toCEnum = SDL_EventType
+
+  fromCEnum = BG.getField @"unwrap"
+
+  declaredValues =
+    \_ ->
+      CEnum.declaredValuesFromList
+        [ (0, BG.singleton "SDL_EVENT_FIRST")
+        , (256, BG.singleton "SDL_EVENT_QUIT")
+        , (257, BG.singleton "SDL_EVENT_TERMINATING")
+        , (258, BG.singleton "SDL_EVENT_LOW_MEMORY")
+        , (259, BG.singleton "SDL_EVENT_WILL_ENTER_BACKGROUND")
+        , (260, BG.singleton "SDL_EVENT_DID_ENTER_BACKGROUND")
+        , (261, BG.singleton "SDL_EVENT_WILL_ENTER_FOREGROUND")
+        , (262, BG.singleton "SDL_EVENT_DID_ENTER_FOREGROUND")
+        , (263, BG.singleton "SDL_EVENT_LOCALE_CHANGED")
+        , (264, BG.singleton "SDL_EVENT_SYSTEM_THEME_CHANGED")
+        , (337, ("SDL_EVENT_DISPLAY_ORIENTATION" BG.:| ["SDL_EVENT_DISPLAY_FIRST"]))
+        , (338, BG.singleton "SDL_EVENT_DISPLAY_ADDED")
+        , (339, BG.singleton "SDL_EVENT_DISPLAY_REMOVED")
+        , (340, BG.singleton "SDL_EVENT_DISPLAY_MOVED")
+        , (341, BG.singleton "SDL_EVENT_DISPLAY_DESKTOP_MODE_CHANGED")
+        , (342, BG.singleton "SDL_EVENT_DISPLAY_CURRENT_MODE_CHANGED")
+        , (343, BG.singleton "SDL_EVENT_DISPLAY_CONTENT_SCALE_CHANGED")
+        ,
+          ( 344
+          , ("SDL_EVENT_DISPLAY_USABLE_BOUNDS_CHANGED" BG.:| ["SDL_EVENT_DISPLAY_LAST"])
+          )
+        , (514, ("SDL_EVENT_WINDOW_SHOWN" BG.:| ["SDL_EVENT_WINDOW_FIRST"]))
+        , (515, BG.singleton "SDL_EVENT_WINDOW_HIDDEN")
+        , (516, BG.singleton "SDL_EVENT_WINDOW_EXPOSED")
+        , (517, BG.singleton "SDL_EVENT_WINDOW_MOVED")
+        , (518, BG.singleton "SDL_EVENT_WINDOW_RESIZED")
+        , (519, BG.singleton "SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED")
+        , (520, BG.singleton "SDL_EVENT_WINDOW_METAL_VIEW_RESIZED")
+        , (521, BG.singleton "SDL_EVENT_WINDOW_MINIMIZED")
+        , (522, BG.singleton "SDL_EVENT_WINDOW_MAXIMIZED")
+        , (523, BG.singleton "SDL_EVENT_WINDOW_RESTORED")
+        , (524, BG.singleton "SDL_EVENT_WINDOW_MOUSE_ENTER")
+        , (525, BG.singleton "SDL_EVENT_WINDOW_MOUSE_LEAVE")
+        , (526, BG.singleton "SDL_EVENT_WINDOW_FOCUS_GAINED")
+        , (527, BG.singleton "SDL_EVENT_WINDOW_FOCUS_LOST")
+        , (528, BG.singleton "SDL_EVENT_WINDOW_CLOSE_REQUESTED")
+        , (529, BG.singleton "SDL_EVENT_WINDOW_HIT_TEST")
+        , (530, BG.singleton "SDL_EVENT_WINDOW_ICCPROF_CHANGED")
+        , (531, BG.singleton "SDL_EVENT_WINDOW_DISPLAY_CHANGED")
+        , (532, BG.singleton "SDL_EVENT_WINDOW_DISPLAY_SCALE_CHANGED")
+        , (533, BG.singleton "SDL_EVENT_WINDOW_SAFE_AREA_CHANGED")
+        , (534, BG.singleton "SDL_EVENT_WINDOW_OCCLUDED")
+        , (535, BG.singleton "SDL_EVENT_WINDOW_ENTER_FULLSCREEN")
+        , (536, BG.singleton "SDL_EVENT_WINDOW_LEAVE_FULLSCREEN")
+        , (537, BG.singleton "SDL_EVENT_WINDOW_DESTROYED")
+        , (538, ("SDL_EVENT_WINDOW_HDR_STATE_CHANGED" BG.:| ["SDL_EVENT_WINDOW_LAST"]))
+        , (768, BG.singleton "SDL_EVENT_KEY_DOWN")
+        , (769, BG.singleton "SDL_EVENT_KEY_UP")
+        , (770, BG.singleton "SDL_EVENT_TEXT_EDITING")
+        , (771, BG.singleton "SDL_EVENT_TEXT_INPUT")
+        , (772, BG.singleton "SDL_EVENT_KEYMAP_CHANGED")
+        , (773, BG.singleton "SDL_EVENT_KEYBOARD_ADDED")
+        , (774, BG.singleton "SDL_EVENT_KEYBOARD_REMOVED")
+        , (775, BG.singleton "SDL_EVENT_TEXT_EDITING_CANDIDATES")
+        , (776, BG.singleton "SDL_EVENT_SCREEN_KEYBOARD_SHOWN")
+        , (777, BG.singleton "SDL_EVENT_SCREEN_KEYBOARD_HIDDEN")
+        , (1024, BG.singleton "SDL_EVENT_MOUSE_MOTION")
+        , (1025, BG.singleton "SDL_EVENT_MOUSE_BUTTON_DOWN")
+        , (1026, BG.singleton "SDL_EVENT_MOUSE_BUTTON_UP")
+        , (1027, BG.singleton "SDL_EVENT_MOUSE_WHEEL")
+        , (1028, BG.singleton "SDL_EVENT_MOUSE_ADDED")
+        , (1029, BG.singleton "SDL_EVENT_MOUSE_REMOVED")
+        , (1536, BG.singleton "SDL_EVENT_JOYSTICK_AXIS_MOTION")
+        , (1537, BG.singleton "SDL_EVENT_JOYSTICK_BALL_MOTION")
+        , (1538, BG.singleton "SDL_EVENT_JOYSTICK_HAT_MOTION")
+        , (1539, BG.singleton "SDL_EVENT_JOYSTICK_BUTTON_DOWN")
+        , (1540, BG.singleton "SDL_EVENT_JOYSTICK_BUTTON_UP")
+        , (1541, BG.singleton "SDL_EVENT_JOYSTICK_ADDED")
+        , (1542, BG.singleton "SDL_EVENT_JOYSTICK_REMOVED")
+        , (1543, BG.singleton "SDL_EVENT_JOYSTICK_BATTERY_UPDATED")
+        , (1544, BG.singleton "SDL_EVENT_JOYSTICK_UPDATE_COMPLETE")
+        , (1616, BG.singleton "SDL_EVENT_GAMEPAD_AXIS_MOTION")
+        , (1617, BG.singleton "SDL_EVENT_GAMEPAD_BUTTON_DOWN")
+        , (1618, BG.singleton "SDL_EVENT_GAMEPAD_BUTTON_UP")
+        , (1619, BG.singleton "SDL_EVENT_GAMEPAD_ADDED")
+        , (1620, BG.singleton "SDL_EVENT_GAMEPAD_REMOVED")
+        , (1621, BG.singleton "SDL_EVENT_GAMEPAD_REMAPPED")
+        , (1622, BG.singleton "SDL_EVENT_GAMEPAD_TOUCHPAD_DOWN")
+        , (1623, BG.singleton "SDL_EVENT_GAMEPAD_TOUCHPAD_MOTION")
+        , (1624, BG.singleton "SDL_EVENT_GAMEPAD_TOUCHPAD_UP")
+        , (1625, BG.singleton "SDL_EVENT_GAMEPAD_SENSOR_UPDATE")
+        , (1626, BG.singleton "SDL_EVENT_GAMEPAD_UPDATE_COMPLETE")
+        , (1627, BG.singleton "SDL_EVENT_GAMEPAD_STEAM_HANDLE_UPDATED")
+        , (1792, BG.singleton "SDL_EVENT_FINGER_DOWN")
+        , (1793, BG.singleton "SDL_EVENT_FINGER_UP")
+        , (1794, BG.singleton "SDL_EVENT_FINGER_MOTION")
+        , (1795, BG.singleton "SDL_EVENT_FINGER_CANCELED")
+        , (1808, BG.singleton "SDL_EVENT_PINCH_BEGIN")
+        , (1809, BG.singleton "SDL_EVENT_PINCH_UPDATE")
+        , (1810, BG.singleton "SDL_EVENT_PINCH_END")
+        , (2304, BG.singleton "SDL_EVENT_CLIPBOARD_UPDATE")
+        , (4096, BG.singleton "SDL_EVENT_DROP_FILE")
+        , (4097, BG.singleton "SDL_EVENT_DROP_TEXT")
+        , (4098, BG.singleton "SDL_EVENT_DROP_BEGIN")
+        , (4099, BG.singleton "SDL_EVENT_DROP_COMPLETE")
+        , (4100, BG.singleton "SDL_EVENT_DROP_POSITION")
+        , (4352, BG.singleton "SDL_EVENT_AUDIO_DEVICE_ADDED")
+        , (4353, BG.singleton "SDL_EVENT_AUDIO_DEVICE_REMOVED")
+        , (4354, BG.singleton "SDL_EVENT_AUDIO_DEVICE_FORMAT_CHANGED")
+        , (4608, BG.singleton "SDL_EVENT_SENSOR_UPDATE")
+        , (4864, BG.singleton "SDL_EVENT_PEN_PROXIMITY_IN")
+        , (4865, BG.singleton "SDL_EVENT_PEN_PROXIMITY_OUT")
+        , (4866, BG.singleton "SDL_EVENT_PEN_DOWN")
+        , (4867, BG.singleton "SDL_EVENT_PEN_UP")
+        , (4868, BG.singleton "SDL_EVENT_PEN_BUTTON_DOWN")
+        , (4869, BG.singleton "SDL_EVENT_PEN_BUTTON_UP")
+        , (4870, BG.singleton "SDL_EVENT_PEN_MOTION")
+        , (4871, BG.singleton "SDL_EVENT_PEN_AXIS")
+        , (5120, BG.singleton "SDL_EVENT_CAMERA_DEVICE_ADDED")
+        , (5121, BG.singleton "SDL_EVENT_CAMERA_DEVICE_REMOVED")
+        , (5122, BG.singleton "SDL_EVENT_CAMERA_DEVICE_APPROVED")
+        , (5123, BG.singleton "SDL_EVENT_CAMERA_DEVICE_DENIED")
+        , (8192, BG.singleton "SDL_EVENT_RENDER_TARGETS_RESET")
+        , (8193, BG.singleton "SDL_EVENT_RENDER_DEVICE_RESET")
+        , (8194, BG.singleton "SDL_EVENT_RENDER_DEVICE_LOST")
+        , (16384, BG.singleton "SDL_EVENT_PRIVATE0")
+        , (16385, BG.singleton "SDL_EVENT_PRIVATE1")
+        , (16386, BG.singleton "SDL_EVENT_PRIVATE2")
+        , (16387, BG.singleton "SDL_EVENT_PRIVATE3")
+        , (32512, BG.singleton "SDL_EVENT_POLL_SENTINEL")
+        , (32768, BG.singleton "SDL_EVENT_USER")
+        , (65535, BG.singleton "SDL_EVENT_LAST")
+        , (2147483647, BG.singleton "SDL_EVENT_ENUM_PADDING")
+        ]
+
+  showsUndeclared =
+    CEnum.showsWrappedUndeclared "SDL_EventType"
+
+  readPrecUndeclared =
+    CEnum.readPrecWrappedUndeclared "SDL_EventType"
+
+instance Show SDL_EventType where
+  showsPrec = CEnum.shows
+
+instance Read SDL_EventType where
+  readPrec = CEnum.readPrec
+
+  readList = BG.readListDefault
+
+  readListPrec = BG.readListPrecDefault
+
+instance
+  (ty ~ BG.CUInt)
+  => BG.CompatHasField.HasField "unwrap" SDL_EventType ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_EventType{unwrap = y1}
+      , BG.getField @"unwrap" x0
+      )
+
+instance
+  (ty ~ BG.CUInt)
+  => BG.HasField "unwrap" (BG.Ptr SDL_EventType) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"unwrap")
+
+instance HasCField.HasCField SDL_EventType "unwrap" where
+  type CFieldType SDL_EventType "unwrap" = BG.CUInt
+
+  offset# = \_ -> \_ -> 0
+
+-- | Unused (do not remove)
+--
+--     [C declaration]: @SDL_EVENT_FIRST@, defined at @SDL3\/SDL_events.h 86:5@
+pattern SDL_EVENT_FIRST :: SDL_EventType
+pattern SDL_EVENT_FIRST = SDL_EventType 0
+
+-- | User-requested quit
+--
+--     [C declaration]: @SDL_EVENT_QUIT@, defined at @SDL3\/SDL_events.h 89:5@
+pattern SDL_EVENT_QUIT :: SDL_EventType
+pattern SDL_EVENT_QUIT = SDL_EventType 256
+
+-- | The application is being terminated by the OS. This event must be handled in a callback set with @SDL_AddEventWatch()@. Called on iOS in applicationWillTerminate() Called on Android in onDestroy()
+--
+--     [C declaration]: @SDL_EVENT_TERMINATING@, defined at @SDL3\/SDL_events.h 92:5@
+pattern SDL_EVENT_TERMINATING :: SDL_EventType
+pattern SDL_EVENT_TERMINATING = SDL_EventType 257
+
+-- | The application is low on memory, free memory if possible. This event must be handled in a callback set with @SDL_AddEventWatch()@. Called on iOS in applicationDidReceiveMemoryWarning() Called on Android in onTrimMemory()
+--
+--     [C declaration]: @SDL_EVENT_LOW_MEMORY@, defined at @SDL3\/SDL_events.h 96:5@
+pattern SDL_EVENT_LOW_MEMORY :: SDL_EventType
+pattern SDL_EVENT_LOW_MEMORY = SDL_EventType 258
+
+-- | The application is about to enter the background. This event must be handled in a callback set with @SDL_AddEventWatch()@. Called on iOS in applicationWillResignActive() Called on Android in onPause()
+--
+--     [C declaration]: @SDL_EVENT_WILL_ENTER_BACKGROUND@, defined at @SDL3\/SDL_events.h 100:5@
+pattern SDL_EVENT_WILL_ENTER_BACKGROUND :: SDL_EventType
+pattern SDL_EVENT_WILL_ENTER_BACKGROUND = SDL_EventType 259
+
+-- | The application did enter the background and may not get CPU for some time. This event must be handled in a callback set with @SDL_AddEventWatch()@. Called on iOS in applicationDidEnterBackground() Called on Android in onPause()
+--
+--     [C declaration]: @SDL_EVENT_DID_ENTER_BACKGROUND@, defined at @SDL3\/SDL_events.h 104:5@
+pattern SDL_EVENT_DID_ENTER_BACKGROUND :: SDL_EventType
+pattern SDL_EVENT_DID_ENTER_BACKGROUND = SDL_EventType 260
+
+-- | The application is about to enter the foreground. This event must be handled in a callback set with @SDL_AddEventWatch()@. Called on iOS in applicationWillEnterForeground() Called on Android in onResume()
+--
+--     [C declaration]: @SDL_EVENT_WILL_ENTER_FOREGROUND@, defined at @SDL3\/SDL_events.h 108:5@
+pattern SDL_EVENT_WILL_ENTER_FOREGROUND :: SDL_EventType
+pattern SDL_EVENT_WILL_ENTER_FOREGROUND = SDL_EventType 261
+
+-- | The application is now interactive. This event must be handled in a callback set with @SDL_AddEventWatch()@. Called on iOS in applicationDidBecomeActive() Called on Android in onResume()
+--
+--     [C declaration]: @SDL_EVENT_DID_ENTER_FOREGROUND@, defined at @SDL3\/SDL_events.h 112:5@
+pattern SDL_EVENT_DID_ENTER_FOREGROUND :: SDL_EventType
+pattern SDL_EVENT_DID_ENTER_FOREGROUND = SDL_EventType 262
+
+-- | The user\'s locale preferences have changed.
+--
+--     [C declaration]: @SDL_EVENT_LOCALE_CHANGED@, defined at @SDL3\/SDL_events.h 117:5@
+pattern SDL_EVENT_LOCALE_CHANGED :: SDL_EventType
+pattern SDL_EVENT_LOCALE_CHANGED = SDL_EventType 263
+
+-- | The system theme changed
+--
+--     [C declaration]: @SDL_EVENT_SYSTEM_THEME_CHANGED@, defined at @SDL3\/SDL_events.h 119:5@
+pattern SDL_EVENT_SYSTEM_THEME_CHANGED :: SDL_EventType
+pattern SDL_EVENT_SYSTEM_THEME_CHANGED = SDL_EventType 264
+
+-- | Display orientation has changed to data1
+--
+--     [C declaration]: @SDL_EVENT_DISPLAY_ORIENTATION@, defined at @SDL3\/SDL_events.h 123:5@
+pattern SDL_EVENT_DISPLAY_ORIENTATION :: SDL_EventType
+pattern SDL_EVENT_DISPLAY_ORIENTATION = SDL_EventType 337
+
+-- | Display has been added to the system
+--
+--     [C declaration]: @SDL_EVENT_DISPLAY_ADDED@, defined at @SDL3\/SDL_events.h 124:5@
+pattern SDL_EVENT_DISPLAY_ADDED :: SDL_EventType
+pattern SDL_EVENT_DISPLAY_ADDED = SDL_EventType 338
+
+-- | Display has been removed from the system
+--
+--     [C declaration]: @SDL_EVENT_DISPLAY_REMOVED@, defined at @SDL3\/SDL_events.h 125:5@
+pattern SDL_EVENT_DISPLAY_REMOVED :: SDL_EventType
+pattern SDL_EVENT_DISPLAY_REMOVED = SDL_EventType 339
+
+-- | Display has changed position
+--
+--     [C declaration]: @SDL_EVENT_DISPLAY_MOVED@, defined at @SDL3\/SDL_events.h 126:5@
+pattern SDL_EVENT_DISPLAY_MOVED :: SDL_EventType
+pattern SDL_EVENT_DISPLAY_MOVED = SDL_EventType 340
+
+-- | Display has changed desktop mode
+--
+--     [C declaration]: @SDL_EVENT_DISPLAY_DESKTOP_MODE_CHANGED@, defined at @SDL3\/SDL_events.h 127:5@
+pattern SDL_EVENT_DISPLAY_DESKTOP_MODE_CHANGED :: SDL_EventType
+pattern SDL_EVENT_DISPLAY_DESKTOP_MODE_CHANGED = SDL_EventType 341
+
+-- | Display has changed current mode
+--
+--     [C declaration]: @SDL_EVENT_DISPLAY_CURRENT_MODE_CHANGED@, defined at @SDL3\/SDL_events.h 128:5@
+pattern SDL_EVENT_DISPLAY_CURRENT_MODE_CHANGED :: SDL_EventType
+pattern SDL_EVENT_DISPLAY_CURRENT_MODE_CHANGED = SDL_EventType 342
+
+-- | Display has changed content scale
+--
+--     [C declaration]: @SDL_EVENT_DISPLAY_CONTENT_SCALE_CHANGED@, defined at @SDL3\/SDL_events.h 129:5@
+pattern SDL_EVENT_DISPLAY_CONTENT_SCALE_CHANGED :: SDL_EventType
+pattern SDL_EVENT_DISPLAY_CONTENT_SCALE_CHANGED = SDL_EventType 343
+
+-- | Display has changed usable bounds
+--
+--     [C declaration]: @SDL_EVENT_DISPLAY_USABLE_BOUNDS_CHANGED@, defined at @SDL3\/SDL_events.h 130:5@
+pattern SDL_EVENT_DISPLAY_USABLE_BOUNDS_CHANGED :: SDL_EventType
+pattern SDL_EVENT_DISPLAY_USABLE_BOUNDS_CHANGED = SDL_EventType 344
+
+-- | [C declaration]: @SDL_EVENT_DISPLAY_FIRST@, defined at @SDL3\/SDL_events.h 131:5@
+pattern SDL_EVENT_DISPLAY_FIRST :: SDL_EventType
+pattern SDL_EVENT_DISPLAY_FIRST = SDL_EventType 337
+
+-- | [C declaration]: @SDL_EVENT_DISPLAY_LAST@, defined at @SDL3\/SDL_events.h 132:5@
+pattern SDL_EVENT_DISPLAY_LAST :: SDL_EventType
+pattern SDL_EVENT_DISPLAY_LAST = SDL_EventType 344
+
+-- | Window has been shown
+--
+--     [C declaration]: @SDL_EVENT_WINDOW_SHOWN@, defined at @SDL3\/SDL_events.h 137:5@
+pattern SDL_EVENT_WINDOW_SHOWN :: SDL_EventType
+pattern SDL_EVENT_WINDOW_SHOWN = SDL_EventType 514
+
+-- | Window has been hidden
+--
+--     [C declaration]: @SDL_EVENT_WINDOW_HIDDEN@, defined at @SDL3\/SDL_events.h 138:5@
+pattern SDL_EVENT_WINDOW_HIDDEN :: SDL_EventType
+pattern SDL_EVENT_WINDOW_HIDDEN = SDL_EventType 515
+
+-- | Window has been exposed and should be redrawn, and can be redrawn directly from event watchers for this event. data1 is 1 for live-resize expose events, 0 otherwise.
+--
+--     [C declaration]: @SDL_EVENT_WINDOW_EXPOSED@, defined at @SDL3\/SDL_events.h 139:5@
+pattern SDL_EVENT_WINDOW_EXPOSED :: SDL_EventType
+pattern SDL_EVENT_WINDOW_EXPOSED = SDL_EventType 516
+
+-- | Window has been moved to data1, data2
+--
+--     [C declaration]: @SDL_EVENT_WINDOW_MOVED@, defined at @SDL3\/SDL_events.h 141:5@
+pattern SDL_EVENT_WINDOW_MOVED :: SDL_EventType
+pattern SDL_EVENT_WINDOW_MOVED = SDL_EventType 517
+
+-- | Window has been resized to data1xdata2
+--
+--     [C declaration]: @SDL_EVENT_WINDOW_RESIZED@, defined at @SDL3\/SDL_events.h 142:5@
+pattern SDL_EVENT_WINDOW_RESIZED :: SDL_EventType
+pattern SDL_EVENT_WINDOW_RESIZED = SDL_EventType 518
+
+-- | The pixel size of the window has changed to data1xdata2
+--
+--     [C declaration]: @SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED@, defined at @SDL3\/SDL_events.h 143:5@
+pattern SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED :: SDL_EventType
+pattern SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED = SDL_EventType 519
+
+-- | The pixel size of a Metal view associated with the window has changed
+--
+--     [C declaration]: @SDL_EVENT_WINDOW_METAL_VIEW_RESIZED@, defined at @SDL3\/SDL_events.h 144:5@
+pattern SDL_EVENT_WINDOW_METAL_VIEW_RESIZED :: SDL_EventType
+pattern SDL_EVENT_WINDOW_METAL_VIEW_RESIZED = SDL_EventType 520
+
+-- | Window has been minimized
+--
+--     [C declaration]: @SDL_EVENT_WINDOW_MINIMIZED@, defined at @SDL3\/SDL_events.h 145:5@
+pattern SDL_EVENT_WINDOW_MINIMIZED :: SDL_EventType
+pattern SDL_EVENT_WINDOW_MINIMIZED = SDL_EventType 521
+
+-- | Window has been maximized
+--
+--     [C declaration]: @SDL_EVENT_WINDOW_MAXIMIZED@, defined at @SDL3\/SDL_events.h 146:5@
+pattern SDL_EVENT_WINDOW_MAXIMIZED :: SDL_EventType
+pattern SDL_EVENT_WINDOW_MAXIMIZED = SDL_EventType 522
+
+-- | Window has been restored to normal size and position
+--
+--     [C declaration]: @SDL_EVENT_WINDOW_RESTORED@, defined at @SDL3\/SDL_events.h 147:5@
+pattern SDL_EVENT_WINDOW_RESTORED :: SDL_EventType
+pattern SDL_EVENT_WINDOW_RESTORED = SDL_EventType 523
+
+-- | Window has gained mouse focus
+--
+--     [C declaration]: @SDL_EVENT_WINDOW_MOUSE_ENTER@, defined at @SDL3\/SDL_events.h 148:5@
+pattern SDL_EVENT_WINDOW_MOUSE_ENTER :: SDL_EventType
+pattern SDL_EVENT_WINDOW_MOUSE_ENTER = SDL_EventType 524
+
+-- | Window has lost mouse focus
+--
+--     [C declaration]: @SDL_EVENT_WINDOW_MOUSE_LEAVE@, defined at @SDL3\/SDL_events.h 149:5@
+pattern SDL_EVENT_WINDOW_MOUSE_LEAVE :: SDL_EventType
+pattern SDL_EVENT_WINDOW_MOUSE_LEAVE = SDL_EventType 525
+
+-- | Window has gained keyboard focus
+--
+--     [C declaration]: @SDL_EVENT_WINDOW_FOCUS_GAINED@, defined at @SDL3\/SDL_events.h 150:5@
+pattern SDL_EVENT_WINDOW_FOCUS_GAINED :: SDL_EventType
+pattern SDL_EVENT_WINDOW_FOCUS_GAINED = SDL_EventType 526
+
+-- | Window has lost keyboard focus
+--
+--     [C declaration]: @SDL_EVENT_WINDOW_FOCUS_LOST@, defined at @SDL3\/SDL_events.h 151:5@
+pattern SDL_EVENT_WINDOW_FOCUS_LOST :: SDL_EventType
+pattern SDL_EVENT_WINDOW_FOCUS_LOST = SDL_EventType 527
+
+-- | The window manager requests that the window be closed
+--
+--     [C declaration]: @SDL_EVENT_WINDOW_CLOSE_REQUESTED@, defined at @SDL3\/SDL_events.h 152:5@
+pattern SDL_EVENT_WINDOW_CLOSE_REQUESTED :: SDL_EventType
+pattern SDL_EVENT_WINDOW_CLOSE_REQUESTED = SDL_EventType 528
+
+-- | Window had a hit test that wasn\'t SDL_HITTEST_NORMAL
+--
+--     [C declaration]: @SDL_EVENT_WINDOW_HIT_TEST@, defined at @SDL3\/SDL_events.h 153:5@
+pattern SDL_EVENT_WINDOW_HIT_TEST :: SDL_EventType
+pattern SDL_EVENT_WINDOW_HIT_TEST = SDL_EventType 529
+
+-- | The ICC profile of the window\'s display has changed
+--
+--     [C declaration]: @SDL_EVENT_WINDOW_ICCPROF_CHANGED@, defined at @SDL3\/SDL_events.h 154:5@
+pattern SDL_EVENT_WINDOW_ICCPROF_CHANGED :: SDL_EventType
+pattern SDL_EVENT_WINDOW_ICCPROF_CHANGED = SDL_EventType 530
+
+-- | Window has been moved to display data1
+--
+--     [C declaration]: @SDL_EVENT_WINDOW_DISPLAY_CHANGED@, defined at @SDL3\/SDL_events.h 155:5@
+pattern SDL_EVENT_WINDOW_DISPLAY_CHANGED :: SDL_EventType
+pattern SDL_EVENT_WINDOW_DISPLAY_CHANGED = SDL_EventType 531
+
+-- | Window display scale has been changed
+--
+--     [C declaration]: @SDL_EVENT_WINDOW_DISPLAY_SCALE_CHANGED@, defined at @SDL3\/SDL_events.h 156:5@
+pattern SDL_EVENT_WINDOW_DISPLAY_SCALE_CHANGED :: SDL_EventType
+pattern SDL_EVENT_WINDOW_DISPLAY_SCALE_CHANGED = SDL_EventType 532
+
+-- | The window safe area has been changed
+--
+--     [C declaration]: @SDL_EVENT_WINDOW_SAFE_AREA_CHANGED@, defined at @SDL3\/SDL_events.h 157:5@
+pattern SDL_EVENT_WINDOW_SAFE_AREA_CHANGED :: SDL_EventType
+pattern SDL_EVENT_WINDOW_SAFE_AREA_CHANGED = SDL_EventType 533
+
+-- | The window has been occluded
+--
+--     [C declaration]: @SDL_EVENT_WINDOW_OCCLUDED@, defined at @SDL3\/SDL_events.h 158:5@
+pattern SDL_EVENT_WINDOW_OCCLUDED :: SDL_EventType
+pattern SDL_EVENT_WINDOW_OCCLUDED = SDL_EventType 534
+
+-- | The window has entered fullscreen mode
+--
+--     [C declaration]: @SDL_EVENT_WINDOW_ENTER_FULLSCREEN@, defined at @SDL3\/SDL_events.h 159:5@
+pattern SDL_EVENT_WINDOW_ENTER_FULLSCREEN :: SDL_EventType
+pattern SDL_EVENT_WINDOW_ENTER_FULLSCREEN = SDL_EventType 535
+
+-- | The window has left fullscreen mode
+--
+--     [C declaration]: @SDL_EVENT_WINDOW_LEAVE_FULLSCREEN@, defined at @SDL3\/SDL_events.h 160:5@
+pattern SDL_EVENT_WINDOW_LEAVE_FULLSCREEN :: SDL_EventType
+pattern SDL_EVENT_WINDOW_LEAVE_FULLSCREEN = SDL_EventType 536
+
+-- | The window with the associated ID is being or has been destroyed. If this message is being handled in an event watcher, the window handle is still valid and can still be used to retrieve any properties associated with the window. Otherwise, the handle has already been destroyed and all resources associated with it are invalid
+--
+--     [C declaration]: @SDL_EVENT_WINDOW_DESTROYED@, defined at @SDL3\/SDL_events.h 161:5@
+pattern SDL_EVENT_WINDOW_DESTROYED :: SDL_EventType
+pattern SDL_EVENT_WINDOW_DESTROYED = SDL_EventType 537
+
+-- | Window HDR properties have changed
+--
+--     [C declaration]: @SDL_EVENT_WINDOW_HDR_STATE_CHANGED@, defined at @SDL3\/SDL_events.h 165:5@
+pattern SDL_EVENT_WINDOW_HDR_STATE_CHANGED :: SDL_EventType
+pattern SDL_EVENT_WINDOW_HDR_STATE_CHANGED = SDL_EventType 538
+
+-- | [C declaration]: @SDL_EVENT_WINDOW_FIRST@, defined at @SDL3\/SDL_events.h 166:5@
+pattern SDL_EVENT_WINDOW_FIRST :: SDL_EventType
+pattern SDL_EVENT_WINDOW_FIRST = SDL_EventType 514
+
+-- | [C declaration]: @SDL_EVENT_WINDOW_LAST@, defined at @SDL3\/SDL_events.h 167:5@
+pattern SDL_EVENT_WINDOW_LAST :: SDL_EventType
+pattern SDL_EVENT_WINDOW_LAST = SDL_EventType 538
+
+-- | Key pressed
+--
+--     [C declaration]: @SDL_EVENT_KEY_DOWN@, defined at @SDL3\/SDL_events.h 170:5@
+pattern SDL_EVENT_KEY_DOWN :: SDL_EventType
+pattern SDL_EVENT_KEY_DOWN = SDL_EventType 768
+
+-- | Key released
+--
+--     [C declaration]: @SDL_EVENT_KEY_UP@, defined at @SDL3\/SDL_events.h 171:5@
+pattern SDL_EVENT_KEY_UP :: SDL_EventType
+pattern SDL_EVENT_KEY_UP = SDL_EventType 769
+
+-- | Keyboard text editing (composition)
+--
+--     [C declaration]: @SDL_EVENT_TEXT_EDITING@, defined at @SDL3\/SDL_events.h 172:5@
+pattern SDL_EVENT_TEXT_EDITING :: SDL_EventType
+pattern SDL_EVENT_TEXT_EDITING = SDL_EventType 770
+
+-- | Keyboard text input
+--
+--     [C declaration]: @SDL_EVENT_TEXT_INPUT@, defined at @SDL3\/SDL_events.h 173:5@
+pattern SDL_EVENT_TEXT_INPUT :: SDL_EventType
+pattern SDL_EVENT_TEXT_INPUT = SDL_EventType 771
+
+-- | Keymap changed due to a system event such as an input language or keyboard layout change.
+--
+--     [C declaration]: @SDL_EVENT_KEYMAP_CHANGED@, defined at @SDL3\/SDL_events.h 174:5@
+pattern SDL_EVENT_KEYMAP_CHANGED :: SDL_EventType
+pattern SDL_EVENT_KEYMAP_CHANGED = SDL_EventType 772
+
+-- | A new keyboard has been inserted into the system
+--
+--     [C declaration]: @SDL_EVENT_KEYBOARD_ADDED@, defined at @SDL3\/SDL_events.h 176:5@
+pattern SDL_EVENT_KEYBOARD_ADDED :: SDL_EventType
+pattern SDL_EVENT_KEYBOARD_ADDED = SDL_EventType 773
+
+-- | A keyboard has been removed
+--
+--     [C declaration]: @SDL_EVENT_KEYBOARD_REMOVED@, defined at @SDL3\/SDL_events.h 177:5@
+pattern SDL_EVENT_KEYBOARD_REMOVED :: SDL_EventType
+pattern SDL_EVENT_KEYBOARD_REMOVED = SDL_EventType 774
+
+-- | Keyboard text editing candidates
+--
+--     [C declaration]: @SDL_EVENT_TEXT_EDITING_CANDIDATES@, defined at @SDL3\/SDL_events.h 178:5@
+pattern SDL_EVENT_TEXT_EDITING_CANDIDATES :: SDL_EventType
+pattern SDL_EVENT_TEXT_EDITING_CANDIDATES = SDL_EventType 775
+
+-- | The on-screen keyboard has been shown
+--
+--     [C declaration]: @SDL_EVENT_SCREEN_KEYBOARD_SHOWN@, defined at @SDL3\/SDL_events.h 179:5@
+pattern SDL_EVENT_SCREEN_KEYBOARD_SHOWN :: SDL_EventType
+pattern SDL_EVENT_SCREEN_KEYBOARD_SHOWN = SDL_EventType 776
+
+-- | The on-screen keyboard has been hidden
+--
+--     [C declaration]: @SDL_EVENT_SCREEN_KEYBOARD_HIDDEN@, defined at @SDL3\/SDL_events.h 180:5@
+pattern SDL_EVENT_SCREEN_KEYBOARD_HIDDEN :: SDL_EventType
+pattern SDL_EVENT_SCREEN_KEYBOARD_HIDDEN = SDL_EventType 777
+
+-- | Mouse moved
+--
+--     [C declaration]: @SDL_EVENT_MOUSE_MOTION@, defined at @SDL3\/SDL_events.h 183:5@
+pattern SDL_EVENT_MOUSE_MOTION :: SDL_EventType
+pattern SDL_EVENT_MOUSE_MOTION = SDL_EventType 1024
+
+-- | Mouse button pressed
+--
+--     [C declaration]: @SDL_EVENT_MOUSE_BUTTON_DOWN@, defined at @SDL3\/SDL_events.h 184:5@
+pattern SDL_EVENT_MOUSE_BUTTON_DOWN :: SDL_EventType
+pattern SDL_EVENT_MOUSE_BUTTON_DOWN = SDL_EventType 1025
+
+-- | Mouse button released
+--
+--     [C declaration]: @SDL_EVENT_MOUSE_BUTTON_UP@, defined at @SDL3\/SDL_events.h 185:5@
+pattern SDL_EVENT_MOUSE_BUTTON_UP :: SDL_EventType
+pattern SDL_EVENT_MOUSE_BUTTON_UP = SDL_EventType 1026
+
+-- | Mouse wheel motion
+--
+--     [C declaration]: @SDL_EVENT_MOUSE_WHEEL@, defined at @SDL3\/SDL_events.h 186:5@
+pattern SDL_EVENT_MOUSE_WHEEL :: SDL_EventType
+pattern SDL_EVENT_MOUSE_WHEEL = SDL_EventType 1027
+
+-- | A new mouse has been inserted into the system
+--
+--     [C declaration]: @SDL_EVENT_MOUSE_ADDED@, defined at @SDL3\/SDL_events.h 187:5@
+pattern SDL_EVENT_MOUSE_ADDED :: SDL_EventType
+pattern SDL_EVENT_MOUSE_ADDED = SDL_EventType 1028
+
+-- | A mouse has been removed
+--
+--     [C declaration]: @SDL_EVENT_MOUSE_REMOVED@, defined at @SDL3\/SDL_events.h 188:5@
+pattern SDL_EVENT_MOUSE_REMOVED :: SDL_EventType
+pattern SDL_EVENT_MOUSE_REMOVED = SDL_EventType 1029
+
+-- | Joystick axis motion
+--
+--     [C declaration]: @SDL_EVENT_JOYSTICK_AXIS_MOTION@, defined at @SDL3\/SDL_events.h 191:5@
+pattern SDL_EVENT_JOYSTICK_AXIS_MOTION :: SDL_EventType
+pattern SDL_EVENT_JOYSTICK_AXIS_MOTION = SDL_EventType 1536
+
+-- | Joystick trackball motion
+--
+--     [C declaration]: @SDL_EVENT_JOYSTICK_BALL_MOTION@, defined at @SDL3\/SDL_events.h 192:5@
+pattern SDL_EVENT_JOYSTICK_BALL_MOTION :: SDL_EventType
+pattern SDL_EVENT_JOYSTICK_BALL_MOTION = SDL_EventType 1537
+
+-- | Joystick hat position change
+--
+--     [C declaration]: @SDL_EVENT_JOYSTICK_HAT_MOTION@, defined at @SDL3\/SDL_events.h 193:5@
+pattern SDL_EVENT_JOYSTICK_HAT_MOTION :: SDL_EventType
+pattern SDL_EVENT_JOYSTICK_HAT_MOTION = SDL_EventType 1538
+
+-- | Joystick button pressed
+--
+--     [C declaration]: @SDL_EVENT_JOYSTICK_BUTTON_DOWN@, defined at @SDL3\/SDL_events.h 194:5@
+pattern SDL_EVENT_JOYSTICK_BUTTON_DOWN :: SDL_EventType
+pattern SDL_EVENT_JOYSTICK_BUTTON_DOWN = SDL_EventType 1539
+
+-- | Joystick button released
+--
+--     [C declaration]: @SDL_EVENT_JOYSTICK_BUTTON_UP@, defined at @SDL3\/SDL_events.h 195:5@
+pattern SDL_EVENT_JOYSTICK_BUTTON_UP :: SDL_EventType
+pattern SDL_EVENT_JOYSTICK_BUTTON_UP = SDL_EventType 1540
+
+-- | A new joystick has been inserted into the system
+--
+--     [C declaration]: @SDL_EVENT_JOYSTICK_ADDED@, defined at @SDL3\/SDL_events.h 196:5@
+pattern SDL_EVENT_JOYSTICK_ADDED :: SDL_EventType
+pattern SDL_EVENT_JOYSTICK_ADDED = SDL_EventType 1541
+
+-- | An opened joystick has been removed
+--
+--     [C declaration]: @SDL_EVENT_JOYSTICK_REMOVED@, defined at @SDL3\/SDL_events.h 197:5@
+pattern SDL_EVENT_JOYSTICK_REMOVED :: SDL_EventType
+pattern SDL_EVENT_JOYSTICK_REMOVED = SDL_EventType 1542
+
+-- | Joystick battery level change
+--
+--     [C declaration]: @SDL_EVENT_JOYSTICK_BATTERY_UPDATED@, defined at @SDL3\/SDL_events.h 198:5@
+pattern SDL_EVENT_JOYSTICK_BATTERY_UPDATED :: SDL_EventType
+pattern SDL_EVENT_JOYSTICK_BATTERY_UPDATED = SDL_EventType 1543
+
+-- | Joystick update is complete
+--
+--     [C declaration]: @SDL_EVENT_JOYSTICK_UPDATE_COMPLETE@, defined at @SDL3\/SDL_events.h 199:5@
+pattern SDL_EVENT_JOYSTICK_UPDATE_COMPLETE :: SDL_EventType
+pattern SDL_EVENT_JOYSTICK_UPDATE_COMPLETE = SDL_EventType 1544
+
+-- | Gamepad axis motion
+--
+--     [C declaration]: @SDL_EVENT_GAMEPAD_AXIS_MOTION@, defined at @SDL3\/SDL_events.h 202:5@
+pattern SDL_EVENT_GAMEPAD_AXIS_MOTION :: SDL_EventType
+pattern SDL_EVENT_GAMEPAD_AXIS_MOTION = SDL_EventType 1616
+
+-- | Gamepad button pressed
+--
+--     [C declaration]: @SDL_EVENT_GAMEPAD_BUTTON_DOWN@, defined at @SDL3\/SDL_events.h 203:5@
+pattern SDL_EVENT_GAMEPAD_BUTTON_DOWN :: SDL_EventType
+pattern SDL_EVENT_GAMEPAD_BUTTON_DOWN = SDL_EventType 1617
+
+-- | Gamepad button released
+--
+--     [C declaration]: @SDL_EVENT_GAMEPAD_BUTTON_UP@, defined at @SDL3\/SDL_events.h 204:5@
+pattern SDL_EVENT_GAMEPAD_BUTTON_UP :: SDL_EventType
+pattern SDL_EVENT_GAMEPAD_BUTTON_UP = SDL_EventType 1618
+
+-- | A new gamepad has been inserted into the system
+--
+--     [C declaration]: @SDL_EVENT_GAMEPAD_ADDED@, defined at @SDL3\/SDL_events.h 205:5@
+pattern SDL_EVENT_GAMEPAD_ADDED :: SDL_EventType
+pattern SDL_EVENT_GAMEPAD_ADDED = SDL_EventType 1619
+
+-- | A gamepad has been removed
+--
+--     [C declaration]: @SDL_EVENT_GAMEPAD_REMOVED@, defined at @SDL3\/SDL_events.h 206:5@
+pattern SDL_EVENT_GAMEPAD_REMOVED :: SDL_EventType
+pattern SDL_EVENT_GAMEPAD_REMOVED = SDL_EventType 1620
+
+-- | The gamepad mapping was updated
+--
+--     [C declaration]: @SDL_EVENT_GAMEPAD_REMAPPED@, defined at @SDL3\/SDL_events.h 207:5@
+pattern SDL_EVENT_GAMEPAD_REMAPPED :: SDL_EventType
+pattern SDL_EVENT_GAMEPAD_REMAPPED = SDL_EventType 1621
+
+-- | Gamepad touchpad was touched
+--
+--     [C declaration]: @SDL_EVENT_GAMEPAD_TOUCHPAD_DOWN@, defined at @SDL3\/SDL_events.h 208:5@
+pattern SDL_EVENT_GAMEPAD_TOUCHPAD_DOWN :: SDL_EventType
+pattern SDL_EVENT_GAMEPAD_TOUCHPAD_DOWN = SDL_EventType 1622
+
+-- | Gamepad touchpad finger was moved
+--
+--     [C declaration]: @SDL_EVENT_GAMEPAD_TOUCHPAD_MOTION@, defined at @SDL3\/SDL_events.h 209:5@
+pattern SDL_EVENT_GAMEPAD_TOUCHPAD_MOTION :: SDL_EventType
+pattern SDL_EVENT_GAMEPAD_TOUCHPAD_MOTION = SDL_EventType 1623
+
+-- | Gamepad touchpad finger was lifted
+--
+--     [C declaration]: @SDL_EVENT_GAMEPAD_TOUCHPAD_UP@, defined at @SDL3\/SDL_events.h 210:5@
+pattern SDL_EVENT_GAMEPAD_TOUCHPAD_UP :: SDL_EventType
+pattern SDL_EVENT_GAMEPAD_TOUCHPAD_UP = SDL_EventType 1624
+
+-- | Gamepad sensor was updated
+--
+--     [C declaration]: @SDL_EVENT_GAMEPAD_SENSOR_UPDATE@, defined at @SDL3\/SDL_events.h 211:5@
+pattern SDL_EVENT_GAMEPAD_SENSOR_UPDATE :: SDL_EventType
+pattern SDL_EVENT_GAMEPAD_SENSOR_UPDATE = SDL_EventType 1625
+
+-- | Gamepad update is complete
+--
+--     [C declaration]: @SDL_EVENT_GAMEPAD_UPDATE_COMPLETE@, defined at @SDL3\/SDL_events.h 212:5@
+pattern SDL_EVENT_GAMEPAD_UPDATE_COMPLETE :: SDL_EventType
+pattern SDL_EVENT_GAMEPAD_UPDATE_COMPLETE = SDL_EventType 1626
+
+-- | Gamepad Steam handle has changed
+--
+--     [C declaration]: @SDL_EVENT_GAMEPAD_STEAM_HANDLE_UPDATED@, defined at @SDL3\/SDL_events.h 213:5@
+pattern SDL_EVENT_GAMEPAD_STEAM_HANDLE_UPDATED :: SDL_EventType
+pattern SDL_EVENT_GAMEPAD_STEAM_HANDLE_UPDATED = SDL_EventType 1627
+
+-- | [C declaration]: @SDL_EVENT_FINGER_DOWN@, defined at @SDL3\/SDL_events.h 216:5@
+pattern SDL_EVENT_FINGER_DOWN :: SDL_EventType
+pattern SDL_EVENT_FINGER_DOWN = SDL_EventType 1792
+
+-- | [C declaration]: @SDL_EVENT_FINGER_UP@, defined at @SDL3\/SDL_events.h 217:5@
+pattern SDL_EVENT_FINGER_UP :: SDL_EventType
+pattern SDL_EVENT_FINGER_UP = SDL_EventType 1793
+
+-- | [C declaration]: @SDL_EVENT_FINGER_MOTION@, defined at @SDL3\/SDL_events.h 218:5@
+pattern SDL_EVENT_FINGER_MOTION :: SDL_EventType
+pattern SDL_EVENT_FINGER_MOTION = SDL_EventType 1794
+
+-- | [C declaration]: @SDL_EVENT_FINGER_CANCELED@, defined at @SDL3\/SDL_events.h 219:5@
+pattern SDL_EVENT_FINGER_CANCELED :: SDL_EventType
+pattern SDL_EVENT_FINGER_CANCELED = SDL_EventType 1795
+
+-- | Pinch gesture started
+--
+--     [C declaration]: @SDL_EVENT_PINCH_BEGIN@, defined at @SDL3\/SDL_events.h 222:5@
+pattern SDL_EVENT_PINCH_BEGIN :: SDL_EventType
+pattern SDL_EVENT_PINCH_BEGIN = SDL_EventType 1808
+
+-- | Pinch gesture updated
+--
+--     [C declaration]: @SDL_EVENT_PINCH_UPDATE@, defined at @SDL3\/SDL_events.h 223:5@
+pattern SDL_EVENT_PINCH_UPDATE :: SDL_EventType
+pattern SDL_EVENT_PINCH_UPDATE = SDL_EventType 1809
+
+-- | Pinch gesture ended
+--
+--     [C declaration]: @SDL_EVENT_PINCH_END@, defined at @SDL3\/SDL_events.h 224:5@
+pattern SDL_EVENT_PINCH_END :: SDL_EventType
+pattern SDL_EVENT_PINCH_END = SDL_EventType 1810
+
+-- | The clipboard changed
+--
+--     [C declaration]: @SDL_EVENT_CLIPBOARD_UPDATE@, defined at @SDL3\/SDL_events.h 229:5@
+pattern SDL_EVENT_CLIPBOARD_UPDATE :: SDL_EventType
+pattern SDL_EVENT_CLIPBOARD_UPDATE = SDL_EventType 2304
+
+-- | The system requests a file open
+--
+--     [C declaration]: @SDL_EVENT_DROP_FILE@, defined at @SDL3\/SDL_events.h 232:5@
+pattern SDL_EVENT_DROP_FILE :: SDL_EventType
+pattern SDL_EVENT_DROP_FILE = SDL_EventType 4096
+
+-- | text\/plain drag-and-drop event
+--
+--     [C declaration]: @SDL_EVENT_DROP_TEXT@, defined at @SDL3\/SDL_events.h 233:5@
+pattern SDL_EVENT_DROP_TEXT :: SDL_EventType
+pattern SDL_EVENT_DROP_TEXT = SDL_EventType 4097
+
+-- | A new set of drops is beginning (NULL filename)
+--
+--     [C declaration]: @SDL_EVENT_DROP_BEGIN@, defined at @SDL3\/SDL_events.h 234:5@
+pattern SDL_EVENT_DROP_BEGIN :: SDL_EventType
+pattern SDL_EVENT_DROP_BEGIN = SDL_EventType 4098
+
+-- | Current set of drops is now complete (NULL filename)
+--
+--     [C declaration]: @SDL_EVENT_DROP_COMPLETE@, defined at @SDL3\/SDL_events.h 235:5@
+pattern SDL_EVENT_DROP_COMPLETE :: SDL_EventType
+pattern SDL_EVENT_DROP_COMPLETE = SDL_EventType 4099
+
+-- | Position while moving over the window
+--
+--     [C declaration]: @SDL_EVENT_DROP_POSITION@, defined at @SDL3\/SDL_events.h 236:5@
+pattern SDL_EVENT_DROP_POSITION :: SDL_EventType
+pattern SDL_EVENT_DROP_POSITION = SDL_EventType 4100
+
+-- | A new audio device is available
+--
+--     [C declaration]: @SDL_EVENT_AUDIO_DEVICE_ADDED@, defined at @SDL3\/SDL_events.h 239:5@
+pattern SDL_EVENT_AUDIO_DEVICE_ADDED :: SDL_EventType
+pattern SDL_EVENT_AUDIO_DEVICE_ADDED = SDL_EventType 4352
+
+-- | An audio device has been removed.
+--
+--     [C declaration]: @SDL_EVENT_AUDIO_DEVICE_REMOVED@, defined at @SDL3\/SDL_events.h 240:5@
+pattern SDL_EVENT_AUDIO_DEVICE_REMOVED :: SDL_EventType
+pattern SDL_EVENT_AUDIO_DEVICE_REMOVED = SDL_EventType 4353
+
+-- | An audio device\'s format has been changed by the system.
+--
+--     [C declaration]: @SDL_EVENT_AUDIO_DEVICE_FORMAT_CHANGED@, defined at @SDL3\/SDL_events.h 241:5@
+pattern SDL_EVENT_AUDIO_DEVICE_FORMAT_CHANGED :: SDL_EventType
+pattern SDL_EVENT_AUDIO_DEVICE_FORMAT_CHANGED = SDL_EventType 4354
+
+-- | A sensor was updated
+--
+--     [C declaration]: @SDL_EVENT_SENSOR_UPDATE@, defined at @SDL3\/SDL_events.h 244:5@
+pattern SDL_EVENT_SENSOR_UPDATE :: SDL_EventType
+pattern SDL_EVENT_SENSOR_UPDATE = SDL_EventType 4608
+
+-- | Pressure-sensitive pen has become available
+--
+--     [C declaration]: @SDL_EVENT_PEN_PROXIMITY_IN@, defined at @SDL3\/SDL_events.h 247:5@
+pattern SDL_EVENT_PEN_PROXIMITY_IN :: SDL_EventType
+pattern SDL_EVENT_PEN_PROXIMITY_IN = SDL_EventType 4864
+
+-- | Pressure-sensitive pen has become unavailable
+--
+--     [C declaration]: @SDL_EVENT_PEN_PROXIMITY_OUT@, defined at @SDL3\/SDL_events.h 248:5@
+pattern SDL_EVENT_PEN_PROXIMITY_OUT :: SDL_EventType
+pattern SDL_EVENT_PEN_PROXIMITY_OUT = SDL_EventType 4865
+
+-- | Pressure-sensitive pen touched drawing surface
+--
+--     [C declaration]: @SDL_EVENT_PEN_DOWN@, defined at @SDL3\/SDL_events.h 249:5@
+pattern SDL_EVENT_PEN_DOWN :: SDL_EventType
+pattern SDL_EVENT_PEN_DOWN = SDL_EventType 4866
+
+-- | Pressure-sensitive pen stopped touching drawing surface
+--
+--     [C declaration]: @SDL_EVENT_PEN_UP@, defined at @SDL3\/SDL_events.h 250:5@
+pattern SDL_EVENT_PEN_UP :: SDL_EventType
+pattern SDL_EVENT_PEN_UP = SDL_EventType 4867
+
+-- | Pressure-sensitive pen button pressed
+--
+--     [C declaration]: @SDL_EVENT_PEN_BUTTON_DOWN@, defined at @SDL3\/SDL_events.h 251:5@
+pattern SDL_EVENT_PEN_BUTTON_DOWN :: SDL_EventType
+pattern SDL_EVENT_PEN_BUTTON_DOWN = SDL_EventType 4868
+
+-- | Pressure-sensitive pen button released
+--
+--     [C declaration]: @SDL_EVENT_PEN_BUTTON_UP@, defined at @SDL3\/SDL_events.h 252:5@
+pattern SDL_EVENT_PEN_BUTTON_UP :: SDL_EventType
+pattern SDL_EVENT_PEN_BUTTON_UP = SDL_EventType 4869
+
+-- | Pressure-sensitive pen is moving on the tablet
+--
+--     [C declaration]: @SDL_EVENT_PEN_MOTION@, defined at @SDL3\/SDL_events.h 253:5@
+pattern SDL_EVENT_PEN_MOTION :: SDL_EventType
+pattern SDL_EVENT_PEN_MOTION = SDL_EventType 4870
+
+-- | Pressure-sensitive pen angle\/pressure\/etc changed
+--
+--     [C declaration]: @SDL_EVENT_PEN_AXIS@, defined at @SDL3\/SDL_events.h 254:5@
+pattern SDL_EVENT_PEN_AXIS :: SDL_EventType
+pattern SDL_EVENT_PEN_AXIS = SDL_EventType 4871
+
+-- | A new camera device is available
+--
+--     [C declaration]: @SDL_EVENT_CAMERA_DEVICE_ADDED@, defined at @SDL3\/SDL_events.h 257:5@
+pattern SDL_EVENT_CAMERA_DEVICE_ADDED :: SDL_EventType
+pattern SDL_EVENT_CAMERA_DEVICE_ADDED = SDL_EventType 5120
+
+-- | A camera device has been removed.
+--
+--     [C declaration]: @SDL_EVENT_CAMERA_DEVICE_REMOVED@, defined at @SDL3\/SDL_events.h 258:5@
+pattern SDL_EVENT_CAMERA_DEVICE_REMOVED :: SDL_EventType
+pattern SDL_EVENT_CAMERA_DEVICE_REMOVED = SDL_EventType 5121
+
+-- | A camera device has been approved for use by the user.
+--
+--     [C declaration]: @SDL_EVENT_CAMERA_DEVICE_APPROVED@, defined at @SDL3\/SDL_events.h 259:5@
+pattern SDL_EVENT_CAMERA_DEVICE_APPROVED :: SDL_EventType
+pattern SDL_EVENT_CAMERA_DEVICE_APPROVED = SDL_EventType 5122
+
+-- | A camera device has been denied for use by the user.
+--
+--     [C declaration]: @SDL_EVENT_CAMERA_DEVICE_DENIED@, defined at @SDL3\/SDL_events.h 260:5@
+pattern SDL_EVENT_CAMERA_DEVICE_DENIED :: SDL_EventType
+pattern SDL_EVENT_CAMERA_DEVICE_DENIED = SDL_EventType 5123
+
+-- | The render targets have been reset and their contents need to be updated
+--
+--     [C declaration]: @SDL_EVENT_RENDER_TARGETS_RESET@, defined at @SDL3\/SDL_events.h 263:5@
+pattern SDL_EVENT_RENDER_TARGETS_RESET :: SDL_EventType
+pattern SDL_EVENT_RENDER_TARGETS_RESET = SDL_EventType 8192
+
+-- | The device has been reset and all textures need to be recreated
+--
+--     [C declaration]: @SDL_EVENT_RENDER_DEVICE_RESET@, defined at @SDL3\/SDL_events.h 264:5@
+pattern SDL_EVENT_RENDER_DEVICE_RESET :: SDL_EventType
+pattern SDL_EVENT_RENDER_DEVICE_RESET = SDL_EventType 8193
+
+-- | The device has been lost and can\'t be recovered.
+--
+--     [C declaration]: @SDL_EVENT_RENDER_DEVICE_LOST@, defined at @SDL3\/SDL_events.h 265:5@
+pattern SDL_EVENT_RENDER_DEVICE_LOST :: SDL_EventType
+pattern SDL_EVENT_RENDER_DEVICE_LOST = SDL_EventType 8194
+
+-- | [C declaration]: @SDL_EVENT_PRIVATE0@, defined at @SDL3\/SDL_events.h 268:5@
+pattern SDL_EVENT_PRIVATE0 :: SDL_EventType
+pattern SDL_EVENT_PRIVATE0 = SDL_EventType 16384
+
+-- | [C declaration]: @SDL_EVENT_PRIVATE1@, defined at @SDL3\/SDL_events.h 269:5@
+pattern SDL_EVENT_PRIVATE1 :: SDL_EventType
+pattern SDL_EVENT_PRIVATE1 = SDL_EventType 16385
+
+-- | [C declaration]: @SDL_EVENT_PRIVATE2@, defined at @SDL3\/SDL_events.h 270:5@
+pattern SDL_EVENT_PRIVATE2 :: SDL_EventType
+pattern SDL_EVENT_PRIVATE2 = SDL_EventType 16386
+
+-- | [C declaration]: @SDL_EVENT_PRIVATE3@, defined at @SDL3\/SDL_events.h 271:5@
+pattern SDL_EVENT_PRIVATE3 :: SDL_EventType
+pattern SDL_EVENT_PRIVATE3 = SDL_EventType 16387
+
+-- | Signals the end of an event poll cycle
+--
+--     [C declaration]: @SDL_EVENT_POLL_SENTINEL@, defined at @SDL3\/SDL_events.h 274:5@
+pattern SDL_EVENT_POLL_SENTINEL :: SDL_EventType
+pattern SDL_EVENT_POLL_SENTINEL = SDL_EventType 32512
+
+-- | Events SDL_EVENT_USER through SDL_EVENT_LAST are for your use, and should be allocated with @SDL_RegisterEvents()@
+--
+--     [C declaration]: @SDL_EVENT_USER@, defined at @SDL3\/SDL_events.h 279:5@
+pattern SDL_EVENT_USER :: SDL_EventType
+pattern SDL_EVENT_USER = SDL_EventType 32768
+
+-- | This last event is only for bounding internal arrays
+--
+--     [C declaration]: @SDL_EVENT_LAST@, defined at @SDL3\/SDL_events.h 284:5@
+pattern SDL_EVENT_LAST :: SDL_EventType
+pattern SDL_EVENT_LAST = SDL_EventType 65535
+
+-- | [C declaration]: @SDL_EVENT_ENUM_PADDING@, defined at @SDL3\/SDL_events.h 287:5@
+pattern SDL_EVENT_ENUM_PADDING :: SDL_EventType
+pattern SDL_EVENT_ENUM_PADDING = SDL_EventType 2147483647
+
+-- | Fields shared by every event
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @struct SDL_CommonEvent@, defined at @SDL3\/SDL_events.h 296:16@
+data SDL_CommonEvent = SDL_CommonEvent
+  { type' :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ Event type, shared with all events, Uint32 to cover user events which are not in the 'SDL_EventType' enumeration
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 298:12@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 299:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 300:12@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_CommonEvent where
+  staticSizeOf = \_ -> (16 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_CommonEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_CommonEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+
+instance Marshal.WriteRaw SDL_CommonEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_CommonEvent type'2 reserved3 timestamp4 ->
+            HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+              >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+              >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+
+deriving via Marshal.EquivStorable SDL_CommonEvent instance BG.Storable SDL_CommonEvent
+
+deriving via Struct.IsStructViaReadRaw SDL_CommonEvent instance Struct.IsStruct SDL_CommonEvent
+
+-- | Event type, shared with all events, Uint32 to cover user events which are not in the 'SDL_EventType' enumeration
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 298:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "type'" SDL_CommonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_CommonEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "type'" (BG.Ptr SDL_CommonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_CommonEvent "type'" where
+  type
+    CFieldType SDL_CommonEvent "type'" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 299:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_CommonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_CommonEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_CommonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_CommonEvent "reserved" where
+  type
+    CFieldType SDL_CommonEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 300:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_CommonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_CommonEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_CommonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_CommonEvent "timestamp" where
+  type
+    CFieldType SDL_CommonEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | Display state change event data (event.display.*)
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @struct SDL_DisplayEvent@, defined at @SDL3\/SDL_events.h 308:16@
+data SDL_DisplayEvent = SDL_DisplayEvent
+  { type' :: SDL_EventType
+  -- ^ SDL_EVENT_DISPLAY_*
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 310:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 311:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 312:12@
+  , displayID :: SDL3.Sys.Bindgen.Video.SDL_DisplayID
+  -- ^ The associated display
+  --
+  --          [C declaration]: @displayID@, defined at @SDL3\/SDL_events.h 313:19@
+  , data1 :: SDL3.Sys.Bindgen.Stdinc.Sint32
+  -- ^ event dependent data
+  --
+  --          [C declaration]: @data1@, defined at @SDL3\/SDL_events.h 314:12@
+  , data2 :: SDL3.Sys.Bindgen.Stdinc.Sint32
+  -- ^ event dependent data
+  --
+  --          [C declaration]: @data2@, defined at @SDL3\/SDL_events.h 315:12@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_DisplayEvent where
+  staticSizeOf = \_ -> (32 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_DisplayEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_DisplayEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"displayID") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"data1") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"data2") ptr0
+
+instance Marshal.WriteRaw SDL_DisplayEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_DisplayEvent type'2 reserved3 timestamp4 displayID5 data16 data27 ->
+            HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+              >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+              >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+              >> HasCField.writeRaw (BG.Proxy @"displayID") ptr0 displayID5
+              >> HasCField.writeRaw (BG.Proxy @"data1") ptr0 data16
+              >> HasCField.writeRaw (BG.Proxy @"data2") ptr0 data27
+
+deriving via Marshal.EquivStorable SDL_DisplayEvent instance BG.Storable SDL_DisplayEvent
+
+deriving via Struct.IsStructViaReadRaw SDL_DisplayEvent instance Struct.IsStruct SDL_DisplayEvent
+
+-- | SDL_EVENT_DISPLAY_*
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 310:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_DisplayEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_DisplayEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , displayID = BG.getField @"displayID" x0
+            , data1 = BG.getField @"data1" x0
+            , data2 = BG.getField @"data2" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_DisplayEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_DisplayEvent "type'" where
+  type
+    CFieldType SDL_DisplayEvent "type'" =
+      SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 311:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_DisplayEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_DisplayEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , displayID = BG.getField @"displayID" x0
+            , data1 = BG.getField @"data1" x0
+            , data2 = BG.getField @"data2" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_DisplayEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_DisplayEvent "reserved" where
+  type
+    CFieldType SDL_DisplayEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 312:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_DisplayEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_DisplayEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , displayID = BG.getField @"displayID" x0
+            , data1 = BG.getField @"data1" x0
+            , data2 = BG.getField @"data2" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_DisplayEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_DisplayEvent "timestamp" where
+  type
+    CFieldType SDL_DisplayEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | The associated display
+--
+--     [C declaration]: @displayID@, defined at @SDL3\/SDL_events.h 313:19@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_DisplayID)
+  => BG.CompatHasField.HasField "displayID" SDL_DisplayEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_DisplayEvent
+            { displayID = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , data1 = BG.getField @"data1" x0
+            , data2 = BG.getField @"data2" x0
+            }
+      , BG.getField @"displayID" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_DisplayID)
+  => BG.HasField "displayID" (BG.Ptr SDL_DisplayEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"displayID")
+
+instance HasCField.HasCField SDL_DisplayEvent "displayID" where
+  type
+    CFieldType SDL_DisplayEvent "displayID" =
+      SDL3.Sys.Bindgen.Video.SDL_DisplayID
+
+  offset# = \_ -> \_ -> 16
+
+-- | event dependent data
+--
+--     [C declaration]: @data1@, defined at @SDL3\/SDL_events.h 314:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
+  => BG.CompatHasField.HasField "data1" SDL_DisplayEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_DisplayEvent
+            { data1 = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , displayID = BG.getField @"displayID" x0
+            , data2 = BG.getField @"data2" x0
+            }
+      , BG.getField @"data1" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
+  => BG.HasField "data1" (BG.Ptr SDL_DisplayEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"data1")
+
+instance HasCField.HasCField SDL_DisplayEvent "data1" where
+  type
+    CFieldType SDL_DisplayEvent "data1" =
+      SDL3.Sys.Bindgen.Stdinc.Sint32
+
+  offset# = \_ -> \_ -> 20
+
+-- | event dependent data
+--
+--     [C declaration]: @data2@, defined at @SDL3\/SDL_events.h 315:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
+  => BG.CompatHasField.HasField "data2" SDL_DisplayEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_DisplayEvent
+            { data2 = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , displayID = BG.getField @"displayID" x0
+            , data1 = BG.getField @"data1" x0
+            }
+      , BG.getField @"data2" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
+  => BG.HasField "data2" (BG.Ptr SDL_DisplayEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"data2")
+
+instance HasCField.HasCField SDL_DisplayEvent "data2" where
+  type
+    CFieldType SDL_DisplayEvent "data2" =
+      SDL3.Sys.Bindgen.Stdinc.Sint32
+
+  offset# = \_ -> \_ -> 24
+
+-- | Window state change event data (event.window.*)
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @struct SDL_WindowEvent@, defined at @SDL3\/SDL_events.h 323:16@
+data SDL_WindowEvent = SDL_WindowEvent
+  { type' :: SDL_EventType
+  -- ^ SDL_EVENT_WINDOW_*
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 325:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 326:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 327:12@
+  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
+  -- ^ The associated window
+  --
+  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 328:18@
+  , data1 :: SDL3.Sys.Bindgen.Stdinc.Sint32
+  -- ^ event dependent data
+  --
+  --          [C declaration]: @data1@, defined at @SDL3\/SDL_events.h 329:12@
+  , data2 :: SDL3.Sys.Bindgen.Stdinc.Sint32
+  -- ^ event dependent data
+  --
+  --          [C declaration]: @data2@, defined at @SDL3\/SDL_events.h 330:12@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_WindowEvent where
+  staticSizeOf = \_ -> (32 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_WindowEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_WindowEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"data1") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"data2") ptr0
+
+instance Marshal.WriteRaw SDL_WindowEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_WindowEvent type'2 reserved3 timestamp4 windowID5 data16 data27 ->
+            HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+              >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+              >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+              >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID5
+              >> HasCField.writeRaw (BG.Proxy @"data1") ptr0 data16
+              >> HasCField.writeRaw (BG.Proxy @"data2") ptr0 data27
+
+deriving via Marshal.EquivStorable SDL_WindowEvent instance BG.Storable SDL_WindowEvent
+
+deriving via Struct.IsStructViaReadRaw SDL_WindowEvent instance Struct.IsStruct SDL_WindowEvent
+
+-- | SDL_EVENT_WINDOW_*
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 325:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_WindowEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_WindowEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , data1 = BG.getField @"data1" x0
+            , data2 = BG.getField @"data2" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_WindowEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_WindowEvent "type'" where
+  type
+    CFieldType SDL_WindowEvent "type'" =
+      SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 326:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_WindowEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_WindowEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , data1 = BG.getField @"data1" x0
+            , data2 = BG.getField @"data2" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_WindowEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_WindowEvent "reserved" where
+  type
+    CFieldType SDL_WindowEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 327:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_WindowEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_WindowEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , windowID = BG.getField @"windowID" x0
+            , data1 = BG.getField @"data1" x0
+            , data2 = BG.getField @"data2" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_WindowEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_WindowEvent "timestamp" where
+  type
+    CFieldType SDL_WindowEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | The associated window
+--
+--     [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 328:18@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.CompatHasField.HasField "windowID" SDL_WindowEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_WindowEvent
+            { windowID = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , data1 = BG.getField @"data1" x0
+            , data2 = BG.getField @"data2" x0
+            }
+      , BG.getField @"windowID" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.HasField "windowID" (BG.Ptr SDL_WindowEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"windowID")
+
+instance HasCField.HasCField SDL_WindowEvent "windowID" where
+  type
+    CFieldType SDL_WindowEvent "windowID" =
+      SDL3.Sys.Bindgen.Video.SDL_WindowID
+
+  offset# = \_ -> \_ -> 16
+
+-- | event dependent data
+--
+--     [C declaration]: @data1@, defined at @SDL3\/SDL_events.h 329:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
+  => BG.CompatHasField.HasField "data1" SDL_WindowEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_WindowEvent
+            { data1 = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , data2 = BG.getField @"data2" x0
+            }
+      , BG.getField @"data1" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
+  => BG.HasField "data1" (BG.Ptr SDL_WindowEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"data1")
+
+instance HasCField.HasCField SDL_WindowEvent "data1" where
+  type
+    CFieldType SDL_WindowEvent "data1" =
+      SDL3.Sys.Bindgen.Stdinc.Sint32
+
+  offset# = \_ -> \_ -> 20
+
+-- | event dependent data
+--
+--     [C declaration]: @data2@, defined at @SDL3\/SDL_events.h 330:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
+  => BG.CompatHasField.HasField "data2" SDL_WindowEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_WindowEvent
+            { data2 = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , data1 = BG.getField @"data1" x0
+            }
+      , BG.getField @"data2" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
+  => BG.HasField "data2" (BG.Ptr SDL_WindowEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"data2")
+
+instance HasCField.HasCField SDL_WindowEvent "data2" where
+  type
+    CFieldType SDL_WindowEvent "data2" =
+      SDL3.Sys.Bindgen.Stdinc.Sint32
+
+  offset# = \_ -> \_ -> 24
+
+-- | Keyboard device event structure (event.kdevice.*)
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @struct SDL_KeyboardDeviceEvent@, defined at @SDL3\/SDL_events.h 338:16@
+data SDL_KeyboardDeviceEvent = SDL_KeyboardDeviceEvent
+  { type' :: SDL_EventType
+  -- ^ SDL_EVENT_KEYBOARD_ADDED or SDL_EVENT_KEYBOARD_REMOVED
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 340:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 341:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 342:12@
+  , which :: SDL3.Sys.Bindgen.Keyboard.SDL_KeyboardID
+  -- ^ The keyboard instance id
+  --
+  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 343:20@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_KeyboardDeviceEvent where
+  staticSizeOf = \_ -> (24 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_KeyboardDeviceEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_KeyboardDeviceEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
+
+instance Marshal.WriteRaw SDL_KeyboardDeviceEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_KeyboardDeviceEvent type'2 reserved3 timestamp4 which5 ->
+            HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+              >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+              >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+              >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which5
+
+deriving via
+  Marshal.EquivStorable SDL_KeyboardDeviceEvent
+  instance
+    BG.Storable SDL_KeyboardDeviceEvent
+
+deriving via
+  Struct.IsStructViaReadRaw SDL_KeyboardDeviceEvent
+  instance
+    Struct.IsStruct SDL_KeyboardDeviceEvent
+
+-- | SDL_EVENT_KEYBOARD_ADDED or SDL_EVENT_KEYBOARD_REMOVED
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 340:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_KeyboardDeviceEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_KeyboardDeviceEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_KeyboardDeviceEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_KeyboardDeviceEvent "type'" where
+  type
+    CFieldType SDL_KeyboardDeviceEvent "type'" =
+      SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 341:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_KeyboardDeviceEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_KeyboardDeviceEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_KeyboardDeviceEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_KeyboardDeviceEvent "reserved" where
+  type
+    CFieldType SDL_KeyboardDeviceEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 342:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_KeyboardDeviceEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_KeyboardDeviceEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , which = BG.getField @"which" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_KeyboardDeviceEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_KeyboardDeviceEvent "timestamp" where
+  type
+    CFieldType SDL_KeyboardDeviceEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | The keyboard instance id
+--
+--     [C declaration]: @which@, defined at @SDL3\/SDL_events.h 343:20@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Keyboard.SDL_KeyboardID)
+  => BG.CompatHasField.HasField "which" SDL_KeyboardDeviceEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_KeyboardDeviceEvent
+            { which = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            }
+      , BG.getField @"which" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Keyboard.SDL_KeyboardID)
+  => BG.HasField "which" (BG.Ptr SDL_KeyboardDeviceEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"which")
+
+instance HasCField.HasCField SDL_KeyboardDeviceEvent "which" where
+  type
+    CFieldType SDL_KeyboardDeviceEvent "which" =
+      SDL3.Sys.Bindgen.Keyboard.SDL_KeyboardID
+
+  offset# = \_ -> \_ -> 16
+
+-- | Keyboard button event structure (event.key.*)
+--
+--     The @key@ is the base SDL_Keycode generated by pressing the @scancode@ using the current keyboard layout, applying any options specified in SDL_HINT_KEYCODE_OPTIONS. You can get the SDL_Keycode corresponding to the event scancode and modifiers directly from the keyboard layout, bypassing SDL_HINT_KEYCODE_OPTIONS, by calling SDL_GetKeyFromScancode().
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_GetKeyFromScancode, SDL_HINT_KEYCODE_OPTIONS
+--
+--     [C declaration]: @struct SDL_KeyboardEvent@, defined at @SDL3\/SDL_events.h 360:16@
+data SDL_KeyboardEvent = SDL_KeyboardEvent
+  { type' :: SDL_EventType
+  -- ^ SDL_EVENT_KEY_DOWN or SDL_EVENT_KEY_UP
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 362:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 363:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 364:12@
+  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
+  -- ^ The window with keyboard focus, if any
+  --
+  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 365:18@
+  , which :: SDL3.Sys.Bindgen.Keyboard.SDL_KeyboardID
+  -- ^ The keyboard instance id, or 0 if unknown or virtual
+  --
+  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 366:20@
+  , scancode :: SDL3.Sys.Bindgen.Scancode.SDL_Scancode
+  -- ^ SDL physical key code
+  --
+  --          [C declaration]: @scancode@, defined at @SDL3\/SDL_events.h 367:18@
+  , key :: SDL3.Sys.Bindgen.Keycode.SDL_Keycode
+  -- ^ SDL virtual key code
+  --
+  --          [C declaration]: @key@, defined at @SDL3\/SDL_events.h 368:17@
+  , mod :: SDL3.Sys.Bindgen.Keycode.SDL_Keymod
+  -- ^ current key modifiers
+  --
+  --          [C declaration]: @mod@, defined at @SDL3\/SDL_events.h 369:16@
+  , raw :: SDL3.Sys.Bindgen.Stdinc.Uint16
+  -- ^ The platform dependent scancode for this event
+  --
+  --          [C declaration]: @raw@, defined at @SDL3\/SDL_events.h 370:12@
+  , down :: BG.CBool
+  -- ^ true if the key is pressed
+  --
+  --          [C declaration]: @down@, defined at @SDL3\/SDL_events.h 371:10@
+  , repeat :: BG.CBool
+  -- ^ true if this is a key repeat
+  --
+  --          [C declaration]: @repeat@, defined at @SDL3\/SDL_events.h 372:10@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_KeyboardEvent where
+  staticSizeOf = \_ -> (40 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_KeyboardEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_KeyboardEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"scancode") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"key") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"mod") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"raw") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"down") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"repeat") ptr0
+
+instance Marshal.WriteRaw SDL_KeyboardEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_KeyboardEvent
+            type'2
+            reserved3
+            timestamp4
+            windowID5
+            which6
+            scancode7
+            key8
+            mod9
+            raw10
+            down11
+            repeat12 ->
+              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+                >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID5
+                >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which6
+                >> HasCField.writeRaw (BG.Proxy @"scancode") ptr0 scancode7
+                >> HasCField.writeRaw (BG.Proxy @"key") ptr0 key8
+                >> HasCField.writeRaw (BG.Proxy @"mod") ptr0 mod9
+                >> HasCField.writeRaw (BG.Proxy @"raw") ptr0 raw10
+                >> HasCField.writeRaw (BG.Proxy @"down") ptr0 down11
+                >> HasCField.writeRaw (BG.Proxy @"repeat") ptr0 repeat12
+
+deriving via Marshal.EquivStorable SDL_KeyboardEvent instance BG.Storable SDL_KeyboardEvent
+
+deriving via Struct.IsStructViaReadRaw SDL_KeyboardEvent instance Struct.IsStruct SDL_KeyboardEvent
+
+-- | SDL_EVENT_KEY_DOWN or SDL_EVENT_KEY_UP
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 362:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_KeyboardEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_KeyboardEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , scancode = BG.getField @"scancode" x0
+            , key = BG.getField @"key" x0
+            , mod = BG.getField @"mod" x0
+            , raw = BG.getField @"raw" x0
+            , down = BG.getField @"down" x0
+            , repeat = BG.getField @"repeat" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_KeyboardEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_KeyboardEvent "type'" where
+  type
+    CFieldType SDL_KeyboardEvent "type'" =
+      SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 363:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_KeyboardEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_KeyboardEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , scancode = BG.getField @"scancode" x0
+            , key = BG.getField @"key" x0
+            , mod = BG.getField @"mod" x0
+            , raw = BG.getField @"raw" x0
+            , down = BG.getField @"down" x0
+            , repeat = BG.getField @"repeat" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_KeyboardEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_KeyboardEvent "reserved" where
+  type
+    CFieldType SDL_KeyboardEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 364:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_KeyboardEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_KeyboardEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , scancode = BG.getField @"scancode" x0
+            , key = BG.getField @"key" x0
+            , mod = BG.getField @"mod" x0
+            , raw = BG.getField @"raw" x0
+            , down = BG.getField @"down" x0
+            , repeat = BG.getField @"repeat" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_KeyboardEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_KeyboardEvent "timestamp" where
+  type
+    CFieldType SDL_KeyboardEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | The window with keyboard focus, if any
+--
+--     [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 365:18@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.CompatHasField.HasField "windowID" SDL_KeyboardEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_KeyboardEvent
+            { windowID = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , scancode = BG.getField @"scancode" x0
+            , key = BG.getField @"key" x0
+            , mod = BG.getField @"mod" x0
+            , raw = BG.getField @"raw" x0
+            , down = BG.getField @"down" x0
+            , repeat = BG.getField @"repeat" x0
+            }
+      , BG.getField @"windowID" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.HasField "windowID" (BG.Ptr SDL_KeyboardEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"windowID")
+
+instance HasCField.HasCField SDL_KeyboardEvent "windowID" where
+  type
+    CFieldType SDL_KeyboardEvent "windowID" =
+      SDL3.Sys.Bindgen.Video.SDL_WindowID
+
+  offset# = \_ -> \_ -> 16
+
+-- | The keyboard instance id, or 0 if unknown or virtual
+--
+--     [C declaration]: @which@, defined at @SDL3\/SDL_events.h 366:20@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Keyboard.SDL_KeyboardID)
+  => BG.CompatHasField.HasField "which" SDL_KeyboardEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_KeyboardEvent
+            { which = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , scancode = BG.getField @"scancode" x0
+            , key = BG.getField @"key" x0
+            , mod = BG.getField @"mod" x0
+            , raw = BG.getField @"raw" x0
+            , down = BG.getField @"down" x0
+            , repeat = BG.getField @"repeat" x0
+            }
+      , BG.getField @"which" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Keyboard.SDL_KeyboardID)
+  => BG.HasField "which" (BG.Ptr SDL_KeyboardEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"which")
+
+instance HasCField.HasCField SDL_KeyboardEvent "which" where
+  type
+    CFieldType SDL_KeyboardEvent "which" =
+      SDL3.Sys.Bindgen.Keyboard.SDL_KeyboardID
+
+  offset# = \_ -> \_ -> 20
+
+-- | SDL physical key code
+--
+--     [C declaration]: @scancode@, defined at @SDL3\/SDL_events.h 367:18@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Scancode.SDL_Scancode)
+  => BG.CompatHasField.HasField "scancode" SDL_KeyboardEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_KeyboardEvent
+            { scancode = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , key = BG.getField @"key" x0
+            , mod = BG.getField @"mod" x0
+            , raw = BG.getField @"raw" x0
+            , down = BG.getField @"down" x0
+            , repeat = BG.getField @"repeat" x0
+            }
+      , BG.getField @"scancode" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Scancode.SDL_Scancode)
+  => BG.HasField "scancode" (BG.Ptr SDL_KeyboardEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"scancode")
+
+instance HasCField.HasCField SDL_KeyboardEvent "scancode" where
+  type
+    CFieldType SDL_KeyboardEvent "scancode" =
+      SDL3.Sys.Bindgen.Scancode.SDL_Scancode
+
+  offset# = \_ -> \_ -> 24
+
+-- | SDL virtual key code
+--
+--     [C declaration]: @key@, defined at @SDL3\/SDL_events.h 368:17@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Keycode.SDL_Keycode)
+  => BG.CompatHasField.HasField "key" SDL_KeyboardEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_KeyboardEvent
+            { key = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , scancode = BG.getField @"scancode" x0
+            , mod = BG.getField @"mod" x0
+            , raw = BG.getField @"raw" x0
+            , down = BG.getField @"down" x0
+            , repeat = BG.getField @"repeat" x0
+            }
+      , BG.getField @"key" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Keycode.SDL_Keycode)
+  => BG.HasField "key" (BG.Ptr SDL_KeyboardEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"key")
+
+instance HasCField.HasCField SDL_KeyboardEvent "key" where
+  type
+    CFieldType SDL_KeyboardEvent "key" =
+      SDL3.Sys.Bindgen.Keycode.SDL_Keycode
+
+  offset# = \_ -> \_ -> 28
+
+-- | current key modifiers
+--
+--     [C declaration]: @mod@, defined at @SDL3\/SDL_events.h 369:16@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Keycode.SDL_Keymod)
+  => BG.CompatHasField.HasField "mod" SDL_KeyboardEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_KeyboardEvent
+            { mod = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , scancode = BG.getField @"scancode" x0
+            , key = BG.getField @"key" x0
+            , raw = BG.getField @"raw" x0
+            , down = BG.getField @"down" x0
+            , repeat = BG.getField @"repeat" x0
+            }
+      , BG.getField @"mod" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Keycode.SDL_Keymod)
+  => BG.HasField "mod" (BG.Ptr SDL_KeyboardEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"mod")
+
+instance HasCField.HasCField SDL_KeyboardEvent "mod" where
+  type
+    CFieldType SDL_KeyboardEvent "mod" =
+      SDL3.Sys.Bindgen.Keycode.SDL_Keymod
+
+  offset# = \_ -> \_ -> 32
+
+-- | The platform dependent scancode for this event
+--
+--     [C declaration]: @raw@, defined at @SDL3\/SDL_events.h 370:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
+  => BG.CompatHasField.HasField "raw" SDL_KeyboardEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_KeyboardEvent
+            { raw = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , scancode = BG.getField @"scancode" x0
+            , key = BG.getField @"key" x0
+            , mod = BG.getField @"mod" x0
+            , down = BG.getField @"down" x0
+            , repeat = BG.getField @"repeat" x0
+            }
+      , BG.getField @"raw" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
+  => BG.HasField "raw" (BG.Ptr SDL_KeyboardEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"raw")
+
+instance HasCField.HasCField SDL_KeyboardEvent "raw" where
+  type
+    CFieldType SDL_KeyboardEvent "raw" =
+      SDL3.Sys.Bindgen.Stdinc.Uint16
+
+  offset# = \_ -> \_ -> 34
+
+-- | true if the key is pressed
+--
+--     [C declaration]: @down@, defined at @SDL3\/SDL_events.h 371:10@
+instance
+  (ty ~ BG.CBool)
+  => BG.CompatHasField.HasField "down" SDL_KeyboardEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_KeyboardEvent
+            { down = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , scancode = BG.getField @"scancode" x0
+            , key = BG.getField @"key" x0
+            , mod = BG.getField @"mod" x0
+            , raw = BG.getField @"raw" x0
+            , repeat = BG.getField @"repeat" x0
+            }
+      , BG.getField @"down" x0
+      )
+
+instance
+  (ty ~ BG.CBool)
+  => BG.HasField "down" (BG.Ptr SDL_KeyboardEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"down")
+
+instance HasCField.HasCField SDL_KeyboardEvent "down" where
+  type CFieldType SDL_KeyboardEvent "down" = BG.CBool
+
+  offset# = \_ -> \_ -> 36
+
+-- | true if this is a key repeat
+--
+--     [C declaration]: @repeat@, defined at @SDL3\/SDL_events.h 372:10@
+instance
+  (ty ~ BG.CBool)
+  => BG.CompatHasField.HasField "repeat" SDL_KeyboardEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_KeyboardEvent
+            { repeat = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , scancode = BG.getField @"scancode" x0
+            , key = BG.getField @"key" x0
+            , mod = BG.getField @"mod" x0
+            , raw = BG.getField @"raw" x0
+            , down = BG.getField @"down" x0
+            }
+      , BG.getField @"repeat" x0
+      )
+
+instance
+  (ty ~ BG.CBool)
+  => BG.HasField "repeat" (BG.Ptr SDL_KeyboardEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"repeat")
+
+instance HasCField.HasCField SDL_KeyboardEvent "repeat" where
+  type CFieldType SDL_KeyboardEvent "repeat" = BG.CBool
+
+  offset# = \_ -> \_ -> 37
+
+-- | Keyboard text editing event structure (event.edit.*)
+--
+--     The start cursor is the position, in UTF-8 characters, where new typing will be inserted into the editing text. The length is the number of UTF-8 characters that will be replaced by new typing.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @struct SDL_TextEditingEvent@, defined at @SDL3\/SDL_events.h 384:16@
+data SDL_TextEditingEvent = SDL_TextEditingEvent
+  { type' :: SDL_EventType
+  -- ^ SDL_EVENT_TEXT_EDITING
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 386:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 387:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 388:12@
+  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
+  -- ^ The window with keyboard focus, if any
+  --
+  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 389:18@
+  , text :: PtrConst.PtrConst BG.CChar
+  -- ^ The editing text
+  --
+  --          [C declaration]: @text@, defined at @SDL3\/SDL_events.h 390:17@
+  , start :: SDL3.Sys.Bindgen.Stdinc.Sint32
+  -- ^ The start cursor of selected editing text, or -1 if not set
+  --
+  --          [C declaration]: @start@, defined at @SDL3\/SDL_events.h 391:12@
+  , length :: SDL3.Sys.Bindgen.Stdinc.Sint32
+  -- ^ The length of selected editing text, or -1 if not set
+  --
+  --          [C declaration]: @length@, defined at @SDL3\/SDL_events.h 392:12@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_TextEditingEvent where
+  staticSizeOf = \_ -> (40 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_TextEditingEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_TextEditingEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"text") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"start") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"length") ptr0
+
+instance Marshal.WriteRaw SDL_TextEditingEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_TextEditingEvent
+            type'2
+            reserved3
+            timestamp4
+            windowID5
+            text6
+            start7
+            length8 ->
+              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+                >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID5
+                >> HasCField.writeRaw (BG.Proxy @"text") ptr0 text6
+                >> HasCField.writeRaw (BG.Proxy @"start") ptr0 start7
+                >> HasCField.writeRaw (BG.Proxy @"length") ptr0 length8
+
+deriving via Marshal.EquivStorable SDL_TextEditingEvent instance BG.Storable SDL_TextEditingEvent
+
+deriving via
+  Struct.IsStructViaReadRaw SDL_TextEditingEvent
+  instance
+    Struct.IsStruct SDL_TextEditingEvent
+
+-- | SDL_EVENT_TEXT_EDITING
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 386:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_TextEditingEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_TextEditingEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , text = BG.getField @"text" x0
+            , start = BG.getField @"start" x0
+            , length = BG.getField @"length" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_TextEditingEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_TextEditingEvent "type'" where
+  type
+    CFieldType SDL_TextEditingEvent "type'" =
+      SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 387:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_TextEditingEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_TextEditingEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , text = BG.getField @"text" x0
+            , start = BG.getField @"start" x0
+            , length = BG.getField @"length" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_TextEditingEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_TextEditingEvent "reserved" where
+  type
+    CFieldType SDL_TextEditingEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 388:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_TextEditingEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_TextEditingEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , windowID = BG.getField @"windowID" x0
+            , text = BG.getField @"text" x0
+            , start = BG.getField @"start" x0
+            , length = BG.getField @"length" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_TextEditingEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_TextEditingEvent "timestamp" where
+  type
+    CFieldType SDL_TextEditingEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | The window with keyboard focus, if any
+--
+--     [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 389:18@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.CompatHasField.HasField "windowID" SDL_TextEditingEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_TextEditingEvent
+            { windowID = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , text = BG.getField @"text" x0
+            , start = BG.getField @"start" x0
+            , length = BG.getField @"length" x0
+            }
+      , BG.getField @"windowID" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.HasField "windowID" (BG.Ptr SDL_TextEditingEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"windowID")
+
+instance HasCField.HasCField SDL_TextEditingEvent "windowID" where
+  type
+    CFieldType SDL_TextEditingEvent "windowID" =
+      SDL3.Sys.Bindgen.Video.SDL_WindowID
+
+  offset# = \_ -> \_ -> 16
+
+-- | The editing text
+--
+--     [C declaration]: @text@, defined at @SDL3\/SDL_events.h 390:17@
+instance
+  (ty ~ PtrConst.PtrConst BG.CChar)
+  => BG.CompatHasField.HasField "text" SDL_TextEditingEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_TextEditingEvent
+            { text = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , start = BG.getField @"start" x0
+            , length = BG.getField @"length" x0
+            }
+      , BG.getField @"text" x0
+      )
+
+instance
+  (ty ~ PtrConst.PtrConst BG.CChar)
+  => BG.HasField "text" (BG.Ptr SDL_TextEditingEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"text")
+
+instance HasCField.HasCField SDL_TextEditingEvent "text" where
+  type
+    CFieldType SDL_TextEditingEvent "text" =
+      PtrConst.PtrConst BG.CChar
+
+  offset# = \_ -> \_ -> 24
+
+-- | The start cursor of selected editing text, or -1 if not set
+--
+--     [C declaration]: @start@, defined at @SDL3\/SDL_events.h 391:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
+  => BG.CompatHasField.HasField "start" SDL_TextEditingEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_TextEditingEvent
+            { start = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , text = BG.getField @"text" x0
+            , length = BG.getField @"length" x0
+            }
+      , BG.getField @"start" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
+  => BG.HasField "start" (BG.Ptr SDL_TextEditingEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"start")
+
+instance HasCField.HasCField SDL_TextEditingEvent "start" where
+  type
+    CFieldType SDL_TextEditingEvent "start" =
+      SDL3.Sys.Bindgen.Stdinc.Sint32
+
+  offset# = \_ -> \_ -> 32
+
+-- | The length of selected editing text, or -1 if not set
+--
+--     [C declaration]: @length@, defined at @SDL3\/SDL_events.h 392:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
+  => BG.CompatHasField.HasField "length" SDL_TextEditingEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_TextEditingEvent
+            { length = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , text = BG.getField @"text" x0
+            , start = BG.getField @"start" x0
+            }
+      , BG.getField @"length" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
+  => BG.HasField "length" (BG.Ptr SDL_TextEditingEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"length")
+
+instance HasCField.HasCField SDL_TextEditingEvent "length" where
+  type
+    CFieldType SDL_TextEditingEvent "length" =
+      SDL3.Sys.Bindgen.Stdinc.Sint32
+
+  offset# = \_ -> \_ -> 36
+
+-- | Keyboard IME candidates event structure (event.edit_candidates.*)
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @struct SDL_TextEditingCandidatesEvent@, defined at @SDL3\/SDL_events.h 400:16@
+data SDL_TextEditingCandidatesEvent = SDL_TextEditingCandidatesEvent
+  { type' :: SDL_EventType
+  -- ^ SDL_EVENT_TEXT_EDITING_CANDIDATES
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 402:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 403:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 404:12@
+  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
+  -- ^ The window with keyboard focus, if any
+  --
+  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 405:18@
+  , candidates :: PtrConst.PtrConst (PtrConst.PtrConst BG.CChar)
+  -- ^ The list of candidates, or NULL if there are no candidates available
+  --
+  --          [C declaration]: @candidates@, defined at @SDL3\/SDL_events.h 406:25@
+  , num_candidates :: SDL3.Sys.Bindgen.Stdinc.Sint32
+  -- ^ The number of strings in @candidates@
+  --
+  --          [C declaration]: @num_candidates@, defined at @SDL3\/SDL_events.h 407:12@
+  , selected_candidate :: SDL3.Sys.Bindgen.Stdinc.Sint32
+  -- ^ The index of the selected candidate, or -1 if no candidate is selected
+  --
+  --          [C declaration]: @selected_candidate@, defined at @SDL3\/SDL_events.h 408:12@
+  , horizontal :: BG.CBool
+  -- ^ true if the list is horizontal, false if it\'s vertical
+  --
+  --          [C declaration]: @horizontal@, defined at @SDL3\/SDL_events.h 409:10@
+  , padding1 :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^ [C declaration]: @padding1@, defined at @SDL3\/SDL_events.h 410:11@
+  , padding2 :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^ [C declaration]: @padding2@, defined at @SDL3\/SDL_events.h 411:11@
+  , padding3 :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^ [C declaration]: @padding3@, defined at @SDL3\/SDL_events.h 412:11@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_TextEditingCandidatesEvent where
+  staticSizeOf = \_ -> (48 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_TextEditingCandidatesEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_TextEditingCandidatesEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"candidates") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"num_candidates") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"selected_candidate") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"horizontal") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"padding1") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"padding2") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"padding3") ptr0
+
+instance Marshal.WriteRaw SDL_TextEditingCandidatesEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_TextEditingCandidatesEvent
+            type'2
+            reserved3
+            timestamp4
+            windowID5
+            candidates6
+            num_candidates7
+            selected_candidate8
+            horizontal9
+            padding110
+            padding211
+            padding312 ->
+              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+                >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID5
+                >> HasCField.writeRaw (BG.Proxy @"candidates") ptr0 candidates6
+                >> HasCField.writeRaw (BG.Proxy @"num_candidates") ptr0 num_candidates7
+                >> HasCField.writeRaw (BG.Proxy @"selected_candidate") ptr0 selected_candidate8
+                >> HasCField.writeRaw (BG.Proxy @"horizontal") ptr0 horizontal9
+                >> HasCField.writeRaw (BG.Proxy @"padding1") ptr0 padding110
+                >> HasCField.writeRaw (BG.Proxy @"padding2") ptr0 padding211
+                >> HasCField.writeRaw (BG.Proxy @"padding3") ptr0 padding312
+
+deriving via
+  Marshal.EquivStorable SDL_TextEditingCandidatesEvent
+  instance
+    BG.Storable SDL_TextEditingCandidatesEvent
+
+deriving via
+  Struct.IsStructViaReadRaw SDL_TextEditingCandidatesEvent
+  instance
+    Struct.IsStruct SDL_TextEditingCandidatesEvent
+
+-- | SDL_EVENT_TEXT_EDITING_CANDIDATES
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 402:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_TextEditingCandidatesEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_TextEditingCandidatesEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , candidates = BG.getField @"candidates" x0
+            , num_candidates = BG.getField @"num_candidates" x0
+            , selected_candidate = BG.getField @"selected_candidate" x0
+            , horizontal = BG.getField @"horizontal" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_TextEditingCandidatesEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_TextEditingCandidatesEvent "type'" where
+  type
+    CFieldType SDL_TextEditingCandidatesEvent "type'" =
+      SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 403:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_TextEditingCandidatesEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_TextEditingCandidatesEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , candidates = BG.getField @"candidates" x0
+            , num_candidates = BG.getField @"num_candidates" x0
+            , selected_candidate = BG.getField @"selected_candidate" x0
+            , horizontal = BG.getField @"horizontal" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_TextEditingCandidatesEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_TextEditingCandidatesEvent "reserved" where
+  type
+    CFieldType SDL_TextEditingCandidatesEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 404:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_TextEditingCandidatesEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_TextEditingCandidatesEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , windowID = BG.getField @"windowID" x0
+            , candidates = BG.getField @"candidates" x0
+            , num_candidates = BG.getField @"num_candidates" x0
+            , selected_candidate = BG.getField @"selected_candidate" x0
+            , horizontal = BG.getField @"horizontal" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_TextEditingCandidatesEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_TextEditingCandidatesEvent "timestamp" where
+  type
+    CFieldType SDL_TextEditingCandidatesEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | The window with keyboard focus, if any
+--
+--     [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 405:18@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.CompatHasField.HasField "windowID" SDL_TextEditingCandidatesEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_TextEditingCandidatesEvent
+            { windowID = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , candidates = BG.getField @"candidates" x0
+            , num_candidates = BG.getField @"num_candidates" x0
+            , selected_candidate = BG.getField @"selected_candidate" x0
+            , horizontal = BG.getField @"horizontal" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            }
+      , BG.getField @"windowID" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.HasField "windowID" (BG.Ptr SDL_TextEditingCandidatesEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"windowID")
+
+instance HasCField.HasCField SDL_TextEditingCandidatesEvent "windowID" where
+  type
+    CFieldType SDL_TextEditingCandidatesEvent "windowID" =
+      SDL3.Sys.Bindgen.Video.SDL_WindowID
+
+  offset# = \_ -> \_ -> 16
+
+-- | The list of candidates, or NULL if there are no candidates available
+--
+--     [C declaration]: @candidates@, defined at @SDL3\/SDL_events.h 406:25@
+instance
+  (ty ~ PtrConst.PtrConst (PtrConst.PtrConst BG.CChar))
+  => BG.CompatHasField.HasField "candidates" SDL_TextEditingCandidatesEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_TextEditingCandidatesEvent
+            { candidates = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , num_candidates = BG.getField @"num_candidates" x0
+            , selected_candidate = BG.getField @"selected_candidate" x0
+            , horizontal = BG.getField @"horizontal" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            }
+      , BG.getField @"candidates" x0
+      )
+
+instance
+  (ty ~ PtrConst.PtrConst (PtrConst.PtrConst BG.CChar))
+  => BG.HasField "candidates" (BG.Ptr SDL_TextEditingCandidatesEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"candidates")
+
+instance HasCField.HasCField SDL_TextEditingCandidatesEvent "candidates" where
+  type
+    CFieldType SDL_TextEditingCandidatesEvent "candidates" =
+      PtrConst.PtrConst (PtrConst.PtrConst BG.CChar)
+
+  offset# = \_ -> \_ -> 24
+
+-- | The number of strings in @candidates@
+--
+--     [C declaration]: @num_candidates@, defined at @SDL3\/SDL_events.h 407:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
+  => BG.CompatHasField.HasField "num_candidates" SDL_TextEditingCandidatesEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_TextEditingCandidatesEvent
+            { num_candidates = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , candidates = BG.getField @"candidates" x0
+            , selected_candidate = BG.getField @"selected_candidate" x0
+            , horizontal = BG.getField @"horizontal" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            }
+      , BG.getField @"num_candidates" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
+  => BG.HasField "num_candidates" (BG.Ptr SDL_TextEditingCandidatesEvent) (BG.Ptr ty)
+  where
+  getField =
+    HasCField.fromPtr (BG.Proxy @"num_candidates")
+
+instance HasCField.HasCField SDL_TextEditingCandidatesEvent "num_candidates" where
+  type
+    CFieldType SDL_TextEditingCandidatesEvent "num_candidates" =
+      SDL3.Sys.Bindgen.Stdinc.Sint32
+
+  offset# = \_ -> \_ -> 32
+
+-- | The index of the selected candidate, or -1 if no candidate is selected
+--
+--     [C declaration]: @selected_candidate@, defined at @SDL3\/SDL_events.h 408:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
+  => BG.CompatHasField.HasField "selected_candidate" SDL_TextEditingCandidatesEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_TextEditingCandidatesEvent
+            { selected_candidate = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , candidates = BG.getField @"candidates" x0
+            , num_candidates = BG.getField @"num_candidates" x0
+            , horizontal = BG.getField @"horizontal" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            }
+      , BG.getField @"selected_candidate" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
+  => BG.HasField "selected_candidate" (BG.Ptr SDL_TextEditingCandidatesEvent) (BG.Ptr ty)
+  where
+  getField =
+    HasCField.fromPtr (BG.Proxy @"selected_candidate")
+
+instance HasCField.HasCField SDL_TextEditingCandidatesEvent "selected_candidate" where
+  type
+    CFieldType SDL_TextEditingCandidatesEvent "selected_candidate" =
+      SDL3.Sys.Bindgen.Stdinc.Sint32
+
+  offset# = \_ -> \_ -> 36
+
+-- | true if the list is horizontal, false if it\'s vertical
+--
+--     [C declaration]: @horizontal@, defined at @SDL3\/SDL_events.h 409:10@
+instance
+  (ty ~ BG.CBool)
+  => BG.CompatHasField.HasField "horizontal" SDL_TextEditingCandidatesEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_TextEditingCandidatesEvent
+            { horizontal = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , candidates = BG.getField @"candidates" x0
+            , num_candidates = BG.getField @"num_candidates" x0
+            , selected_candidate = BG.getField @"selected_candidate" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            }
+      , BG.getField @"horizontal" x0
+      )
+
+instance
+  (ty ~ BG.CBool)
+  => BG.HasField "horizontal" (BG.Ptr SDL_TextEditingCandidatesEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"horizontal")
+
+instance HasCField.HasCField SDL_TextEditingCandidatesEvent "horizontal" where
+  type
+    CFieldType SDL_TextEditingCandidatesEvent "horizontal" =
+      BG.CBool
+
+  offset# = \_ -> \_ -> 40
+
+-- | [C declaration]: @padding1@, defined at @SDL3\/SDL_events.h 410:11@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.CompatHasField.HasField "padding1" SDL_TextEditingCandidatesEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_TextEditingCandidatesEvent
+            { padding1 = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , candidates = BG.getField @"candidates" x0
+            , num_candidates = BG.getField @"num_candidates" x0
+            , selected_candidate = BG.getField @"selected_candidate" x0
+            , horizontal = BG.getField @"horizontal" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            }
+      , BG.getField @"padding1" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.HasField "padding1" (BG.Ptr SDL_TextEditingCandidatesEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"padding1")
+
+instance HasCField.HasCField SDL_TextEditingCandidatesEvent "padding1" where
+  type
+    CFieldType SDL_TextEditingCandidatesEvent "padding1" =
+      SDL3.Sys.Bindgen.Stdinc.Uint8
+
+  offset# = \_ -> \_ -> 41
+
+-- | [C declaration]: @padding2@, defined at @SDL3\/SDL_events.h 411:11@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.CompatHasField.HasField "padding2" SDL_TextEditingCandidatesEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_TextEditingCandidatesEvent
+            { padding2 = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , candidates = BG.getField @"candidates" x0
+            , num_candidates = BG.getField @"num_candidates" x0
+            , selected_candidate = BG.getField @"selected_candidate" x0
+            , horizontal = BG.getField @"horizontal" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding3 = BG.getField @"padding3" x0
+            }
+      , BG.getField @"padding2" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.HasField "padding2" (BG.Ptr SDL_TextEditingCandidatesEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"padding2")
+
+instance HasCField.HasCField SDL_TextEditingCandidatesEvent "padding2" where
+  type
+    CFieldType SDL_TextEditingCandidatesEvent "padding2" =
+      SDL3.Sys.Bindgen.Stdinc.Uint8
+
+  offset# = \_ -> \_ -> 42
+
+-- | [C declaration]: @padding3@, defined at @SDL3\/SDL_events.h 412:11@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.CompatHasField.HasField "padding3" SDL_TextEditingCandidatesEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_TextEditingCandidatesEvent
+            { padding3 = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , candidates = BG.getField @"candidates" x0
+            , num_candidates = BG.getField @"num_candidates" x0
+            , selected_candidate = BG.getField @"selected_candidate" x0
+            , horizontal = BG.getField @"horizontal" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            }
+      , BG.getField @"padding3" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.HasField "padding3" (BG.Ptr SDL_TextEditingCandidatesEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"padding3")
+
+instance HasCField.HasCField SDL_TextEditingCandidatesEvent "padding3" where
+  type
+    CFieldType SDL_TextEditingCandidatesEvent "padding3" =
+      SDL3.Sys.Bindgen.Stdinc.Uint8
+
+  offset# = \_ -> \_ -> 43
+
+-- | Keyboard text input event structure (event.text.*)
+--
+--     This event will never be delivered unless text input is enabled by calling SDL_StartTextInput(). Text input is disabled by default!
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_StartTextInput, SDL_StopTextInput
+--
+--     [C declaration]: @struct SDL_TextInputEvent@, defined at @SDL3\/SDL_events.h 426:16@
+data SDL_TextInputEvent = SDL_TextInputEvent
+  { type' :: SDL_EventType
+  -- ^ SDL_EVENT_TEXT_INPUT
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 428:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 429:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 430:12@
+  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
+  -- ^ The window with keyboard focus, if any
+  --
+  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 431:18@
+  , text :: PtrConst.PtrConst BG.CChar
+  -- ^ The input text, UTF-8 encoded
+  --
+  --          [C declaration]: @text@, defined at @SDL3\/SDL_events.h 432:17@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_TextInputEvent where
+  staticSizeOf = \_ -> (32 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_TextInputEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_TextInputEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"text") ptr0
+
+instance Marshal.WriteRaw SDL_TextInputEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_TextInputEvent type'2 reserved3 timestamp4 windowID5 text6 ->
+            HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+              >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+              >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+              >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID5
+              >> HasCField.writeRaw (BG.Proxy @"text") ptr0 text6
+
+deriving via Marshal.EquivStorable SDL_TextInputEvent instance BG.Storable SDL_TextInputEvent
+
+deriving via
+  Struct.IsStructViaReadRaw SDL_TextInputEvent
+  instance
+    Struct.IsStruct SDL_TextInputEvent
+
+-- | SDL_EVENT_TEXT_INPUT
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 428:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_TextInputEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_TextInputEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , text = BG.getField @"text" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_TextInputEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_TextInputEvent "type'" where
+  type
+    CFieldType SDL_TextInputEvent "type'" =
+      SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 429:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_TextInputEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_TextInputEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , text = BG.getField @"text" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_TextInputEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_TextInputEvent "reserved" where
+  type
+    CFieldType SDL_TextInputEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 430:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_TextInputEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_TextInputEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , windowID = BG.getField @"windowID" x0
+            , text = BG.getField @"text" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_TextInputEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_TextInputEvent "timestamp" where
+  type
+    CFieldType SDL_TextInputEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | The window with keyboard focus, if any
+--
+--     [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 431:18@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.CompatHasField.HasField "windowID" SDL_TextInputEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_TextInputEvent
+            { windowID = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , text = BG.getField @"text" x0
+            }
+      , BG.getField @"windowID" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.HasField "windowID" (BG.Ptr SDL_TextInputEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"windowID")
+
+instance HasCField.HasCField SDL_TextInputEvent "windowID" where
+  type
+    CFieldType SDL_TextInputEvent "windowID" =
+      SDL3.Sys.Bindgen.Video.SDL_WindowID
+
+  offset# = \_ -> \_ -> 16
+
+-- | The input text, UTF-8 encoded
+--
+--     [C declaration]: @text@, defined at @SDL3\/SDL_events.h 432:17@
+instance
+  (ty ~ PtrConst.PtrConst BG.CChar)
+  => BG.CompatHasField.HasField "text" SDL_TextInputEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_TextInputEvent
+            { text = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            }
+      , BG.getField @"text" x0
+      )
+
+instance
+  (ty ~ PtrConst.PtrConst BG.CChar)
+  => BG.HasField "text" (BG.Ptr SDL_TextInputEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"text")
+
+instance HasCField.HasCField SDL_TextInputEvent "text" where
+  type
+    CFieldType SDL_TextInputEvent "text" =
+      PtrConst.PtrConst BG.CChar
+
+  offset# = \_ -> \_ -> 24
+
+-- | Mouse device event structure (event.mdevice.*)
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @struct SDL_MouseDeviceEvent@, defined at @SDL3\/SDL_events.h 440:16@
+data SDL_MouseDeviceEvent = SDL_MouseDeviceEvent
+  { type' :: SDL_EventType
+  -- ^ SDL_EVENT_MOUSE_ADDED or SDL_EVENT_MOUSE_REMOVED
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 442:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 443:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 444:12@
+  , which :: SDL3.Sys.Bindgen.Mouse.SDL_MouseID
+  -- ^ The mouse instance id
+  --
+  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 445:17@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_MouseDeviceEvent where
+  staticSizeOf = \_ -> (24 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_MouseDeviceEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_MouseDeviceEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
+
+instance Marshal.WriteRaw SDL_MouseDeviceEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_MouseDeviceEvent type'2 reserved3 timestamp4 which5 ->
+            HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+              >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+              >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+              >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which5
+
+deriving via Marshal.EquivStorable SDL_MouseDeviceEvent instance BG.Storable SDL_MouseDeviceEvent
+
+deriving via
+  Struct.IsStructViaReadRaw SDL_MouseDeviceEvent
+  instance
+    Struct.IsStruct SDL_MouseDeviceEvent
+
+-- | SDL_EVENT_MOUSE_ADDED or SDL_EVENT_MOUSE_REMOVED
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 442:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_MouseDeviceEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseDeviceEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_MouseDeviceEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_MouseDeviceEvent "type'" where
+  type
+    CFieldType SDL_MouseDeviceEvent "type'" =
+      SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 443:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_MouseDeviceEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseDeviceEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_MouseDeviceEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_MouseDeviceEvent "reserved" where
+  type
+    CFieldType SDL_MouseDeviceEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 444:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_MouseDeviceEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseDeviceEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , which = BG.getField @"which" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_MouseDeviceEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_MouseDeviceEvent "timestamp" where
+  type
+    CFieldType SDL_MouseDeviceEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | The mouse instance id
+--
+--     [C declaration]: @which@, defined at @SDL3\/SDL_events.h 445:17@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Mouse.SDL_MouseID)
+  => BG.CompatHasField.HasField "which" SDL_MouseDeviceEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseDeviceEvent
+            { which = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            }
+      , BG.getField @"which" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Mouse.SDL_MouseID)
+  => BG.HasField "which" (BG.Ptr SDL_MouseDeviceEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"which")
+
+instance HasCField.HasCField SDL_MouseDeviceEvent "which" where
+  type
+    CFieldType SDL_MouseDeviceEvent "which" =
+      SDL3.Sys.Bindgen.Mouse.SDL_MouseID
+
+  offset# = \_ -> \_ -> 16
+
+-- | Mouse motion event structure (event.motion.*)
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @struct SDL_MouseMotionEvent@, defined at @SDL3\/SDL_events.h 453:16@
+data SDL_MouseMotionEvent = SDL_MouseMotionEvent
+  { type' :: SDL_EventType
+  -- ^ SDL_EVENT_MOUSE_MOTION
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 455:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 456:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 457:12@
+  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
+  -- ^ The window with mouse focus, if any
+  --
+  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 458:18@
+  , which :: SDL3.Sys.Bindgen.Mouse.SDL_MouseID
+  -- ^ The mouse instance id in relative mode, SDL_TOUCH_MOUSEID for touch events, SDL_PEN_MOUSEID for pen events, or 0
+  --
+  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 459:17@
+  , state :: SDL3.Sys.Bindgen.Mouse.SDL_MouseButtonFlags
+  -- ^ The current button state
+  --
+  --          [C declaration]: @state@, defined at @SDL3\/SDL_events.h 460:26@
+  , x :: BG.CFloat
+  -- ^ X coordinate, relative to window
+  --
+  --          [C declaration]: @x@, defined at @SDL3\/SDL_events.h 461:11@
+  , y :: BG.CFloat
+  -- ^ Y coordinate, relative to window
+  --
+  --          [C declaration]: @y@, defined at @SDL3\/SDL_events.h 462:11@
+  , xrel :: BG.CFloat
+  -- ^ The relative motion in the X direction
+  --
+  --          [C declaration]: @xrel@, defined at @SDL3\/SDL_events.h 463:11@
+  , yrel :: BG.CFloat
+  -- ^ The relative motion in the Y direction
+  --
+  --          [C declaration]: @yrel@, defined at @SDL3\/SDL_events.h 464:11@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_MouseMotionEvent where
+  staticSizeOf = \_ -> (48 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_MouseMotionEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_MouseMotionEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"state") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"x") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"y") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"xrel") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"yrel") ptr0
+
+instance Marshal.WriteRaw SDL_MouseMotionEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_MouseMotionEvent
+            type'2
+            reserved3
+            timestamp4
+            windowID5
+            which6
+            state7
+            x8
+            y9
+            xrel10
+            yrel11 ->
+              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+                >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID5
+                >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which6
+                >> HasCField.writeRaw (BG.Proxy @"state") ptr0 state7
+                >> HasCField.writeRaw (BG.Proxy @"x") ptr0 x8
+                >> HasCField.writeRaw (BG.Proxy @"y") ptr0 y9
+                >> HasCField.writeRaw (BG.Proxy @"xrel") ptr0 xrel10
+                >> HasCField.writeRaw (BG.Proxy @"yrel") ptr0 yrel11
+
+deriving via Marshal.EquivStorable SDL_MouseMotionEvent instance BG.Storable SDL_MouseMotionEvent
+
+deriving via
+  Struct.IsStructViaReadRaw SDL_MouseMotionEvent
+  instance
+    Struct.IsStruct SDL_MouseMotionEvent
+
+-- | SDL_EVENT_MOUSE_MOTION
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 455:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_MouseMotionEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseMotionEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , state = BG.getField @"state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , xrel = BG.getField @"xrel" x0
+            , yrel = BG.getField @"yrel" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_MouseMotionEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_MouseMotionEvent "type'" where
+  type
+    CFieldType SDL_MouseMotionEvent "type'" =
+      SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 456:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_MouseMotionEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseMotionEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , state = BG.getField @"state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , xrel = BG.getField @"xrel" x0
+            , yrel = BG.getField @"yrel" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_MouseMotionEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_MouseMotionEvent "reserved" where
+  type
+    CFieldType SDL_MouseMotionEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 457:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_MouseMotionEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseMotionEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , state = BG.getField @"state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , xrel = BG.getField @"xrel" x0
+            , yrel = BG.getField @"yrel" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_MouseMotionEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_MouseMotionEvent "timestamp" where
+  type
+    CFieldType SDL_MouseMotionEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | The window with mouse focus, if any
+--
+--     [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 458:18@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.CompatHasField.HasField "windowID" SDL_MouseMotionEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseMotionEvent
+            { windowID = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , state = BG.getField @"state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , xrel = BG.getField @"xrel" x0
+            , yrel = BG.getField @"yrel" x0
+            }
+      , BG.getField @"windowID" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.HasField "windowID" (BG.Ptr SDL_MouseMotionEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"windowID")
+
+instance HasCField.HasCField SDL_MouseMotionEvent "windowID" where
+  type
+    CFieldType SDL_MouseMotionEvent "windowID" =
+      SDL3.Sys.Bindgen.Video.SDL_WindowID
+
+  offset# = \_ -> \_ -> 16
+
+-- | The mouse instance id in relative mode, SDL_TOUCH_MOUSEID for touch events, SDL_PEN_MOUSEID for pen events, or 0
+--
+--     [C declaration]: @which@, defined at @SDL3\/SDL_events.h 459:17@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Mouse.SDL_MouseID)
+  => BG.CompatHasField.HasField "which" SDL_MouseMotionEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseMotionEvent
+            { which = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , state = BG.getField @"state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , xrel = BG.getField @"xrel" x0
+            , yrel = BG.getField @"yrel" x0
+            }
+      , BG.getField @"which" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Mouse.SDL_MouseID)
+  => BG.HasField "which" (BG.Ptr SDL_MouseMotionEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"which")
+
+instance HasCField.HasCField SDL_MouseMotionEvent "which" where
+  type
+    CFieldType SDL_MouseMotionEvent "which" =
+      SDL3.Sys.Bindgen.Mouse.SDL_MouseID
+
+  offset# = \_ -> \_ -> 20
+
+-- | The current button state
+--
+--     [C declaration]: @state@, defined at @SDL3\/SDL_events.h 460:26@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Mouse.SDL_MouseButtonFlags)
+  => BG.CompatHasField.HasField "state" SDL_MouseMotionEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseMotionEvent
+            { state = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , xrel = BG.getField @"xrel" x0
+            , yrel = BG.getField @"yrel" x0
+            }
+      , BG.getField @"state" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Mouse.SDL_MouseButtonFlags)
+  => BG.HasField "state" (BG.Ptr SDL_MouseMotionEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"state")
+
+instance HasCField.HasCField SDL_MouseMotionEvent "state" where
+  type
+    CFieldType SDL_MouseMotionEvent "state" =
+      SDL3.Sys.Bindgen.Mouse.SDL_MouseButtonFlags
+
+  offset# = \_ -> \_ -> 24
+
+-- | X coordinate, relative to window
+--
+--     [C declaration]: @x@, defined at @SDL3\/SDL_events.h 461:11@
+instance
+  (ty ~ BG.CFloat)
+  => BG.CompatHasField.HasField "x" SDL_MouseMotionEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseMotionEvent
+            { x = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , state = BG.getField @"state" x0
+            , y = BG.getField @"y" x0
+            , xrel = BG.getField @"xrel" x0
+            , yrel = BG.getField @"yrel" x0
+            }
+      , BG.getField @"x" x0
+      )
+
+instance
+  (ty ~ BG.CFloat)
+  => BG.HasField "x" (BG.Ptr SDL_MouseMotionEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"x")
+
+instance HasCField.HasCField SDL_MouseMotionEvent "x" where
+  type CFieldType SDL_MouseMotionEvent "x" = BG.CFloat
+
+  offset# = \_ -> \_ -> 28
+
+-- | Y coordinate, relative to window
+--
+--     [C declaration]: @y@, defined at @SDL3\/SDL_events.h 462:11@
+instance
+  (ty ~ BG.CFloat)
+  => BG.CompatHasField.HasField "y" SDL_MouseMotionEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseMotionEvent
+            { y = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , state = BG.getField @"state" x0
+            , x = BG.getField @"x" x0
+            , xrel = BG.getField @"xrel" x0
+            , yrel = BG.getField @"yrel" x0
+            }
+      , BG.getField @"y" x0
+      )
+
+instance
+  (ty ~ BG.CFloat)
+  => BG.HasField "y" (BG.Ptr SDL_MouseMotionEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"y")
+
+instance HasCField.HasCField SDL_MouseMotionEvent "y" where
+  type CFieldType SDL_MouseMotionEvent "y" = BG.CFloat
+
+  offset# = \_ -> \_ -> 32
+
+-- | The relative motion in the X direction
+--
+--     [C declaration]: @xrel@, defined at @SDL3\/SDL_events.h 463:11@
+instance
+  (ty ~ BG.CFloat)
+  => BG.CompatHasField.HasField "xrel" SDL_MouseMotionEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseMotionEvent
+            { xrel = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , state = BG.getField @"state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , yrel = BG.getField @"yrel" x0
+            }
+      , BG.getField @"xrel" x0
+      )
+
+instance
+  (ty ~ BG.CFloat)
+  => BG.HasField "xrel" (BG.Ptr SDL_MouseMotionEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"xrel")
+
+instance HasCField.HasCField SDL_MouseMotionEvent "xrel" where
+  type
+    CFieldType SDL_MouseMotionEvent "xrel" =
+      BG.CFloat
+
+  offset# = \_ -> \_ -> 36
+
+-- | The relative motion in the Y direction
+--
+--     [C declaration]: @yrel@, defined at @SDL3\/SDL_events.h 464:11@
+instance
+  (ty ~ BG.CFloat)
+  => BG.CompatHasField.HasField "yrel" SDL_MouseMotionEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseMotionEvent
+            { yrel = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , state = BG.getField @"state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , xrel = BG.getField @"xrel" x0
+            }
+      , BG.getField @"yrel" x0
+      )
+
+instance
+  (ty ~ BG.CFloat)
+  => BG.HasField "yrel" (BG.Ptr SDL_MouseMotionEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"yrel")
+
+instance HasCField.HasCField SDL_MouseMotionEvent "yrel" where
+  type
+    CFieldType SDL_MouseMotionEvent "yrel" =
+      BG.CFloat
+
+  offset# = \_ -> \_ -> 40
+
+-- | Mouse button event structure (event.button.*)
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @struct SDL_MouseButtonEvent@, defined at @SDL3\/SDL_events.h 472:16@
+data SDL_MouseButtonEvent = SDL_MouseButtonEvent
+  { type' :: SDL_EventType
+  -- ^ SDL_EVENT_MOUSE_BUTTON_DOWN or SDL_EVENT_MOUSE_BUTTON_UP
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 474:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 475:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 476:12@
+  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
+  -- ^ The window with mouse focus, if any
+  --
+  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 477:18@
+  , which :: SDL3.Sys.Bindgen.Mouse.SDL_MouseID
+  -- ^ The mouse instance id in relative mode, SDL_TOUCH_MOUSEID for touch events, or 0
+  --
+  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 478:17@
+  , button :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^ The mouse button index
+  --
+  --          [C declaration]: @button@, defined at @SDL3\/SDL_events.h 479:11@
+  , down :: BG.CBool
+  -- ^ true if the button is pressed
+  --
+  --          [C declaration]: @down@, defined at @SDL3\/SDL_events.h 480:10@
+  , clicks :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^ 1 for single-click, 2 for double-click, etc.
+  --
+  --          [C declaration]: @clicks@, defined at @SDL3\/SDL_events.h 481:11@
+  , padding :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^ [C declaration]: @padding@, defined at @SDL3\/SDL_events.h 482:11@
+  , x :: BG.CFloat
+  -- ^ X coordinate, relative to window
+  --
+  --          [C declaration]: @x@, defined at @SDL3\/SDL_events.h 483:11@
+  , y :: BG.CFloat
+  -- ^ Y coordinate, relative to window
+  --
+  --          [C declaration]: @y@, defined at @SDL3\/SDL_events.h 484:11@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_MouseButtonEvent where
+  staticSizeOf = \_ -> (40 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_MouseButtonEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_MouseButtonEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"button") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"down") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"clicks") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"padding") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"x") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"y") ptr0
+
+instance Marshal.WriteRaw SDL_MouseButtonEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_MouseButtonEvent
+            type'2
+            reserved3
+            timestamp4
+            windowID5
+            which6
+            button7
+            down8
+            clicks9
+            padding10
+            x11
+            y12 ->
+              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+                >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID5
+                >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which6
+                >> HasCField.writeRaw (BG.Proxy @"button") ptr0 button7
+                >> HasCField.writeRaw (BG.Proxy @"down") ptr0 down8
+                >> HasCField.writeRaw (BG.Proxy @"clicks") ptr0 clicks9
+                >> HasCField.writeRaw (BG.Proxy @"padding") ptr0 padding10
+                >> HasCField.writeRaw (BG.Proxy @"x") ptr0 x11
+                >> HasCField.writeRaw (BG.Proxy @"y") ptr0 y12
+
+deriving via Marshal.EquivStorable SDL_MouseButtonEvent instance BG.Storable SDL_MouseButtonEvent
+
+deriving via
+  Struct.IsStructViaReadRaw SDL_MouseButtonEvent
+  instance
+    Struct.IsStruct SDL_MouseButtonEvent
+
+-- | SDL_EVENT_MOUSE_BUTTON_DOWN or SDL_EVENT_MOUSE_BUTTON_UP
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 474:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_MouseButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseButtonEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , button = BG.getField @"button" x0
+            , down = BG.getField @"down" x0
+            , clicks = BG.getField @"clicks" x0
+            , padding = BG.getField @"padding" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_MouseButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_MouseButtonEvent "type'" where
+  type
+    CFieldType SDL_MouseButtonEvent "type'" =
+      SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 475:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_MouseButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseButtonEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , button = BG.getField @"button" x0
+            , down = BG.getField @"down" x0
+            , clicks = BG.getField @"clicks" x0
+            , padding = BG.getField @"padding" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_MouseButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_MouseButtonEvent "reserved" where
+  type
+    CFieldType SDL_MouseButtonEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 476:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_MouseButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseButtonEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , button = BG.getField @"button" x0
+            , down = BG.getField @"down" x0
+            , clicks = BG.getField @"clicks" x0
+            , padding = BG.getField @"padding" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_MouseButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_MouseButtonEvent "timestamp" where
+  type
+    CFieldType SDL_MouseButtonEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | The window with mouse focus, if any
+--
+--     [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 477:18@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.CompatHasField.HasField "windowID" SDL_MouseButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseButtonEvent
+            { windowID = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , button = BG.getField @"button" x0
+            , down = BG.getField @"down" x0
+            , clicks = BG.getField @"clicks" x0
+            , padding = BG.getField @"padding" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            }
+      , BG.getField @"windowID" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.HasField "windowID" (BG.Ptr SDL_MouseButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"windowID")
+
+instance HasCField.HasCField SDL_MouseButtonEvent "windowID" where
+  type
+    CFieldType SDL_MouseButtonEvent "windowID" =
+      SDL3.Sys.Bindgen.Video.SDL_WindowID
+
+  offset# = \_ -> \_ -> 16
+
+-- | The mouse instance id in relative mode, SDL_TOUCH_MOUSEID for touch events, or 0
+--
+--     [C declaration]: @which@, defined at @SDL3\/SDL_events.h 478:17@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Mouse.SDL_MouseID)
+  => BG.CompatHasField.HasField "which" SDL_MouseButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseButtonEvent
+            { which = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , button = BG.getField @"button" x0
+            , down = BG.getField @"down" x0
+            , clicks = BG.getField @"clicks" x0
+            , padding = BG.getField @"padding" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            }
+      , BG.getField @"which" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Mouse.SDL_MouseID)
+  => BG.HasField "which" (BG.Ptr SDL_MouseButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"which")
+
+instance HasCField.HasCField SDL_MouseButtonEvent "which" where
+  type
+    CFieldType SDL_MouseButtonEvent "which" =
+      SDL3.Sys.Bindgen.Mouse.SDL_MouseID
+
+  offset# = \_ -> \_ -> 20
+
+-- | The mouse button index
+--
+--     [C declaration]: @button@, defined at @SDL3\/SDL_events.h 479:11@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.CompatHasField.HasField "button" SDL_MouseButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseButtonEvent
+            { button = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , down = BG.getField @"down" x0
+            , clicks = BG.getField @"clicks" x0
+            , padding = BG.getField @"padding" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            }
+      , BG.getField @"button" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.HasField "button" (BG.Ptr SDL_MouseButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"button")
+
+instance HasCField.HasCField SDL_MouseButtonEvent "button" where
+  type
+    CFieldType SDL_MouseButtonEvent "button" =
+      SDL3.Sys.Bindgen.Stdinc.Uint8
+
+  offset# = \_ -> \_ -> 24
+
+-- | true if the button is pressed
+--
+--     [C declaration]: @down@, defined at @SDL3\/SDL_events.h 480:10@
+instance
+  (ty ~ BG.CBool)
+  => BG.CompatHasField.HasField "down" SDL_MouseButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseButtonEvent
+            { down = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , button = BG.getField @"button" x0
+            , clicks = BG.getField @"clicks" x0
+            , padding = BG.getField @"padding" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            }
+      , BG.getField @"down" x0
+      )
+
+instance
+  (ty ~ BG.CBool)
+  => BG.HasField "down" (BG.Ptr SDL_MouseButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"down")
+
+instance HasCField.HasCField SDL_MouseButtonEvent "down" where
+  type
+    CFieldType SDL_MouseButtonEvent "down" =
+      BG.CBool
+
+  offset# = \_ -> \_ -> 25
+
+-- | 1 for single-click, 2 for double-click, etc.
+--
+--     [C declaration]: @clicks@, defined at @SDL3\/SDL_events.h 481:11@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.CompatHasField.HasField "clicks" SDL_MouseButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseButtonEvent
+            { clicks = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , button = BG.getField @"button" x0
+            , down = BG.getField @"down" x0
+            , padding = BG.getField @"padding" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            }
+      , BG.getField @"clicks" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.HasField "clicks" (BG.Ptr SDL_MouseButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"clicks")
+
+instance HasCField.HasCField SDL_MouseButtonEvent "clicks" where
+  type
+    CFieldType SDL_MouseButtonEvent "clicks" =
+      SDL3.Sys.Bindgen.Stdinc.Uint8
+
+  offset# = \_ -> \_ -> 26
+
+-- | [C declaration]: @padding@, defined at @SDL3\/SDL_events.h 482:11@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.CompatHasField.HasField "padding" SDL_MouseButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseButtonEvent
+            { padding = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , button = BG.getField @"button" x0
+            , down = BG.getField @"down" x0
+            , clicks = BG.getField @"clicks" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            }
+      , BG.getField @"padding" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.HasField "padding" (BG.Ptr SDL_MouseButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"padding")
+
+instance HasCField.HasCField SDL_MouseButtonEvent "padding" where
+  type
+    CFieldType SDL_MouseButtonEvent "padding" =
+      SDL3.Sys.Bindgen.Stdinc.Uint8
+
+  offset# = \_ -> \_ -> 27
+
+-- | X coordinate, relative to window
+--
+--     [C declaration]: @x@, defined at @SDL3\/SDL_events.h 483:11@
+instance
+  (ty ~ BG.CFloat)
+  => BG.CompatHasField.HasField "x" SDL_MouseButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseButtonEvent
+            { x = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , button = BG.getField @"button" x0
+            , down = BG.getField @"down" x0
+            , clicks = BG.getField @"clicks" x0
+            , padding = BG.getField @"padding" x0
+            , y = BG.getField @"y" x0
+            }
+      , BG.getField @"x" x0
+      )
+
+instance
+  (ty ~ BG.CFloat)
+  => BG.HasField "x" (BG.Ptr SDL_MouseButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"x")
+
+instance HasCField.HasCField SDL_MouseButtonEvent "x" where
+  type CFieldType SDL_MouseButtonEvent "x" = BG.CFloat
+
+  offset# = \_ -> \_ -> 28
+
+-- | Y coordinate, relative to window
+--
+--     [C declaration]: @y@, defined at @SDL3\/SDL_events.h 484:11@
+instance
+  (ty ~ BG.CFloat)
+  => BG.CompatHasField.HasField "y" SDL_MouseButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseButtonEvent
+            { y = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , button = BG.getField @"button" x0
+            , down = BG.getField @"down" x0
+            , clicks = BG.getField @"clicks" x0
+            , padding = BG.getField @"padding" x0
+            , x = BG.getField @"x" x0
+            }
+      , BG.getField @"y" x0
+      )
+
+instance
+  (ty ~ BG.CFloat)
+  => BG.HasField "y" (BG.Ptr SDL_MouseButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"y")
+
+instance HasCField.HasCField SDL_MouseButtonEvent "y" where
+  type CFieldType SDL_MouseButtonEvent "y" = BG.CFloat
+
+  offset# = \_ -> \_ -> 32
+
+-- | Mouse wheel event structure (event.wheel.*)
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @struct SDL_MouseWheelEvent@, defined at @SDL3\/SDL_events.h 492:16@
+data SDL_MouseWheelEvent = SDL_MouseWheelEvent
+  { type' :: SDL_EventType
+  -- ^ SDL_EVENT_MOUSE_WHEEL
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 494:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 495:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 496:12@
+  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
+  -- ^ The window with mouse focus, if any
+  --
+  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 497:18@
+  , which :: SDL3.Sys.Bindgen.Mouse.SDL_MouseID
+  -- ^ The mouse instance id in relative mode or 0
+  --
+  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 498:17@
+  , x :: BG.CFloat
+  -- ^ The amount scrolled horizontally, positive to the right and negative to the left
+  --
+  --          [C declaration]: @x@, defined at @SDL3\/SDL_events.h 499:11@
+  , y :: BG.CFloat
+  -- ^ The amount scrolled vertically, positive away from the user and negative toward the user
+  --
+  --          [C declaration]: @y@, defined at @SDL3\/SDL_events.h 500:11@
+  , direction :: SDL3.Sys.Bindgen.Mouse.SDL_MouseWheelDirection
+  -- ^ Set to one of the SDL_MOUSEWHEEL_* defines. When FLIPPED the values in X and Y will be opposite. Multiply by -1 to change them back
+  --
+  --          [C declaration]: @direction@, defined at @SDL3\/SDL_events.h 501:29@
+  , mouse_x :: BG.CFloat
+  -- ^ X coordinate, relative to window
+  --
+  --          [C declaration]: @mouse_x@, defined at @SDL3\/SDL_events.h 502:11@
+  , mouse_y :: BG.CFloat
+  -- ^ Y coordinate, relative to window
+  --
+  --          [C declaration]: @mouse_y@, defined at @SDL3\/SDL_events.h 503:11@
+  , integer_x :: SDL3.Sys.Bindgen.Stdinc.Sint32
+  -- ^ The amount scrolled horizontally, accumulated to whole scroll \"ticks\" (added in 3.2.12)
+  --
+  --          [C declaration]: @integer_x@, defined at @SDL3\/SDL_events.h 504:12@
+  , integer_y :: SDL3.Sys.Bindgen.Stdinc.Sint32
+  -- ^ The amount scrolled vertically, accumulated to whole scroll \"ticks\" (added in 3.2.12)
+  --
+  --          [C declaration]: @integer_y@, defined at @SDL3\/SDL_events.h 505:12@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_MouseWheelEvent where
+  staticSizeOf = \_ -> (56 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_MouseWheelEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_MouseWheelEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"x") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"y") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"direction") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"mouse_x") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"mouse_y") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"integer_x") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"integer_y") ptr0
+
+instance Marshal.WriteRaw SDL_MouseWheelEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_MouseWheelEvent
+            type'2
+            reserved3
+            timestamp4
+            windowID5
+            which6
+            x7
+            y8
+            direction9
+            mouse_x10
+            mouse_y11
+            integer_x12
+            integer_y13 ->
+              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+                >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID5
+                >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which6
+                >> HasCField.writeRaw (BG.Proxy @"x") ptr0 x7
+                >> HasCField.writeRaw (BG.Proxy @"y") ptr0 y8
+                >> HasCField.writeRaw (BG.Proxy @"direction") ptr0 direction9
+                >> HasCField.writeRaw (BG.Proxy @"mouse_x") ptr0 mouse_x10
+                >> HasCField.writeRaw (BG.Proxy @"mouse_y") ptr0 mouse_y11
+                >> HasCField.writeRaw (BG.Proxy @"integer_x") ptr0 integer_x12
+                >> HasCField.writeRaw (BG.Proxy @"integer_y") ptr0 integer_y13
+
+deriving via Marshal.EquivStorable SDL_MouseWheelEvent instance BG.Storable SDL_MouseWheelEvent
+
+deriving via
+  Struct.IsStructViaReadRaw SDL_MouseWheelEvent
+  instance
+    Struct.IsStruct SDL_MouseWheelEvent
+
+-- | SDL_EVENT_MOUSE_WHEEL
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 494:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_MouseWheelEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseWheelEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , direction = BG.getField @"direction" x0
+            , mouse_x = BG.getField @"mouse_x" x0
+            , mouse_y = BG.getField @"mouse_y" x0
+            , integer_x = BG.getField @"integer_x" x0
+            , integer_y = BG.getField @"integer_y" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_MouseWheelEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_MouseWheelEvent "type'" where
+  type
+    CFieldType SDL_MouseWheelEvent "type'" =
+      SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 495:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_MouseWheelEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseWheelEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , direction = BG.getField @"direction" x0
+            , mouse_x = BG.getField @"mouse_x" x0
+            , mouse_y = BG.getField @"mouse_y" x0
+            , integer_x = BG.getField @"integer_x" x0
+            , integer_y = BG.getField @"integer_y" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_MouseWheelEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_MouseWheelEvent "reserved" where
+  type
+    CFieldType SDL_MouseWheelEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 496:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_MouseWheelEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseWheelEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , direction = BG.getField @"direction" x0
+            , mouse_x = BG.getField @"mouse_x" x0
+            , mouse_y = BG.getField @"mouse_y" x0
+            , integer_x = BG.getField @"integer_x" x0
+            , integer_y = BG.getField @"integer_y" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_MouseWheelEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_MouseWheelEvent "timestamp" where
+  type
+    CFieldType SDL_MouseWheelEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | The window with mouse focus, if any
+--
+--     [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 497:18@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.CompatHasField.HasField "windowID" SDL_MouseWheelEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseWheelEvent
+            { windowID = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , direction = BG.getField @"direction" x0
+            , mouse_x = BG.getField @"mouse_x" x0
+            , mouse_y = BG.getField @"mouse_y" x0
+            , integer_x = BG.getField @"integer_x" x0
+            , integer_y = BG.getField @"integer_y" x0
+            }
+      , BG.getField @"windowID" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.HasField "windowID" (BG.Ptr SDL_MouseWheelEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"windowID")
+
+instance HasCField.HasCField SDL_MouseWheelEvent "windowID" where
+  type
+    CFieldType SDL_MouseWheelEvent "windowID" =
+      SDL3.Sys.Bindgen.Video.SDL_WindowID
+
+  offset# = \_ -> \_ -> 16
+
+-- | The mouse instance id in relative mode or 0
+--
+--     [C declaration]: @which@, defined at @SDL3\/SDL_events.h 498:17@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Mouse.SDL_MouseID)
+  => BG.CompatHasField.HasField "which" SDL_MouseWheelEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseWheelEvent
+            { which = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , direction = BG.getField @"direction" x0
+            , mouse_x = BG.getField @"mouse_x" x0
+            , mouse_y = BG.getField @"mouse_y" x0
+            , integer_x = BG.getField @"integer_x" x0
+            , integer_y = BG.getField @"integer_y" x0
+            }
+      , BG.getField @"which" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Mouse.SDL_MouseID)
+  => BG.HasField "which" (BG.Ptr SDL_MouseWheelEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"which")
+
+instance HasCField.HasCField SDL_MouseWheelEvent "which" where
+  type
+    CFieldType SDL_MouseWheelEvent "which" =
+      SDL3.Sys.Bindgen.Mouse.SDL_MouseID
+
+  offset# = \_ -> \_ -> 20
+
+-- | The amount scrolled horizontally, positive to the right and negative to the left
+--
+--     [C declaration]: @x@, defined at @SDL3\/SDL_events.h 499:11@
+instance
+  (ty ~ BG.CFloat)
+  => BG.CompatHasField.HasField "x" SDL_MouseWheelEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseWheelEvent
+            { x = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , y = BG.getField @"y" x0
+            , direction = BG.getField @"direction" x0
+            , mouse_x = BG.getField @"mouse_x" x0
+            , mouse_y = BG.getField @"mouse_y" x0
+            , integer_x = BG.getField @"integer_x" x0
+            , integer_y = BG.getField @"integer_y" x0
+            }
+      , BG.getField @"x" x0
+      )
+
+instance
+  (ty ~ BG.CFloat)
+  => BG.HasField "x" (BG.Ptr SDL_MouseWheelEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"x")
+
+instance HasCField.HasCField SDL_MouseWheelEvent "x" where
+  type CFieldType SDL_MouseWheelEvent "x" = BG.CFloat
+
+  offset# = \_ -> \_ -> 24
+
+-- | The amount scrolled vertically, positive away from the user and negative toward the user
+--
+--     [C declaration]: @y@, defined at @SDL3\/SDL_events.h 500:11@
+instance
+  (ty ~ BG.CFloat)
+  => BG.CompatHasField.HasField "y" SDL_MouseWheelEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseWheelEvent
+            { y = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , x = BG.getField @"x" x0
+            , direction = BG.getField @"direction" x0
+            , mouse_x = BG.getField @"mouse_x" x0
+            , mouse_y = BG.getField @"mouse_y" x0
+            , integer_x = BG.getField @"integer_x" x0
+            , integer_y = BG.getField @"integer_y" x0
+            }
+      , BG.getField @"y" x0
+      )
+
+instance
+  (ty ~ BG.CFloat)
+  => BG.HasField "y" (BG.Ptr SDL_MouseWheelEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"y")
+
+instance HasCField.HasCField SDL_MouseWheelEvent "y" where
+  type CFieldType SDL_MouseWheelEvent "y" = BG.CFloat
+
+  offset# = \_ -> \_ -> 28
+
+-- | Set to one of the SDL_MOUSEWHEEL_* defines. When FLIPPED the values in X and Y will be opposite. Multiply by -1 to change them back
+--
+--     [C declaration]: @direction@, defined at @SDL3\/SDL_events.h 501:29@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Mouse.SDL_MouseWheelDirection)
+  => BG.CompatHasField.HasField "direction" SDL_MouseWheelEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseWheelEvent
+            { direction = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , mouse_x = BG.getField @"mouse_x" x0
+            , mouse_y = BG.getField @"mouse_y" x0
+            , integer_x = BG.getField @"integer_x" x0
+            , integer_y = BG.getField @"integer_y" x0
+            }
+      , BG.getField @"direction" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Mouse.SDL_MouseWheelDirection)
+  => BG.HasField "direction" (BG.Ptr SDL_MouseWheelEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"direction")
+
+instance HasCField.HasCField SDL_MouseWheelEvent "direction" where
+  type
+    CFieldType SDL_MouseWheelEvent "direction" =
+      SDL3.Sys.Bindgen.Mouse.SDL_MouseWheelDirection
+
+  offset# = \_ -> \_ -> 32
+
+-- | X coordinate, relative to window
+--
+--     [C declaration]: @mouse_x@, defined at @SDL3\/SDL_events.h 502:11@
+instance
+  (ty ~ BG.CFloat)
+  => BG.CompatHasField.HasField "mouse_x" SDL_MouseWheelEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseWheelEvent
+            { mouse_x = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , direction = BG.getField @"direction" x0
+            , mouse_y = BG.getField @"mouse_y" x0
+            , integer_x = BG.getField @"integer_x" x0
+            , integer_y = BG.getField @"integer_y" x0
+            }
+      , BG.getField @"mouse_x" x0
+      )
+
+instance
+  (ty ~ BG.CFloat)
+  => BG.HasField "mouse_x" (BG.Ptr SDL_MouseWheelEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"mouse_x")
+
+instance HasCField.HasCField SDL_MouseWheelEvent "mouse_x" where
+  type
+    CFieldType SDL_MouseWheelEvent "mouse_x" =
+      BG.CFloat
+
+  offset# = \_ -> \_ -> 36
+
+-- | Y coordinate, relative to window
+--
+--     [C declaration]: @mouse_y@, defined at @SDL3\/SDL_events.h 503:11@
+instance
+  (ty ~ BG.CFloat)
+  => BG.CompatHasField.HasField "mouse_y" SDL_MouseWheelEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseWheelEvent
+            { mouse_y = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , direction = BG.getField @"direction" x0
+            , mouse_x = BG.getField @"mouse_x" x0
+            , integer_x = BG.getField @"integer_x" x0
+            , integer_y = BG.getField @"integer_y" x0
+            }
+      , BG.getField @"mouse_y" x0
+      )
+
+instance
+  (ty ~ BG.CFloat)
+  => BG.HasField "mouse_y" (BG.Ptr SDL_MouseWheelEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"mouse_y")
+
+instance HasCField.HasCField SDL_MouseWheelEvent "mouse_y" where
+  type
+    CFieldType SDL_MouseWheelEvent "mouse_y" =
+      BG.CFloat
+
+  offset# = \_ -> \_ -> 40
+
+-- | The amount scrolled horizontally, accumulated to whole scroll \"ticks\" (added in 3.2.12)
+--
+--     [C declaration]: @integer_x@, defined at @SDL3\/SDL_events.h 504:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
+  => BG.CompatHasField.HasField "integer_x" SDL_MouseWheelEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseWheelEvent
+            { integer_x = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , direction = BG.getField @"direction" x0
+            , mouse_x = BG.getField @"mouse_x" x0
+            , mouse_y = BG.getField @"mouse_y" x0
+            , integer_y = BG.getField @"integer_y" x0
+            }
+      , BG.getField @"integer_x" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
+  => BG.HasField "integer_x" (BG.Ptr SDL_MouseWheelEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"integer_x")
+
+instance HasCField.HasCField SDL_MouseWheelEvent "integer_x" where
+  type
+    CFieldType SDL_MouseWheelEvent "integer_x" =
+      SDL3.Sys.Bindgen.Stdinc.Sint32
+
+  offset# = \_ -> \_ -> 44
+
+-- | The amount scrolled vertically, accumulated to whole scroll \"ticks\" (added in 3.2.12)
+--
+--     [C declaration]: @integer_y@, defined at @SDL3\/SDL_events.h 505:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
+  => BG.CompatHasField.HasField "integer_y" SDL_MouseWheelEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_MouseWheelEvent
+            { integer_y = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , direction = BG.getField @"direction" x0
+            , mouse_x = BG.getField @"mouse_x" x0
+            , mouse_y = BG.getField @"mouse_y" x0
+            , integer_x = BG.getField @"integer_x" x0
+            }
+      , BG.getField @"integer_y" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
+  => BG.HasField "integer_y" (BG.Ptr SDL_MouseWheelEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"integer_y")
+
+instance HasCField.HasCField SDL_MouseWheelEvent "integer_y" where
+  type
+    CFieldType SDL_MouseWheelEvent "integer_y" =
+      SDL3.Sys.Bindgen.Stdinc.Sint32
+
+  offset# = \_ -> \_ -> 48
+
+-- | Joystick axis motion event structure (event.jaxis.*)
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @struct SDL_JoyAxisEvent@, defined at @SDL3\/SDL_events.h 513:16@
+data SDL_JoyAxisEvent = SDL_JoyAxisEvent
+  { type' :: SDL_EventType
+  -- ^ SDL_EVENT_JOYSTICK_AXIS_MOTION
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 515:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 516:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 517:12@
+  , which :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
+  -- ^ The joystick instance id
+  --
+  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 518:20@
+  , axis :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^ The joystick axis index
+  --
+  --          [C declaration]: @axis@, defined at @SDL3\/SDL_events.h 519:11@
+  , padding1 :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^ [C declaration]: @padding1@, defined at @SDL3\/SDL_events.h 520:11@
+  , padding2 :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^ [C declaration]: @padding2@, defined at @SDL3\/SDL_events.h 521:11@
+  , padding3 :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^ [C declaration]: @padding3@, defined at @SDL3\/SDL_events.h 522:11@
+  , value :: SDL3.Sys.Bindgen.Stdinc.Sint16
+  -- ^ The axis value (range: -32768 to 32767)
+  --
+  --          [C declaration]: @value@, defined at @SDL3\/SDL_events.h 523:12@
+  , padding4 :: SDL3.Sys.Bindgen.Stdinc.Uint16
+  -- ^ [C declaration]: @padding4@, defined at @SDL3\/SDL_events.h 524:12@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_JoyAxisEvent where
+  staticSizeOf = \_ -> (32 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_JoyAxisEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_JoyAxisEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"axis") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"padding1") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"padding2") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"padding3") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"value") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"padding4") ptr0
+
+instance Marshal.WriteRaw SDL_JoyAxisEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_JoyAxisEvent
+            type'2
+            reserved3
+            timestamp4
+            which5
+            axis6
+            padding17
+            padding28
+            padding39
+            value10
+            padding411 ->
+              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+                >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which5
+                >> HasCField.writeRaw (BG.Proxy @"axis") ptr0 axis6
+                >> HasCField.writeRaw (BG.Proxy @"padding1") ptr0 padding17
+                >> HasCField.writeRaw (BG.Proxy @"padding2") ptr0 padding28
+                >> HasCField.writeRaw (BG.Proxy @"padding3") ptr0 padding39
+                >> HasCField.writeRaw (BG.Proxy @"value") ptr0 value10
+                >> HasCField.writeRaw (BG.Proxy @"padding4") ptr0 padding411
+
+deriving via Marshal.EquivStorable SDL_JoyAxisEvent instance BG.Storable SDL_JoyAxisEvent
+
+deriving via Struct.IsStructViaReadRaw SDL_JoyAxisEvent instance Struct.IsStruct SDL_JoyAxisEvent
+
+-- | SDL_EVENT_JOYSTICK_AXIS_MOTION
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 515:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_JoyAxisEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyAxisEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , axis = BG.getField @"axis" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            , value = BG.getField @"value" x0
+            , padding4 = BG.getField @"padding4" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_JoyAxisEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_JoyAxisEvent "type'" where
+  type
+    CFieldType SDL_JoyAxisEvent "type'" =
+      SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 516:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_JoyAxisEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyAxisEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , axis = BG.getField @"axis" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            , value = BG.getField @"value" x0
+            , padding4 = BG.getField @"padding4" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_JoyAxisEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_JoyAxisEvent "reserved" where
+  type
+    CFieldType SDL_JoyAxisEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 517:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_JoyAxisEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyAxisEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , which = BG.getField @"which" x0
+            , axis = BG.getField @"axis" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            , value = BG.getField @"value" x0
+            , padding4 = BG.getField @"padding4" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_JoyAxisEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_JoyAxisEvent "timestamp" where
+  type
+    CFieldType SDL_JoyAxisEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | The joystick instance id
+--
+--     [C declaration]: @which@, defined at @SDL3\/SDL_events.h 518:20@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
+  => BG.CompatHasField.HasField "which" SDL_JoyAxisEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyAxisEvent
+            { which = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , axis = BG.getField @"axis" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            , value = BG.getField @"value" x0
+            , padding4 = BG.getField @"padding4" x0
+            }
+      , BG.getField @"which" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
+  => BG.HasField "which" (BG.Ptr SDL_JoyAxisEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"which")
+
+instance HasCField.HasCField SDL_JoyAxisEvent "which" where
+  type
+    CFieldType SDL_JoyAxisEvent "which" =
+      SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
+
+  offset# = \_ -> \_ -> 16
+
+-- | The joystick axis index
+--
+--     [C declaration]: @axis@, defined at @SDL3\/SDL_events.h 519:11@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.CompatHasField.HasField "axis" SDL_JoyAxisEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyAxisEvent
+            { axis = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            , value = BG.getField @"value" x0
+            , padding4 = BG.getField @"padding4" x0
+            }
+      , BG.getField @"axis" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.HasField "axis" (BG.Ptr SDL_JoyAxisEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"axis")
+
+instance HasCField.HasCField SDL_JoyAxisEvent "axis" where
+  type
+    CFieldType SDL_JoyAxisEvent "axis" =
+      SDL3.Sys.Bindgen.Stdinc.Uint8
+
+  offset# = \_ -> \_ -> 20
+
+-- | [C declaration]: @padding1@, defined at @SDL3\/SDL_events.h 520:11@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.CompatHasField.HasField "padding1" SDL_JoyAxisEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyAxisEvent
+            { padding1 = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , axis = BG.getField @"axis" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            , value = BG.getField @"value" x0
+            , padding4 = BG.getField @"padding4" x0
+            }
+      , BG.getField @"padding1" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.HasField "padding1" (BG.Ptr SDL_JoyAxisEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"padding1")
+
+instance HasCField.HasCField SDL_JoyAxisEvent "padding1" where
+  type
+    CFieldType SDL_JoyAxisEvent "padding1" =
+      SDL3.Sys.Bindgen.Stdinc.Uint8
+
+  offset# = \_ -> \_ -> 21
+
+-- | [C declaration]: @padding2@, defined at @SDL3\/SDL_events.h 521:11@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.CompatHasField.HasField "padding2" SDL_JoyAxisEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyAxisEvent
+            { padding2 = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , axis = BG.getField @"axis" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding3 = BG.getField @"padding3" x0
+            , value = BG.getField @"value" x0
+            , padding4 = BG.getField @"padding4" x0
+            }
+      , BG.getField @"padding2" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.HasField "padding2" (BG.Ptr SDL_JoyAxisEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"padding2")
+
+instance HasCField.HasCField SDL_JoyAxisEvent "padding2" where
+  type
+    CFieldType SDL_JoyAxisEvent "padding2" =
+      SDL3.Sys.Bindgen.Stdinc.Uint8
+
+  offset# = \_ -> \_ -> 22
+
+-- | [C declaration]: @padding3@, defined at @SDL3\/SDL_events.h 522:11@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.CompatHasField.HasField "padding3" SDL_JoyAxisEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyAxisEvent
+            { padding3 = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , axis = BG.getField @"axis" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , value = BG.getField @"value" x0
+            , padding4 = BG.getField @"padding4" x0
+            }
+      , BG.getField @"padding3" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.HasField "padding3" (BG.Ptr SDL_JoyAxisEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"padding3")
+
+instance HasCField.HasCField SDL_JoyAxisEvent "padding3" where
+  type
+    CFieldType SDL_JoyAxisEvent "padding3" =
+      SDL3.Sys.Bindgen.Stdinc.Uint8
+
+  offset# = \_ -> \_ -> 23
+
+-- | The axis value (range: -32768 to 32767)
+--
+--     [C declaration]: @value@, defined at @SDL3\/SDL_events.h 523:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint16)
+  => BG.CompatHasField.HasField "value" SDL_JoyAxisEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyAxisEvent
+            { value = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , axis = BG.getField @"axis" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            , padding4 = BG.getField @"padding4" x0
+            }
+      , BG.getField @"value" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint16)
+  => BG.HasField "value" (BG.Ptr SDL_JoyAxisEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"value")
+
+instance HasCField.HasCField SDL_JoyAxisEvent "value" where
+  type
+    CFieldType SDL_JoyAxisEvent "value" =
+      SDL3.Sys.Bindgen.Stdinc.Sint16
+
+  offset# = \_ -> \_ -> 24
+
+-- | [C declaration]: @padding4@, defined at @SDL3\/SDL_events.h 524:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
+  => BG.CompatHasField.HasField "padding4" SDL_JoyAxisEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyAxisEvent
+            { padding4 = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , axis = BG.getField @"axis" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            , value = BG.getField @"value" x0
+            }
+      , BG.getField @"padding4" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
+  => BG.HasField "padding4" (BG.Ptr SDL_JoyAxisEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"padding4")
+
+instance HasCField.HasCField SDL_JoyAxisEvent "padding4" where
+  type
+    CFieldType SDL_JoyAxisEvent "padding4" =
+      SDL3.Sys.Bindgen.Stdinc.Uint16
+
+  offset# = \_ -> \_ -> 26
+
+-- | Joystick trackball motion event structure (event.jball.*)
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @struct SDL_JoyBallEvent@, defined at @SDL3\/SDL_events.h 532:16@
+data SDL_JoyBallEvent = SDL_JoyBallEvent
+  { type' :: SDL_EventType
+  -- ^ SDL_EVENT_JOYSTICK_BALL_MOTION
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 534:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 535:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 536:12@
+  , which :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
+  -- ^ The joystick instance id
+  --
+  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 537:20@
+  , ball :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^ The joystick trackball index
+  --
+  --          [C declaration]: @ball@, defined at @SDL3\/SDL_events.h 538:11@
+  , padding1 :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^ [C declaration]: @padding1@, defined at @SDL3\/SDL_events.h 539:11@
+  , padding2 :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^ [C declaration]: @padding2@, defined at @SDL3\/SDL_events.h 540:11@
+  , padding3 :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^ [C declaration]: @padding3@, defined at @SDL3\/SDL_events.h 541:11@
+  , xrel :: SDL3.Sys.Bindgen.Stdinc.Sint16
+  -- ^ The relative motion in the X direction
+  --
+  --          [C declaration]: @xrel@, defined at @SDL3\/SDL_events.h 542:12@
+  , yrel :: SDL3.Sys.Bindgen.Stdinc.Sint16
+  -- ^ The relative motion in the Y direction
+  --
+  --          [C declaration]: @yrel@, defined at @SDL3\/SDL_events.h 543:12@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_JoyBallEvent where
+  staticSizeOf = \_ -> (32 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_JoyBallEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_JoyBallEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"ball") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"padding1") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"padding2") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"padding3") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"xrel") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"yrel") ptr0
+
+instance Marshal.WriteRaw SDL_JoyBallEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_JoyBallEvent
+            type'2
+            reserved3
+            timestamp4
+            which5
+            ball6
+            padding17
+            padding28
+            padding39
+            xrel10
+            yrel11 ->
+              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+                >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which5
+                >> HasCField.writeRaw (BG.Proxy @"ball") ptr0 ball6
+                >> HasCField.writeRaw (BG.Proxy @"padding1") ptr0 padding17
+                >> HasCField.writeRaw (BG.Proxy @"padding2") ptr0 padding28
+                >> HasCField.writeRaw (BG.Proxy @"padding3") ptr0 padding39
+                >> HasCField.writeRaw (BG.Proxy @"xrel") ptr0 xrel10
+                >> HasCField.writeRaw (BG.Proxy @"yrel") ptr0 yrel11
+
+deriving via Marshal.EquivStorable SDL_JoyBallEvent instance BG.Storable SDL_JoyBallEvent
+
+deriving via Struct.IsStructViaReadRaw SDL_JoyBallEvent instance Struct.IsStruct SDL_JoyBallEvent
+
+-- | SDL_EVENT_JOYSTICK_BALL_MOTION
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 534:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_JoyBallEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyBallEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , ball = BG.getField @"ball" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            , xrel = BG.getField @"xrel" x0
+            , yrel = BG.getField @"yrel" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_JoyBallEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_JoyBallEvent "type'" where
+  type
+    CFieldType SDL_JoyBallEvent "type'" =
+      SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 535:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_JoyBallEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyBallEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , ball = BG.getField @"ball" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            , xrel = BG.getField @"xrel" x0
+            , yrel = BG.getField @"yrel" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_JoyBallEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_JoyBallEvent "reserved" where
+  type
+    CFieldType SDL_JoyBallEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 536:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_JoyBallEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyBallEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , which = BG.getField @"which" x0
+            , ball = BG.getField @"ball" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            , xrel = BG.getField @"xrel" x0
+            , yrel = BG.getField @"yrel" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_JoyBallEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_JoyBallEvent "timestamp" where
+  type
+    CFieldType SDL_JoyBallEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | The joystick instance id
+--
+--     [C declaration]: @which@, defined at @SDL3\/SDL_events.h 537:20@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
+  => BG.CompatHasField.HasField "which" SDL_JoyBallEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyBallEvent
+            { which = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , ball = BG.getField @"ball" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            , xrel = BG.getField @"xrel" x0
+            , yrel = BG.getField @"yrel" x0
+            }
+      , BG.getField @"which" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
+  => BG.HasField "which" (BG.Ptr SDL_JoyBallEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"which")
+
+instance HasCField.HasCField SDL_JoyBallEvent "which" where
+  type
+    CFieldType SDL_JoyBallEvent "which" =
+      SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
+
+  offset# = \_ -> \_ -> 16
+
+-- | The joystick trackball index
+--
+--     [C declaration]: @ball@, defined at @SDL3\/SDL_events.h 538:11@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.CompatHasField.HasField "ball" SDL_JoyBallEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyBallEvent
+            { ball = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            , xrel = BG.getField @"xrel" x0
+            , yrel = BG.getField @"yrel" x0
+            }
+      , BG.getField @"ball" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.HasField "ball" (BG.Ptr SDL_JoyBallEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"ball")
+
+instance HasCField.HasCField SDL_JoyBallEvent "ball" where
+  type
+    CFieldType SDL_JoyBallEvent "ball" =
+      SDL3.Sys.Bindgen.Stdinc.Uint8
+
+  offset# = \_ -> \_ -> 20
+
+-- | [C declaration]: @padding1@, defined at @SDL3\/SDL_events.h 539:11@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.CompatHasField.HasField "padding1" SDL_JoyBallEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyBallEvent
+            { padding1 = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , ball = BG.getField @"ball" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            , xrel = BG.getField @"xrel" x0
+            , yrel = BG.getField @"yrel" x0
+            }
+      , BG.getField @"padding1" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.HasField "padding1" (BG.Ptr SDL_JoyBallEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"padding1")
+
+instance HasCField.HasCField SDL_JoyBallEvent "padding1" where
+  type
+    CFieldType SDL_JoyBallEvent "padding1" =
+      SDL3.Sys.Bindgen.Stdinc.Uint8
+
+  offset# = \_ -> \_ -> 21
+
+-- | [C declaration]: @padding2@, defined at @SDL3\/SDL_events.h 540:11@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.CompatHasField.HasField "padding2" SDL_JoyBallEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyBallEvent
+            { padding2 = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , ball = BG.getField @"ball" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding3 = BG.getField @"padding3" x0
+            , xrel = BG.getField @"xrel" x0
+            , yrel = BG.getField @"yrel" x0
+            }
+      , BG.getField @"padding2" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.HasField "padding2" (BG.Ptr SDL_JoyBallEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"padding2")
+
+instance HasCField.HasCField SDL_JoyBallEvent "padding2" where
+  type
+    CFieldType SDL_JoyBallEvent "padding2" =
+      SDL3.Sys.Bindgen.Stdinc.Uint8
+
+  offset# = \_ -> \_ -> 22
+
+-- | [C declaration]: @padding3@, defined at @SDL3\/SDL_events.h 541:11@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.CompatHasField.HasField "padding3" SDL_JoyBallEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyBallEvent
+            { padding3 = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , ball = BG.getField @"ball" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , xrel = BG.getField @"xrel" x0
+            , yrel = BG.getField @"yrel" x0
+            }
+      , BG.getField @"padding3" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.HasField "padding3" (BG.Ptr SDL_JoyBallEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"padding3")
+
+instance HasCField.HasCField SDL_JoyBallEvent "padding3" where
+  type
+    CFieldType SDL_JoyBallEvent "padding3" =
+      SDL3.Sys.Bindgen.Stdinc.Uint8
+
+  offset# = \_ -> \_ -> 23
+
+-- | The relative motion in the X direction
+--
+--     [C declaration]: @xrel@, defined at @SDL3\/SDL_events.h 542:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint16)
+  => BG.CompatHasField.HasField "xrel" SDL_JoyBallEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyBallEvent
+            { xrel = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , ball = BG.getField @"ball" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            , yrel = BG.getField @"yrel" x0
+            }
+      , BG.getField @"xrel" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint16)
+  => BG.HasField "xrel" (BG.Ptr SDL_JoyBallEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"xrel")
+
+instance HasCField.HasCField SDL_JoyBallEvent "xrel" where
+  type
+    CFieldType SDL_JoyBallEvent "xrel" =
+      SDL3.Sys.Bindgen.Stdinc.Sint16
+
+  offset# = \_ -> \_ -> 24
+
+-- | The relative motion in the Y direction
+--
+--     [C declaration]: @yrel@, defined at @SDL3\/SDL_events.h 543:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint16)
+  => BG.CompatHasField.HasField "yrel" SDL_JoyBallEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyBallEvent
+            { yrel = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , ball = BG.getField @"ball" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            , xrel = BG.getField @"xrel" x0
+            }
+      , BG.getField @"yrel" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint16)
+  => BG.HasField "yrel" (BG.Ptr SDL_JoyBallEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"yrel")
+
+instance HasCField.HasCField SDL_JoyBallEvent "yrel" where
+  type
+    CFieldType SDL_JoyBallEvent "yrel" =
+      SDL3.Sys.Bindgen.Stdinc.Sint16
+
+  offset# = \_ -> \_ -> 26
+
+-- | Joystick hat position change event structure (event.jhat.*)
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @struct SDL_JoyHatEvent@, defined at @SDL3\/SDL_events.h 551:16@
+data SDL_JoyHatEvent = SDL_JoyHatEvent
+  { type' :: SDL_EventType
+  -- ^ SDL_EVENT_JOYSTICK_HAT_MOTION
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 553:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 554:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 555:12@
+  , which :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
+  -- ^ The joystick instance id
+  --
+  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 556:20@
+  , hat :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^ The joystick hat index
+  --
+  --          [C declaration]: @hat@, defined at @SDL3\/SDL_events.h 557:11@
+  , value :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^ The hat position value. Note that zero means the POV is centered.
+  --
+  --          [See also]: SDL_HAT_LEFTUP SDL_HAT_UP SDL_HAT_RIGHTUP, SDL_HAT_LEFT SDL_HAT_CENTERED SDL_HAT_RIGHT, SDL_HAT_LEFTDOWN SDL_HAT_DOWN SDL_HAT_RIGHTDOWN
+  --
+  --          [C declaration]: @value@, defined at @SDL3\/SDL_events.h 558:11@
+  , padding1 :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^ [C declaration]: @padding1@, defined at @SDL3\/SDL_events.h 565:11@
+  , padding2 :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^ [C declaration]: @padding2@, defined at @SDL3\/SDL_events.h 566:11@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_JoyHatEvent where
+  staticSizeOf = \_ -> (24 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_JoyHatEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_JoyHatEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"hat") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"value") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"padding1") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"padding2") ptr0
+
+instance Marshal.WriteRaw SDL_JoyHatEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_JoyHatEvent
+            type'2
+            reserved3
+            timestamp4
+            which5
+            hat6
+            value7
+            padding18
+            padding29 ->
+              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+                >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which5
+                >> HasCField.writeRaw (BG.Proxy @"hat") ptr0 hat6
+                >> HasCField.writeRaw (BG.Proxy @"value") ptr0 value7
+                >> HasCField.writeRaw (BG.Proxy @"padding1") ptr0 padding18
+                >> HasCField.writeRaw (BG.Proxy @"padding2") ptr0 padding29
+
+deriving via Marshal.EquivStorable SDL_JoyHatEvent instance BG.Storable SDL_JoyHatEvent
+
+deriving via Struct.IsStructViaReadRaw SDL_JoyHatEvent instance Struct.IsStruct SDL_JoyHatEvent
+
+-- | SDL_EVENT_JOYSTICK_HAT_MOTION
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 553:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_JoyHatEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyHatEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , hat = BG.getField @"hat" x0
+            , value = BG.getField @"value" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_JoyHatEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_JoyHatEvent "type'" where
+  type
+    CFieldType SDL_JoyHatEvent "type'" =
+      SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 554:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_JoyHatEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyHatEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , hat = BG.getField @"hat" x0
+            , value = BG.getField @"value" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_JoyHatEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_JoyHatEvent "reserved" where
+  type
+    CFieldType SDL_JoyHatEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 555:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_JoyHatEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyHatEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , which = BG.getField @"which" x0
+            , hat = BG.getField @"hat" x0
+            , value = BG.getField @"value" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_JoyHatEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_JoyHatEvent "timestamp" where
+  type
+    CFieldType SDL_JoyHatEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | The joystick instance id
+--
+--     [C declaration]: @which@, defined at @SDL3\/SDL_events.h 556:20@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
+  => BG.CompatHasField.HasField "which" SDL_JoyHatEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyHatEvent
+            { which = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , hat = BG.getField @"hat" x0
+            , value = BG.getField @"value" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            }
+      , BG.getField @"which" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
+  => BG.HasField "which" (BG.Ptr SDL_JoyHatEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"which")
+
+instance HasCField.HasCField SDL_JoyHatEvent "which" where
+  type
+    CFieldType SDL_JoyHatEvent "which" =
+      SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
+
+  offset# = \_ -> \_ -> 16
+
+-- | The joystick hat index
+--
+--     [C declaration]: @hat@, defined at @SDL3\/SDL_events.h 557:11@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.CompatHasField.HasField "hat" SDL_JoyHatEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyHatEvent
+            { hat = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , value = BG.getField @"value" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            }
+      , BG.getField @"hat" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.HasField "hat" (BG.Ptr SDL_JoyHatEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"hat")
+
+instance HasCField.HasCField SDL_JoyHatEvent "hat" where
+  type
+    CFieldType SDL_JoyHatEvent "hat" =
+      SDL3.Sys.Bindgen.Stdinc.Uint8
+
+  offset# = \_ -> \_ -> 20
+
+-- | The hat position value. Note that zero means the POV is centered.
+--
+--     [See also]: SDL_HAT_LEFTUP SDL_HAT_UP SDL_HAT_RIGHTUP, SDL_HAT_LEFT SDL_HAT_CENTERED SDL_HAT_RIGHT, SDL_HAT_LEFTDOWN SDL_HAT_DOWN SDL_HAT_RIGHTDOWN
+--
+--     [C declaration]: @value@, defined at @SDL3\/SDL_events.h 558:11@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.CompatHasField.HasField "value" SDL_JoyHatEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyHatEvent
+            { value = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , hat = BG.getField @"hat" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            }
+      , BG.getField @"value" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.HasField "value" (BG.Ptr SDL_JoyHatEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"value")
+
+instance HasCField.HasCField SDL_JoyHatEvent "value" where
+  type
+    CFieldType SDL_JoyHatEvent "value" =
+      SDL3.Sys.Bindgen.Stdinc.Uint8
+
+  offset# = \_ -> \_ -> 21
+
+-- | [C declaration]: @padding1@, defined at @SDL3\/SDL_events.h 565:11@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.CompatHasField.HasField "padding1" SDL_JoyHatEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyHatEvent
+            { padding1 = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , hat = BG.getField @"hat" x0
+            , value = BG.getField @"value" x0
+            , padding2 = BG.getField @"padding2" x0
+            }
+      , BG.getField @"padding1" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.HasField "padding1" (BG.Ptr SDL_JoyHatEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"padding1")
+
+instance HasCField.HasCField SDL_JoyHatEvent "padding1" where
+  type
+    CFieldType SDL_JoyHatEvent "padding1" =
+      SDL3.Sys.Bindgen.Stdinc.Uint8
+
+  offset# = \_ -> \_ -> 22
+
+-- | [C declaration]: @padding2@, defined at @SDL3\/SDL_events.h 566:11@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.CompatHasField.HasField "padding2" SDL_JoyHatEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyHatEvent
+            { padding2 = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , hat = BG.getField @"hat" x0
+            , value = BG.getField @"value" x0
+            , padding1 = BG.getField @"padding1" x0
+            }
+      , BG.getField @"padding2" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.HasField "padding2" (BG.Ptr SDL_JoyHatEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"padding2")
+
+instance HasCField.HasCField SDL_JoyHatEvent "padding2" where
+  type
+    CFieldType SDL_JoyHatEvent "padding2" =
+      SDL3.Sys.Bindgen.Stdinc.Uint8
+
+  offset# = \_ -> \_ -> 23
+
+-- | Joystick button event structure (event.jbutton.*)
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @struct SDL_JoyButtonEvent@, defined at @SDL3\/SDL_events.h 574:16@
+data SDL_JoyButtonEvent = SDL_JoyButtonEvent
+  { type' :: SDL_EventType
+  -- ^ SDL_EVENT_JOYSTICK_BUTTON_DOWN or SDL_EVENT_JOYSTICK_BUTTON_UP
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 576:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 577:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 578:12@
+  , which :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
+  -- ^ The joystick instance id
+  --
+  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 579:20@
+  , button :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^ The joystick button index
+  --
+  --          [C declaration]: @button@, defined at @SDL3\/SDL_events.h 580:11@
+  , down :: BG.CBool
+  -- ^ true if the button is pressed
+  --
+  --          [C declaration]: @down@, defined at @SDL3\/SDL_events.h 581:10@
+  , padding1 :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^ [C declaration]: @padding1@, defined at @SDL3\/SDL_events.h 582:11@
+  , padding2 :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^ [C declaration]: @padding2@, defined at @SDL3\/SDL_events.h 583:11@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_JoyButtonEvent where
+  staticSizeOf = \_ -> (24 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_JoyButtonEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_JoyButtonEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"button") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"down") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"padding1") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"padding2") ptr0
+
+instance Marshal.WriteRaw SDL_JoyButtonEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_JoyButtonEvent
+            type'2
+            reserved3
+            timestamp4
+            which5
+            button6
+            down7
+            padding18
+            padding29 ->
+              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+                >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which5
+                >> HasCField.writeRaw (BG.Proxy @"button") ptr0 button6
+                >> HasCField.writeRaw (BG.Proxy @"down") ptr0 down7
+                >> HasCField.writeRaw (BG.Proxy @"padding1") ptr0 padding18
+                >> HasCField.writeRaw (BG.Proxy @"padding2") ptr0 padding29
+
+deriving via Marshal.EquivStorable SDL_JoyButtonEvent instance BG.Storable SDL_JoyButtonEvent
+
+deriving via
+  Struct.IsStructViaReadRaw SDL_JoyButtonEvent
+  instance
+    Struct.IsStruct SDL_JoyButtonEvent
+
+-- | SDL_EVENT_JOYSTICK_BUTTON_DOWN or SDL_EVENT_JOYSTICK_BUTTON_UP
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 576:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_JoyButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyButtonEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , button = BG.getField @"button" x0
+            , down = BG.getField @"down" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_JoyButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_JoyButtonEvent "type'" where
+  type
+    CFieldType SDL_JoyButtonEvent "type'" =
+      SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 577:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_JoyButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyButtonEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , button = BG.getField @"button" x0
+            , down = BG.getField @"down" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_JoyButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_JoyButtonEvent "reserved" where
+  type
+    CFieldType SDL_JoyButtonEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 578:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_JoyButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyButtonEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , which = BG.getField @"which" x0
+            , button = BG.getField @"button" x0
+            , down = BG.getField @"down" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_JoyButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_JoyButtonEvent "timestamp" where
+  type
+    CFieldType SDL_JoyButtonEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | The joystick instance id
+--
+--     [C declaration]: @which@, defined at @SDL3\/SDL_events.h 579:20@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
+  => BG.CompatHasField.HasField "which" SDL_JoyButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyButtonEvent
+            { which = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , button = BG.getField @"button" x0
+            , down = BG.getField @"down" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            }
+      , BG.getField @"which" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
+  => BG.HasField "which" (BG.Ptr SDL_JoyButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"which")
+
+instance HasCField.HasCField SDL_JoyButtonEvent "which" where
+  type
+    CFieldType SDL_JoyButtonEvent "which" =
+      SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
+
+  offset# = \_ -> \_ -> 16
+
+-- | The joystick button index
+--
+--     [C declaration]: @button@, defined at @SDL3\/SDL_events.h 580:11@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.CompatHasField.HasField "button" SDL_JoyButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyButtonEvent
+            { button = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , down = BG.getField @"down" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            }
+      , BG.getField @"button" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.HasField "button" (BG.Ptr SDL_JoyButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"button")
+
+instance HasCField.HasCField SDL_JoyButtonEvent "button" where
+  type
+    CFieldType SDL_JoyButtonEvent "button" =
+      SDL3.Sys.Bindgen.Stdinc.Uint8
+
+  offset# = \_ -> \_ -> 20
+
+-- | true if the button is pressed
+--
+--     [C declaration]: @down@, defined at @SDL3\/SDL_events.h 581:10@
+instance
+  (ty ~ BG.CBool)
+  => BG.CompatHasField.HasField "down" SDL_JoyButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyButtonEvent
+            { down = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , button = BG.getField @"button" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            }
+      , BG.getField @"down" x0
+      )
+
+instance
+  (ty ~ BG.CBool)
+  => BG.HasField "down" (BG.Ptr SDL_JoyButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"down")
+
+instance HasCField.HasCField SDL_JoyButtonEvent "down" where
+  type CFieldType SDL_JoyButtonEvent "down" = BG.CBool
+
+  offset# = \_ -> \_ -> 21
+
+-- | [C declaration]: @padding1@, defined at @SDL3\/SDL_events.h 582:11@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.CompatHasField.HasField "padding1" SDL_JoyButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyButtonEvent
+            { padding1 = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , button = BG.getField @"button" x0
+            , down = BG.getField @"down" x0
+            , padding2 = BG.getField @"padding2" x0
+            }
+      , BG.getField @"padding1" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.HasField "padding1" (BG.Ptr SDL_JoyButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"padding1")
+
+instance HasCField.HasCField SDL_JoyButtonEvent "padding1" where
+  type
+    CFieldType SDL_JoyButtonEvent "padding1" =
+      SDL3.Sys.Bindgen.Stdinc.Uint8
+
+  offset# = \_ -> \_ -> 22
+
+-- | [C declaration]: @padding2@, defined at @SDL3\/SDL_events.h 583:11@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.CompatHasField.HasField "padding2" SDL_JoyButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyButtonEvent
+            { padding2 = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , button = BG.getField @"button" x0
+            , down = BG.getField @"down" x0
+            , padding1 = BG.getField @"padding1" x0
+            }
+      , BG.getField @"padding2" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.HasField "padding2" (BG.Ptr SDL_JoyButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"padding2")
+
+instance HasCField.HasCField SDL_JoyButtonEvent "padding2" where
+  type
+    CFieldType SDL_JoyButtonEvent "padding2" =
+      SDL3.Sys.Bindgen.Stdinc.Uint8
+
+  offset# = \_ -> \_ -> 23
+
+-- | Joystick device event structure (event.jdevice.*)
+--
+--     SDL will send JOYSTICK_ADDED events for devices that are already plugged in during SDL_Init.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'SDL_GamepadDeviceEvent'
+--
+--     [C declaration]: @struct SDL_JoyDeviceEvent@, defined at @SDL3\/SDL_events.h 596:16@
+data SDL_JoyDeviceEvent = SDL_JoyDeviceEvent
+  { type' :: SDL_EventType
+  -- ^ SDL_EVENT_JOYSTICK_ADDED or SDL_EVENT_JOYSTICK_REMOVED or SDL_EVENT_JOYSTICK_UPDATE_COMPLETE
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 598:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 599:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 600:12@
+  , which :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
+  -- ^ The joystick instance id
+  --
+  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 601:20@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_JoyDeviceEvent where
+  staticSizeOf = \_ -> (24 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_JoyDeviceEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_JoyDeviceEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
+
+instance Marshal.WriteRaw SDL_JoyDeviceEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_JoyDeviceEvent type'2 reserved3 timestamp4 which5 ->
+            HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+              >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+              >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+              >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which5
+
+deriving via Marshal.EquivStorable SDL_JoyDeviceEvent instance BG.Storable SDL_JoyDeviceEvent
+
+deriving via
+  Struct.IsStructViaReadRaw SDL_JoyDeviceEvent
+  instance
+    Struct.IsStruct SDL_JoyDeviceEvent
+
+-- | SDL_EVENT_JOYSTICK_ADDED or SDL_EVENT_JOYSTICK_REMOVED or SDL_EVENT_JOYSTICK_UPDATE_COMPLETE
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 598:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_JoyDeviceEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyDeviceEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_JoyDeviceEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_JoyDeviceEvent "type'" where
+  type
+    CFieldType SDL_JoyDeviceEvent "type'" =
+      SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 599:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_JoyDeviceEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyDeviceEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_JoyDeviceEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_JoyDeviceEvent "reserved" where
+  type
+    CFieldType SDL_JoyDeviceEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 600:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_JoyDeviceEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyDeviceEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , which = BG.getField @"which" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_JoyDeviceEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_JoyDeviceEvent "timestamp" where
+  type
+    CFieldType SDL_JoyDeviceEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | The joystick instance id
+--
+--     [C declaration]: @which@, defined at @SDL3\/SDL_events.h 601:20@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
+  => BG.CompatHasField.HasField "which" SDL_JoyDeviceEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyDeviceEvent
+            { which = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            }
+      , BG.getField @"which" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
+  => BG.HasField "which" (BG.Ptr SDL_JoyDeviceEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"which")
+
+instance HasCField.HasCField SDL_JoyDeviceEvent "which" where
+  type
+    CFieldType SDL_JoyDeviceEvent "which" =
+      SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
+
+  offset# = \_ -> \_ -> 16
+
+-- | Joystick battery level change event structure (event.jbattery.*)
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @struct SDL_JoyBatteryEvent@, defined at @SDL3\/SDL_events.h 609:16@
+data SDL_JoyBatteryEvent = SDL_JoyBatteryEvent
+  { type' :: SDL_EventType
+  -- ^ SDL_EVENT_JOYSTICK_BATTERY_UPDATED
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 611:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 612:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 613:12@
+  , which :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
+  -- ^ The joystick instance id
+  --
+  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 614:20@
+  , state :: SDL3.Sys.Bindgen.Power.SDL_PowerState
+  -- ^ The joystick battery state
+  --
+  --          [C declaration]: @state@, defined at @SDL3\/SDL_events.h 615:20@
+  , percent :: BG.CInt
+  -- ^ The joystick battery percent charge remaining
+  --
+  --          [C declaration]: @percent@, defined at @SDL3\/SDL_events.h 616:9@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_JoyBatteryEvent where
+  staticSizeOf = \_ -> (32 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_JoyBatteryEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_JoyBatteryEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"state") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"percent") ptr0
+
+instance Marshal.WriteRaw SDL_JoyBatteryEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_JoyBatteryEvent type'2 reserved3 timestamp4 which5 state6 percent7 ->
+            HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+              >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+              >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+              >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which5
+              >> HasCField.writeRaw (BG.Proxy @"state") ptr0 state6
+              >> HasCField.writeRaw (BG.Proxy @"percent") ptr0 percent7
+
+deriving via Marshal.EquivStorable SDL_JoyBatteryEvent instance BG.Storable SDL_JoyBatteryEvent
+
+deriving via
+  Struct.IsStructViaReadRaw SDL_JoyBatteryEvent
+  instance
+    Struct.IsStruct SDL_JoyBatteryEvent
+
+-- | SDL_EVENT_JOYSTICK_BATTERY_UPDATED
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 611:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_JoyBatteryEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyBatteryEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , state = BG.getField @"state" x0
+            , percent = BG.getField @"percent" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_JoyBatteryEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_JoyBatteryEvent "type'" where
+  type
+    CFieldType SDL_JoyBatteryEvent "type'" =
+      SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 612:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_JoyBatteryEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyBatteryEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , state = BG.getField @"state" x0
+            , percent = BG.getField @"percent" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_JoyBatteryEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_JoyBatteryEvent "reserved" where
+  type
+    CFieldType SDL_JoyBatteryEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 613:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_JoyBatteryEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyBatteryEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , which = BG.getField @"which" x0
+            , state = BG.getField @"state" x0
+            , percent = BG.getField @"percent" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_JoyBatteryEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_JoyBatteryEvent "timestamp" where
+  type
+    CFieldType SDL_JoyBatteryEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | The joystick instance id
+--
+--     [C declaration]: @which@, defined at @SDL3\/SDL_events.h 614:20@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
+  => BG.CompatHasField.HasField "which" SDL_JoyBatteryEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyBatteryEvent
+            { which = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , state = BG.getField @"state" x0
+            , percent = BG.getField @"percent" x0
+            }
+      , BG.getField @"which" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
+  => BG.HasField "which" (BG.Ptr SDL_JoyBatteryEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"which")
+
+instance HasCField.HasCField SDL_JoyBatteryEvent "which" where
+  type
+    CFieldType SDL_JoyBatteryEvent "which" =
+      SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
+
+  offset# = \_ -> \_ -> 16
+
+-- | The joystick battery state
+--
+--     [C declaration]: @state@, defined at @SDL3\/SDL_events.h 615:20@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Power.SDL_PowerState)
+  => BG.CompatHasField.HasField "state" SDL_JoyBatteryEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyBatteryEvent
+            { state = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , percent = BG.getField @"percent" x0
+            }
+      , BG.getField @"state" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Power.SDL_PowerState)
+  => BG.HasField "state" (BG.Ptr SDL_JoyBatteryEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"state")
+
+instance HasCField.HasCField SDL_JoyBatteryEvent "state" where
+  type
+    CFieldType SDL_JoyBatteryEvent "state" =
+      SDL3.Sys.Bindgen.Power.SDL_PowerState
+
+  offset# = \_ -> \_ -> 20
+
+-- | The joystick battery percent charge remaining
+--
+--     [C declaration]: @percent@, defined at @SDL3\/SDL_events.h 616:9@
+instance
+  (ty ~ BG.CInt)
+  => BG.CompatHasField.HasField "percent" SDL_JoyBatteryEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_JoyBatteryEvent
+            { percent = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , state = BG.getField @"state" x0
+            }
+      , BG.getField @"percent" x0
+      )
+
+instance
+  (ty ~ BG.CInt)
+  => BG.HasField "percent" (BG.Ptr SDL_JoyBatteryEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"percent")
+
+instance HasCField.HasCField SDL_JoyBatteryEvent "percent" where
+  type
+    CFieldType SDL_JoyBatteryEvent "percent" =
+      BG.CInt
+
+  offset# = \_ -> \_ -> 24
+
+-- | Gamepad axis motion event structure (event.gaxis.*)
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @struct SDL_GamepadAxisEvent@, defined at @SDL3\/SDL_events.h 624:16@
+data SDL_GamepadAxisEvent = SDL_GamepadAxisEvent
+  { type' :: SDL_EventType
+  -- ^ SDL_EVENT_GAMEPAD_AXIS_MOTION
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 626:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 627:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 628:12@
+  , which :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
+  -- ^ The joystick instance id
+  --
+  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 629:20@
+  , axis :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^ The gamepad axis (SDL_GamepadAxis)
+  --
+  --          [C declaration]: @axis@, defined at @SDL3\/SDL_events.h 630:11@
+  , padding1 :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^ [C declaration]: @padding1@, defined at @SDL3\/SDL_events.h 631:11@
+  , padding2 :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^ [C declaration]: @padding2@, defined at @SDL3\/SDL_events.h 632:11@
+  , padding3 :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^ [C declaration]: @padding3@, defined at @SDL3\/SDL_events.h 633:11@
+  , value :: SDL3.Sys.Bindgen.Stdinc.Sint16
+  -- ^ The axis value (range: -32768 to 32767)
+  --
+  --          [C declaration]: @value@, defined at @SDL3\/SDL_events.h 634:12@
+  , padding4 :: SDL3.Sys.Bindgen.Stdinc.Uint16
+  -- ^ [C declaration]: @padding4@, defined at @SDL3\/SDL_events.h 635:12@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_GamepadAxisEvent where
+  staticSizeOf = \_ -> (32 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_GamepadAxisEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_GamepadAxisEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"axis") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"padding1") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"padding2") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"padding3") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"value") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"padding4") ptr0
+
+instance Marshal.WriteRaw SDL_GamepadAxisEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_GamepadAxisEvent
+            type'2
+            reserved3
+            timestamp4
+            which5
+            axis6
+            padding17
+            padding28
+            padding39
+            value10
+            padding411 ->
+              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+                >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which5
+                >> HasCField.writeRaw (BG.Proxy @"axis") ptr0 axis6
+                >> HasCField.writeRaw (BG.Proxy @"padding1") ptr0 padding17
+                >> HasCField.writeRaw (BG.Proxy @"padding2") ptr0 padding28
+                >> HasCField.writeRaw (BG.Proxy @"padding3") ptr0 padding39
+                >> HasCField.writeRaw (BG.Proxy @"value") ptr0 value10
+                >> HasCField.writeRaw (BG.Proxy @"padding4") ptr0 padding411
+
+deriving via Marshal.EquivStorable SDL_GamepadAxisEvent instance BG.Storable SDL_GamepadAxisEvent
+
+deriving via
+  Struct.IsStructViaReadRaw SDL_GamepadAxisEvent
+  instance
+    Struct.IsStruct SDL_GamepadAxisEvent
+
+-- | SDL_EVENT_GAMEPAD_AXIS_MOTION
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 626:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_GamepadAxisEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadAxisEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , axis = BG.getField @"axis" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            , value = BG.getField @"value" x0
+            , padding4 = BG.getField @"padding4" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_GamepadAxisEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_GamepadAxisEvent "type'" where
+  type
+    CFieldType SDL_GamepadAxisEvent "type'" =
+      SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 627:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_GamepadAxisEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadAxisEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , axis = BG.getField @"axis" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            , value = BG.getField @"value" x0
+            , padding4 = BG.getField @"padding4" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_GamepadAxisEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_GamepadAxisEvent "reserved" where
+  type
+    CFieldType SDL_GamepadAxisEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 628:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_GamepadAxisEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadAxisEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , which = BG.getField @"which" x0
+            , axis = BG.getField @"axis" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            , value = BG.getField @"value" x0
+            , padding4 = BG.getField @"padding4" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_GamepadAxisEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_GamepadAxisEvent "timestamp" where
+  type
+    CFieldType SDL_GamepadAxisEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | The joystick instance id
+--
+--     [C declaration]: @which@, defined at @SDL3\/SDL_events.h 629:20@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
+  => BG.CompatHasField.HasField "which" SDL_GamepadAxisEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadAxisEvent
+            { which = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , axis = BG.getField @"axis" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            , value = BG.getField @"value" x0
+            , padding4 = BG.getField @"padding4" x0
+            }
+      , BG.getField @"which" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
+  => BG.HasField "which" (BG.Ptr SDL_GamepadAxisEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"which")
+
+instance HasCField.HasCField SDL_GamepadAxisEvent "which" where
+  type
+    CFieldType SDL_GamepadAxisEvent "which" =
+      SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
+
+  offset# = \_ -> \_ -> 16
+
+-- | The gamepad axis (SDL_GamepadAxis)
+--
+--     [C declaration]: @axis@, defined at @SDL3\/SDL_events.h 630:11@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.CompatHasField.HasField "axis" SDL_GamepadAxisEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadAxisEvent
+            { axis = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            , value = BG.getField @"value" x0
+            , padding4 = BG.getField @"padding4" x0
+            }
+      , BG.getField @"axis" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.HasField "axis" (BG.Ptr SDL_GamepadAxisEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"axis")
+
+instance HasCField.HasCField SDL_GamepadAxisEvent "axis" where
+  type
+    CFieldType SDL_GamepadAxisEvent "axis" =
+      SDL3.Sys.Bindgen.Stdinc.Uint8
+
+  offset# = \_ -> \_ -> 20
+
+-- | [C declaration]: @padding1@, defined at @SDL3\/SDL_events.h 631:11@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.CompatHasField.HasField "padding1" SDL_GamepadAxisEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadAxisEvent
+            { padding1 = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , axis = BG.getField @"axis" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            , value = BG.getField @"value" x0
+            , padding4 = BG.getField @"padding4" x0
+            }
+      , BG.getField @"padding1" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.HasField "padding1" (BG.Ptr SDL_GamepadAxisEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"padding1")
+
+instance HasCField.HasCField SDL_GamepadAxisEvent "padding1" where
+  type
+    CFieldType SDL_GamepadAxisEvent "padding1" =
+      SDL3.Sys.Bindgen.Stdinc.Uint8
+
+  offset# = \_ -> \_ -> 21
+
+-- | [C declaration]: @padding2@, defined at @SDL3\/SDL_events.h 632:11@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.CompatHasField.HasField "padding2" SDL_GamepadAxisEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadAxisEvent
+            { padding2 = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , axis = BG.getField @"axis" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding3 = BG.getField @"padding3" x0
+            , value = BG.getField @"value" x0
+            , padding4 = BG.getField @"padding4" x0
+            }
+      , BG.getField @"padding2" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.HasField "padding2" (BG.Ptr SDL_GamepadAxisEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"padding2")
+
+instance HasCField.HasCField SDL_GamepadAxisEvent "padding2" where
+  type
+    CFieldType SDL_GamepadAxisEvent "padding2" =
+      SDL3.Sys.Bindgen.Stdinc.Uint8
+
+  offset# = \_ -> \_ -> 22
+
+-- | [C declaration]: @padding3@, defined at @SDL3\/SDL_events.h 633:11@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.CompatHasField.HasField "padding3" SDL_GamepadAxisEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadAxisEvent
+            { padding3 = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , axis = BG.getField @"axis" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , value = BG.getField @"value" x0
+            , padding4 = BG.getField @"padding4" x0
+            }
+      , BG.getField @"padding3" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.HasField "padding3" (BG.Ptr SDL_GamepadAxisEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"padding3")
+
+instance HasCField.HasCField SDL_GamepadAxisEvent "padding3" where
+  type
+    CFieldType SDL_GamepadAxisEvent "padding3" =
+      SDL3.Sys.Bindgen.Stdinc.Uint8
+
+  offset# = \_ -> \_ -> 23
+
+-- | The axis value (range: -32768 to 32767)
+--
+--     [C declaration]: @value@, defined at @SDL3\/SDL_events.h 634:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint16)
+  => BG.CompatHasField.HasField "value" SDL_GamepadAxisEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadAxisEvent
+            { value = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , axis = BG.getField @"axis" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            , padding4 = BG.getField @"padding4" x0
+            }
+      , BG.getField @"value" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint16)
+  => BG.HasField "value" (BG.Ptr SDL_GamepadAxisEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"value")
+
+instance HasCField.HasCField SDL_GamepadAxisEvent "value" where
+  type
+    CFieldType SDL_GamepadAxisEvent "value" =
+      SDL3.Sys.Bindgen.Stdinc.Sint16
+
+  offset# = \_ -> \_ -> 24
+
+-- | [C declaration]: @padding4@, defined at @SDL3\/SDL_events.h 635:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
+  => BG.CompatHasField.HasField "padding4" SDL_GamepadAxisEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadAxisEvent
+            { padding4 = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , axis = BG.getField @"axis" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            , value = BG.getField @"value" x0
+            }
+      , BG.getField @"padding4" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
+  => BG.HasField "padding4" (BG.Ptr SDL_GamepadAxisEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"padding4")
+
+instance HasCField.HasCField SDL_GamepadAxisEvent "padding4" where
+  type
+    CFieldType SDL_GamepadAxisEvent "padding4" =
+      SDL3.Sys.Bindgen.Stdinc.Uint16
+
+  offset# = \_ -> \_ -> 26
+
+-- | Gamepad button event structure (event.gbutton.*)
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @struct SDL_GamepadButtonEvent@, defined at @SDL3\/SDL_events.h 644:16@
+data SDL_GamepadButtonEvent = SDL_GamepadButtonEvent
+  { type' :: SDL_EventType
+  -- ^ SDL_EVENT_GAMEPAD_BUTTON_DOWN or SDL_EVENT_GAMEPAD_BUTTON_UP
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 646:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 647:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 648:12@
+  , which :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
+  -- ^ The joystick instance id
+  --
+  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 649:20@
+  , button :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^ The gamepad button (SDL_GamepadButton)
+  --
+  --          [C declaration]: @button@, defined at @SDL3\/SDL_events.h 650:11@
+  , down :: BG.CBool
+  -- ^ true if the button is pressed
+  --
+  --          [C declaration]: @down@, defined at @SDL3\/SDL_events.h 651:10@
+  , padding1 :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^ [C declaration]: @padding1@, defined at @SDL3\/SDL_events.h 652:11@
+  , padding2 :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^ [C declaration]: @padding2@, defined at @SDL3\/SDL_events.h 653:11@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_GamepadButtonEvent where
+  staticSizeOf = \_ -> (24 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_GamepadButtonEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_GamepadButtonEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"button") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"down") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"padding1") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"padding2") ptr0
+
+instance Marshal.WriteRaw SDL_GamepadButtonEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_GamepadButtonEvent
+            type'2
+            reserved3
+            timestamp4
+            which5
+            button6
+            down7
+            padding18
+            padding29 ->
+              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+                >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which5
+                >> HasCField.writeRaw (BG.Proxy @"button") ptr0 button6
+                >> HasCField.writeRaw (BG.Proxy @"down") ptr0 down7
+                >> HasCField.writeRaw (BG.Proxy @"padding1") ptr0 padding18
+                >> HasCField.writeRaw (BG.Proxy @"padding2") ptr0 padding29
+
+deriving via
+  Marshal.EquivStorable SDL_GamepadButtonEvent
+  instance
+    BG.Storable SDL_GamepadButtonEvent
+
+deriving via
+  Struct.IsStructViaReadRaw SDL_GamepadButtonEvent
+  instance
+    Struct.IsStruct SDL_GamepadButtonEvent
+
+-- | SDL_EVENT_GAMEPAD_BUTTON_DOWN or SDL_EVENT_GAMEPAD_BUTTON_UP
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 646:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_GamepadButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadButtonEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , button = BG.getField @"button" x0
+            , down = BG.getField @"down" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_GamepadButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_GamepadButtonEvent "type'" where
+  type
+    CFieldType SDL_GamepadButtonEvent "type'" =
+      SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 647:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_GamepadButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadButtonEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , button = BG.getField @"button" x0
+            , down = BG.getField @"down" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_GamepadButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_GamepadButtonEvent "reserved" where
+  type
+    CFieldType SDL_GamepadButtonEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 648:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_GamepadButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadButtonEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , which = BG.getField @"which" x0
+            , button = BG.getField @"button" x0
+            , down = BG.getField @"down" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_GamepadButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_GamepadButtonEvent "timestamp" where
+  type
+    CFieldType SDL_GamepadButtonEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | The joystick instance id
+--
+--     [C declaration]: @which@, defined at @SDL3\/SDL_events.h 649:20@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
+  => BG.CompatHasField.HasField "which" SDL_GamepadButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadButtonEvent
+            { which = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , button = BG.getField @"button" x0
+            , down = BG.getField @"down" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            }
+      , BG.getField @"which" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
+  => BG.HasField "which" (BG.Ptr SDL_GamepadButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"which")
+
+instance HasCField.HasCField SDL_GamepadButtonEvent "which" where
+  type
+    CFieldType SDL_GamepadButtonEvent "which" =
+      SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
+
+  offset# = \_ -> \_ -> 16
+
+-- | The gamepad button (SDL_GamepadButton)
+--
+--     [C declaration]: @button@, defined at @SDL3\/SDL_events.h 650:11@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.CompatHasField.HasField "button" SDL_GamepadButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadButtonEvent
+            { button = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , down = BG.getField @"down" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            }
+      , BG.getField @"button" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.HasField "button" (BG.Ptr SDL_GamepadButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"button")
+
+instance HasCField.HasCField SDL_GamepadButtonEvent "button" where
+  type
+    CFieldType SDL_GamepadButtonEvent "button" =
+      SDL3.Sys.Bindgen.Stdinc.Uint8
+
+  offset# = \_ -> \_ -> 20
+
+-- | true if the button is pressed
+--
+--     [C declaration]: @down@, defined at @SDL3\/SDL_events.h 651:10@
+instance
+  (ty ~ BG.CBool)
+  => BG.CompatHasField.HasField "down" SDL_GamepadButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadButtonEvent
+            { down = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , button = BG.getField @"button" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            }
+      , BG.getField @"down" x0
+      )
+
+instance
+  (ty ~ BG.CBool)
+  => BG.HasField "down" (BG.Ptr SDL_GamepadButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"down")
+
+instance HasCField.HasCField SDL_GamepadButtonEvent "down" where
+  type
+    CFieldType SDL_GamepadButtonEvent "down" =
+      BG.CBool
+
+  offset# = \_ -> \_ -> 21
+
+-- | [C declaration]: @padding1@, defined at @SDL3\/SDL_events.h 652:11@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.CompatHasField.HasField "padding1" SDL_GamepadButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadButtonEvent
+            { padding1 = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , button = BG.getField @"button" x0
+            , down = BG.getField @"down" x0
+            , padding2 = BG.getField @"padding2" x0
+            }
+      , BG.getField @"padding1" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.HasField "padding1" (BG.Ptr SDL_GamepadButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"padding1")
+
+instance HasCField.HasCField SDL_GamepadButtonEvent "padding1" where
+  type
+    CFieldType SDL_GamepadButtonEvent "padding1" =
+      SDL3.Sys.Bindgen.Stdinc.Uint8
+
+  offset# = \_ -> \_ -> 22
+
+-- | [C declaration]: @padding2@, defined at @SDL3\/SDL_events.h 653:11@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.CompatHasField.HasField "padding2" SDL_GamepadButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadButtonEvent
+            { padding2 = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , button = BG.getField @"button" x0
+            , down = BG.getField @"down" x0
+            , padding1 = BG.getField @"padding1" x0
+            }
+      , BG.getField @"padding2" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.HasField "padding2" (BG.Ptr SDL_GamepadButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"padding2")
+
+instance HasCField.HasCField SDL_GamepadButtonEvent "padding2" where
+  type
+    CFieldType SDL_GamepadButtonEvent "padding2" =
+      SDL3.Sys.Bindgen.Stdinc.Uint8
+
+  offset# = \_ -> \_ -> 23
+
+-- | Gamepad device event structure (event.gdevice.*)
+--
+--     Joysticks that are supported gamepads receive both an 'SDL_JoyDeviceEvent' and an 'SDL_GamepadDeviceEvent'.
+--
+--     SDL will send GAMEPAD_ADDED events for joysticks that are already plugged in during SDL_Init() and are recognized as gamepads. It will also send events for joysticks that get gamepad mappings at runtime.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'SDL_JoyDeviceEvent'
+--
+--     [C declaration]: @struct SDL_GamepadDeviceEvent@, defined at @SDL3\/SDL_events.h 671:16@
+data SDL_GamepadDeviceEvent = SDL_GamepadDeviceEvent
+  { type' :: SDL_EventType
+  -- ^ SDL_EVENT_GAMEPAD_ADDED, SDL_EVENT_GAMEPAD_REMOVED, or SDL_EVENT_GAMEPAD_REMAPPED, SDL_EVENT_GAMEPAD_UPDATE_COMPLETE or SDL_EVENT_GAMEPAD_STEAM_HANDLE_UPDATED
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 673:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 674:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 675:12@
+  , which :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
+  -- ^ The joystick instance id
+  --
+  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 676:20@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_GamepadDeviceEvent where
+  staticSizeOf = \_ -> (24 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_GamepadDeviceEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_GamepadDeviceEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
+
+instance Marshal.WriteRaw SDL_GamepadDeviceEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_GamepadDeviceEvent type'2 reserved3 timestamp4 which5 ->
+            HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+              >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+              >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+              >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which5
+
+deriving via
+  Marshal.EquivStorable SDL_GamepadDeviceEvent
+  instance
+    BG.Storable SDL_GamepadDeviceEvent
+
+deriving via
+  Struct.IsStructViaReadRaw SDL_GamepadDeviceEvent
+  instance
+    Struct.IsStruct SDL_GamepadDeviceEvent
+
+-- | SDL_EVENT_GAMEPAD_ADDED, SDL_EVENT_GAMEPAD_REMOVED, or SDL_EVENT_GAMEPAD_REMAPPED, SDL_EVENT_GAMEPAD_UPDATE_COMPLETE or SDL_EVENT_GAMEPAD_STEAM_HANDLE_UPDATED
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 673:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_GamepadDeviceEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadDeviceEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_GamepadDeviceEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_GamepadDeviceEvent "type'" where
+  type
+    CFieldType SDL_GamepadDeviceEvent "type'" =
+      SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 674:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_GamepadDeviceEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadDeviceEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_GamepadDeviceEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_GamepadDeviceEvent "reserved" where
+  type
+    CFieldType SDL_GamepadDeviceEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 675:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_GamepadDeviceEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadDeviceEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , which = BG.getField @"which" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_GamepadDeviceEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_GamepadDeviceEvent "timestamp" where
+  type
+    CFieldType SDL_GamepadDeviceEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | The joystick instance id
+--
+--     [C declaration]: @which@, defined at @SDL3\/SDL_events.h 676:20@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
+  => BG.CompatHasField.HasField "which" SDL_GamepadDeviceEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadDeviceEvent
+            { which = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            }
+      , BG.getField @"which" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
+  => BG.HasField "which" (BG.Ptr SDL_GamepadDeviceEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"which")
+
+instance HasCField.HasCField SDL_GamepadDeviceEvent "which" where
+  type
+    CFieldType SDL_GamepadDeviceEvent "which" =
+      SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
+
+  offset# = \_ -> \_ -> 16
+
+-- | Gamepad touchpad event structure (event.gtouchpad.*)
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @struct SDL_GamepadTouchpadEvent@, defined at @SDL3\/SDL_events.h 684:16@
+data SDL_GamepadTouchpadEvent = SDL_GamepadTouchpadEvent
+  { type' :: SDL_EventType
+  -- ^ SDL_EVENT_GAMEPAD_TOUCHPAD_DOWN or SDL_EVENT_GAMEPAD_TOUCHPAD_MOTION or SDL_EVENT_GAMEPAD_TOUCHPAD_UP
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 686:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 687:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 688:12@
+  , which :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
+  -- ^ The joystick instance id
+  --
+  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 689:20@
+  , touchpad :: SDL3.Sys.Bindgen.Stdinc.Sint32
+  -- ^ The index of the touchpad
+  --
+  --          [C declaration]: @touchpad@, defined at @SDL3\/SDL_events.h 690:12@
+  , finger :: SDL3.Sys.Bindgen.Stdinc.Sint32
+  -- ^ The index of the finger on the touchpad
+  --
+  --          [C declaration]: @finger@, defined at @SDL3\/SDL_events.h 691:12@
+  , x :: BG.CFloat
+  -- ^ Normalized in the range 0...1 with 0 being on the left
+  --
+  --          [C declaration]: @x@, defined at @SDL3\/SDL_events.h 692:11@
+  , y :: BG.CFloat
+  -- ^ Normalized in the range 0...1 with 0 being at the top
+  --
+  --          [C declaration]: @y@, defined at @SDL3\/SDL_events.h 693:11@
+  , pressure :: BG.CFloat
+  -- ^ Normalized in the range 0...1
+  --
+  --          [C declaration]: @pressure@, defined at @SDL3\/SDL_events.h 694:11@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_GamepadTouchpadEvent where
+  staticSizeOf = \_ -> (40 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_GamepadTouchpadEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_GamepadTouchpadEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"touchpad") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"finger") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"x") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"y") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"pressure") ptr0
+
+instance Marshal.WriteRaw SDL_GamepadTouchpadEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_GamepadTouchpadEvent
+            type'2
+            reserved3
+            timestamp4
+            which5
+            touchpad6
+            finger7
+            x8
+            y9
+            pressure10 ->
+              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+                >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which5
+                >> HasCField.writeRaw (BG.Proxy @"touchpad") ptr0 touchpad6
+                >> HasCField.writeRaw (BG.Proxy @"finger") ptr0 finger7
+                >> HasCField.writeRaw (BG.Proxy @"x") ptr0 x8
+                >> HasCField.writeRaw (BG.Proxy @"y") ptr0 y9
+                >> HasCField.writeRaw (BG.Proxy @"pressure") ptr0 pressure10
+
+deriving via
+  Marshal.EquivStorable SDL_GamepadTouchpadEvent
+  instance
+    BG.Storable SDL_GamepadTouchpadEvent
+
+deriving via
+  Struct.IsStructViaReadRaw SDL_GamepadTouchpadEvent
+  instance
+    Struct.IsStruct SDL_GamepadTouchpadEvent
+
+-- | SDL_EVENT_GAMEPAD_TOUCHPAD_DOWN or SDL_EVENT_GAMEPAD_TOUCHPAD_MOTION or SDL_EVENT_GAMEPAD_TOUCHPAD_UP
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 686:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_GamepadTouchpadEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadTouchpadEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , touchpad = BG.getField @"touchpad" x0
+            , finger = BG.getField @"finger" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , pressure = BG.getField @"pressure" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_GamepadTouchpadEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_GamepadTouchpadEvent "type'" where
+  type
+    CFieldType SDL_GamepadTouchpadEvent "type'" =
+      SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 687:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_GamepadTouchpadEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadTouchpadEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , touchpad = BG.getField @"touchpad" x0
+            , finger = BG.getField @"finger" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , pressure = BG.getField @"pressure" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_GamepadTouchpadEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_GamepadTouchpadEvent "reserved" where
+  type
+    CFieldType SDL_GamepadTouchpadEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 688:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_GamepadTouchpadEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadTouchpadEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , which = BG.getField @"which" x0
+            , touchpad = BG.getField @"touchpad" x0
+            , finger = BG.getField @"finger" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , pressure = BG.getField @"pressure" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_GamepadTouchpadEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_GamepadTouchpadEvent "timestamp" where
+  type
+    CFieldType SDL_GamepadTouchpadEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | The joystick instance id
+--
+--     [C declaration]: @which@, defined at @SDL3\/SDL_events.h 689:20@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
+  => BG.CompatHasField.HasField "which" SDL_GamepadTouchpadEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadTouchpadEvent
+            { which = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , touchpad = BG.getField @"touchpad" x0
+            , finger = BG.getField @"finger" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , pressure = BG.getField @"pressure" x0
+            }
+      , BG.getField @"which" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
+  => BG.HasField "which" (BG.Ptr SDL_GamepadTouchpadEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"which")
+
+instance HasCField.HasCField SDL_GamepadTouchpadEvent "which" where
+  type
+    CFieldType SDL_GamepadTouchpadEvent "which" =
+      SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
+
+  offset# = \_ -> \_ -> 16
+
+-- | The index of the touchpad
+--
+--     [C declaration]: @touchpad@, defined at @SDL3\/SDL_events.h 690:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
+  => BG.CompatHasField.HasField "touchpad" SDL_GamepadTouchpadEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadTouchpadEvent
+            { touchpad = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , finger = BG.getField @"finger" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , pressure = BG.getField @"pressure" x0
+            }
+      , BG.getField @"touchpad" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
+  => BG.HasField "touchpad" (BG.Ptr SDL_GamepadTouchpadEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"touchpad")
+
+instance HasCField.HasCField SDL_GamepadTouchpadEvent "touchpad" where
+  type
+    CFieldType SDL_GamepadTouchpadEvent "touchpad" =
+      SDL3.Sys.Bindgen.Stdinc.Sint32
+
+  offset# = \_ -> \_ -> 20
+
+-- | The index of the finger on the touchpad
+--
+--     [C declaration]: @finger@, defined at @SDL3\/SDL_events.h 691:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
+  => BG.CompatHasField.HasField "finger" SDL_GamepadTouchpadEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadTouchpadEvent
+            { finger = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , touchpad = BG.getField @"touchpad" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , pressure = BG.getField @"pressure" x0
+            }
+      , BG.getField @"finger" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
+  => BG.HasField "finger" (BG.Ptr SDL_GamepadTouchpadEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"finger")
+
+instance HasCField.HasCField SDL_GamepadTouchpadEvent "finger" where
+  type
+    CFieldType SDL_GamepadTouchpadEvent "finger" =
+      SDL3.Sys.Bindgen.Stdinc.Sint32
+
+  offset# = \_ -> \_ -> 24
+
+-- | Normalized in the range 0...1 with 0 being on the left
+--
+--     [C declaration]: @x@, defined at @SDL3\/SDL_events.h 692:11@
+instance
+  (ty ~ BG.CFloat)
+  => BG.CompatHasField.HasField "x" SDL_GamepadTouchpadEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadTouchpadEvent
+            { x = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , touchpad = BG.getField @"touchpad" x0
+            , finger = BG.getField @"finger" x0
+            , y = BG.getField @"y" x0
+            , pressure = BG.getField @"pressure" x0
+            }
+      , BG.getField @"x" x0
+      )
+
+instance
+  (ty ~ BG.CFloat)
+  => BG.HasField "x" (BG.Ptr SDL_GamepadTouchpadEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"x")
+
+instance HasCField.HasCField SDL_GamepadTouchpadEvent "x" where
+  type
+    CFieldType SDL_GamepadTouchpadEvent "x" =
+      BG.CFloat
+
+  offset# = \_ -> \_ -> 28
+
+-- | Normalized in the range 0...1 with 0 being at the top
+--
+--     [C declaration]: @y@, defined at @SDL3\/SDL_events.h 693:11@
+instance
+  (ty ~ BG.CFloat)
+  => BG.CompatHasField.HasField "y" SDL_GamepadTouchpadEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadTouchpadEvent
+            { y = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , touchpad = BG.getField @"touchpad" x0
+            , finger = BG.getField @"finger" x0
+            , x = BG.getField @"x" x0
+            , pressure = BG.getField @"pressure" x0
+            }
+      , BG.getField @"y" x0
+      )
+
+instance
+  (ty ~ BG.CFloat)
+  => BG.HasField "y" (BG.Ptr SDL_GamepadTouchpadEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"y")
+
+instance HasCField.HasCField SDL_GamepadTouchpadEvent "y" where
+  type
+    CFieldType SDL_GamepadTouchpadEvent "y" =
+      BG.CFloat
+
+  offset# = \_ -> \_ -> 32
+
+-- | Normalized in the range 0...1
+--
+--     [C declaration]: @pressure@, defined at @SDL3\/SDL_events.h 694:11@
+instance
+  (ty ~ BG.CFloat)
+  => BG.CompatHasField.HasField "pressure" SDL_GamepadTouchpadEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadTouchpadEvent
+            { pressure = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , touchpad = BG.getField @"touchpad" x0
+            , finger = BG.getField @"finger" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            }
+      , BG.getField @"pressure" x0
+      )
+
+instance
+  (ty ~ BG.CFloat)
+  => BG.HasField "pressure" (BG.Ptr SDL_GamepadTouchpadEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"pressure")
+
+instance HasCField.HasCField SDL_GamepadTouchpadEvent "pressure" where
+  type
+    CFieldType SDL_GamepadTouchpadEvent "pressure" =
+      BG.CFloat
+
+  offset# = \_ -> \_ -> 36
+
+-- | Gamepad sensor event structure (event.gsensor.*)
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @struct SDL_GamepadSensorEvent@, defined at @SDL3\/SDL_events.h 702:16@
+data SDL_GamepadSensorEvent = SDL_GamepadSensorEvent
+  { type' :: SDL_EventType
+  -- ^ SDL_EVENT_GAMEPAD_SENSOR_UPDATE
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 704:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 705:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 706:12@
+  , which :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
+  -- ^ The joystick instance id
+  --
+  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 707:20@
+  , sensor :: SDL3.Sys.Bindgen.Stdinc.Sint32
+  -- ^ The type of the sensor, one of the values of SDL_SensorType
+  --
+  --          [C declaration]: @sensor@, defined at @SDL3\/SDL_events.h 708:12@
+  , data' :: CA.ConstantArray 3 BG.CFloat
+  -- ^ Up to 3 values from the sensor, as defined in SDL_sensor.h
+  --
+  --          [C declaration]: @data@, defined at @SDL3\/SDL_events.h 709:11@
+  , sensor_timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ The timestamp of the sensor reading in nanoseconds, not necessarily synchronized with the system clock
+  --
+  --          [C declaration]: @sensor_timestamp@, defined at @SDL3\/SDL_events.h 710:12@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_GamepadSensorEvent where
+  staticSizeOf = \_ -> (48 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_GamepadSensorEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_GamepadSensorEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"sensor") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"data'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"sensor_timestamp") ptr0
+
+instance Marshal.WriteRaw SDL_GamepadSensorEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_GamepadSensorEvent
+            type'2
+            reserved3
+            timestamp4
+            which5
+            sensor6
+            data'7
+            sensor_timestamp8 ->
+              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+                >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which5
+                >> HasCField.writeRaw (BG.Proxy @"sensor") ptr0 sensor6
+                >> HasCField.writeRaw (BG.Proxy @"data'") ptr0 data'7
+                >> HasCField.writeRaw (BG.Proxy @"sensor_timestamp") ptr0 sensor_timestamp8
+
+deriving via
+  Marshal.EquivStorable SDL_GamepadSensorEvent
+  instance
+    BG.Storable SDL_GamepadSensorEvent
+
+deriving via
+  Struct.IsStructViaReadRaw SDL_GamepadSensorEvent
+  instance
+    Struct.IsStruct SDL_GamepadSensorEvent
+
+-- | SDL_EVENT_GAMEPAD_SENSOR_UPDATE
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 704:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_GamepadSensorEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadSensorEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , sensor = BG.getField @"sensor" x0
+            , data' = BG.getField @"data'" x0
+            , sensor_timestamp = BG.getField @"sensor_timestamp" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_GamepadSensorEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_GamepadSensorEvent "type'" where
+  type
+    CFieldType SDL_GamepadSensorEvent "type'" =
+      SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 705:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_GamepadSensorEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadSensorEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , sensor = BG.getField @"sensor" x0
+            , data' = BG.getField @"data'" x0
+            , sensor_timestamp = BG.getField @"sensor_timestamp" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_GamepadSensorEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_GamepadSensorEvent "reserved" where
+  type
+    CFieldType SDL_GamepadSensorEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 706:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_GamepadSensorEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadSensorEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , which = BG.getField @"which" x0
+            , sensor = BG.getField @"sensor" x0
+            , data' = BG.getField @"data'" x0
+            , sensor_timestamp = BG.getField @"sensor_timestamp" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_GamepadSensorEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_GamepadSensorEvent "timestamp" where
+  type
+    CFieldType SDL_GamepadSensorEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | The joystick instance id
+--
+--     [C declaration]: @which@, defined at @SDL3\/SDL_events.h 707:20@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
+  => BG.CompatHasField.HasField "which" SDL_GamepadSensorEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadSensorEvent
+            { which = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , sensor = BG.getField @"sensor" x0
+            , data' = BG.getField @"data'" x0
+            , sensor_timestamp = BG.getField @"sensor_timestamp" x0
+            }
+      , BG.getField @"which" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
+  => BG.HasField "which" (BG.Ptr SDL_GamepadSensorEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"which")
+
+instance HasCField.HasCField SDL_GamepadSensorEvent "which" where
+  type
+    CFieldType SDL_GamepadSensorEvent "which" =
+      SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
+
+  offset# = \_ -> \_ -> 16
+
+-- | The type of the sensor, one of the values of SDL_SensorType
+--
+--     [C declaration]: @sensor@, defined at @SDL3\/SDL_events.h 708:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
+  => BG.CompatHasField.HasField "sensor" SDL_GamepadSensorEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadSensorEvent
+            { sensor = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , data' = BG.getField @"data'" x0
+            , sensor_timestamp = BG.getField @"sensor_timestamp" x0
+            }
+      , BG.getField @"sensor" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
+  => BG.HasField "sensor" (BG.Ptr SDL_GamepadSensorEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"sensor")
+
+instance HasCField.HasCField SDL_GamepadSensorEvent "sensor" where
+  type
+    CFieldType SDL_GamepadSensorEvent "sensor" =
+      SDL3.Sys.Bindgen.Stdinc.Sint32
+
+  offset# = \_ -> \_ -> 20
+
+-- | Up to 3 values from the sensor, as defined in SDL_sensor.h
+--
+--     [C declaration]: @data@, defined at @SDL3\/SDL_events.h 709:11@
+instance
+  (ty ~ CA.ConstantArray 3 BG.CFloat)
+  => BG.CompatHasField.HasField "data'" SDL_GamepadSensorEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadSensorEvent
+            { data' = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , sensor = BG.getField @"sensor" x0
+            , sensor_timestamp = BG.getField @"sensor_timestamp" x0
+            }
+      , BG.getField @"data'" x0
+      )
+
+instance
+  (ty ~ CA.ConstantArray 3 BG.CFloat)
+  => BG.HasField "data'" (BG.Ptr SDL_GamepadSensorEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"data'")
+
+instance HasCField.HasCField SDL_GamepadSensorEvent "data'" where
+  type
+    CFieldType SDL_GamepadSensorEvent "data'" =
+      CA.ConstantArray 3 BG.CFloat
+
+  offset# = \_ -> \_ -> 24
+
+-- | The timestamp of the sensor reading in nanoseconds, not necessarily synchronized with the system clock
+--
+--     [C declaration]: @sensor_timestamp@, defined at @SDL3\/SDL_events.h 710:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "sensor_timestamp" SDL_GamepadSensorEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_GamepadSensorEvent
+            { sensor_timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , sensor = BG.getField @"sensor" x0
+            , data' = BG.getField @"data'" x0
+            }
+      , BG.getField @"sensor_timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "sensor_timestamp" (BG.Ptr SDL_GamepadSensorEvent) (BG.Ptr ty)
+  where
+  getField =
+    HasCField.fromPtr (BG.Proxy @"sensor_timestamp")
+
+instance HasCField.HasCField SDL_GamepadSensorEvent "sensor_timestamp" where
+  type
+    CFieldType SDL_GamepadSensorEvent "sensor_timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 40
+
+-- | Audio device event structure (event.adevice.*)
+--
+--     Note that SDL will send a SDL_EVENT_AUDIO_DEVICE_ADDED event for every device it discovers during initialization. After that, this event will only arrive when a device is hotplugged during the program\'s run.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @struct SDL_AudioDeviceEvent@, defined at @SDL3\/SDL_events.h 722:16@
+data SDL_AudioDeviceEvent = SDL_AudioDeviceEvent
+  { type' :: SDL_EventType
+  -- ^ SDL_EVENT_AUDIO_DEVICE_ADDED, or SDL_EVENT_AUDIO_DEVICE_REMOVED, or SDL_EVENT_AUDIO_DEVICE_FORMAT_CHANGED
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 724:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 725:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 726:12@
+  , which :: SDL3.Sys.Bindgen.Audio.SDL_AudioDeviceID
+  -- ^ SDL_AudioDeviceID for the device being added or removed or changing
+  --
+  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 727:23@
+  , recording :: BG.CBool
+  -- ^ false if a playback device, true if a recording device.
+  --
+  --          [C declaration]: @recording@, defined at @SDL3\/SDL_events.h 728:10@
+  , padding1 :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^ [C declaration]: @padding1@, defined at @SDL3\/SDL_events.h 729:11@
+  , padding2 :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^ [C declaration]: @padding2@, defined at @SDL3\/SDL_events.h 730:11@
+  , padding3 :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^ [C declaration]: @padding3@, defined at @SDL3\/SDL_events.h 731:11@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_AudioDeviceEvent where
+  staticSizeOf = \_ -> (24 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_AudioDeviceEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_AudioDeviceEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"recording") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"padding1") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"padding2") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"padding3") ptr0
+
+instance Marshal.WriteRaw SDL_AudioDeviceEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_AudioDeviceEvent
+            type'2
+            reserved3
+            timestamp4
+            which5
+            recording6
+            padding17
+            padding28
+            padding39 ->
+              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+                >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which5
+                >> HasCField.writeRaw (BG.Proxy @"recording") ptr0 recording6
+                >> HasCField.writeRaw (BG.Proxy @"padding1") ptr0 padding17
+                >> HasCField.writeRaw (BG.Proxy @"padding2") ptr0 padding28
+                >> HasCField.writeRaw (BG.Proxy @"padding3") ptr0 padding39
+
+deriving via Marshal.EquivStorable SDL_AudioDeviceEvent instance BG.Storable SDL_AudioDeviceEvent
+
+deriving via
+  Struct.IsStructViaReadRaw SDL_AudioDeviceEvent
+  instance
+    Struct.IsStruct SDL_AudioDeviceEvent
+
+-- | SDL_EVENT_AUDIO_DEVICE_ADDED, or SDL_EVENT_AUDIO_DEVICE_REMOVED, or SDL_EVENT_AUDIO_DEVICE_FORMAT_CHANGED
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 724:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_AudioDeviceEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_AudioDeviceEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , recording = BG.getField @"recording" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_AudioDeviceEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_AudioDeviceEvent "type'" where
+  type
+    CFieldType SDL_AudioDeviceEvent "type'" =
+      SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 725:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_AudioDeviceEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_AudioDeviceEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , recording = BG.getField @"recording" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_AudioDeviceEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_AudioDeviceEvent "reserved" where
+  type
+    CFieldType SDL_AudioDeviceEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 726:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_AudioDeviceEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_AudioDeviceEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , which = BG.getField @"which" x0
+            , recording = BG.getField @"recording" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_AudioDeviceEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_AudioDeviceEvent "timestamp" where
+  type
+    CFieldType SDL_AudioDeviceEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | SDL_AudioDeviceID for the device being added or removed or changing
+--
+--     [C declaration]: @which@, defined at @SDL3\/SDL_events.h 727:23@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Audio.SDL_AudioDeviceID)
+  => BG.CompatHasField.HasField "which" SDL_AudioDeviceEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_AudioDeviceEvent
+            { which = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , recording = BG.getField @"recording" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            }
+      , BG.getField @"which" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Audio.SDL_AudioDeviceID)
+  => BG.HasField "which" (BG.Ptr SDL_AudioDeviceEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"which")
+
+instance HasCField.HasCField SDL_AudioDeviceEvent "which" where
+  type
+    CFieldType SDL_AudioDeviceEvent "which" =
+      SDL3.Sys.Bindgen.Audio.SDL_AudioDeviceID
+
+  offset# = \_ -> \_ -> 16
+
+-- | false if a playback device, true if a recording device.
+--
+--     [C declaration]: @recording@, defined at @SDL3\/SDL_events.h 728:10@
+instance
+  (ty ~ BG.CBool)
+  => BG.CompatHasField.HasField "recording" SDL_AudioDeviceEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_AudioDeviceEvent
+            { recording = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            }
+      , BG.getField @"recording" x0
+      )
+
+instance
+  (ty ~ BG.CBool)
+  => BG.HasField "recording" (BG.Ptr SDL_AudioDeviceEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"recording")
+
+instance HasCField.HasCField SDL_AudioDeviceEvent "recording" where
+  type
+    CFieldType SDL_AudioDeviceEvent "recording" =
+      BG.CBool
+
+  offset# = \_ -> \_ -> 20
+
+-- | [C declaration]: @padding1@, defined at @SDL3\/SDL_events.h 729:11@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.CompatHasField.HasField "padding1" SDL_AudioDeviceEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_AudioDeviceEvent
+            { padding1 = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , recording = BG.getField @"recording" x0
+            , padding2 = BG.getField @"padding2" x0
+            , padding3 = BG.getField @"padding3" x0
+            }
+      , BG.getField @"padding1" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.HasField "padding1" (BG.Ptr SDL_AudioDeviceEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"padding1")
+
+instance HasCField.HasCField SDL_AudioDeviceEvent "padding1" where
+  type
+    CFieldType SDL_AudioDeviceEvent "padding1" =
+      SDL3.Sys.Bindgen.Stdinc.Uint8
+
+  offset# = \_ -> \_ -> 21
+
+-- | [C declaration]: @padding2@, defined at @SDL3\/SDL_events.h 730:11@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.CompatHasField.HasField "padding2" SDL_AudioDeviceEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_AudioDeviceEvent
+            { padding2 = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , recording = BG.getField @"recording" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding3 = BG.getField @"padding3" x0
+            }
+      , BG.getField @"padding2" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.HasField "padding2" (BG.Ptr SDL_AudioDeviceEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"padding2")
+
+instance HasCField.HasCField SDL_AudioDeviceEvent "padding2" where
+  type
+    CFieldType SDL_AudioDeviceEvent "padding2" =
+      SDL3.Sys.Bindgen.Stdinc.Uint8
+
+  offset# = \_ -> \_ -> 22
+
+-- | [C declaration]: @padding3@, defined at @SDL3\/SDL_events.h 731:11@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.CompatHasField.HasField "padding3" SDL_AudioDeviceEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_AudioDeviceEvent
+            { padding3 = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , recording = BG.getField @"recording" x0
+            , padding1 = BG.getField @"padding1" x0
+            , padding2 = BG.getField @"padding2" x0
+            }
+      , BG.getField @"padding3" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.HasField "padding3" (BG.Ptr SDL_AudioDeviceEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"padding3")
+
+instance HasCField.HasCField SDL_AudioDeviceEvent "padding3" where
+  type
+    CFieldType SDL_AudioDeviceEvent "padding3" =
+      SDL3.Sys.Bindgen.Stdinc.Uint8
+
+  offset# = \_ -> \_ -> 23
+
+-- | Camera device event structure (event.cdevice.*)
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @struct SDL_CameraDeviceEvent@, defined at @SDL3\/SDL_events.h 739:16@
+data SDL_CameraDeviceEvent = SDL_CameraDeviceEvent
+  { type' :: SDL_EventType
+  -- ^ SDL_EVENT_CAMERA_DEVICE_ADDED, SDL_EVENT_CAMERA_DEVICE_REMOVED, SDL_EVENT_CAMERA_DEVICE_APPROVED, SDL_EVENT_CAMERA_DEVICE_DENIED
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 741:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 742:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 743:12@
+  , which :: SDL3.Sys.Bindgen.Camera.SDL_CameraID
+  -- ^ SDL_CameraID for the device being added or removed or changing
+  --
+  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 744:18@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_CameraDeviceEvent where
+  staticSizeOf = \_ -> (24 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_CameraDeviceEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_CameraDeviceEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
+
+instance Marshal.WriteRaw SDL_CameraDeviceEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_CameraDeviceEvent type'2 reserved3 timestamp4 which5 ->
+            HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+              >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+              >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+              >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which5
+
+deriving via Marshal.EquivStorable SDL_CameraDeviceEvent instance BG.Storable SDL_CameraDeviceEvent
+
+deriving via
+  Struct.IsStructViaReadRaw SDL_CameraDeviceEvent
+  instance
+    Struct.IsStruct SDL_CameraDeviceEvent
+
+-- | SDL_EVENT_CAMERA_DEVICE_ADDED, SDL_EVENT_CAMERA_DEVICE_REMOVED, SDL_EVENT_CAMERA_DEVICE_APPROVED, SDL_EVENT_CAMERA_DEVICE_DENIED
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 741:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_CameraDeviceEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_CameraDeviceEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_CameraDeviceEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_CameraDeviceEvent "type'" where
+  type
+    CFieldType SDL_CameraDeviceEvent "type'" =
+      SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 742:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_CameraDeviceEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_CameraDeviceEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_CameraDeviceEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_CameraDeviceEvent "reserved" where
+  type
+    CFieldType SDL_CameraDeviceEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 743:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_CameraDeviceEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_CameraDeviceEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , which = BG.getField @"which" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_CameraDeviceEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_CameraDeviceEvent "timestamp" where
+  type
+    CFieldType SDL_CameraDeviceEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | SDL_CameraID for the device being added or removed or changing
+--
+--     [C declaration]: @which@, defined at @SDL3\/SDL_events.h 744:18@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Camera.SDL_CameraID)
+  => BG.CompatHasField.HasField "which" SDL_CameraDeviceEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_CameraDeviceEvent
+            { which = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            }
+      , BG.getField @"which" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Camera.SDL_CameraID)
+  => BG.HasField "which" (BG.Ptr SDL_CameraDeviceEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"which")
+
+instance HasCField.HasCField SDL_CameraDeviceEvent "which" where
+  type
+    CFieldType SDL_CameraDeviceEvent "which" =
+      SDL3.Sys.Bindgen.Camera.SDL_CameraID
+
+  offset# = \_ -> \_ -> 16
+
+-- | Renderer event structure (event.render.*)
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @struct SDL_RenderEvent@, defined at @SDL3\/SDL_events.h 753:16@
+data SDL_RenderEvent = SDL_RenderEvent
+  { type' :: SDL_EventType
+  -- ^ SDL_EVENT_RENDER_TARGETS_RESET, SDL_EVENT_RENDER_DEVICE_RESET, SDL_EVENT_RENDER_DEVICE_LOST
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 755:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 756:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 757:12@
+  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
+  -- ^ The window containing the renderer in question.
+  --
+  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 758:18@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_RenderEvent where
+  staticSizeOf = \_ -> (24 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_RenderEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_RenderEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
+
+instance Marshal.WriteRaw SDL_RenderEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_RenderEvent type'2 reserved3 timestamp4 windowID5 ->
+            HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+              >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+              >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+              >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID5
+
+deriving via Marshal.EquivStorable SDL_RenderEvent instance BG.Storable SDL_RenderEvent
+
+deriving via Struct.IsStructViaReadRaw SDL_RenderEvent instance Struct.IsStruct SDL_RenderEvent
+
+-- | SDL_EVENT_RENDER_TARGETS_RESET, SDL_EVENT_RENDER_DEVICE_RESET, SDL_EVENT_RENDER_DEVICE_LOST
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 755:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_RenderEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_RenderEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_RenderEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_RenderEvent "type'" where
+  type
+    CFieldType SDL_RenderEvent "type'" =
+      SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 756:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_RenderEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_RenderEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_RenderEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_RenderEvent "reserved" where
+  type
+    CFieldType SDL_RenderEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 757:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_RenderEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_RenderEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , windowID = BG.getField @"windowID" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_RenderEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_RenderEvent "timestamp" where
+  type
+    CFieldType SDL_RenderEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | The window containing the renderer in question.
+--
+--     [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 758:18@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.CompatHasField.HasField "windowID" SDL_RenderEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_RenderEvent
+            { windowID = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            }
+      , BG.getField @"windowID" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.HasField "windowID" (BG.Ptr SDL_RenderEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"windowID")
+
+instance HasCField.HasCField SDL_RenderEvent "windowID" where
+  type
+    CFieldType SDL_RenderEvent "windowID" =
+      SDL3.Sys.Bindgen.Video.SDL_WindowID
+
+  offset# = \_ -> \_ -> 16
+
+-- | Touch finger event structure (event.tfinger.*)
+--
+--     Coordinates in this event are normalized. @x@ and @y@ are normalized to a range between 0.0f and 1.0f, relative to the window, so (0,0) is the top left and (1,1) is the bottom right. Delta coordinates @dx@ and @dy@ are normalized in the ranges of -1.0f (traversed all the way from the bottom or right to all the way up or left) to 1.0f (traversed all the way from the top or left to all the way down or right).
+--
+--     Note that while the coordinates are /normalized/, they are not /clamped/, which means in some circumstances you can get a value outside of this range. For example, a renderer using logical presentation might give a negative value when the touch is in the letterboxing. Some platforms might report a touch outside of the window, which will also be outside of the range.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @struct SDL_TouchFingerEvent@, defined at @SDL3\/SDL_events.h 781:16@
+data SDL_TouchFingerEvent = SDL_TouchFingerEvent
+  { type' :: SDL_EventType
+  -- ^ SDL_EVENT_FINGER_DOWN, SDL_EVENT_FINGER_UP, SDL_EVENT_FINGER_MOTION, or SDL_EVENT_FINGER_CANCELED
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 783:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 784:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 785:12@
+  , touchID :: SDL3.Sys.Bindgen.Touch.SDL_TouchID
+  -- ^ The touch device id
+  --
+  --          [C declaration]: @touchID@, defined at @SDL3\/SDL_events.h 786:17@
+  , fingerID :: SDL3.Sys.Bindgen.Touch.SDL_FingerID
+  -- ^ [C declaration]: @fingerID@, defined at @SDL3\/SDL_events.h 787:18@
+  , x :: BG.CFloat
+  -- ^ Normalized in the range 0...1
+  --
+  --          [C declaration]: @x@, defined at @SDL3\/SDL_events.h 788:11@
+  , y :: BG.CFloat
+  -- ^ Normalized in the range 0...1
+  --
+  --          [C declaration]: @y@, defined at @SDL3\/SDL_events.h 789:11@
+  , dx :: BG.CFloat
+  -- ^ Normalized in the range -1...1
+  --
+  --          [C declaration]: @dx@, defined at @SDL3\/SDL_events.h 790:11@
+  , dy :: BG.CFloat
+  -- ^ Normalized in the range -1...1
+  --
+  --          [C declaration]: @dy@, defined at @SDL3\/SDL_events.h 791:11@
+  , pressure :: BG.CFloat
+  -- ^ Normalized in the range 0...1
+  --
+  --          [C declaration]: @pressure@, defined at @SDL3\/SDL_events.h 792:11@
+  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
+  -- ^ The window underneath the finger, if any
+  --
+  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 793:18@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_TouchFingerEvent where
+  staticSizeOf = \_ -> (56 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_TouchFingerEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_TouchFingerEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"touchID") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"fingerID") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"x") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"y") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"dx") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"dy") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"pressure") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
+
+instance Marshal.WriteRaw SDL_TouchFingerEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_TouchFingerEvent
+            type'2
+            reserved3
+            timestamp4
+            touchID5
+            fingerID6
+            x7
+            y8
+            dx9
+            dy10
+            pressure11
+            windowID12 ->
+              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+                >> HasCField.writeRaw (BG.Proxy @"touchID") ptr0 touchID5
+                >> HasCField.writeRaw (BG.Proxy @"fingerID") ptr0 fingerID6
+                >> HasCField.writeRaw (BG.Proxy @"x") ptr0 x7
+                >> HasCField.writeRaw (BG.Proxy @"y") ptr0 y8
+                >> HasCField.writeRaw (BG.Proxy @"dx") ptr0 dx9
+                >> HasCField.writeRaw (BG.Proxy @"dy") ptr0 dy10
+                >> HasCField.writeRaw (BG.Proxy @"pressure") ptr0 pressure11
+                >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID12
+
+deriving via Marshal.EquivStorable SDL_TouchFingerEvent instance BG.Storable SDL_TouchFingerEvent
+
+deriving via
+  Struct.IsStructViaReadRaw SDL_TouchFingerEvent
+  instance
+    Struct.IsStruct SDL_TouchFingerEvent
+
+-- | SDL_EVENT_FINGER_DOWN, SDL_EVENT_FINGER_UP, SDL_EVENT_FINGER_MOTION, or SDL_EVENT_FINGER_CANCELED
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 783:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_TouchFingerEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_TouchFingerEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , touchID = BG.getField @"touchID" x0
+            , fingerID = BG.getField @"fingerID" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , dx = BG.getField @"dx" x0
+            , dy = BG.getField @"dy" x0
+            , pressure = BG.getField @"pressure" x0
+            , windowID = BG.getField @"windowID" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_TouchFingerEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_TouchFingerEvent "type'" where
+  type
+    CFieldType SDL_TouchFingerEvent "type'" =
+      SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 784:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_TouchFingerEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_TouchFingerEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , touchID = BG.getField @"touchID" x0
+            , fingerID = BG.getField @"fingerID" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , dx = BG.getField @"dx" x0
+            , dy = BG.getField @"dy" x0
+            , pressure = BG.getField @"pressure" x0
+            , windowID = BG.getField @"windowID" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_TouchFingerEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_TouchFingerEvent "reserved" where
+  type
+    CFieldType SDL_TouchFingerEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 785:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_TouchFingerEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_TouchFingerEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , touchID = BG.getField @"touchID" x0
+            , fingerID = BG.getField @"fingerID" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , dx = BG.getField @"dx" x0
+            , dy = BG.getField @"dy" x0
+            , pressure = BG.getField @"pressure" x0
+            , windowID = BG.getField @"windowID" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_TouchFingerEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_TouchFingerEvent "timestamp" where
+  type
+    CFieldType SDL_TouchFingerEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | The touch device id
+--
+--     [C declaration]: @touchID@, defined at @SDL3\/SDL_events.h 786:17@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Touch.SDL_TouchID)
+  => BG.CompatHasField.HasField "touchID" SDL_TouchFingerEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_TouchFingerEvent
+            { touchID = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , fingerID = BG.getField @"fingerID" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , dx = BG.getField @"dx" x0
+            , dy = BG.getField @"dy" x0
+            , pressure = BG.getField @"pressure" x0
+            , windowID = BG.getField @"windowID" x0
+            }
+      , BG.getField @"touchID" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Touch.SDL_TouchID)
+  => BG.HasField "touchID" (BG.Ptr SDL_TouchFingerEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"touchID")
+
+instance HasCField.HasCField SDL_TouchFingerEvent "touchID" where
+  type
+    CFieldType SDL_TouchFingerEvent "touchID" =
+      SDL3.Sys.Bindgen.Touch.SDL_TouchID
+
+  offset# = \_ -> \_ -> 16
+
+-- | [C declaration]: @fingerID@, defined at @SDL3\/SDL_events.h 787:18@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Touch.SDL_FingerID)
+  => BG.CompatHasField.HasField "fingerID" SDL_TouchFingerEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_TouchFingerEvent
+            { fingerID = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , touchID = BG.getField @"touchID" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , dx = BG.getField @"dx" x0
+            , dy = BG.getField @"dy" x0
+            , pressure = BG.getField @"pressure" x0
+            , windowID = BG.getField @"windowID" x0
+            }
+      , BG.getField @"fingerID" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Touch.SDL_FingerID)
+  => BG.HasField "fingerID" (BG.Ptr SDL_TouchFingerEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"fingerID")
+
+instance HasCField.HasCField SDL_TouchFingerEvent "fingerID" where
+  type
+    CFieldType SDL_TouchFingerEvent "fingerID" =
+      SDL3.Sys.Bindgen.Touch.SDL_FingerID
+
+  offset# = \_ -> \_ -> 24
+
+-- | Normalized in the range 0...1
+--
+--     [C declaration]: @x@, defined at @SDL3\/SDL_events.h 788:11@
+instance
+  (ty ~ BG.CFloat)
+  => BG.CompatHasField.HasField "x" SDL_TouchFingerEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_TouchFingerEvent
+            { x = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , touchID = BG.getField @"touchID" x0
+            , fingerID = BG.getField @"fingerID" x0
+            , y = BG.getField @"y" x0
+            , dx = BG.getField @"dx" x0
+            , dy = BG.getField @"dy" x0
+            , pressure = BG.getField @"pressure" x0
+            , windowID = BG.getField @"windowID" x0
+            }
+      , BG.getField @"x" x0
+      )
+
+instance
+  (ty ~ BG.CFloat)
+  => BG.HasField "x" (BG.Ptr SDL_TouchFingerEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"x")
+
+instance HasCField.HasCField SDL_TouchFingerEvent "x" where
+  type CFieldType SDL_TouchFingerEvent "x" = BG.CFloat
+
+  offset# = \_ -> \_ -> 32
+
+-- | Normalized in the range 0...1
+--
+--     [C declaration]: @y@, defined at @SDL3\/SDL_events.h 789:11@
+instance
+  (ty ~ BG.CFloat)
+  => BG.CompatHasField.HasField "y" SDL_TouchFingerEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_TouchFingerEvent
+            { y = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , touchID = BG.getField @"touchID" x0
+            , fingerID = BG.getField @"fingerID" x0
+            , x = BG.getField @"x" x0
+            , dx = BG.getField @"dx" x0
+            , dy = BG.getField @"dy" x0
+            , pressure = BG.getField @"pressure" x0
+            , windowID = BG.getField @"windowID" x0
+            }
+      , BG.getField @"y" x0
+      )
+
+instance
+  (ty ~ BG.CFloat)
+  => BG.HasField "y" (BG.Ptr SDL_TouchFingerEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"y")
+
+instance HasCField.HasCField SDL_TouchFingerEvent "y" where
+  type CFieldType SDL_TouchFingerEvent "y" = BG.CFloat
+
+  offset# = \_ -> \_ -> 36
+
+-- | Normalized in the range -1...1
+--
+--     [C declaration]: @dx@, defined at @SDL3\/SDL_events.h 790:11@
+instance
+  (ty ~ BG.CFloat)
+  => BG.CompatHasField.HasField "dx" SDL_TouchFingerEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_TouchFingerEvent
+            { dx = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , touchID = BG.getField @"touchID" x0
+            , fingerID = BG.getField @"fingerID" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , dy = BG.getField @"dy" x0
+            , pressure = BG.getField @"pressure" x0
+            , windowID = BG.getField @"windowID" x0
+            }
+      , BG.getField @"dx" x0
+      )
+
+instance
+  (ty ~ BG.CFloat)
+  => BG.HasField "dx" (BG.Ptr SDL_TouchFingerEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"dx")
+
+instance HasCField.HasCField SDL_TouchFingerEvent "dx" where
+  type CFieldType SDL_TouchFingerEvent "dx" = BG.CFloat
+
+  offset# = \_ -> \_ -> 40
+
+-- | Normalized in the range -1...1
+--
+--     [C declaration]: @dy@, defined at @SDL3\/SDL_events.h 791:11@
+instance
+  (ty ~ BG.CFloat)
+  => BG.CompatHasField.HasField "dy" SDL_TouchFingerEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_TouchFingerEvent
+            { dy = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , touchID = BG.getField @"touchID" x0
+            , fingerID = BG.getField @"fingerID" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , dx = BG.getField @"dx" x0
+            , pressure = BG.getField @"pressure" x0
+            , windowID = BG.getField @"windowID" x0
+            }
+      , BG.getField @"dy" x0
+      )
+
+instance
+  (ty ~ BG.CFloat)
+  => BG.HasField "dy" (BG.Ptr SDL_TouchFingerEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"dy")
+
+instance HasCField.HasCField SDL_TouchFingerEvent "dy" where
+  type CFieldType SDL_TouchFingerEvent "dy" = BG.CFloat
+
+  offset# = \_ -> \_ -> 44
+
+-- | Normalized in the range 0...1
+--
+--     [C declaration]: @pressure@, defined at @SDL3\/SDL_events.h 792:11@
+instance
+  (ty ~ BG.CFloat)
+  => BG.CompatHasField.HasField "pressure" SDL_TouchFingerEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_TouchFingerEvent
+            { pressure = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , touchID = BG.getField @"touchID" x0
+            , fingerID = BG.getField @"fingerID" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , dx = BG.getField @"dx" x0
+            , dy = BG.getField @"dy" x0
+            , windowID = BG.getField @"windowID" x0
+            }
+      , BG.getField @"pressure" x0
+      )
+
+instance
+  (ty ~ BG.CFloat)
+  => BG.HasField "pressure" (BG.Ptr SDL_TouchFingerEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"pressure")
+
+instance HasCField.HasCField SDL_TouchFingerEvent "pressure" where
+  type
+    CFieldType SDL_TouchFingerEvent "pressure" =
+      BG.CFloat
+
+  offset# = \_ -> \_ -> 48
+
+-- | The window underneath the finger, if any
+--
+--     [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 793:18@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.CompatHasField.HasField "windowID" SDL_TouchFingerEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_TouchFingerEvent
+            { windowID = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , touchID = BG.getField @"touchID" x0
+            , fingerID = BG.getField @"fingerID" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , dx = BG.getField @"dx" x0
+            , dy = BG.getField @"dy" x0
+            , pressure = BG.getField @"pressure" x0
+            }
+      , BG.getField @"windowID" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.HasField "windowID" (BG.Ptr SDL_TouchFingerEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"windowID")
+
+instance HasCField.HasCField SDL_TouchFingerEvent "windowID" where
+  type
+    CFieldType SDL_TouchFingerEvent "windowID" =
+      SDL3.Sys.Bindgen.Video.SDL_WindowID
+
+  offset# = \_ -> \_ -> 52
+
+-- | Pinch event structure (event.pinch.*)
+--
+--     [C declaration]: @struct SDL_PinchFingerEvent@, defined at @SDL3\/SDL_events.h 799:16@
+data SDL_PinchFingerEvent = SDL_PinchFingerEvent
+  { type' :: SDL_EventType
+  -- ^ @SDL_EVENT_PINCH_BEGIN@ or @SDL_EVENT_PINCH_UPDATE@ or @SDL_EVENT_PINCH_END@
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 801:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 802:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 803:12@
+  , scale :: BG.CFloat
+  -- ^ The scale change since the last SDL_EVENT_PINCH_UPDATE. Scale \< 1 is \"zoom out\". Scale > 1 is \"zoom in\".
+  --
+  --          [C declaration]: @scale@, defined at @SDL3\/SDL_events.h 804:11@
+  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
+  -- ^ The window underneath the finger, if any
+  --
+  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 805:18@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_PinchFingerEvent where
+  staticSizeOf = \_ -> (24 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_PinchFingerEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_PinchFingerEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"scale") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
+
+instance Marshal.WriteRaw SDL_PinchFingerEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_PinchFingerEvent type'2 reserved3 timestamp4 scale5 windowID6 ->
+            HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+              >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+              >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+              >> HasCField.writeRaw (BG.Proxy @"scale") ptr0 scale5
+              >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID6
+
+deriving via Marshal.EquivStorable SDL_PinchFingerEvent instance BG.Storable SDL_PinchFingerEvent
+
+deriving via
+  Struct.IsStructViaReadRaw SDL_PinchFingerEvent
+  instance
+    Struct.IsStruct SDL_PinchFingerEvent
+
+-- | @SDL_EVENT_PINCH_BEGIN@ or @SDL_EVENT_PINCH_UPDATE@ or @SDL_EVENT_PINCH_END@
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 801:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_PinchFingerEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PinchFingerEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , scale = BG.getField @"scale" x0
+            , windowID = BG.getField @"windowID" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_PinchFingerEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_PinchFingerEvent "type'" where
+  type
+    CFieldType SDL_PinchFingerEvent "type'" =
+      SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 802:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_PinchFingerEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PinchFingerEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , scale = BG.getField @"scale" x0
+            , windowID = BG.getField @"windowID" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_PinchFingerEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_PinchFingerEvent "reserved" where
+  type
+    CFieldType SDL_PinchFingerEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 803:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_PinchFingerEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PinchFingerEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , scale = BG.getField @"scale" x0
+            , windowID = BG.getField @"windowID" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_PinchFingerEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_PinchFingerEvent "timestamp" where
+  type
+    CFieldType SDL_PinchFingerEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | The scale change since the last SDL_EVENT_PINCH_UPDATE. Scale \< 1 is \"zoom out\". Scale > 1 is \"zoom in\".
+--
+--     [C declaration]: @scale@, defined at @SDL3\/SDL_events.h 804:11@
+instance
+  (ty ~ BG.CFloat)
+  => BG.CompatHasField.HasField "scale" SDL_PinchFingerEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PinchFingerEvent
+            { scale = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            }
+      , BG.getField @"scale" x0
+      )
+
+instance
+  (ty ~ BG.CFloat)
+  => BG.HasField "scale" (BG.Ptr SDL_PinchFingerEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"scale")
+
+instance HasCField.HasCField SDL_PinchFingerEvent "scale" where
+  type
+    CFieldType SDL_PinchFingerEvent "scale" =
+      BG.CFloat
+
+  offset# = \_ -> \_ -> 16
+
+-- | The window underneath the finger, if any
+--
+--     [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 805:18@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.CompatHasField.HasField "windowID" SDL_PinchFingerEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PinchFingerEvent
+            { windowID = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , scale = BG.getField @"scale" x0
+            }
+      , BG.getField @"windowID" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.HasField "windowID" (BG.Ptr SDL_PinchFingerEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"windowID")
+
+instance HasCField.HasCField SDL_PinchFingerEvent "windowID" where
+  type
+    CFieldType SDL_PinchFingerEvent "windowID" =
+      SDL3.Sys.Bindgen.Video.SDL_WindowID
+
+  offset# = \_ -> \_ -> 20
+
+-- | Pressure-sensitive pen proximity event structure (event.pproximity.*)
+--
+--     When a pen becomes visible to the system (it is close enough to a tablet, etc), SDL will send an SDL_EVENT_PEN_PROXIMITY_IN event with the new pen\'s ID. This ID is valid until the pen leaves proximity again (has been removed from the tablet\'s area, the tablet has been unplugged, etc). If the same pen reenters proximity again, it will be given a new ID.
+--
+--     Note that \"proximity\" means \"close enough for the tablet to know the tool is there.\" The pen touching and lifting off from the tablet while not leaving the area are handled by SDL_EVENT_PEN_DOWN and SDL_EVENT_PEN_UP.
+--
+--     Not all platforms have a window associated with the pen during proximity events. Some wait until motion\/button\/etc events to offer this info.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @struct SDL_PenProximityEvent@, defined at @SDL3\/SDL_events.h 826:16@
+data SDL_PenProximityEvent = SDL_PenProximityEvent
+  { type' :: SDL_EventType
+  -- ^ SDL_EVENT_PEN_PROXIMITY_IN or SDL_EVENT_PEN_PROXIMITY_OUT
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 828:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 829:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 830:12@
+  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
+  -- ^ The window with pen focus, if any
+  --
+  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 831:18@
+  , which :: SDL3.Sys.Bindgen.Pen.SDL_PenID
+  -- ^ The pen instance id
+  --
+  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 832:15@
+  , pen_state :: SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags
+  -- ^ Complete pen input state at time of event (added in 3.4.16).
+  --
+  --          [C declaration]: @pen_state@, defined at @SDL3\/SDL_events.h 833:23@
+  , device_type :: SDL3.Sys.Bindgen.Pen.SDL_PenDeviceType
+  -- ^ the device type of the pen, if known (added in 3.4.18).
+  --
+  --          [C declaration]: @device_type@, defined at @SDL3\/SDL_events.h 834:23@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_PenProximityEvent where
+  staticSizeOf = \_ -> (32 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_PenProximityEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_PenProximityEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"pen_state") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"device_type") ptr0
+
+instance Marshal.WriteRaw SDL_PenProximityEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_PenProximityEvent
+            type'2
+            reserved3
+            timestamp4
+            windowID5
+            which6
+            pen_state7
+            device_type8 ->
+              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+                >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID5
+                >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which6
+                >> HasCField.writeRaw (BG.Proxy @"pen_state") ptr0 pen_state7
+                >> HasCField.writeRaw (BG.Proxy @"device_type") ptr0 device_type8
+
+deriving via Marshal.EquivStorable SDL_PenProximityEvent instance BG.Storable SDL_PenProximityEvent
+
+deriving via
+  Struct.IsStructViaReadRaw SDL_PenProximityEvent
+  instance
+    Struct.IsStruct SDL_PenProximityEvent
+
+-- | SDL_EVENT_PEN_PROXIMITY_IN or SDL_EVENT_PEN_PROXIMITY_OUT
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 828:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_PenProximityEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenProximityEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_PenProximityEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_PenProximityEvent "type'" where
+  type
+    CFieldType SDL_PenProximityEvent "type'" =
+      SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 829:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_PenProximityEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenProximityEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_PenProximityEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_PenProximityEvent "reserved" where
+  type
+    CFieldType SDL_PenProximityEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 830:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_PenProximityEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenProximityEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_PenProximityEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_PenProximityEvent "timestamp" where
+  type
+    CFieldType SDL_PenProximityEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | The window with pen focus, if any
+--
+--     [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 831:18@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.CompatHasField.HasField "windowID" SDL_PenProximityEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenProximityEvent
+            { windowID = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"windowID" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.HasField "windowID" (BG.Ptr SDL_PenProximityEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"windowID")
+
+instance HasCField.HasCField SDL_PenProximityEvent "windowID" where
+  type
+    CFieldType SDL_PenProximityEvent "windowID" =
+      SDL3.Sys.Bindgen.Video.SDL_WindowID
+
+  offset# = \_ -> \_ -> 16
+
+-- | The pen instance id
+--
+--     [C declaration]: @which@, defined at @SDL3\/SDL_events.h 832:15@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenID)
+  => BG.CompatHasField.HasField "which" SDL_PenProximityEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenProximityEvent
+            { which = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"which" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenID)
+  => BG.HasField "which" (BG.Ptr SDL_PenProximityEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"which")
+
+instance HasCField.HasCField SDL_PenProximityEvent "which" where
+  type
+    CFieldType SDL_PenProximityEvent "which" =
+      SDL3.Sys.Bindgen.Pen.SDL_PenID
+
+  offset# = \_ -> \_ -> 20
+
+-- | Complete pen input state at time of event (added in 3.4.16).
+--
+--     [C declaration]: @pen_state@, defined at @SDL3\/SDL_events.h 833:23@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags)
+  => BG.CompatHasField.HasField "pen_state" SDL_PenProximityEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenProximityEvent
+            { pen_state = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"pen_state" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags)
+  => BG.HasField "pen_state" (BG.Ptr SDL_PenProximityEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"pen_state")
+
+instance HasCField.HasCField SDL_PenProximityEvent "pen_state" where
+  type
+    CFieldType SDL_PenProximityEvent "pen_state" =
+      SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags
+
+  offset# = \_ -> \_ -> 24
+
+-- | the device type of the pen, if known (added in 3.4.18).
+--
+--     [C declaration]: @device_type@, defined at @SDL3\/SDL_events.h 834:23@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenDeviceType)
+  => BG.CompatHasField.HasField "device_type" SDL_PenProximityEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenProximityEvent
+            { device_type = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            }
+      , BG.getField @"device_type" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenDeviceType)
+  => BG.HasField "device_type" (BG.Ptr SDL_PenProximityEvent) (BG.Ptr ty)
+  where
+  getField =
+    HasCField.fromPtr (BG.Proxy @"device_type")
+
+instance HasCField.HasCField SDL_PenProximityEvent "device_type" where
+  type
+    CFieldType SDL_PenProximityEvent "device_type" =
+      SDL3.Sys.Bindgen.Pen.SDL_PenDeviceType
+
+  offset# = \_ -> \_ -> 28
+
+-- | Pressure-sensitive pen motion event structure (event.pmotion.*)
+--
+--     Depending on the hardware, you may get motion events when the pen is not touching a tablet, for tracking a pen even when it isn\'t drawing. You should listen for SDL_EVENT_PEN_DOWN and SDL_EVENT_PEN_UP events, or check @pen_state & SDL_PEN_INPUT_DOWN@ to decide if a pen is \"drawing\" when dealing with pen motion.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @struct SDL_PenMotionEvent@, defined at @SDL3\/SDL_events.h 848:16@
+data SDL_PenMotionEvent = SDL_PenMotionEvent
+  { type' :: SDL_EventType
+  -- ^ SDL_EVENT_PEN_MOTION
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 850:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 851:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 852:12@
+  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
+  -- ^ The window with pen focus, if any
+  --
+  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 853:18@
+  , which :: SDL3.Sys.Bindgen.Pen.SDL_PenID
+  -- ^ The pen instance id
+  --
+  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 854:15@
+  , pen_state :: SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags
+  -- ^ Complete pen input state at time of event
+  --
+  --          [C declaration]: @pen_state@, defined at @SDL3\/SDL_events.h 855:23@
+  , x :: BG.CFloat
+  -- ^ X coordinate, relative to window
+  --
+  --          [C declaration]: @x@, defined at @SDL3\/SDL_events.h 856:11@
+  , y :: BG.CFloat
+  -- ^ Y coordinate, relative to window
+  --
+  --          [C declaration]: @y@, defined at @SDL3\/SDL_events.h 857:11@
+  , device_type :: SDL3.Sys.Bindgen.Pen.SDL_PenDeviceType
+  -- ^ the device type of the pen, if known (added in 3.4.18).
+  --
+  --          [C declaration]: @device_type@, defined at @SDL3\/SDL_events.h 858:23@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_PenMotionEvent where
+  staticSizeOf = \_ -> (40 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_PenMotionEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_PenMotionEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"pen_state") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"x") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"y") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"device_type") ptr0
+
+instance Marshal.WriteRaw SDL_PenMotionEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_PenMotionEvent
+            type'2
+            reserved3
+            timestamp4
+            windowID5
+            which6
+            pen_state7
+            x8
+            y9
+            device_type10 ->
+              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+                >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID5
+                >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which6
+                >> HasCField.writeRaw (BG.Proxy @"pen_state") ptr0 pen_state7
+                >> HasCField.writeRaw (BG.Proxy @"x") ptr0 x8
+                >> HasCField.writeRaw (BG.Proxy @"y") ptr0 y9
+                >> HasCField.writeRaw (BG.Proxy @"device_type") ptr0 device_type10
+
+deriving via Marshal.EquivStorable SDL_PenMotionEvent instance BG.Storable SDL_PenMotionEvent
+
+deriving via
+  Struct.IsStructViaReadRaw SDL_PenMotionEvent
+  instance
+    Struct.IsStruct SDL_PenMotionEvent
+
+-- | SDL_EVENT_PEN_MOTION
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 850:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_PenMotionEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenMotionEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_PenMotionEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_PenMotionEvent "type'" where
+  type
+    CFieldType SDL_PenMotionEvent "type'" =
+      SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 851:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_PenMotionEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenMotionEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_PenMotionEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_PenMotionEvent "reserved" where
+  type
+    CFieldType SDL_PenMotionEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 852:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_PenMotionEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenMotionEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_PenMotionEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_PenMotionEvent "timestamp" where
+  type
+    CFieldType SDL_PenMotionEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | The window with pen focus, if any
+--
+--     [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 853:18@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.CompatHasField.HasField "windowID" SDL_PenMotionEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenMotionEvent
+            { windowID = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"windowID" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.HasField "windowID" (BG.Ptr SDL_PenMotionEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"windowID")
+
+instance HasCField.HasCField SDL_PenMotionEvent "windowID" where
+  type
+    CFieldType SDL_PenMotionEvent "windowID" =
+      SDL3.Sys.Bindgen.Video.SDL_WindowID
+
+  offset# = \_ -> \_ -> 16
+
+-- | The pen instance id
+--
+--     [C declaration]: @which@, defined at @SDL3\/SDL_events.h 854:15@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenID)
+  => BG.CompatHasField.HasField "which" SDL_PenMotionEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenMotionEvent
+            { which = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"which" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenID)
+  => BG.HasField "which" (BG.Ptr SDL_PenMotionEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"which")
+
+instance HasCField.HasCField SDL_PenMotionEvent "which" where
+  type
+    CFieldType SDL_PenMotionEvent "which" =
+      SDL3.Sys.Bindgen.Pen.SDL_PenID
+
+  offset# = \_ -> \_ -> 20
+
+-- | Complete pen input state at time of event
+--
+--     [C declaration]: @pen_state@, defined at @SDL3\/SDL_events.h 855:23@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags)
+  => BG.CompatHasField.HasField "pen_state" SDL_PenMotionEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenMotionEvent
+            { pen_state = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"pen_state" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags)
+  => BG.HasField "pen_state" (BG.Ptr SDL_PenMotionEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"pen_state")
+
+instance HasCField.HasCField SDL_PenMotionEvent "pen_state" where
+  type
+    CFieldType SDL_PenMotionEvent "pen_state" =
+      SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags
+
+  offset# = \_ -> \_ -> 24
+
+-- | X coordinate, relative to window
+--
+--     [C declaration]: @x@, defined at @SDL3\/SDL_events.h 856:11@
+instance
+  (ty ~ BG.CFloat)
+  => BG.CompatHasField.HasField "x" SDL_PenMotionEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenMotionEvent
+            { x = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , y = BG.getField @"y" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"x" x0
+      )
+
+instance
+  (ty ~ BG.CFloat)
+  => BG.HasField "x" (BG.Ptr SDL_PenMotionEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"x")
+
+instance HasCField.HasCField SDL_PenMotionEvent "x" where
+  type CFieldType SDL_PenMotionEvent "x" = BG.CFloat
+
+  offset# = \_ -> \_ -> 28
+
+-- | Y coordinate, relative to window
+--
+--     [C declaration]: @y@, defined at @SDL3\/SDL_events.h 857:11@
+instance
+  (ty ~ BG.CFloat)
+  => BG.CompatHasField.HasField "y" SDL_PenMotionEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenMotionEvent
+            { y = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , x = BG.getField @"x" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"y" x0
+      )
+
+instance
+  (ty ~ BG.CFloat)
+  => BG.HasField "y" (BG.Ptr SDL_PenMotionEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"y")
+
+instance HasCField.HasCField SDL_PenMotionEvent "y" where
+  type CFieldType SDL_PenMotionEvent "y" = BG.CFloat
+
+  offset# = \_ -> \_ -> 32
+
+-- | the device type of the pen, if known (added in 3.4.18).
+--
+--     [C declaration]: @device_type@, defined at @SDL3\/SDL_events.h 858:23@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenDeviceType)
+  => BG.CompatHasField.HasField "device_type" SDL_PenMotionEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenMotionEvent
+            { device_type = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            }
+      , BG.getField @"device_type" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenDeviceType)
+  => BG.HasField "device_type" (BG.Ptr SDL_PenMotionEvent) (BG.Ptr ty)
+  where
+  getField =
+    HasCField.fromPtr (BG.Proxy @"device_type")
+
+instance HasCField.HasCField SDL_PenMotionEvent "device_type" where
+  type
+    CFieldType SDL_PenMotionEvent "device_type" =
+      SDL3.Sys.Bindgen.Pen.SDL_PenDeviceType
+
+  offset# = \_ -> \_ -> 36
+
+-- | Pressure-sensitive pen touched event structure (event.ptouch.*)
+--
+--     These events come when a pen touches a surface (a tablet, etc), or lifts off from one.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @struct SDL_PenTouchEvent@, defined at @SDL3\/SDL_events.h 869:16@
+data SDL_PenTouchEvent = SDL_PenTouchEvent
+  { type' :: SDL_EventType
+  -- ^ SDL_EVENT_PEN_DOWN or SDL_EVENT_PEN_UP
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 871:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 872:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 873:12@
+  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
+  -- ^ The window with pen focus, if any
+  --
+  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 874:18@
+  , which :: SDL3.Sys.Bindgen.Pen.SDL_PenID
+  -- ^ The pen instance id
+  --
+  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 875:15@
+  , pen_state :: SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags
+  -- ^ Complete pen input state at time of event
+  --
+  --          [C declaration]: @pen_state@, defined at @SDL3\/SDL_events.h 876:23@
+  , x :: BG.CFloat
+  -- ^ X coordinate, relative to window
+  --
+  --          [C declaration]: @x@, defined at @SDL3\/SDL_events.h 877:11@
+  , y :: BG.CFloat
+  -- ^ Y coordinate, relative to window
+  --
+  --          [C declaration]: @y@, defined at @SDL3\/SDL_events.h 878:11@
+  , eraser :: BG.CBool
+  -- ^ true if eraser end is used (not all pens support this).
+  --
+  --          [C declaration]: @eraser@, defined at @SDL3\/SDL_events.h 879:10@
+  , down :: BG.CBool
+  -- ^ true if the pen is touching or false if the pen is lifted off
+  --
+  --          [C declaration]: @down@, defined at @SDL3\/SDL_events.h 880:10@
+  , device_type :: SDL3.Sys.Bindgen.Pen.SDL_PenDeviceType
+  -- ^ the device type of the pen, if known (added in 3.4.18).
+  --
+  --          [C declaration]: @device_type@, defined at @SDL3\/SDL_events.h 881:23@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_PenTouchEvent where
+  staticSizeOf = \_ -> (48 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_PenTouchEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_PenTouchEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"pen_state") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"x") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"y") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"eraser") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"down") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"device_type") ptr0
+
+instance Marshal.WriteRaw SDL_PenTouchEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_PenTouchEvent
+            type'2
+            reserved3
+            timestamp4
+            windowID5
+            which6
+            pen_state7
+            x8
+            y9
+            eraser10
+            down11
+            device_type12 ->
+              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+                >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID5
+                >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which6
+                >> HasCField.writeRaw (BG.Proxy @"pen_state") ptr0 pen_state7
+                >> HasCField.writeRaw (BG.Proxy @"x") ptr0 x8
+                >> HasCField.writeRaw (BG.Proxy @"y") ptr0 y9
+                >> HasCField.writeRaw (BG.Proxy @"eraser") ptr0 eraser10
+                >> HasCField.writeRaw (BG.Proxy @"down") ptr0 down11
+                >> HasCField.writeRaw (BG.Proxy @"device_type") ptr0 device_type12
+
+deriving via Marshal.EquivStorable SDL_PenTouchEvent instance BG.Storable SDL_PenTouchEvent
+
+deriving via Struct.IsStructViaReadRaw SDL_PenTouchEvent instance Struct.IsStruct SDL_PenTouchEvent
+
+-- | SDL_EVENT_PEN_DOWN or SDL_EVENT_PEN_UP
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 871:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_PenTouchEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenTouchEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , eraser = BG.getField @"eraser" x0
+            , down = BG.getField @"down" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_PenTouchEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_PenTouchEvent "type'" where
+  type
+    CFieldType SDL_PenTouchEvent "type'" =
+      SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 872:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_PenTouchEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenTouchEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , eraser = BG.getField @"eraser" x0
+            , down = BG.getField @"down" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_PenTouchEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_PenTouchEvent "reserved" where
+  type
+    CFieldType SDL_PenTouchEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 873:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_PenTouchEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenTouchEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , eraser = BG.getField @"eraser" x0
+            , down = BG.getField @"down" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_PenTouchEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_PenTouchEvent "timestamp" where
+  type
+    CFieldType SDL_PenTouchEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | The window with pen focus, if any
+--
+--     [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 874:18@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.CompatHasField.HasField "windowID" SDL_PenTouchEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenTouchEvent
+            { windowID = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , eraser = BG.getField @"eraser" x0
+            , down = BG.getField @"down" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"windowID" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.HasField "windowID" (BG.Ptr SDL_PenTouchEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"windowID")
+
+instance HasCField.HasCField SDL_PenTouchEvent "windowID" where
+  type
+    CFieldType SDL_PenTouchEvent "windowID" =
+      SDL3.Sys.Bindgen.Video.SDL_WindowID
+
+  offset# = \_ -> \_ -> 16
+
+-- | The pen instance id
+--
+--     [C declaration]: @which@, defined at @SDL3\/SDL_events.h 875:15@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenID)
+  => BG.CompatHasField.HasField "which" SDL_PenTouchEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenTouchEvent
+            { which = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , eraser = BG.getField @"eraser" x0
+            , down = BG.getField @"down" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"which" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenID)
+  => BG.HasField "which" (BG.Ptr SDL_PenTouchEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"which")
+
+instance HasCField.HasCField SDL_PenTouchEvent "which" where
+  type
+    CFieldType SDL_PenTouchEvent "which" =
+      SDL3.Sys.Bindgen.Pen.SDL_PenID
+
+  offset# = \_ -> \_ -> 20
+
+-- | Complete pen input state at time of event
+--
+--     [C declaration]: @pen_state@, defined at @SDL3\/SDL_events.h 876:23@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags)
+  => BG.CompatHasField.HasField "pen_state" SDL_PenTouchEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenTouchEvent
+            { pen_state = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , eraser = BG.getField @"eraser" x0
+            , down = BG.getField @"down" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"pen_state" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags)
+  => BG.HasField "pen_state" (BG.Ptr SDL_PenTouchEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"pen_state")
+
+instance HasCField.HasCField SDL_PenTouchEvent "pen_state" where
+  type
+    CFieldType SDL_PenTouchEvent "pen_state" =
+      SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags
+
+  offset# = \_ -> \_ -> 24
+
+-- | X coordinate, relative to window
+--
+--     [C declaration]: @x@, defined at @SDL3\/SDL_events.h 877:11@
+instance
+  (ty ~ BG.CFloat)
+  => BG.CompatHasField.HasField "x" SDL_PenTouchEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenTouchEvent
+            { x = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , y = BG.getField @"y" x0
+            , eraser = BG.getField @"eraser" x0
+            , down = BG.getField @"down" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"x" x0
+      )
+
+instance
+  (ty ~ BG.CFloat)
+  => BG.HasField "x" (BG.Ptr SDL_PenTouchEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"x")
+
+instance HasCField.HasCField SDL_PenTouchEvent "x" where
+  type CFieldType SDL_PenTouchEvent "x" = BG.CFloat
+
+  offset# = \_ -> \_ -> 28
+
+-- | Y coordinate, relative to window
+--
+--     [C declaration]: @y@, defined at @SDL3\/SDL_events.h 878:11@
+instance
+  (ty ~ BG.CFloat)
+  => BG.CompatHasField.HasField "y" SDL_PenTouchEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenTouchEvent
+            { y = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , x = BG.getField @"x" x0
+            , eraser = BG.getField @"eraser" x0
+            , down = BG.getField @"down" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"y" x0
+      )
+
+instance
+  (ty ~ BG.CFloat)
+  => BG.HasField "y" (BG.Ptr SDL_PenTouchEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"y")
+
+instance HasCField.HasCField SDL_PenTouchEvent "y" where
+  type CFieldType SDL_PenTouchEvent "y" = BG.CFloat
+
+  offset# = \_ -> \_ -> 32
+
+-- | true if eraser end is used (not all pens support this).
+--
+--     [C declaration]: @eraser@, defined at @SDL3\/SDL_events.h 879:10@
+instance
+  (ty ~ BG.CBool)
+  => BG.CompatHasField.HasField "eraser" SDL_PenTouchEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenTouchEvent
+            { eraser = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , down = BG.getField @"down" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"eraser" x0
+      )
+
+instance
+  (ty ~ BG.CBool)
+  => BG.HasField "eraser" (BG.Ptr SDL_PenTouchEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"eraser")
+
+instance HasCField.HasCField SDL_PenTouchEvent "eraser" where
+  type CFieldType SDL_PenTouchEvent "eraser" = BG.CBool
+
+  offset# = \_ -> \_ -> 36
+
+-- | true if the pen is touching or false if the pen is lifted off
+--
+--     [C declaration]: @down@, defined at @SDL3\/SDL_events.h 880:10@
+instance
+  (ty ~ BG.CBool)
+  => BG.CompatHasField.HasField "down" SDL_PenTouchEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenTouchEvent
+            { down = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , eraser = BG.getField @"eraser" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"down" x0
+      )
+
+instance
+  (ty ~ BG.CBool)
+  => BG.HasField "down" (BG.Ptr SDL_PenTouchEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"down")
+
+instance HasCField.HasCField SDL_PenTouchEvent "down" where
+  type CFieldType SDL_PenTouchEvent "down" = BG.CBool
+
+  offset# = \_ -> \_ -> 37
+
+-- | the device type of the pen, if known (added in 3.4.18).
+--
+--     [C declaration]: @device_type@, defined at @SDL3\/SDL_events.h 881:23@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenDeviceType)
+  => BG.CompatHasField.HasField "device_type" SDL_PenTouchEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenTouchEvent
+            { device_type = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , eraser = BG.getField @"eraser" x0
+            , down = BG.getField @"down" x0
+            }
+      , BG.getField @"device_type" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenDeviceType)
+  => BG.HasField "device_type" (BG.Ptr SDL_PenTouchEvent) (BG.Ptr ty)
+  where
+  getField =
+    HasCField.fromPtr (BG.Proxy @"device_type")
+
+instance HasCField.HasCField SDL_PenTouchEvent "device_type" where
+  type
+    CFieldType SDL_PenTouchEvent "device_type" =
+      SDL3.Sys.Bindgen.Pen.SDL_PenDeviceType
+
+  offset# = \_ -> \_ -> 40
+
+-- | Pressure-sensitive pen button event structure (event.pbutton.*)
+--
+--     This is for buttons on the pen itself that the user might click. The pen itself pressing down to draw triggers a SDL_EVENT_PEN_DOWN event instead.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @struct SDL_PenButtonEvent@, defined at @SDL3\/SDL_events.h 892:16@
+data SDL_PenButtonEvent = SDL_PenButtonEvent
+  { type' :: SDL_EventType
+  -- ^ SDL_EVENT_PEN_BUTTON_DOWN or SDL_EVENT_PEN_BUTTON_UP
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 894:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 895:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 896:12@
+  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
+  -- ^ The window with mouse focus, if any
+  --
+  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 897:18@
+  , which :: SDL3.Sys.Bindgen.Pen.SDL_PenID
+  -- ^ The pen instance id
+  --
+  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 898:15@
+  , pen_state :: SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags
+  -- ^ Complete pen input state at time of event
+  --
+  --          [C declaration]: @pen_state@, defined at @SDL3\/SDL_events.h 899:23@
+  , x :: BG.CFloat
+  -- ^ X coordinate, relative to window
+  --
+  --          [C declaration]: @x@, defined at @SDL3\/SDL_events.h 900:11@
+  , y :: BG.CFloat
+  -- ^ Y coordinate, relative to window
+  --
+  --          [C declaration]: @y@, defined at @SDL3\/SDL_events.h 901:11@
+  , button :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^ The pen button index (first button is 1).
+  --
+  --          [C declaration]: @button@, defined at @SDL3\/SDL_events.h 902:11@
+  , down :: BG.CBool
+  -- ^ true if the button is pressed
+  --
+  --          [C declaration]: @down@, defined at @SDL3\/SDL_events.h 903:10@
+  , device_type :: SDL3.Sys.Bindgen.Pen.SDL_PenDeviceType
+  -- ^ the device type of the pen, if known (added in 3.4.18).
+  --
+  --          [C declaration]: @device_type@, defined at @SDL3\/SDL_events.h 904:23@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_PenButtonEvent where
+  staticSizeOf = \_ -> (48 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_PenButtonEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_PenButtonEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"pen_state") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"x") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"y") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"button") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"down") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"device_type") ptr0
+
+instance Marshal.WriteRaw SDL_PenButtonEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_PenButtonEvent
+            type'2
+            reserved3
+            timestamp4
+            windowID5
+            which6
+            pen_state7
+            x8
+            y9
+            button10
+            down11
+            device_type12 ->
+              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+                >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID5
+                >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which6
+                >> HasCField.writeRaw (BG.Proxy @"pen_state") ptr0 pen_state7
+                >> HasCField.writeRaw (BG.Proxy @"x") ptr0 x8
+                >> HasCField.writeRaw (BG.Proxy @"y") ptr0 y9
+                >> HasCField.writeRaw (BG.Proxy @"button") ptr0 button10
+                >> HasCField.writeRaw (BG.Proxy @"down") ptr0 down11
+                >> HasCField.writeRaw (BG.Proxy @"device_type") ptr0 device_type12
+
+deriving via Marshal.EquivStorable SDL_PenButtonEvent instance BG.Storable SDL_PenButtonEvent
+
+deriving via
+  Struct.IsStructViaReadRaw SDL_PenButtonEvent
+  instance
+    Struct.IsStruct SDL_PenButtonEvent
+
+-- | SDL_EVENT_PEN_BUTTON_DOWN or SDL_EVENT_PEN_BUTTON_UP
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 894:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_PenButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenButtonEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , button = BG.getField @"button" x0
+            , down = BG.getField @"down" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_PenButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_PenButtonEvent "type'" where
+  type
+    CFieldType SDL_PenButtonEvent "type'" =
+      SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 895:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_PenButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenButtonEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , button = BG.getField @"button" x0
+            , down = BG.getField @"down" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_PenButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_PenButtonEvent "reserved" where
+  type
+    CFieldType SDL_PenButtonEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 896:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_PenButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenButtonEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , button = BG.getField @"button" x0
+            , down = BG.getField @"down" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_PenButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_PenButtonEvent "timestamp" where
+  type
+    CFieldType SDL_PenButtonEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | The window with mouse focus, if any
+--
+--     [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 897:18@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.CompatHasField.HasField "windowID" SDL_PenButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenButtonEvent
+            { windowID = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , button = BG.getField @"button" x0
+            , down = BG.getField @"down" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"windowID" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.HasField "windowID" (BG.Ptr SDL_PenButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"windowID")
+
+instance HasCField.HasCField SDL_PenButtonEvent "windowID" where
+  type
+    CFieldType SDL_PenButtonEvent "windowID" =
+      SDL3.Sys.Bindgen.Video.SDL_WindowID
+
+  offset# = \_ -> \_ -> 16
+
+-- | The pen instance id
+--
+--     [C declaration]: @which@, defined at @SDL3\/SDL_events.h 898:15@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenID)
+  => BG.CompatHasField.HasField "which" SDL_PenButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenButtonEvent
+            { which = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , button = BG.getField @"button" x0
+            , down = BG.getField @"down" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"which" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenID)
+  => BG.HasField "which" (BG.Ptr SDL_PenButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"which")
+
+instance HasCField.HasCField SDL_PenButtonEvent "which" where
+  type
+    CFieldType SDL_PenButtonEvent "which" =
+      SDL3.Sys.Bindgen.Pen.SDL_PenID
+
+  offset# = \_ -> \_ -> 20
+
+-- | Complete pen input state at time of event
+--
+--     [C declaration]: @pen_state@, defined at @SDL3\/SDL_events.h 899:23@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags)
+  => BG.CompatHasField.HasField "pen_state" SDL_PenButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenButtonEvent
+            { pen_state = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , button = BG.getField @"button" x0
+            , down = BG.getField @"down" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"pen_state" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags)
+  => BG.HasField "pen_state" (BG.Ptr SDL_PenButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"pen_state")
+
+instance HasCField.HasCField SDL_PenButtonEvent "pen_state" where
+  type
+    CFieldType SDL_PenButtonEvent "pen_state" =
+      SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags
+
+  offset# = \_ -> \_ -> 24
+
+-- | X coordinate, relative to window
+--
+--     [C declaration]: @x@, defined at @SDL3\/SDL_events.h 900:11@
+instance
+  (ty ~ BG.CFloat)
+  => BG.CompatHasField.HasField "x" SDL_PenButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenButtonEvent
+            { x = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , y = BG.getField @"y" x0
+            , button = BG.getField @"button" x0
+            , down = BG.getField @"down" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"x" x0
+      )
+
+instance
+  (ty ~ BG.CFloat)
+  => BG.HasField "x" (BG.Ptr SDL_PenButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"x")
+
+instance HasCField.HasCField SDL_PenButtonEvent "x" where
+  type CFieldType SDL_PenButtonEvent "x" = BG.CFloat
+
+  offset# = \_ -> \_ -> 28
+
+-- | Y coordinate, relative to window
+--
+--     [C declaration]: @y@, defined at @SDL3\/SDL_events.h 901:11@
+instance
+  (ty ~ BG.CFloat)
+  => BG.CompatHasField.HasField "y" SDL_PenButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenButtonEvent
+            { y = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , x = BG.getField @"x" x0
+            , button = BG.getField @"button" x0
+            , down = BG.getField @"down" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"y" x0
+      )
+
+instance
+  (ty ~ BG.CFloat)
+  => BG.HasField "y" (BG.Ptr SDL_PenButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"y")
+
+instance HasCField.HasCField SDL_PenButtonEvent "y" where
+  type CFieldType SDL_PenButtonEvent "y" = BG.CFloat
+
+  offset# = \_ -> \_ -> 32
+
+-- | The pen button index (first button is 1).
+--
+--     [C declaration]: @button@, defined at @SDL3\/SDL_events.h 902:11@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.CompatHasField.HasField "button" SDL_PenButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenButtonEvent
+            { button = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , down = BG.getField @"down" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"button" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.HasField "button" (BG.Ptr SDL_PenButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"button")
+
+instance HasCField.HasCField SDL_PenButtonEvent "button" where
+  type
+    CFieldType SDL_PenButtonEvent "button" =
+      SDL3.Sys.Bindgen.Stdinc.Uint8
+
+  offset# = \_ -> \_ -> 36
+
+-- | true if the button is pressed
+--
+--     [C declaration]: @down@, defined at @SDL3\/SDL_events.h 903:10@
+instance
+  (ty ~ BG.CBool)
+  => BG.CompatHasField.HasField "down" SDL_PenButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenButtonEvent
+            { down = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , button = BG.getField @"button" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"down" x0
+      )
+
+instance
+  (ty ~ BG.CBool)
+  => BG.HasField "down" (BG.Ptr SDL_PenButtonEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"down")
+
+instance HasCField.HasCField SDL_PenButtonEvent "down" where
+  type CFieldType SDL_PenButtonEvent "down" = BG.CBool
+
+  offset# = \_ -> \_ -> 37
+
+-- | the device type of the pen, if known (added in 3.4.18).
+--
+--     [C declaration]: @device_type@, defined at @SDL3\/SDL_events.h 904:23@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenDeviceType)
+  => BG.CompatHasField.HasField "device_type" SDL_PenButtonEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenButtonEvent
+            { device_type = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , button = BG.getField @"button" x0
+            , down = BG.getField @"down" x0
+            }
+      , BG.getField @"device_type" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenDeviceType)
+  => BG.HasField "device_type" (BG.Ptr SDL_PenButtonEvent) (BG.Ptr ty)
+  where
+  getField =
+    HasCField.fromPtr (BG.Proxy @"device_type")
+
+instance HasCField.HasCField SDL_PenButtonEvent "device_type" where
+  type
+    CFieldType SDL_PenButtonEvent "device_type" =
+      SDL3.Sys.Bindgen.Pen.SDL_PenDeviceType
+
+  offset# = \_ -> \_ -> 40
+
+-- | Pressure-sensitive pen pressure \/ angle event structure (event.paxis.*)
+--
+--     You might get some of these events even if the pen isn\'t touching the tablet.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @struct SDL_PenAxisEvent@, defined at @SDL3\/SDL_events.h 915:16@
+data SDL_PenAxisEvent = SDL_PenAxisEvent
+  { type' :: SDL_EventType
+  -- ^ SDL_EVENT_PEN_AXIS
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 917:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 918:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 919:12@
+  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
+  -- ^ The window with pen focus, if any
+  --
+  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 920:18@
+  , which :: SDL3.Sys.Bindgen.Pen.SDL_PenID
+  -- ^ The pen instance id
+  --
+  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 921:15@
+  , pen_state :: SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags
+  -- ^ Complete pen input state at time of event
+  --
+  --          [C declaration]: @pen_state@, defined at @SDL3\/SDL_events.h 922:23@
+  , x :: BG.CFloat
+  -- ^ X coordinate, relative to window
+  --
+  --          [C declaration]: @x@, defined at @SDL3\/SDL_events.h 923:11@
+  , y :: BG.CFloat
+  -- ^ Y coordinate, relative to window
+  --
+  --          [C declaration]: @y@, defined at @SDL3\/SDL_events.h 924:11@
+  , axis :: SDL3.Sys.Bindgen.Pen.SDL_PenAxis
+  -- ^ Axis that has changed
+  --
+  --          [C declaration]: @axis@, defined at @SDL3\/SDL_events.h 925:17@
+  , value :: BG.CFloat
+  -- ^ New value of axis
+  --
+  --          [C declaration]: @value@, defined at @SDL3\/SDL_events.h 926:11@
+  , device_type :: SDL3.Sys.Bindgen.Pen.SDL_PenDeviceType
+  -- ^ the device type of the pen, if known (added in 3.4.18).
+  --
+  --          [C declaration]: @device_type@, defined at @SDL3\/SDL_events.h 927:23@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_PenAxisEvent where
+  staticSizeOf = \_ -> (48 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_PenAxisEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_PenAxisEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"pen_state") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"x") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"y") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"axis") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"value") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"device_type") ptr0
+
+instance Marshal.WriteRaw SDL_PenAxisEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_PenAxisEvent
+            type'2
+            reserved3
+            timestamp4
+            windowID5
+            which6
+            pen_state7
+            x8
+            y9
+            axis10
+            value11
+            device_type12 ->
+              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+                >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID5
+                >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which6
+                >> HasCField.writeRaw (BG.Proxy @"pen_state") ptr0 pen_state7
+                >> HasCField.writeRaw (BG.Proxy @"x") ptr0 x8
+                >> HasCField.writeRaw (BG.Proxy @"y") ptr0 y9
+                >> HasCField.writeRaw (BG.Proxy @"axis") ptr0 axis10
+                >> HasCField.writeRaw (BG.Proxy @"value") ptr0 value11
+                >> HasCField.writeRaw (BG.Proxy @"device_type") ptr0 device_type12
+
+deriving via Marshal.EquivStorable SDL_PenAxisEvent instance BG.Storable SDL_PenAxisEvent
+
+deriving via Struct.IsStructViaReadRaw SDL_PenAxisEvent instance Struct.IsStruct SDL_PenAxisEvent
+
+-- | SDL_EVENT_PEN_AXIS
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 917:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_PenAxisEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenAxisEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , axis = BG.getField @"axis" x0
+            , value = BG.getField @"value" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_PenAxisEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_PenAxisEvent "type'" where
+  type
+    CFieldType SDL_PenAxisEvent "type'" =
+      SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 918:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_PenAxisEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenAxisEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , axis = BG.getField @"axis" x0
+            , value = BG.getField @"value" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_PenAxisEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_PenAxisEvent "reserved" where
+  type
+    CFieldType SDL_PenAxisEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 919:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_PenAxisEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenAxisEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , axis = BG.getField @"axis" x0
+            , value = BG.getField @"value" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_PenAxisEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_PenAxisEvent "timestamp" where
+  type
+    CFieldType SDL_PenAxisEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | The window with pen focus, if any
+--
+--     [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 920:18@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.CompatHasField.HasField "windowID" SDL_PenAxisEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenAxisEvent
+            { windowID = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , axis = BG.getField @"axis" x0
+            , value = BG.getField @"value" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"windowID" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.HasField "windowID" (BG.Ptr SDL_PenAxisEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"windowID")
+
+instance HasCField.HasCField SDL_PenAxisEvent "windowID" where
+  type
+    CFieldType SDL_PenAxisEvent "windowID" =
+      SDL3.Sys.Bindgen.Video.SDL_WindowID
+
+  offset# = \_ -> \_ -> 16
+
+-- | The pen instance id
+--
+--     [C declaration]: @which@, defined at @SDL3\/SDL_events.h 921:15@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenID)
+  => BG.CompatHasField.HasField "which" SDL_PenAxisEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenAxisEvent
+            { which = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , axis = BG.getField @"axis" x0
+            , value = BG.getField @"value" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"which" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenID)
+  => BG.HasField "which" (BG.Ptr SDL_PenAxisEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"which")
+
+instance HasCField.HasCField SDL_PenAxisEvent "which" where
+  type
+    CFieldType SDL_PenAxisEvent "which" =
+      SDL3.Sys.Bindgen.Pen.SDL_PenID
+
+  offset# = \_ -> \_ -> 20
+
+-- | Complete pen input state at time of event
+--
+--     [C declaration]: @pen_state@, defined at @SDL3\/SDL_events.h 922:23@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags)
+  => BG.CompatHasField.HasField "pen_state" SDL_PenAxisEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenAxisEvent
+            { pen_state = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , axis = BG.getField @"axis" x0
+            , value = BG.getField @"value" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"pen_state" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags)
+  => BG.HasField "pen_state" (BG.Ptr SDL_PenAxisEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"pen_state")
+
+instance HasCField.HasCField SDL_PenAxisEvent "pen_state" where
+  type
+    CFieldType SDL_PenAxisEvent "pen_state" =
+      SDL3.Sys.Bindgen.Pen.SDL_PenInputFlags
+
+  offset# = \_ -> \_ -> 24
+
+-- | X coordinate, relative to window
+--
+--     [C declaration]: @x@, defined at @SDL3\/SDL_events.h 923:11@
+instance
+  (ty ~ BG.CFloat)
+  => BG.CompatHasField.HasField "x" SDL_PenAxisEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenAxisEvent
+            { x = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , y = BG.getField @"y" x0
+            , axis = BG.getField @"axis" x0
+            , value = BG.getField @"value" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"x" x0
+      )
+
+instance
+  (ty ~ BG.CFloat)
+  => BG.HasField "x" (BG.Ptr SDL_PenAxisEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"x")
+
+instance HasCField.HasCField SDL_PenAxisEvent "x" where
+  type CFieldType SDL_PenAxisEvent "x" = BG.CFloat
+
+  offset# = \_ -> \_ -> 28
+
+-- | Y coordinate, relative to window
+--
+--     [C declaration]: @y@, defined at @SDL3\/SDL_events.h 924:11@
+instance
+  (ty ~ BG.CFloat)
+  => BG.CompatHasField.HasField "y" SDL_PenAxisEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenAxisEvent
+            { y = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , x = BG.getField @"x" x0
+            , axis = BG.getField @"axis" x0
+            , value = BG.getField @"value" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"y" x0
+      )
+
+instance
+  (ty ~ BG.CFloat)
+  => BG.HasField "y" (BG.Ptr SDL_PenAxisEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"y")
+
+instance HasCField.HasCField SDL_PenAxisEvent "y" where
+  type CFieldType SDL_PenAxisEvent "y" = BG.CFloat
+
+  offset# = \_ -> \_ -> 32
+
+-- | Axis that has changed
+--
+--     [C declaration]: @axis@, defined at @SDL3\/SDL_events.h 925:17@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenAxis)
+  => BG.CompatHasField.HasField "axis" SDL_PenAxisEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenAxisEvent
+            { axis = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , value = BG.getField @"value" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"axis" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenAxis)
+  => BG.HasField "axis" (BG.Ptr SDL_PenAxisEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"axis")
+
+instance HasCField.HasCField SDL_PenAxisEvent "axis" where
+  type
+    CFieldType SDL_PenAxisEvent "axis" =
+      SDL3.Sys.Bindgen.Pen.SDL_PenAxis
+
+  offset# = \_ -> \_ -> 36
+
+-- | New value of axis
+--
+--     [C declaration]: @value@, defined at @SDL3\/SDL_events.h 926:11@
+instance
+  (ty ~ BG.CFloat)
+  => BG.CompatHasField.HasField "value" SDL_PenAxisEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenAxisEvent
+            { value = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , axis = BG.getField @"axis" x0
+            , device_type = BG.getField @"device_type" x0
+            }
+      , BG.getField @"value" x0
+      )
+
+instance
+  (ty ~ BG.CFloat)
+  => BG.HasField "value" (BG.Ptr SDL_PenAxisEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"value")
+
+instance HasCField.HasCField SDL_PenAxisEvent "value" where
+  type CFieldType SDL_PenAxisEvent "value" = BG.CFloat
+
+  offset# = \_ -> \_ -> 40
+
+-- | the device type of the pen, if known (added in 3.4.18).
+--
+--     [C declaration]: @device_type@, defined at @SDL3\/SDL_events.h 927:23@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenDeviceType)
+  => BG.CompatHasField.HasField "device_type" SDL_PenAxisEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_PenAxisEvent
+            { device_type = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , which = BG.getField @"which" x0
+            , pen_state = BG.getField @"pen_state" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , axis = BG.getField @"axis" x0
+            , value = BG.getField @"value" x0
+            }
+      , BG.getField @"device_type" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Pen.SDL_PenDeviceType)
+  => BG.HasField "device_type" (BG.Ptr SDL_PenAxisEvent) (BG.Ptr ty)
+  where
+  getField =
+    HasCField.fromPtr (BG.Proxy @"device_type")
+
+instance HasCField.HasCField SDL_PenAxisEvent "device_type" where
+  type
+    CFieldType SDL_PenAxisEvent "device_type" =
+      SDL3.Sys.Bindgen.Pen.SDL_PenDeviceType
+
+  offset# = \_ -> \_ -> 44
+
+-- | An event used to drop text or request a file open by the system (event.drop.*)
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @struct SDL_DropEvent@, defined at @SDL3\/SDL_events.h 936:16@
+data SDL_DropEvent = SDL_DropEvent
+  { type' :: SDL_EventType
+  -- ^ SDL_EVENT_DROP_BEGIN or SDL_EVENT_DROP_FILE or SDL_EVENT_DROP_TEXT or SDL_EVENT_DROP_COMPLETE or SDL_EVENT_DROP_POSITION
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 938:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 939:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 940:12@
+  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
+  -- ^ The window that was dropped on, if any
+  --
+  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 941:18@
+  , x :: BG.CFloat
+  -- ^ X coordinate, relative to window (not on begin)
+  --
+  --          [C declaration]: @x@, defined at @SDL3\/SDL_events.h 942:11@
+  , y :: BG.CFloat
+  -- ^ Y coordinate, relative to window (not on begin)
+  --
+  --          [C declaration]: @y@, defined at @SDL3\/SDL_events.h 943:11@
+  , source :: PtrConst.PtrConst BG.CChar
+  -- ^ The source app that sent this drop event, or NULL if that isn\'t available
+  --
+  --          [C declaration]: @source@, defined at @SDL3\/SDL_events.h 944:17@
+  , data' :: PtrConst.PtrConst BG.CChar
+  -- ^ The text for SDL_EVENT_DROP_TEXT and the file name for SDL_EVENT_DROP_FILE, NULL for other events
+  --
+  --          [C declaration]: @data@, defined at @SDL3\/SDL_events.h 945:17@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_DropEvent where
+  staticSizeOf = \_ -> (48 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_DropEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_DropEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"x") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"y") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"source") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"data'") ptr0
+
+instance Marshal.WriteRaw SDL_DropEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_DropEvent type'2 reserved3 timestamp4 windowID5 x6 y7 source8 data'9 ->
+            HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+              >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+              >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+              >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID5
+              >> HasCField.writeRaw (BG.Proxy @"x") ptr0 x6
+              >> HasCField.writeRaw (BG.Proxy @"y") ptr0 y7
+              >> HasCField.writeRaw (BG.Proxy @"source") ptr0 source8
+              >> HasCField.writeRaw (BG.Proxy @"data'") ptr0 data'9
+
+deriving via Marshal.EquivStorable SDL_DropEvent instance BG.Storable SDL_DropEvent
+
+deriving via Struct.IsStructViaReadRaw SDL_DropEvent instance Struct.IsStruct SDL_DropEvent
+
+-- | SDL_EVENT_DROP_BEGIN or SDL_EVENT_DROP_FILE or SDL_EVENT_DROP_TEXT or SDL_EVENT_DROP_COMPLETE or SDL_EVENT_DROP_POSITION
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 938:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_DropEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_DropEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , source = BG.getField @"source" x0
+            , data' = BG.getField @"data'" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_DropEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_DropEvent "type'" where
+  type CFieldType SDL_DropEvent "type'" = SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 939:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_DropEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_DropEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , source = BG.getField @"source" x0
+            , data' = BG.getField @"data'" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_DropEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_DropEvent "reserved" where
+  type
+    CFieldType SDL_DropEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 940:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_DropEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_DropEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , windowID = BG.getField @"windowID" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , source = BG.getField @"source" x0
+            , data' = BG.getField @"data'" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_DropEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_DropEvent "timestamp" where
+  type
+    CFieldType SDL_DropEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | The window that was dropped on, if any
+--
+--     [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 941:18@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.CompatHasField.HasField "windowID" SDL_DropEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_DropEvent
+            { windowID = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , source = BG.getField @"source" x0
+            , data' = BG.getField @"data'" x0
+            }
+      , BG.getField @"windowID" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.HasField "windowID" (BG.Ptr SDL_DropEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"windowID")
+
+instance HasCField.HasCField SDL_DropEvent "windowID" where
+  type
+    CFieldType SDL_DropEvent "windowID" =
+      SDL3.Sys.Bindgen.Video.SDL_WindowID
+
+  offset# = \_ -> \_ -> 16
+
+-- | X coordinate, relative to window (not on begin)
+--
+--     [C declaration]: @x@, defined at @SDL3\/SDL_events.h 942:11@
+instance
+  (ty ~ BG.CFloat)
+  => BG.CompatHasField.HasField "x" SDL_DropEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_DropEvent
+            { x = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , y = BG.getField @"y" x0
+            , source = BG.getField @"source" x0
+            , data' = BG.getField @"data'" x0
+            }
+      , BG.getField @"x" x0
+      )
+
+instance
+  (ty ~ BG.CFloat)
+  => BG.HasField "x" (BG.Ptr SDL_DropEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"x")
+
+instance HasCField.HasCField SDL_DropEvent "x" where
+  type CFieldType SDL_DropEvent "x" = BG.CFloat
+
+  offset# = \_ -> \_ -> 20
+
+-- | Y coordinate, relative to window (not on begin)
+--
+--     [C declaration]: @y@, defined at @SDL3\/SDL_events.h 943:11@
+instance
+  (ty ~ BG.CFloat)
+  => BG.CompatHasField.HasField "y" SDL_DropEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_DropEvent
+            { y = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , x = BG.getField @"x" x0
+            , source = BG.getField @"source" x0
+            , data' = BG.getField @"data'" x0
+            }
+      , BG.getField @"y" x0
+      )
+
+instance
+  (ty ~ BG.CFloat)
+  => BG.HasField "y" (BG.Ptr SDL_DropEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"y")
+
+instance HasCField.HasCField SDL_DropEvent "y" where
+  type CFieldType SDL_DropEvent "y" = BG.CFloat
+
+  offset# = \_ -> \_ -> 24
+
+-- | The source app that sent this drop event, or NULL if that isn\'t available
+--
+--     [C declaration]: @source@, defined at @SDL3\/SDL_events.h 944:17@
+instance
+  (ty ~ PtrConst.PtrConst BG.CChar)
+  => BG.CompatHasField.HasField "source" SDL_DropEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_DropEvent
+            { source = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , data' = BG.getField @"data'" x0
+            }
+      , BG.getField @"source" x0
+      )
+
+instance
+  (ty ~ PtrConst.PtrConst BG.CChar)
+  => BG.HasField "source" (BG.Ptr SDL_DropEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"source")
+
+instance HasCField.HasCField SDL_DropEvent "source" where
+  type
+    CFieldType SDL_DropEvent "source" =
+      PtrConst.PtrConst BG.CChar
+
+  offset# = \_ -> \_ -> 32
+
+-- | The text for SDL_EVENT_DROP_TEXT and the file name for SDL_EVENT_DROP_FILE, NULL for other events
+--
+--     [C declaration]: @data@, defined at @SDL3\/SDL_events.h 945:17@
+instance
+  (ty ~ PtrConst.PtrConst BG.CChar)
+  => BG.CompatHasField.HasField "data'" SDL_DropEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_DropEvent
+            { data' = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , x = BG.getField @"x" x0
+            , y = BG.getField @"y" x0
+            , source = BG.getField @"source" x0
+            }
+      , BG.getField @"data'" x0
+      )
+
+instance
+  (ty ~ PtrConst.PtrConst BG.CChar)
+  => BG.HasField "data'" (BG.Ptr SDL_DropEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"data'")
+
+instance HasCField.HasCField SDL_DropEvent "data'" where
+  type
+    CFieldType SDL_DropEvent "data'" =
+      PtrConst.PtrConst BG.CChar
+
+  offset# = \_ -> \_ -> 40
+
+-- | An event triggered when the clipboard contents have changed (event.clipboard.*)
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @struct SDL_ClipboardEvent@, defined at @SDL3\/SDL_events.h 954:16@
+data SDL_ClipboardEvent = SDL_ClipboardEvent
+  { type' :: SDL_EventType
+  -- ^ SDL_EVENT_CLIPBOARD_UPDATE
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 956:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 957:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 958:12@
+  , owner :: BG.CBool
+  -- ^ are we owning the clipboard (internal update)
+  --
+  --          [C declaration]: @owner@, defined at @SDL3\/SDL_events.h 959:10@
+  , num_mime_types :: SDL3.Sys.Bindgen.Stdinc.Sint32
+  -- ^ number of mime types
+  --
+  --          [C declaration]: @num_mime_types@, defined at @SDL3\/SDL_events.h 960:12@
+  , mime_types :: BG.Ptr (PtrConst.PtrConst BG.CChar)
+  -- ^ current mime types
+  --
+  --          [C declaration]: @mime_types@, defined at @SDL3\/SDL_events.h 961:18@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_ClipboardEvent where
+  staticSizeOf = \_ -> (32 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_ClipboardEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_ClipboardEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"owner") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"num_mime_types") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"mime_types") ptr0
+
+instance Marshal.WriteRaw SDL_ClipboardEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_ClipboardEvent
+            type'2
+            reserved3
+            timestamp4
+            owner5
+            num_mime_types6
+            mime_types7 ->
+              HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+                >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+                >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+                >> HasCField.writeRaw (BG.Proxy @"owner") ptr0 owner5
+                >> HasCField.writeRaw (BG.Proxy @"num_mime_types") ptr0 num_mime_types6
+                >> HasCField.writeRaw (BG.Proxy @"mime_types") ptr0 mime_types7
+
+deriving via Marshal.EquivStorable SDL_ClipboardEvent instance BG.Storable SDL_ClipboardEvent
+
+deriving via
+  Struct.IsStructViaReadRaw SDL_ClipboardEvent
+  instance
+    Struct.IsStruct SDL_ClipboardEvent
+
+-- | SDL_EVENT_CLIPBOARD_UPDATE
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 956:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_ClipboardEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_ClipboardEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , owner = BG.getField @"owner" x0
+            , num_mime_types = BG.getField @"num_mime_types" x0
+            , mime_types = BG.getField @"mime_types" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_ClipboardEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_ClipboardEvent "type'" where
+  type
+    CFieldType SDL_ClipboardEvent "type'" =
+      SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 957:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_ClipboardEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_ClipboardEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , owner = BG.getField @"owner" x0
+            , num_mime_types = BG.getField @"num_mime_types" x0
+            , mime_types = BG.getField @"mime_types" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_ClipboardEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_ClipboardEvent "reserved" where
+  type
+    CFieldType SDL_ClipboardEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 958:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_ClipboardEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_ClipboardEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , owner = BG.getField @"owner" x0
+            , num_mime_types = BG.getField @"num_mime_types" x0
+            , mime_types = BG.getField @"mime_types" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_ClipboardEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_ClipboardEvent "timestamp" where
+  type
+    CFieldType SDL_ClipboardEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | are we owning the clipboard (internal update)
+--
+--     [C declaration]: @owner@, defined at @SDL3\/SDL_events.h 959:10@
+instance
+  (ty ~ BG.CBool)
+  => BG.CompatHasField.HasField "owner" SDL_ClipboardEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_ClipboardEvent
+            { owner = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , num_mime_types = BG.getField @"num_mime_types" x0
+            , mime_types = BG.getField @"mime_types" x0
+            }
+      , BG.getField @"owner" x0
+      )
+
+instance
+  (ty ~ BG.CBool)
+  => BG.HasField "owner" (BG.Ptr SDL_ClipboardEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"owner")
+
+instance HasCField.HasCField SDL_ClipboardEvent "owner" where
+  type CFieldType SDL_ClipboardEvent "owner" = BG.CBool
+
+  offset# = \_ -> \_ -> 16
+
+-- | number of mime types
+--
+--     [C declaration]: @num_mime_types@, defined at @SDL3\/SDL_events.h 960:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
+  => BG.CompatHasField.HasField "num_mime_types" SDL_ClipboardEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_ClipboardEvent
+            { num_mime_types = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , owner = BG.getField @"owner" x0
+            , mime_types = BG.getField @"mime_types" x0
+            }
+      , BG.getField @"num_mime_types" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
+  => BG.HasField "num_mime_types" (BG.Ptr SDL_ClipboardEvent) (BG.Ptr ty)
+  where
+  getField =
+    HasCField.fromPtr (BG.Proxy @"num_mime_types")
+
+instance HasCField.HasCField SDL_ClipboardEvent "num_mime_types" where
+  type
+    CFieldType SDL_ClipboardEvent "num_mime_types" =
+      SDL3.Sys.Bindgen.Stdinc.Sint32
+
+  offset# = \_ -> \_ -> 20
+
+-- | current mime types
+--
+--     [C declaration]: @mime_types@, defined at @SDL3\/SDL_events.h 961:18@
+instance
+  (ty ~ BG.Ptr (PtrConst.PtrConst BG.CChar))
+  => BG.CompatHasField.HasField "mime_types" SDL_ClipboardEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_ClipboardEvent
+            { mime_types = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , owner = BG.getField @"owner" x0
+            , num_mime_types = BG.getField @"num_mime_types" x0
+            }
+      , BG.getField @"mime_types" x0
+      )
+
+instance
+  (ty ~ BG.Ptr (PtrConst.PtrConst BG.CChar))
+  => BG.HasField "mime_types" (BG.Ptr SDL_ClipboardEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"mime_types")
+
+instance HasCField.HasCField SDL_ClipboardEvent "mime_types" where
+  type
+    CFieldType SDL_ClipboardEvent "mime_types" =
+      BG.Ptr (PtrConst.PtrConst BG.CChar)
+
+  offset# = \_ -> \_ -> 24
+
+-- | Sensor event structure (event.sensor.*)
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @struct SDL_SensorEvent@, defined at @SDL3\/SDL_events.h 969:16@
+data SDL_SensorEvent = SDL_SensorEvent
+  { type' :: SDL_EventType
+  -- ^ SDL_EVENT_SENSOR_UPDATE
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 971:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 972:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 973:12@
+  , which :: SDL3.Sys.Bindgen.Sensor.SDL_SensorID
+  -- ^ The instance ID of the sensor
+  --
+  --          [C declaration]: @which@, defined at @SDL3\/SDL_events.h 974:18@
+  , data' :: CA.ConstantArray 6 BG.CFloat
+  -- ^ Up to 6 values from the sensor - additional values can be queried using SDL_GetSensorData()
+  --
+  --          [C declaration]: @data@, defined at @SDL3\/SDL_events.h 975:11@
+  , sensor_timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ The timestamp of the sensor reading in nanoseconds, not necessarily synchronized with the system clock
+  --
+  --          [C declaration]: @sensor_timestamp@, defined at @SDL3\/SDL_events.h 976:12@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_SensorEvent where
+  staticSizeOf = \_ -> (56 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_SensorEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_SensorEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"which") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"data'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"sensor_timestamp") ptr0
+
+instance Marshal.WriteRaw SDL_SensorEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_SensorEvent type'2 reserved3 timestamp4 which5 data'6 sensor_timestamp7 ->
+            HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+              >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+              >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+              >> HasCField.writeRaw (BG.Proxy @"which") ptr0 which5
+              >> HasCField.writeRaw (BG.Proxy @"data'") ptr0 data'6
+              >> HasCField.writeRaw (BG.Proxy @"sensor_timestamp") ptr0 sensor_timestamp7
+
+deriving via Marshal.EquivStorable SDL_SensorEvent instance BG.Storable SDL_SensorEvent
+
+deriving via Struct.IsStructViaReadRaw SDL_SensorEvent instance Struct.IsStruct SDL_SensorEvent
+
+-- | SDL_EVENT_SENSOR_UPDATE
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 971:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_SensorEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_SensorEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , data' = BG.getField @"data'" x0
+            , sensor_timestamp = BG.getField @"sensor_timestamp" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_SensorEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_SensorEvent "type'" where
+  type
+    CFieldType SDL_SensorEvent "type'" =
+      SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 972:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_SensorEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_SensorEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , data' = BG.getField @"data'" x0
+            , sensor_timestamp = BG.getField @"sensor_timestamp" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_SensorEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_SensorEvent "reserved" where
+  type
+    CFieldType SDL_SensorEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 973:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_SensorEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_SensorEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , which = BG.getField @"which" x0
+            , data' = BG.getField @"data'" x0
+            , sensor_timestamp = BG.getField @"sensor_timestamp" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_SensorEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_SensorEvent "timestamp" where
+  type
+    CFieldType SDL_SensorEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | The instance ID of the sensor
+--
+--     [C declaration]: @which@, defined at @SDL3\/SDL_events.h 974:18@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Sensor.SDL_SensorID)
+  => BG.CompatHasField.HasField "which" SDL_SensorEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_SensorEvent
+            { which = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , data' = BG.getField @"data'" x0
+            , sensor_timestamp = BG.getField @"sensor_timestamp" x0
+            }
+      , BG.getField @"which" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Sensor.SDL_SensorID)
+  => BG.HasField "which" (BG.Ptr SDL_SensorEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"which")
+
+instance HasCField.HasCField SDL_SensorEvent "which" where
+  type
+    CFieldType SDL_SensorEvent "which" =
+      SDL3.Sys.Bindgen.Sensor.SDL_SensorID
+
+  offset# = \_ -> \_ -> 16
+
+-- | Up to 6 values from the sensor - additional values can be queried using SDL_GetSensorData()
+--
+--     [C declaration]: @data@, defined at @SDL3\/SDL_events.h 975:11@
+instance
+  (ty ~ CA.ConstantArray 6 BG.CFloat)
+  => BG.CompatHasField.HasField "data'" SDL_SensorEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_SensorEvent
+            { data' = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , sensor_timestamp = BG.getField @"sensor_timestamp" x0
+            }
+      , BG.getField @"data'" x0
+      )
+
+instance
+  (ty ~ CA.ConstantArray 6 BG.CFloat)
+  => BG.HasField "data'" (BG.Ptr SDL_SensorEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"data'")
+
+instance HasCField.HasCField SDL_SensorEvent "data'" where
+  type
+    CFieldType SDL_SensorEvent "data'" =
+      CA.ConstantArray 6 BG.CFloat
+
+  offset# = \_ -> \_ -> 20
+
+-- | The timestamp of the sensor reading in nanoseconds, not necessarily synchronized with the system clock
+--
+--     [C declaration]: @sensor_timestamp@, defined at @SDL3\/SDL_events.h 976:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "sensor_timestamp" SDL_SensorEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_SensorEvent
+            { sensor_timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , which = BG.getField @"which" x0
+            , data' = BG.getField @"data'" x0
+            }
+      , BG.getField @"sensor_timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "sensor_timestamp" (BG.Ptr SDL_SensorEvent) (BG.Ptr ty)
+  where
+  getField =
+    HasCField.fromPtr (BG.Proxy @"sensor_timestamp")
+
+instance HasCField.HasCField SDL_SensorEvent "sensor_timestamp" where
+  type
+    CFieldType SDL_SensorEvent "sensor_timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 48
+
+-- | The \"quit requested\" event
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @struct SDL_QuitEvent@, defined at @SDL3\/SDL_events.h 984:16@
+data SDL_QuitEvent = SDL_QuitEvent
+  { type' :: SDL_EventType
+  -- ^ SDL_EVENT_QUIT
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 986:19@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 987:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 988:12@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_QuitEvent where
+  staticSizeOf = \_ -> (16 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_QuitEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_QuitEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+
+instance Marshal.WriteRaw SDL_QuitEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_QuitEvent type'2 reserved3 timestamp4 ->
+            HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+              >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+              >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+
+deriving via Marshal.EquivStorable SDL_QuitEvent instance BG.Storable SDL_QuitEvent
+
+deriving via Struct.IsStructViaReadRaw SDL_QuitEvent instance Struct.IsStruct SDL_QuitEvent
+
+-- | SDL_EVENT_QUIT
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 986:19@
+instance
+  (ty ~ SDL_EventType)
+  => BG.CompatHasField.HasField "type'" SDL_QuitEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_QuitEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL_EventType)
+  => BG.HasField "type'" (BG.Ptr SDL_QuitEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_QuitEvent "type'" where
+  type CFieldType SDL_QuitEvent "type'" = SDL_EventType
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 987:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_QuitEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_QuitEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_QuitEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_QuitEvent "reserved" where
+  type
+    CFieldType SDL_QuitEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 988:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_QuitEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_QuitEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_QuitEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_QuitEvent "timestamp" where
+  type
+    CFieldType SDL_QuitEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | A user-defined event type (event.user.*)
+--
+--     This event is unique; it is never created by SDL, but only by the application. The event can be pushed onto the event queue using @SDL_PushEvent()@. The contents of the structure members are completely up to the programmer; the only requirement is that \'\'\'type\'\'\' is a value obtained from @SDL_RegisterEvents()@.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @struct SDL_UserEvent@, defined at @SDL3\/SDL_events.h 1002:16@
+data SDL_UserEvent = SDL_UserEvent
+  { type' :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ SDL_EVENT_USER through SDL_EVENT_LAST, Uint32 because these are not in the 'SDL_EventType' enumeration
+  --
+  --          [C declaration]: @type@, defined at @SDL3\/SDL_events.h 1004:12@
+  , reserved :: SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^ [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 1005:12@
+  , timestamp :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^ In nanoseconds, populated using SDL_GetTicksNS()
+  --
+  --          [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 1006:12@
+  , windowID :: SDL3.Sys.Bindgen.Video.SDL_WindowID
+  -- ^ The associated window if any
+  --
+  --          [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 1007:18@
+  , code :: SDL3.Sys.Bindgen.Stdinc.Sint32
+  -- ^ User defined event code
+  --
+  --          [C declaration]: @code@, defined at @SDL3\/SDL_events.h 1008:12@
+  , data1 :: BG.Ptr BG.Void
+  -- ^ User defined data pointer
+  --
+  --          [C declaration]: @data1@, defined at @SDL3\/SDL_events.h 1009:11@
+  , data2 :: BG.Ptr BG.Void
+  -- ^ User defined data pointer
+  --
+  --          [C declaration]: @data2@, defined at @SDL3\/SDL_events.h 1010:11@
+  }
+  deriving stock (BG.Generic, Eq, Show)
+
+instance Marshal.StaticSize SDL_UserEvent where
+  staticSizeOf = \_ -> (40 :: Int)
+
+  staticAlignment = \_ -> (8 :: Int)
+
+instance Marshal.ReadRaw SDL_UserEvent where
+  readRaw =
+    \ptr0 ->
+      pure SDL_UserEvent
+        <*> HasCField.readRaw (BG.Proxy @"type'") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"reserved") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"timestamp") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"windowID") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"code") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"data1") ptr0
+        <*> HasCField.readRaw (BG.Proxy @"data2") ptr0
+
+instance Marshal.WriteRaw SDL_UserEvent where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_UserEvent type'2 reserved3 timestamp4 windowID5 code6 data17 data28 ->
+            HasCField.writeRaw (BG.Proxy @"type'") ptr0 type'2
+              >> HasCField.writeRaw (BG.Proxy @"reserved") ptr0 reserved3
+              >> HasCField.writeRaw (BG.Proxy @"timestamp") ptr0 timestamp4
+              >> HasCField.writeRaw (BG.Proxy @"windowID") ptr0 windowID5
+              >> HasCField.writeRaw (BG.Proxy @"code") ptr0 code6
+              >> HasCField.writeRaw (BG.Proxy @"data1") ptr0 data17
+              >> HasCField.writeRaw (BG.Proxy @"data2") ptr0 data28
+
+deriving via Marshal.EquivStorable SDL_UserEvent instance BG.Storable SDL_UserEvent
+
+deriving via Struct.IsStructViaReadRaw SDL_UserEvent instance Struct.IsStruct SDL_UserEvent
+
+-- | SDL_EVENT_USER through SDL_EVENT_LAST, Uint32 because these are not in the 'SDL_EventType' enumeration
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 1004:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "type'" SDL_UserEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_UserEvent
+            { type' = y1
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , code = BG.getField @"code" x0
+            , data1 = BG.getField @"data1" x0
+            , data2 = BG.getField @"data2" x0
+            }
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "type'" (BG.Ptr SDL_UserEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_UserEvent "type'" where
+  type
+    CFieldType SDL_UserEvent "type'" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_events.h 1005:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "reserved" SDL_UserEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_UserEvent
+            { reserved = y1
+            , type' = BG.getField @"type'" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , code = BG.getField @"code" x0
+            , data1 = BG.getField @"data1" x0
+            , data2 = BG.getField @"data2" x0
+            }
+      , BG.getField @"reserved" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "reserved" (BG.Ptr SDL_UserEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"reserved")
+
+instance HasCField.HasCField SDL_UserEvent "reserved" where
+  type
+    CFieldType SDL_UserEvent "reserved" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 4
+
+-- | In nanoseconds, populated using SDL_GetTicksNS()
+--
+--     [C declaration]: @timestamp@, defined at @SDL3\/SDL_events.h 1006:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.CompatHasField.HasField "timestamp" SDL_UserEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_UserEvent
+            { timestamp = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , windowID = BG.getField @"windowID" x0
+            , code = BG.getField @"code" x0
+            , data1 = BG.getField @"data1" x0
+            , data2 = BG.getField @"data2" x0
+            }
+      , BG.getField @"timestamp" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
+  => BG.HasField "timestamp" (BG.Ptr SDL_UserEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"timestamp")
+
+instance HasCField.HasCField SDL_UserEvent "timestamp" where
+  type
+    CFieldType SDL_UserEvent "timestamp" =
+      SDL3.Sys.Bindgen.Stdinc.Uint64
+
+  offset# = \_ -> \_ -> 8
+
+-- | The associated window if any
+--
+--     [C declaration]: @windowID@, defined at @SDL3\/SDL_events.h 1007:18@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.CompatHasField.HasField "windowID" SDL_UserEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_UserEvent
+            { windowID = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , code = BG.getField @"code" x0
+            , data1 = BG.getField @"data1" x0
+            , data2 = BG.getField @"data2" x0
+            }
+      , BG.getField @"windowID" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Video.SDL_WindowID)
+  => BG.HasField "windowID" (BG.Ptr SDL_UserEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"windowID")
+
+instance HasCField.HasCField SDL_UserEvent "windowID" where
+  type
+    CFieldType SDL_UserEvent "windowID" =
+      SDL3.Sys.Bindgen.Video.SDL_WindowID
+
+  offset# = \_ -> \_ -> 16
+
+-- | User defined event code
+--
+--     [C declaration]: @code@, defined at @SDL3\/SDL_events.h 1008:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
+  => BG.CompatHasField.HasField "code" SDL_UserEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_UserEvent
+            { code = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , data1 = BG.getField @"data1" x0
+            , data2 = BG.getField @"data2" x0
+            }
+      , BG.getField @"code" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
+  => BG.HasField "code" (BG.Ptr SDL_UserEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"code")
+
+instance HasCField.HasCField SDL_UserEvent "code" where
+  type
+    CFieldType SDL_UserEvent "code" =
+      SDL3.Sys.Bindgen.Stdinc.Sint32
+
+  offset# = \_ -> \_ -> 20
+
+-- | User defined data pointer
+--
+--     [C declaration]: @data1@, defined at @SDL3\/SDL_events.h 1009:11@
+instance
+  (ty ~ BG.Ptr BG.Void)
+  => BG.CompatHasField.HasField "data1" SDL_UserEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_UserEvent
+            { data1 = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , code = BG.getField @"code" x0
+            , data2 = BG.getField @"data2" x0
+            }
+      , BG.getField @"data1" x0
+      )
+
+instance
+  (ty ~ BG.Ptr BG.Void)
+  => BG.HasField "data1" (BG.Ptr SDL_UserEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"data1")
+
+instance HasCField.HasCField SDL_UserEvent "data1" where
+  type
+    CFieldType SDL_UserEvent "data1" =
+      BG.Ptr BG.Void
+
+  offset# = \_ -> \_ -> 24
+
+-- | User defined data pointer
+--
+--     [C declaration]: @data2@, defined at @SDL3\/SDL_events.h 1010:11@
+instance
+  (ty ~ BG.Ptr BG.Void)
+  => BG.CompatHasField.HasField "data2" SDL_UserEvent ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_UserEvent
+            { data2 = y1
+            , type' = BG.getField @"type'" x0
+            , reserved = BG.getField @"reserved" x0
+            , timestamp = BG.getField @"timestamp" x0
+            , windowID = BG.getField @"windowID" x0
+            , code = BG.getField @"code" x0
+            , data1 = BG.getField @"data1" x0
+            }
+      , BG.getField @"data2" x0
+      )
+
+instance
+  (ty ~ BG.Ptr BG.Void)
+  => BG.HasField "data2" (BG.Ptr SDL_UserEvent) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"data2")
+
+instance HasCField.HasCField SDL_UserEvent "data2" where
+  type
+    CFieldType SDL_UserEvent "data2" =
+      BG.Ptr BG.Void
+
+  offset# = \_ -> \_ -> 32
+
+-- | The structure for all events in SDL.
+--
+--     The 'SDL_Event' structure is the core of all event handling in SDL. 'SDL_Event' is a union of all event structures used in SDL.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @union SDL_Event@, defined at @SDL3\/SDL_events.h 1022:15@
+newtype SDL_Event = SDL_Event
+  { unwrap :: BG.ByteArray
+  }
+  deriving stock (BG.Generic)
+
+deriving via BG.SizedByteArray 128 8 instance Marshal.StaticSize SDL_Event
+
+deriving via BG.SizedByteArray 128 8 instance Marshal.ReadRaw SDL_Event
+
+deriving via BG.SizedByteArray 128 8 instance Marshal.WriteRaw SDL_Event
+
+deriving via Marshal.EquivStorable SDL_Event instance BG.Storable SDL_Event
+
+deriving via BG.SizedByteArray 128 8 instance Union.IsUnion SDL_Event
+
+-- | Event type, shared with all events, Uint32 to cover user events which are not in the 'SDL_EventType' enumeration
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 1024:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "type'" SDL_Event ty
+  where
+  getField = BG.getUnionPayload
+
+-- | Event type, shared with all events, Uint32 to cover user events which are not in the 'SDL_EventType' enumeration
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_events.h 1024:12@
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.CompatHasField.HasField "type'" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"type'" x0
+      )
+
+instance
+  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
+  => BG.HasField "type'" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"type'")
+
+instance HasCField.HasCField SDL_Event "type'" where
+  type
+    CFieldType SDL_Event "type'" =
+      SDL3.Sys.Bindgen.Stdinc.Uint32
+
+  offset# = \_ -> \_ -> 0
+
+-- | Common event data
+--
+--     [C declaration]: @common@, defined at @SDL3\/SDL_events.h 1025:21@
+instance (ty ~ SDL_CommonEvent) => BG.HasField "common" SDL_Event ty where
+  getField = BG.getUnionPayload
+
+-- | Common event data
+--
+--     [C declaration]: @common@, defined at @SDL3\/SDL_events.h 1025:21@
+instance
+  (ty ~ SDL_CommonEvent)
+  => BG.CompatHasField.HasField "common" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"common" x0
+      )
+
+instance
+  (ty ~ SDL_CommonEvent)
+  => BG.HasField "common" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"common")
+
+instance HasCField.HasCField SDL_Event "common" where
+  type CFieldType SDL_Event "common" = SDL_CommonEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Display event data
+--
+--     [C declaration]: @display@, defined at @SDL3\/SDL_events.h 1026:22@
+instance (ty ~ SDL_DisplayEvent) => BG.HasField "display" SDL_Event ty where
+  getField = BG.getUnionPayload
+
+-- | Display event data
+--
+--     [C declaration]: @display@, defined at @SDL3\/SDL_events.h 1026:22@
+instance
+  (ty ~ SDL_DisplayEvent)
+  => BG.CompatHasField.HasField "display" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"display" x0
+      )
+
+instance
+  (ty ~ SDL_DisplayEvent)
+  => BG.HasField "display" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"display")
+
+instance HasCField.HasCField SDL_Event "display" where
+  type
+    CFieldType SDL_Event "display" =
+      SDL_DisplayEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Window event data
+--
+--     [C declaration]: @window@, defined at @SDL3\/SDL_events.h 1027:21@
+instance (ty ~ SDL_WindowEvent) => BG.HasField "window" SDL_Event ty where
+  getField = BG.getUnionPayload
+
+-- | Window event data
+--
+--     [C declaration]: @window@, defined at @SDL3\/SDL_events.h 1027:21@
+instance
+  (ty ~ SDL_WindowEvent)
+  => BG.CompatHasField.HasField "window" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"window" x0
+      )
+
+instance
+  (ty ~ SDL_WindowEvent)
+  => BG.HasField "window" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"window")
+
+instance HasCField.HasCField SDL_Event "window" where
+  type CFieldType SDL_Event "window" = SDL_WindowEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Keyboard device change event data
+--
+--     [C declaration]: @kdevice@, defined at @SDL3\/SDL_events.h 1028:29@
+instance
+  (ty ~ SDL_KeyboardDeviceEvent)
+  => BG.HasField "kdevice" SDL_Event ty
+  where
+  getField = BG.getUnionPayload
+
+-- | Keyboard device change event data
+--
+--     [C declaration]: @kdevice@, defined at @SDL3\/SDL_events.h 1028:29@
+instance
+  (ty ~ SDL_KeyboardDeviceEvent)
+  => BG.CompatHasField.HasField "kdevice" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"kdevice" x0
+      )
+
+instance
+  (ty ~ SDL_KeyboardDeviceEvent)
+  => BG.HasField "kdevice" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"kdevice")
+
+instance HasCField.HasCField SDL_Event "kdevice" where
+  type
+    CFieldType SDL_Event "kdevice" =
+      SDL_KeyboardDeviceEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Keyboard event data
+--
+--     [C declaration]: @key@, defined at @SDL3\/SDL_events.h 1029:23@
+instance (ty ~ SDL_KeyboardEvent) => BG.HasField "key" SDL_Event ty where
+  getField = BG.getUnionPayload
+
+-- | Keyboard event data
+--
+--     [C declaration]: @key@, defined at @SDL3\/SDL_events.h 1029:23@
+instance
+  (ty ~ SDL_KeyboardEvent)
+  => BG.CompatHasField.HasField "key" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"key" x0
+      )
+
+instance
+  (ty ~ SDL_KeyboardEvent)
+  => BG.HasField "key" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"key")
+
+instance HasCField.HasCField SDL_Event "key" where
+  type CFieldType SDL_Event "key" = SDL_KeyboardEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Text editing event data
+--
+--     [C declaration]: @edit@, defined at @SDL3\/SDL_events.h 1030:26@
+instance (ty ~ SDL_TextEditingEvent) => BG.HasField "edit" SDL_Event ty where
+  getField = BG.getUnionPayload
+
+-- | Text editing event data
+--
+--     [C declaration]: @edit@, defined at @SDL3\/SDL_events.h 1030:26@
+instance
+  (ty ~ SDL_TextEditingEvent)
+  => BG.CompatHasField.HasField "edit" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"edit" x0
+      )
+
+instance
+  (ty ~ SDL_TextEditingEvent)
+  => BG.HasField "edit" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"edit")
+
+instance HasCField.HasCField SDL_Event "edit" where
+  type
+    CFieldType SDL_Event "edit" =
+      SDL_TextEditingEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Text editing candidates event data
+--
+--     [C declaration]: @edit_candidates@, defined at @SDL3\/SDL_events.h 1031:36@
+instance
+  (ty ~ SDL_TextEditingCandidatesEvent)
+  => BG.HasField "edit_candidates" SDL_Event ty
+  where
+  getField = BG.getUnionPayload
+
+-- | Text editing candidates event data
+--
+--     [C declaration]: @edit_candidates@, defined at @SDL3\/SDL_events.h 1031:36@
+instance
+  (ty ~ SDL_TextEditingCandidatesEvent)
+  => BG.CompatHasField.HasField "edit_candidates" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"edit_candidates" x0
+      )
+
+instance
+  (ty ~ SDL_TextEditingCandidatesEvent)
+  => BG.HasField "edit_candidates" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField =
+    HasCField.fromPtr (BG.Proxy @"edit_candidates")
+
+instance HasCField.HasCField SDL_Event "edit_candidates" where
+  type
+    CFieldType SDL_Event "edit_candidates" =
+      SDL_TextEditingCandidatesEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Text input event data
+--
+--     [C declaration]: @text@, defined at @SDL3\/SDL_events.h 1032:24@
+instance (ty ~ SDL_TextInputEvent) => BG.HasField "text" SDL_Event ty where
+  getField = BG.getUnionPayload
+
+-- | Text input event data
+--
+--     [C declaration]: @text@, defined at @SDL3\/SDL_events.h 1032:24@
+instance
+  (ty ~ SDL_TextInputEvent)
+  => BG.CompatHasField.HasField "text" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"text" x0
+      )
+
+instance
+  (ty ~ SDL_TextInputEvent)
+  => BG.HasField "text" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"text")
+
+instance HasCField.HasCField SDL_Event "text" where
+  type CFieldType SDL_Event "text" = SDL_TextInputEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Mouse device change event data
+--
+--     [C declaration]: @mdevice@, defined at @SDL3\/SDL_events.h 1033:26@
+instance (ty ~ SDL_MouseDeviceEvent) => BG.HasField "mdevice" SDL_Event ty where
+  getField = BG.getUnionPayload
+
+-- | Mouse device change event data
+--
+--     [C declaration]: @mdevice@, defined at @SDL3\/SDL_events.h 1033:26@
+instance
+  (ty ~ SDL_MouseDeviceEvent)
+  => BG.CompatHasField.HasField "mdevice" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"mdevice" x0
+      )
+
+instance
+  (ty ~ SDL_MouseDeviceEvent)
+  => BG.HasField "mdevice" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"mdevice")
+
+instance HasCField.HasCField SDL_Event "mdevice" where
+  type
+    CFieldType SDL_Event "mdevice" =
+      SDL_MouseDeviceEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Mouse motion event data
+--
+--     [C declaration]: @motion@, defined at @SDL3\/SDL_events.h 1034:26@
+instance (ty ~ SDL_MouseMotionEvent) => BG.HasField "motion" SDL_Event ty where
+  getField = BG.getUnionPayload
+
+-- | Mouse motion event data
+--
+--     [C declaration]: @motion@, defined at @SDL3\/SDL_events.h 1034:26@
+instance
+  (ty ~ SDL_MouseMotionEvent)
+  => BG.CompatHasField.HasField "motion" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"motion" x0
+      )
+
+instance
+  (ty ~ SDL_MouseMotionEvent)
+  => BG.HasField "motion" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"motion")
+
+instance HasCField.HasCField SDL_Event "motion" where
+  type
+    CFieldType SDL_Event "motion" =
+      SDL_MouseMotionEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Mouse button event data
+--
+--     [C declaration]: @button@, defined at @SDL3\/SDL_events.h 1035:26@
+instance (ty ~ SDL_MouseButtonEvent) => BG.HasField "button" SDL_Event ty where
+  getField = BG.getUnionPayload
+
+-- | Mouse button event data
+--
+--     [C declaration]: @button@, defined at @SDL3\/SDL_events.h 1035:26@
+instance
+  (ty ~ SDL_MouseButtonEvent)
+  => BG.CompatHasField.HasField "button" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"button" x0
+      )
+
+instance
+  (ty ~ SDL_MouseButtonEvent)
+  => BG.HasField "button" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"button")
+
+instance HasCField.HasCField SDL_Event "button" where
+  type
+    CFieldType SDL_Event "button" =
+      SDL_MouseButtonEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Mouse wheel event data
+--
+--     [C declaration]: @wheel@, defined at @SDL3\/SDL_events.h 1036:25@
+instance (ty ~ SDL_MouseWheelEvent) => BG.HasField "wheel" SDL_Event ty where
+  getField = BG.getUnionPayload
+
+-- | Mouse wheel event data
+--
+--     [C declaration]: @wheel@, defined at @SDL3\/SDL_events.h 1036:25@
+instance
+  (ty ~ SDL_MouseWheelEvent)
+  => BG.CompatHasField.HasField "wheel" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"wheel" x0
+      )
+
+instance
+  (ty ~ SDL_MouseWheelEvent)
+  => BG.HasField "wheel" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"wheel")
+
+instance HasCField.HasCField SDL_Event "wheel" where
+  type
+    CFieldType SDL_Event "wheel" =
+      SDL_MouseWheelEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Joystick device change event data
+--
+--     [C declaration]: @jdevice@, defined at @SDL3\/SDL_events.h 1037:24@
+instance (ty ~ SDL_JoyDeviceEvent) => BG.HasField "jdevice" SDL_Event ty where
+  getField = BG.getUnionPayload
+
+-- | Joystick device change event data
+--
+--     [C declaration]: @jdevice@, defined at @SDL3\/SDL_events.h 1037:24@
+instance
+  (ty ~ SDL_JoyDeviceEvent)
+  => BG.CompatHasField.HasField "jdevice" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"jdevice" x0
+      )
+
+instance
+  (ty ~ SDL_JoyDeviceEvent)
+  => BG.HasField "jdevice" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"jdevice")
+
+instance HasCField.HasCField SDL_Event "jdevice" where
+  type
+    CFieldType SDL_Event "jdevice" =
+      SDL_JoyDeviceEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Joystick axis event data
+--
+--     [C declaration]: @jaxis@, defined at @SDL3\/SDL_events.h 1038:22@
+instance (ty ~ SDL_JoyAxisEvent) => BG.HasField "jaxis" SDL_Event ty where
+  getField = BG.getUnionPayload
+
+-- | Joystick axis event data
+--
+--     [C declaration]: @jaxis@, defined at @SDL3\/SDL_events.h 1038:22@
+instance
+  (ty ~ SDL_JoyAxisEvent)
+  => BG.CompatHasField.HasField "jaxis" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"jaxis" x0
+      )
+
+instance
+  (ty ~ SDL_JoyAxisEvent)
+  => BG.HasField "jaxis" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"jaxis")
+
+instance HasCField.HasCField SDL_Event "jaxis" where
+  type CFieldType SDL_Event "jaxis" = SDL_JoyAxisEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Joystick ball event data
+--
+--     [C declaration]: @jball@, defined at @SDL3\/SDL_events.h 1039:22@
+instance (ty ~ SDL_JoyBallEvent) => BG.HasField "jball" SDL_Event ty where
+  getField = BG.getUnionPayload
+
+-- | Joystick ball event data
+--
+--     [C declaration]: @jball@, defined at @SDL3\/SDL_events.h 1039:22@
+instance
+  (ty ~ SDL_JoyBallEvent)
+  => BG.CompatHasField.HasField "jball" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"jball" x0
+      )
+
+instance
+  (ty ~ SDL_JoyBallEvent)
+  => BG.HasField "jball" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"jball")
+
+instance HasCField.HasCField SDL_Event "jball" where
+  type CFieldType SDL_Event "jball" = SDL_JoyBallEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Joystick hat event data
+--
+--     [C declaration]: @jhat@, defined at @SDL3\/SDL_events.h 1040:21@
+instance (ty ~ SDL_JoyHatEvent) => BG.HasField "jhat" SDL_Event ty where
+  getField = BG.getUnionPayload
+
+-- | Joystick hat event data
+--
+--     [C declaration]: @jhat@, defined at @SDL3\/SDL_events.h 1040:21@
+instance
+  (ty ~ SDL_JoyHatEvent)
+  => BG.CompatHasField.HasField "jhat" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"jhat" x0
+      )
+
+instance
+  (ty ~ SDL_JoyHatEvent)
+  => BG.HasField "jhat" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"jhat")
+
+instance HasCField.HasCField SDL_Event "jhat" where
+  type CFieldType SDL_Event "jhat" = SDL_JoyHatEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Joystick button event data
+--
+--     [C declaration]: @jbutton@, defined at @SDL3\/SDL_events.h 1041:24@
+instance (ty ~ SDL_JoyButtonEvent) => BG.HasField "jbutton" SDL_Event ty where
+  getField = BG.getUnionPayload
+
+-- | Joystick button event data
+--
+--     [C declaration]: @jbutton@, defined at @SDL3\/SDL_events.h 1041:24@
+instance
+  (ty ~ SDL_JoyButtonEvent)
+  => BG.CompatHasField.HasField "jbutton" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"jbutton" x0
+      )
+
+instance
+  (ty ~ SDL_JoyButtonEvent)
+  => BG.HasField "jbutton" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"jbutton")
+
+instance HasCField.HasCField SDL_Event "jbutton" where
+  type
+    CFieldType SDL_Event "jbutton" =
+      SDL_JoyButtonEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Joystick battery event data
+--
+--     [C declaration]: @jbattery@, defined at @SDL3\/SDL_events.h 1042:25@
+instance (ty ~ SDL_JoyBatteryEvent) => BG.HasField "jbattery" SDL_Event ty where
+  getField = BG.getUnionPayload
+
+-- | Joystick battery event data
+--
+--     [C declaration]: @jbattery@, defined at @SDL3\/SDL_events.h 1042:25@
+instance
+  (ty ~ SDL_JoyBatteryEvent)
+  => BG.CompatHasField.HasField "jbattery" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"jbattery" x0
+      )
+
+instance
+  (ty ~ SDL_JoyBatteryEvent)
+  => BG.HasField "jbattery" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"jbattery")
+
+instance HasCField.HasCField SDL_Event "jbattery" where
+  type
+    CFieldType SDL_Event "jbattery" =
+      SDL_JoyBatteryEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Gamepad device event data
+--
+--     [C declaration]: @gdevice@, defined at @SDL3\/SDL_events.h 1043:28@
+instance
+  (ty ~ SDL_GamepadDeviceEvent)
+  => BG.HasField "gdevice" SDL_Event ty
+  where
+  getField = BG.getUnionPayload
+
+-- | Gamepad device event data
+--
+--     [C declaration]: @gdevice@, defined at @SDL3\/SDL_events.h 1043:28@
+instance
+  (ty ~ SDL_GamepadDeviceEvent)
+  => BG.CompatHasField.HasField "gdevice" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"gdevice" x0
+      )
+
+instance
+  (ty ~ SDL_GamepadDeviceEvent)
+  => BG.HasField "gdevice" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"gdevice")
+
+instance HasCField.HasCField SDL_Event "gdevice" where
+  type
+    CFieldType SDL_Event "gdevice" =
+      SDL_GamepadDeviceEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Gamepad axis event data
+--
+--     [C declaration]: @gaxis@, defined at @SDL3\/SDL_events.h 1044:26@
+instance (ty ~ SDL_GamepadAxisEvent) => BG.HasField "gaxis" SDL_Event ty where
+  getField = BG.getUnionPayload
+
+-- | Gamepad axis event data
+--
+--     [C declaration]: @gaxis@, defined at @SDL3\/SDL_events.h 1044:26@
+instance
+  (ty ~ SDL_GamepadAxisEvent)
+  => BG.CompatHasField.HasField "gaxis" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"gaxis" x0
+      )
+
+instance
+  (ty ~ SDL_GamepadAxisEvent)
+  => BG.HasField "gaxis" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"gaxis")
+
+instance HasCField.HasCField SDL_Event "gaxis" where
+  type
+    CFieldType SDL_Event "gaxis" =
+      SDL_GamepadAxisEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Gamepad button event data
+--
+--     [C declaration]: @gbutton@, defined at @SDL3\/SDL_events.h 1045:28@
+instance
+  (ty ~ SDL_GamepadButtonEvent)
+  => BG.HasField "gbutton" SDL_Event ty
+  where
+  getField = BG.getUnionPayload
+
+-- | Gamepad button event data
+--
+--     [C declaration]: @gbutton@, defined at @SDL3\/SDL_events.h 1045:28@
+instance
+  (ty ~ SDL_GamepadButtonEvent)
+  => BG.CompatHasField.HasField "gbutton" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"gbutton" x0
+      )
+
+instance
+  (ty ~ SDL_GamepadButtonEvent)
+  => BG.HasField "gbutton" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"gbutton")
+
+instance HasCField.HasCField SDL_Event "gbutton" where
+  type
+    CFieldType SDL_Event "gbutton" =
+      SDL_GamepadButtonEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Gamepad touchpad event data
+--
+--     [C declaration]: @gtouchpad@, defined at @SDL3\/SDL_events.h 1046:30@
+instance
+  (ty ~ SDL_GamepadTouchpadEvent)
+  => BG.HasField "gtouchpad" SDL_Event ty
+  where
+  getField = BG.getUnionPayload
+
+-- | Gamepad touchpad event data
+--
+--     [C declaration]: @gtouchpad@, defined at @SDL3\/SDL_events.h 1046:30@
+instance
+  (ty ~ SDL_GamepadTouchpadEvent)
+  => BG.CompatHasField.HasField "gtouchpad" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"gtouchpad" x0
+      )
+
+instance
+  (ty ~ SDL_GamepadTouchpadEvent)
+  => BG.HasField "gtouchpad" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"gtouchpad")
+
+instance HasCField.HasCField SDL_Event "gtouchpad" where
+  type
+    CFieldType SDL_Event "gtouchpad" =
+      SDL_GamepadTouchpadEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Gamepad sensor event data
+--
+--     [C declaration]: @gsensor@, defined at @SDL3\/SDL_events.h 1047:28@
+instance
+  (ty ~ SDL_GamepadSensorEvent)
+  => BG.HasField "gsensor" SDL_Event ty
+  where
+  getField = BG.getUnionPayload
+
+-- | Gamepad sensor event data
+--
+--     [C declaration]: @gsensor@, defined at @SDL3\/SDL_events.h 1047:28@
+instance
+  (ty ~ SDL_GamepadSensorEvent)
+  => BG.CompatHasField.HasField "gsensor" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"gsensor" x0
+      )
+
+instance
+  (ty ~ SDL_GamepadSensorEvent)
+  => BG.HasField "gsensor" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"gsensor")
+
+instance HasCField.HasCField SDL_Event "gsensor" where
+  type
+    CFieldType SDL_Event "gsensor" =
+      SDL_GamepadSensorEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Audio device event data
+--
+--     [C declaration]: @adevice@, defined at @SDL3\/SDL_events.h 1048:26@
+instance (ty ~ SDL_AudioDeviceEvent) => BG.HasField "adevice" SDL_Event ty where
+  getField = BG.getUnionPayload
+
+-- | Audio device event data
+--
+--     [C declaration]: @adevice@, defined at @SDL3\/SDL_events.h 1048:26@
+instance
+  (ty ~ SDL_AudioDeviceEvent)
+  => BG.CompatHasField.HasField "adevice" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"adevice" x0
+      )
+
+instance
+  (ty ~ SDL_AudioDeviceEvent)
+  => BG.HasField "adevice" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"adevice")
+
+instance HasCField.HasCField SDL_Event "adevice" where
+  type
+    CFieldType SDL_Event "adevice" =
+      SDL_AudioDeviceEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Camera device event data
+--
+--     [C declaration]: @cdevice@, defined at @SDL3\/SDL_events.h 1049:27@
+instance
+  (ty ~ SDL_CameraDeviceEvent)
+  => BG.HasField "cdevice" SDL_Event ty
+  where
+  getField = BG.getUnionPayload
+
+-- | Camera device event data
+--
+--     [C declaration]: @cdevice@, defined at @SDL3\/SDL_events.h 1049:27@
+instance
+  (ty ~ SDL_CameraDeviceEvent)
+  => BG.CompatHasField.HasField "cdevice" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"cdevice" x0
+      )
+
+instance
+  (ty ~ SDL_CameraDeviceEvent)
+  => BG.HasField "cdevice" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"cdevice")
+
+instance HasCField.HasCField SDL_Event "cdevice" where
+  type
+    CFieldType SDL_Event "cdevice" =
+      SDL_CameraDeviceEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Sensor event data
+--
+--     [C declaration]: @sensor@, defined at @SDL3\/SDL_events.h 1050:21@
+instance (ty ~ SDL_SensorEvent) => BG.HasField "sensor" SDL_Event ty where
+  getField = BG.getUnionPayload
+
+-- | Sensor event data
+--
+--     [C declaration]: @sensor@, defined at @SDL3\/SDL_events.h 1050:21@
+instance
+  (ty ~ SDL_SensorEvent)
+  => BG.CompatHasField.HasField "sensor" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"sensor" x0
+      )
+
+instance
+  (ty ~ SDL_SensorEvent)
+  => BG.HasField "sensor" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"sensor")
+
+instance HasCField.HasCField SDL_Event "sensor" where
+  type CFieldType SDL_Event "sensor" = SDL_SensorEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Quit request event data
+--
+--     [C declaration]: @quit@, defined at @SDL3\/SDL_events.h 1051:19@
+instance (ty ~ SDL_QuitEvent) => BG.HasField "quit" SDL_Event ty where
+  getField = BG.getUnionPayload
+
+-- | Quit request event data
+--
+--     [C declaration]: @quit@, defined at @SDL3\/SDL_events.h 1051:19@
+instance
+  (ty ~ SDL_QuitEvent)
+  => BG.CompatHasField.HasField "quit" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"quit" x0
+      )
+
+instance
+  (ty ~ SDL_QuitEvent)
+  => BG.HasField "quit" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"quit")
+
+instance HasCField.HasCField SDL_Event "quit" where
+  type CFieldType SDL_Event "quit" = SDL_QuitEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Custom event data
+--
+--     [C declaration]: @user@, defined at @SDL3\/SDL_events.h 1052:19@
+instance (ty ~ SDL_UserEvent) => BG.HasField "user" SDL_Event ty where
+  getField = BG.getUnionPayload
+
+-- | Custom event data
+--
+--     [C declaration]: @user@, defined at @SDL3\/SDL_events.h 1052:19@
+instance
+  (ty ~ SDL_UserEvent)
+  => BG.CompatHasField.HasField "user" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"user" x0
+      )
+
+instance
+  (ty ~ SDL_UserEvent)
+  => BG.HasField "user" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"user")
+
+instance HasCField.HasCField SDL_Event "user" where
+  type CFieldType SDL_Event "user" = SDL_UserEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Touch finger event data
+--
+--     [C declaration]: @tfinger@, defined at @SDL3\/SDL_events.h 1053:26@
+instance (ty ~ SDL_TouchFingerEvent) => BG.HasField "tfinger" SDL_Event ty where
+  getField = BG.getUnionPayload
+
+-- | Touch finger event data
+--
+--     [C declaration]: @tfinger@, defined at @SDL3\/SDL_events.h 1053:26@
+instance
+  (ty ~ SDL_TouchFingerEvent)
+  => BG.CompatHasField.HasField "tfinger" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"tfinger" x0
+      )
+
+instance
+  (ty ~ SDL_TouchFingerEvent)
+  => BG.HasField "tfinger" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"tfinger")
+
+instance HasCField.HasCField SDL_Event "tfinger" where
+  type
+    CFieldType SDL_Event "tfinger" =
+      SDL_TouchFingerEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Pinch event data
+--
+--     [C declaration]: @pinch@, defined at @SDL3\/SDL_events.h 1054:26@
+instance (ty ~ SDL_PinchFingerEvent) => BG.HasField "pinch" SDL_Event ty where
+  getField = BG.getUnionPayload
+
+-- | Pinch event data
+--
+--     [C declaration]: @pinch@, defined at @SDL3\/SDL_events.h 1054:26@
+instance
+  (ty ~ SDL_PinchFingerEvent)
+  => BG.CompatHasField.HasField "pinch" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"pinch" x0
+      )
+
+instance
+  (ty ~ SDL_PinchFingerEvent)
+  => BG.HasField "pinch" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"pinch")
+
+instance HasCField.HasCField SDL_Event "pinch" where
+  type
+    CFieldType SDL_Event "pinch" =
+      SDL_PinchFingerEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Pen proximity event data
+--
+--     [C declaration]: @pproximity@, defined at @SDL3\/SDL_events.h 1055:27@
+instance
+  (ty ~ SDL_PenProximityEvent)
+  => BG.HasField "pproximity" SDL_Event ty
+  where
+  getField = BG.getUnionPayload
+
+-- | Pen proximity event data
+--
+--     [C declaration]: @pproximity@, defined at @SDL3\/SDL_events.h 1055:27@
+instance
+  (ty ~ SDL_PenProximityEvent)
+  => BG.CompatHasField.HasField "pproximity" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"pproximity" x0
+      )
+
+instance
+  (ty ~ SDL_PenProximityEvent)
+  => BG.HasField "pproximity" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"pproximity")
+
+instance HasCField.HasCField SDL_Event "pproximity" where
+  type
+    CFieldType SDL_Event "pproximity" =
+      SDL_PenProximityEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Pen tip touching event data
+--
+--     [C declaration]: @ptouch@, defined at @SDL3\/SDL_events.h 1056:23@
+instance (ty ~ SDL_PenTouchEvent) => BG.HasField "ptouch" SDL_Event ty where
+  getField = BG.getUnionPayload
+
+-- | Pen tip touching event data
+--
+--     [C declaration]: @ptouch@, defined at @SDL3\/SDL_events.h 1056:23@
+instance
+  (ty ~ SDL_PenTouchEvent)
+  => BG.CompatHasField.HasField "ptouch" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"ptouch" x0
+      )
+
+instance
+  (ty ~ SDL_PenTouchEvent)
+  => BG.HasField "ptouch" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"ptouch")
+
+instance HasCField.HasCField SDL_Event "ptouch" where
+  type
+    CFieldType SDL_Event "ptouch" =
+      SDL_PenTouchEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Pen motion event data
+--
+--     [C declaration]: @pmotion@, defined at @SDL3\/SDL_events.h 1057:24@
+instance (ty ~ SDL_PenMotionEvent) => BG.HasField "pmotion" SDL_Event ty where
+  getField = BG.getUnionPayload
+
+-- | Pen motion event data
+--
+--     [C declaration]: @pmotion@, defined at @SDL3\/SDL_events.h 1057:24@
+instance
+  (ty ~ SDL_PenMotionEvent)
+  => BG.CompatHasField.HasField "pmotion" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"pmotion" x0
+      )
+
+instance
+  (ty ~ SDL_PenMotionEvent)
+  => BG.HasField "pmotion" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"pmotion")
+
+instance HasCField.HasCField SDL_Event "pmotion" where
+  type
+    CFieldType SDL_Event "pmotion" =
+      SDL_PenMotionEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Pen button event data
+--
+--     [C declaration]: @pbutton@, defined at @SDL3\/SDL_events.h 1058:24@
+instance (ty ~ SDL_PenButtonEvent) => BG.HasField "pbutton" SDL_Event ty where
+  getField = BG.getUnionPayload
+
+-- | Pen button event data
+--
+--     [C declaration]: @pbutton@, defined at @SDL3\/SDL_events.h 1058:24@
+instance
+  (ty ~ SDL_PenButtonEvent)
+  => BG.CompatHasField.HasField "pbutton" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"pbutton" x0
+      )
+
+instance
+  (ty ~ SDL_PenButtonEvent)
+  => BG.HasField "pbutton" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"pbutton")
+
+instance HasCField.HasCField SDL_Event "pbutton" where
+  type
+    CFieldType SDL_Event "pbutton" =
+      SDL_PenButtonEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Pen axis event data
+--
+--     [C declaration]: @paxis@, defined at @SDL3\/SDL_events.h 1059:22@
+instance (ty ~ SDL_PenAxisEvent) => BG.HasField "paxis" SDL_Event ty where
+  getField = BG.getUnionPayload
+
+-- | Pen axis event data
+--
+--     [C declaration]: @paxis@, defined at @SDL3\/SDL_events.h 1059:22@
+instance
+  (ty ~ SDL_PenAxisEvent)
+  => BG.CompatHasField.HasField "paxis" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"paxis" x0
+      )
+
+instance
+  (ty ~ SDL_PenAxisEvent)
+  => BG.HasField "paxis" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"paxis")
+
+instance HasCField.HasCField SDL_Event "paxis" where
+  type CFieldType SDL_Event "paxis" = SDL_PenAxisEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Render event data
+--
+--     [C declaration]: @render@, defined at @SDL3\/SDL_events.h 1060:21@
+instance (ty ~ SDL_RenderEvent) => BG.HasField "render" SDL_Event ty where
+  getField = BG.getUnionPayload
+
+-- | Render event data
+--
+--     [C declaration]: @render@, defined at @SDL3\/SDL_events.h 1060:21@
+instance
+  (ty ~ SDL_RenderEvent)
+  => BG.CompatHasField.HasField "render" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"render" x0
+      )
+
+instance
+  (ty ~ SDL_RenderEvent)
+  => BG.HasField "render" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"render")
+
+instance HasCField.HasCField SDL_Event "render" where
+  type CFieldType SDL_Event "render" = SDL_RenderEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Drag and drop event data
+--
+--     [C declaration]: @drop@, defined at @SDL3\/SDL_events.h 1061:19@
+instance (ty ~ SDL_DropEvent) => BG.HasField "drop" SDL_Event ty where
+  getField = BG.getUnionPayload
+
+-- | Drag and drop event data
+--
+--     [C declaration]: @drop@, defined at @SDL3\/SDL_events.h 1061:19@
+instance
+  (ty ~ SDL_DropEvent)
+  => BG.CompatHasField.HasField "drop" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"drop" x0
+      )
+
+instance
+  (ty ~ SDL_DropEvent)
+  => BG.HasField "drop" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"drop")
+
+instance HasCField.HasCField SDL_Event "drop" where
+  type CFieldType SDL_Event "drop" = SDL_DropEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | Clipboard event data
+--
+--     [C declaration]: @clipboard@, defined at @SDL3\/SDL_events.h 1062:24@
+instance (ty ~ SDL_ClipboardEvent) => BG.HasField "clipboard" SDL_Event ty where
+  getField = BG.getUnionPayload
+
+-- | Clipboard event data
+--
+--     [C declaration]: @clipboard@, defined at @SDL3\/SDL_events.h 1062:24@
+instance
+  (ty ~ SDL_ClipboardEvent)
+  => BG.CompatHasField.HasField "clipboard" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"clipboard" x0
+      )
+
+instance
+  (ty ~ SDL_ClipboardEvent)
+  => BG.HasField "clipboard" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"clipboard")
+
+instance HasCField.HasCField SDL_Event "clipboard" where
+  type
+    CFieldType SDL_Event "clipboard" =
+      SDL_ClipboardEvent
+
+  offset# = \_ -> \_ -> 0
+
+-- | [C declaration]: @padding@, defined at @SDL3\/SDL_events.h 1077:11@
+instance
+  (ty ~ CA.ConstantArray 128 SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.HasField "padding" SDL_Event ty
+  where
+  getField = BG.getUnionPayload
+
+-- | [C declaration]: @padding@, defined at @SDL3\/SDL_events.h 1077:11@
+instance
+  (ty ~ CA.ConstantArray 128 SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.CompatHasField.HasField "padding" SDL_Event ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"padding" x0
+      )
+
+instance
+  (ty ~ CA.ConstantArray 128 SDL3.Sys.Bindgen.Stdinc.Uint8)
+  => BG.HasField "padding" (BG.Ptr SDL_Event) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"padding")
+
+instance HasCField.HasCField SDL_Event "padding" where
+  type
+    CFieldType SDL_Event "padding" =
+      CA.ConstantArray 128 SDL3.Sys.Bindgen.Stdinc.Uint8
+
+  offset# = \_ -> \_ -> 0
+
+-- | The type of action to request from @SDL_PeepEvents()@.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @enum SDL_EventAction@, defined at @SDL3\/SDL_events.h 1115:14@
+newtype SDL_EventAction = SDL_EventAction
+  { unwrap :: BG.CUInt
+  }
+  deriving stock (BG.Generic, Eq, Ord)
+  deriving newtype (BG.HasFFIType)
+
+instance Marshal.StaticSize SDL_EventAction where
+  staticSizeOf = \_ -> (4 :: Int)
+
+  staticAlignment = \_ -> (4 :: Int)
+
+instance Marshal.ReadRaw SDL_EventAction where
+  readRaw =
+    \ptr0 ->
+      pure SDL_EventAction
+        <*> Marshal.readRawByteOff ptr0 (0 :: Int)
+
+instance Marshal.WriteRaw SDL_EventAction where
+  writeRaw =
+    \ptr0 ->
+      \s1 ->
+        case s1 of
+          SDL_EventAction unwrap2 ->
+            Marshal.writeRawByteOff ptr0 (0 :: Int) unwrap2
+
+deriving via Marshal.EquivStorable SDL_EventAction instance BG.Storable SDL_EventAction
+
+deriving via BG.CUInt instance BG.Prim SDL_EventAction
+
+instance CEnum.CEnum SDL_EventAction where
+  type CEnumZ SDL_EventAction = BG.CUInt
+
+  toCEnum = SDL_EventAction
+
+  fromCEnum = BG.getField @"unwrap"
+
+  declaredValues =
+    \_ ->
+      CEnum.declaredValuesFromList
+        [ (0, BG.singleton "SDL_ADDEVENT")
+        , (1, BG.singleton "SDL_PEEKEVENT")
+        , (2, BG.singleton "SDL_GETEVENT")
+        ]
+
+  showsUndeclared =
+    CEnum.showsWrappedUndeclared "SDL_EventAction"
+
+  readPrecUndeclared =
+    CEnum.readPrecWrappedUndeclared "SDL_EventAction"
+
+  isDeclared = CEnum.seqIsDeclared
+
+  mkDeclared = CEnum.seqMkDeclared
+
+instance CEnum.SequentialCEnum SDL_EventAction where
+  minDeclaredValue = SDL_ADDEVENT
+
+  maxDeclaredValue = SDL_GETEVENT
+
+instance Show SDL_EventAction where
+  showsPrec = CEnum.shows
+
+instance Read SDL_EventAction where
+  readPrec = CEnum.readPrec
+
+  readList = BG.readListDefault
+
+  readListPrec = BG.readListPrecDefault
+
+instance
+  (ty ~ BG.CUInt)
+  => BG.CompatHasField.HasField "unwrap" SDL_EventAction ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_EventAction{unwrap = y1}
+      , BG.getField @"unwrap" x0
+      )
+
+instance
+  (ty ~ BG.CUInt)
+  => BG.HasField "unwrap" (BG.Ptr SDL_EventAction) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"unwrap")
+
+instance HasCField.HasCField SDL_EventAction "unwrap" where
+  type CFieldType SDL_EventAction "unwrap" = BG.CUInt
+
+  offset# = \_ -> \_ -> 0
+
+-- | Add events to the back of the queue.
+--
+--     [C declaration]: @SDL_ADDEVENT@, defined at @SDL3\/SDL_events.h 1117:5@
+pattern SDL_ADDEVENT :: SDL_EventAction
+pattern SDL_ADDEVENT = SDL_EventAction 0
+
+-- | Check but don\'t remove events from the queue front.
+--
+--     [C declaration]: @SDL_PEEKEVENT@, defined at @SDL3\/SDL_events.h 1118:5@
+pattern SDL_PEEKEVENT :: SDL_EventAction
+pattern SDL_PEEKEVENT = SDL_EventAction 1
+
+-- | Retrieve\/remove events from the front of the queue.
+--
+--     [C declaration]: @SDL_GETEVENT@, defined at @SDL3\/SDL_events.h 1119:5@
+pattern SDL_GETEVENT :: SDL_EventAction
+pattern SDL_GETEVENT = SDL_EventAction 2
+
+-- | Auxiliary type used by 'SDL_EventFilter'
+--
+--     [C declaration]: @SDL_EventFilter@, defined at @SDL3\/SDL_events.h 1419:24@
+newtype SDL_EventFilter_Aux = SDL_EventFilter_Aux
+  { unwrap :: BG.Ptr BG.Void -> BG.Ptr SDL_Event -> IO BG.CBool
+  }
+  deriving stock (BG.Generic)
+
+-- __unique:__ @toSDL_EventFilter_Aux@
+foreign import ccall safe "wrapper"
+  hs_bindgen_eb1994b3ef52d185_base
+    :: (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.CBool)
+    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.CBool))
+
+-- __unique:__ @toSDL_EventFilter_Aux@
+hs_bindgen_eb1994b3ef52d185
+  :: SDL_EventFilter_Aux
+  -> IO (BG.FunPtr SDL_EventFilter_Aux)
+hs_bindgen_eb1994b3ef52d185 =
+  \fun0 ->
+    fmap
+      BG.castFunPtr
+      ( hs_bindgen_eb1994b3ef52d185_base
+          ( \x1 ->
+              \x2 ->
+                fmap BG.toFFIType (BG.getField @"unwrap" fun0 (BG.fromFFIType x1) (BG.fromFFIType x2))
+          )
+      )
+
+-- __unique:__ @fromSDL_EventFilter_Aux@
+foreign import ccall safe "dynamic"
+  hs_bindgen_fff801095df0ae67_base
+    :: BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.CBool)
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @fromSDL_EventFilter_Aux@
+hs_bindgen_fff801095df0ae67
+  :: BG.FunPtr SDL_EventFilter_Aux
+  -> SDL_EventFilter_Aux
+hs_bindgen_fff801095df0ae67 =
+  \funPtr0 ->
+    SDL_EventFilter_Aux
+      ( \x1 ->
+          \x2 ->
+            fmap
+              BG.fromFFIType
+              (hs_bindgen_fff801095df0ae67_base (BG.castFunPtr funPtr0) (BG.toFFIType x1) (BG.toFFIType x2))
+      )
+
+instance BG.ToFunPtr SDL_EventFilter_Aux where
+  toFunPtr = hs_bindgen_eb1994b3ef52d185
+
+instance BG.FromFunPtr SDL_EventFilter_Aux where
+  fromFunPtr = hs_bindgen_fff801095df0ae67
+
+instance
+  (ty ~ (BG.Ptr BG.Void -> BG.Ptr SDL_Event -> IO BG.CBool))
+  => BG.CompatHasField.HasField "unwrap" SDL_EventFilter_Aux ty
+  where
+  hasField =
+    \x0 ->
+      ( \y1 ->
+          SDL_EventFilter_Aux{unwrap = y1}
+      , BG.getField @"unwrap" x0
+      )
+
+instance
+  (ty ~ (BG.Ptr BG.Void -> BG.Ptr SDL_Event -> IO BG.CBool))
+  => BG.HasField "unwrap" (BG.Ptr SDL_EventFilter_Aux) (BG.Ptr ty)
+  where
+  getField = HasCField.fromPtr (BG.Proxy @"unwrap")
+
+instance HasCField.HasCField SDL_EventFilter_Aux "unwrap" where
+  type
+    CFieldType SDL_EventFilter_Aux "unwrap" =
+      BG.Ptr BG.Void -> BG.Ptr SDL_Event -> IO BG.CBool
+
+  offset# = \_ -> \_ -> 0
+
+-- | A function pointer used for callbacks that watch the event queue.
+--
+--     [@userdata@]: what was passed as @userdata@ to @SDL_SetEventFilter()@ or SDL_AddEventWatch, etc.
+--
+--     [@event@]: the event that triggered the callback.
+--
+--     [Returns]: true to permit event to be added to the queue, and false to disallow it. When used with SDL_AddEventWatch, the return value is ignored.
+--
+--     [Thread safety]: SDL may call this callback at any time from any thread; the application is responsible for locking resources the callback touches that need to be protected.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_SetEventFilter', 'sDL_AddEventWatch'
+--
+--     [C declaration]: @SDL_EventFilter@, defined at @SDL3\/SDL_events.h 1419:24@
 newtype SDL_EventFilter = SDL_EventFilter
   { unwrap :: BG.FunPtr SDL_EventFilter_Aux
   }
diff --git a/src/SDL3/Sys/Bindgen/Events/FunPtr.hs b/src/SDL3/Sys/Bindgen/Events/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Events/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Events/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Events.FunPtr (
@@ -26,6 +28,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -35,7 +39,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_events.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_events.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Events_get_SDL_PumpEvents */"
          , "__attribute__ ((const))"
          , "void (*hs_bindgen_9917baac4ce08ba8 (void)) (void)"
@@ -227,7 +235,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_get_SDL_PumpEvents@
 hs_bindgen_9917baac4ce08ba8 :: IO (BG.FunPtr (IO ()))
 hs_bindgen_9917baac4ce08ba8 =
-  BG.fromFFIType hs_bindgen_9917baac4ce08ba8_base
+  fmap BG.fromFFIType hs_bindgen_9917baac4ce08ba8_base
 
 {-# NOINLINE sDL_PumpEvents #-}
 
@@ -243,7 +251,7 @@
 --
 --     [See also]: 'sDL_PollEvent', 'sDL_WaitEvent'
 --
---     [C declaration]: @SDL_PumpEvents@, defined at @SDL3\/SDL_events.h 1101:34@
+--     [C declaration]: @SDL_PumpEvents@, defined at @SDL3\/SDL_events.h 1106:34@
 sDL_PumpEvents :: BG.FunPtr (IO ())
 sDL_PumpEvents =
   BG.unsafePerformIO hs_bindgen_9917baac4ce08ba8
@@ -266,7 +274,7 @@
            )
        )
 hs_bindgen_a86a903c6648c81b =
-  BG.fromFFIType hs_bindgen_a86a903c6648c81b_base
+  fmap BG.fromFFIType hs_bindgen_a86a903c6648c81b_base
 
 {-# NOINLINE sDL_PeepEvents #-}
 
@@ -300,7 +308,7 @@
 --
 --     [See also]: 'sDL_PollEvent', 'sDL_PumpEvents', 'sDL_PushEvent'
 --
---     [C declaration]: @SDL_PeepEvents@, defined at @SDL3\/SDL_events.h 1159:33@
+--     [C declaration]: @SDL_PeepEvents@, defined at @SDL3\/SDL_events.h 1164:33@
 sDL_PeepEvents
   :: BG.FunPtr
        ( BG.Ptr SDL_Event
@@ -321,7 +329,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_get_SDL_HasEvent@
 hs_bindgen_7e16852183b91d19 :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO BG.CBool))
 hs_bindgen_7e16852183b91d19 =
-  BG.fromFFIType hs_bindgen_7e16852183b91d19_base
+  fmap BG.fromFFIType hs_bindgen_7e16852183b91d19_base
 
 {-# NOINLINE sDL_HasEvent #-}
 
@@ -339,7 +347,7 @@
 --
 --     [See also]: 'sDL_HasEvents'
 --
---     [C declaration]: @SDL_HasEvent@, defined at @SDL3\/SDL_events.h 1178:34@
+--     [C declaration]: @SDL_HasEvent@, defined at @SDL3\/SDL_events.h 1183:34@
 sDL_HasEvent :: BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO BG.CBool)
 sDL_HasEvent =
   BG.unsafePerformIO hs_bindgen_7e16852183b91d19
@@ -353,7 +361,7 @@
 hs_bindgen_87deab19d987ab47
   :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint32 -> SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO BG.CBool))
 hs_bindgen_87deab19d987ab47 =
-  BG.fromFFIType hs_bindgen_87deab19d987ab47_base
+  fmap BG.fromFFIType hs_bindgen_87deab19d987ab47_base
 
 {-# NOINLINE sDL_HasEvents #-}
 
@@ -373,7 +381,7 @@
 --
 --     [See also]: 'sDL_HasEvents'
 --
---     [C declaration]: @SDL_HasEvents@, defined at @SDL3\/SDL_events.h 1199:34@
+--     [C declaration]: @SDL_HasEvents@, defined at @SDL3\/SDL_events.h 1204:34@
 sDL_HasEvents
   :: BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint32 -> SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO BG.CBool)
 sDL_HasEvents =
@@ -387,7 +395,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_get_SDL_FlushEvent@
 hs_bindgen_3d397e2de8f614cb :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO ()))
 hs_bindgen_3d397e2de8f614cb =
-  BG.fromFFIType hs_bindgen_3d397e2de8f614cb_base
+  fmap BG.fromFFIType hs_bindgen_3d397e2de8f614cb_base
 
 {-# NOINLINE sDL_FlushEvent #-}
 
@@ -409,7 +417,7 @@
 --
 --     [See also]: 'sDL_FlushEvents'
 --
---     [C declaration]: @SDL_FlushEvent@, defined at @SDL3\/SDL_events.h 1227:34@
+--     [C declaration]: @SDL_FlushEvent@, defined at @SDL3\/SDL_events.h 1232:34@
 sDL_FlushEvent :: BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO ())
 sDL_FlushEvent =
   BG.unsafePerformIO hs_bindgen_3d397e2de8f614cb
@@ -423,7 +431,7 @@
 hs_bindgen_7409f3af10ababea
   :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint32 -> SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO ()))
 hs_bindgen_7409f3af10ababea =
-  BG.fromFFIType hs_bindgen_7409f3af10ababea_base
+  fmap BG.fromFFIType hs_bindgen_7409f3af10ababea_base
 
 {-# NOINLINE sDL_FlushEvents #-}
 
@@ -445,7 +453,7 @@
 --
 --     [See also]: 'sDL_FlushEvent'
 --
---     [C declaration]: @SDL_FlushEvents@, defined at @SDL3\/SDL_events.h 1254:34@
+--     [C declaration]: @SDL_FlushEvents@, defined at @SDL3\/SDL_events.h 1259:34@
 sDL_FlushEvents
   :: BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint32 -> SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO ())
 sDL_FlushEvents =
@@ -459,7 +467,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_get_SDL_PollEvent@
 hs_bindgen_e695618acb9426fb :: IO (BG.FunPtr (BG.Ptr SDL_Event -> IO BG.CBool))
 hs_bindgen_e695618acb9426fb =
-  BG.fromFFIType hs_bindgen_e695618acb9426fb_base
+  fmap BG.fromFFIType hs_bindgen_e695618acb9426fb_base
 
 {-# NOINLINE sDL_PollEvent #-}
 
@@ -500,7 +508,7 @@
 --
 --     [See also]: 'sDL_PushEvent', 'sDL_WaitEvent', 'sDL_WaitEventTimeout'
 --
---     [C declaration]: @SDL_PollEvent@, defined at @SDL3\/SDL_events.h 1305:34@
+--     [C declaration]: @SDL_PollEvent@, defined at @SDL3\/SDL_events.h 1310:34@
 sDL_PollEvent :: BG.FunPtr (BG.Ptr SDL_Event -> IO BG.CBool)
 sDL_PollEvent =
   BG.unsafePerformIO hs_bindgen_e695618acb9426fb
@@ -513,7 +521,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_get_SDL_WaitEvent@
 hs_bindgen_94029194304d5c31 :: IO (BG.FunPtr (BG.Ptr SDL_Event -> IO BG.CBool))
 hs_bindgen_94029194304d5c31 =
-  BG.fromFFIType hs_bindgen_94029194304d5c31_base
+  fmap BG.fromFFIType hs_bindgen_94029194304d5c31_base
 
 {-# NOINLINE sDL_WaitEvent #-}
 
@@ -533,7 +541,7 @@
 --
 --     [See also]: 'sDL_PollEvent', 'sDL_PushEvent', 'sDL_WaitEventTimeout'
 --
---     [C declaration]: @SDL_WaitEvent@, defined at @SDL3\/SDL_events.h 1329:34@
+--     [C declaration]: @SDL_WaitEvent@, defined at @SDL3\/SDL_events.h 1334:34@
 sDL_WaitEvent :: BG.FunPtr (BG.Ptr SDL_Event -> IO BG.CBool)
 sDL_WaitEvent =
   BG.unsafePerformIO hs_bindgen_94029194304d5c31
@@ -547,7 +555,7 @@
 hs_bindgen_7e78b9d3527f4720
   :: IO (BG.FunPtr (BG.Ptr SDL_Event -> SDL3.Sys.Bindgen.Stdinc.Sint32 -> IO BG.CBool))
 hs_bindgen_7e78b9d3527f4720 =
-  BG.fromFFIType hs_bindgen_7e78b9d3527f4720_base
+  fmap BG.fromFFIType hs_bindgen_7e78b9d3527f4720_base
 
 {-# NOINLINE sDL_WaitEventTimeout #-}
 
@@ -571,7 +579,7 @@
 --
 --     [See also]: 'sDL_PollEvent', 'sDL_PushEvent', 'sDL_WaitEvent'
 --
---     [C declaration]: @SDL_WaitEventTimeout@, defined at @SDL3\/SDL_events.h 1359:34@
+--     [C declaration]: @SDL_WaitEventTimeout@, defined at @SDL3\/SDL_events.h 1364:34@
 sDL_WaitEventTimeout
   :: BG.FunPtr (BG.Ptr SDL_Event -> SDL3.Sys.Bindgen.Stdinc.Sint32 -> IO BG.CBool)
 sDL_WaitEventTimeout =
@@ -585,7 +593,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_get_SDL_PushEvent@
 hs_bindgen_949def362b6a6d49 :: IO (BG.FunPtr (BG.Ptr SDL_Event -> IO BG.CBool))
 hs_bindgen_949def362b6a6d49 =
-  BG.fromFFIType hs_bindgen_949def362b6a6d49_base
+  fmap BG.fromFFIType hs_bindgen_949def362b6a6d49_base
 
 {-# NOINLINE sDL_PushEvent #-}
 
@@ -609,7 +617,7 @@
 --
 --     [See also]: 'sDL_PeepEvents', 'sDL_PollEvent', 'sDL_RegisterEvents'
 --
---     [C declaration]: @SDL_PushEvent@, defined at @SDL3\/SDL_events.h 1393:34@
+--     [C declaration]: @SDL_PushEvent@, defined at @SDL3\/SDL_events.h 1398:34@
 sDL_PushEvent :: BG.FunPtr (BG.Ptr SDL_Event -> IO BG.CBool)
 sDL_PushEvent =
   BG.unsafePerformIO hs_bindgen_949def362b6a6d49
@@ -622,7 +630,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_get_SDL_SetEventFilter@
 hs_bindgen_b512227bb5014eea :: IO (BG.FunPtr (SDL_EventFilter -> BG.Ptr BG.Void -> IO ()))
 hs_bindgen_b512227bb5014eea =
-  BG.fromFFIType hs_bindgen_b512227bb5014eea_base
+  fmap BG.fromFFIType hs_bindgen_b512227bb5014eea_base
 
 {-# NOINLINE sDL_SetEventFilter #-}
 
@@ -650,7 +658,7 @@
 --
 --     [See also]: 'sDL_AddEventWatch', 'sDL_SetEventEnabled', 'sDL_GetEventFilter', 'sDL_PeepEvents', 'sDL_PushEvent'
 --
---     [C declaration]: @SDL_SetEventFilter@, defined at @SDL3\/SDL_events.h 1458:34@
+--     [C declaration]: @SDL_SetEventFilter@, defined at @SDL3\/SDL_events.h 1463:34@
 sDL_SetEventFilter :: BG.FunPtr (SDL_EventFilter -> BG.Ptr BG.Void -> IO ())
 sDL_SetEventFilter =
   BG.unsafePerformIO hs_bindgen_b512227bb5014eea
@@ -664,7 +672,7 @@
 hs_bindgen_55ed84f0612cc8ac
   :: IO (BG.FunPtr (BG.Ptr SDL_EventFilter -> BG.Ptr (BG.Ptr BG.Void) -> IO BG.CBool))
 hs_bindgen_55ed84f0612cc8ac =
-  BG.fromFFIType hs_bindgen_55ed84f0612cc8ac_base
+  fmap BG.fromFFIType hs_bindgen_55ed84f0612cc8ac_base
 
 {-# NOINLINE sDL_GetEventFilter #-}
 
@@ -684,7 +692,7 @@
 --
 --     [See also]: 'sDL_SetEventFilter'
 --
---     [C declaration]: @SDL_GetEventFilter@, defined at @SDL3\/SDL_events.h 1477:34@
+--     [C declaration]: @SDL_GetEventFilter@, defined at @SDL3\/SDL_events.h 1482:34@
 sDL_GetEventFilter :: BG.FunPtr (BG.Ptr SDL_EventFilter -> BG.Ptr (BG.Ptr BG.Void) -> IO BG.CBool)
 sDL_GetEventFilter =
   BG.unsafePerformIO hs_bindgen_55ed84f0612cc8ac
@@ -697,7 +705,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_get_SDL_AddEventWatch@
 hs_bindgen_a03e121760f6b6d3 :: IO (BG.FunPtr (SDL_EventFilter -> BG.Ptr BG.Void -> IO BG.CBool))
 hs_bindgen_a03e121760f6b6d3 =
-  BG.fromFFIType hs_bindgen_a03e121760f6b6d3_base
+  fmap BG.fromFFIType hs_bindgen_a03e121760f6b6d3_base
 
 {-# NOINLINE sDL_AddEventWatch #-}
 
@@ -723,7 +731,7 @@
 --
 --     [See also]: 'sDL_RemoveEventWatch', 'sDL_SetEventFilter'
 --
---     [C declaration]: @SDL_AddEventWatch@, defined at @SDL3\/SDL_events.h 1509:34@
+--     [C declaration]: @SDL_AddEventWatch@, defined at @SDL3\/SDL_events.h 1514:34@
 sDL_AddEventWatch :: BG.FunPtr (SDL_EventFilter -> BG.Ptr BG.Void -> IO BG.CBool)
 sDL_AddEventWatch =
   BG.unsafePerformIO hs_bindgen_a03e121760f6b6d3
@@ -736,7 +744,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_get_SDL_RemoveEventWatch@
 hs_bindgen_25dfb37d4e519ab9 :: IO (BG.FunPtr (SDL_EventFilter -> BG.Ptr BG.Void -> IO ()))
 hs_bindgen_25dfb37d4e519ab9 =
-  BG.fromFFIType hs_bindgen_25dfb37d4e519ab9_base
+  fmap BG.fromFFIType hs_bindgen_25dfb37d4e519ab9_base
 
 {-# NOINLINE sDL_RemoveEventWatch #-}
 
@@ -754,7 +762,7 @@
 --
 --     [See also]: 'sDL_AddEventWatch'
 --
---     [C declaration]: @SDL_RemoveEventWatch@, defined at @SDL3\/SDL_events.h 1526:34@
+--     [C declaration]: @SDL_RemoveEventWatch@, defined at @SDL3\/SDL_events.h 1531:34@
 sDL_RemoveEventWatch :: BG.FunPtr (SDL_EventFilter -> BG.Ptr BG.Void -> IO ())
 sDL_RemoveEventWatch =
   BG.unsafePerformIO hs_bindgen_25dfb37d4e519ab9
@@ -767,7 +775,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_get_SDL_FilterEvents@
 hs_bindgen_53f4b12fdab2103a :: IO (BG.FunPtr (SDL_EventFilter -> BG.Ptr BG.Void -> IO ()))
 hs_bindgen_53f4b12fdab2103a =
-  BG.fromFFIType hs_bindgen_53f4b12fdab2103a_base
+  fmap BG.fromFFIType hs_bindgen_53f4b12fdab2103a_base
 
 {-# NOINLINE sDL_FilterEvents #-}
 
@@ -785,7 +793,7 @@
 --
 --     [See also]: 'sDL_GetEventFilter', 'sDL_SetEventFilter'
 --
---     [C declaration]: @SDL_FilterEvents@, defined at @SDL3\/SDL_events.h 1546:34@
+--     [C declaration]: @SDL_FilterEvents@, defined at @SDL3\/SDL_events.h 1551:34@
 sDL_FilterEvents :: BG.FunPtr (SDL_EventFilter -> BG.Ptr BG.Void -> IO ())
 sDL_FilterEvents =
   BG.unsafePerformIO hs_bindgen_53f4b12fdab2103a
@@ -798,7 +806,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_get_SDL_SetEventEnabled@
 hs_bindgen_aa066d1126b2d52a :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint32 -> BG.CBool -> IO ()))
 hs_bindgen_aa066d1126b2d52a =
-  BG.fromFFIType hs_bindgen_aa066d1126b2d52a_base
+  fmap BG.fromFFIType hs_bindgen_aa066d1126b2d52a_base
 
 {-# NOINLINE sDL_SetEventEnabled #-}
 
@@ -814,7 +822,7 @@
 --
 --     [See also]: 'sDL_EventEnabled'
 --
---     [C declaration]: @SDL_SetEventEnabled@, defined at @SDL3\/SDL_events.h 1560:34@
+--     [C declaration]: @SDL_SetEventEnabled@, defined at @SDL3\/SDL_events.h 1565:34@
 sDL_SetEventEnabled :: BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint32 -> BG.CBool -> IO ())
 sDL_SetEventEnabled =
   BG.unsafePerformIO hs_bindgen_aa066d1126b2d52a
@@ -827,7 +835,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_get_SDL_EventEnabled@
 hs_bindgen_22ccd2bcfeb8819e :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO BG.CBool))
 hs_bindgen_22ccd2bcfeb8819e =
-  BG.fromFFIType hs_bindgen_22ccd2bcfeb8819e_base
+  fmap BG.fromFFIType hs_bindgen_22ccd2bcfeb8819e_base
 
 {-# NOINLINE sDL_EventEnabled #-}
 
@@ -843,7 +851,7 @@
 --
 --     [See also]: 'sDL_SetEventEnabled'
 --
---     [C declaration]: @SDL_EventEnabled@, defined at @SDL3\/SDL_events.h 1574:34@
+--     [C declaration]: @SDL_EventEnabled@, defined at @SDL3\/SDL_events.h 1579:34@
 sDL_EventEnabled :: BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO BG.CBool)
 sDL_EventEnabled =
   BG.unsafePerformIO hs_bindgen_22ccd2bcfeb8819e
@@ -856,7 +864,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_get_SDL_RegisterEvents@
 hs_bindgen_1bc1c2cf7c7f16d2 :: IO (BG.FunPtr (BG.CInt -> IO SDL3.Sys.Bindgen.Stdinc.Uint32))
 hs_bindgen_1bc1c2cf7c7f16d2 =
-  BG.fromFFIType hs_bindgen_1bc1c2cf7c7f16d2_base
+  fmap BG.fromFFIType hs_bindgen_1bc1c2cf7c7f16d2_base
 
 {-# NOINLINE sDL_RegisterEvents #-}
 
@@ -872,7 +880,7 @@
 --
 --     [See also]: 'sDL_PushEvent'
 --
---     [C declaration]: @SDL_RegisterEvents@, defined at @SDL3\/SDL_events.h 1590:36@
+--     [C declaration]: @SDL_RegisterEvents@, defined at @SDL3\/SDL_events.h 1595:36@
 sDL_RegisterEvents :: BG.FunPtr (BG.CInt -> IO SDL3.Sys.Bindgen.Stdinc.Uint32)
 sDL_RegisterEvents =
   BG.unsafePerformIO hs_bindgen_1bc1c2cf7c7f16d2
@@ -886,7 +894,7 @@
 hs_bindgen_9835b9a553ca5082
   :: IO (BG.FunPtr (PtrConst.PtrConst SDL_Event -> IO (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window)))
 hs_bindgen_9835b9a553ca5082 =
-  BG.fromFFIType hs_bindgen_9835b9a553ca5082_base
+  fmap BG.fromFFIType hs_bindgen_9835b9a553ca5082_base
 
 {-# NOINLINE sDL_GetWindowFromEvent #-}
 
@@ -902,7 +910,7 @@
 --
 --     [See also]: 'sDL_PollEvent', 'sDL_WaitEvent', 'sDL_WaitEventTimeout'
 --
---     [C declaration]: @SDL_GetWindowFromEvent@, defined at @SDL3\/SDL_events.h 1606:42@
+--     [C declaration]: @SDL_GetWindowFromEvent@, defined at @SDL3\/SDL_events.h 1611:42@
 sDL_GetWindowFromEvent
   :: BG.FunPtr (PtrConst.PtrConst SDL_Event -> IO (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window))
 sDL_GetWindowFromEvent =
@@ -917,7 +925,7 @@
 hs_bindgen_1326a7cde53572c5
   :: IO (BG.FunPtr (PtrConst.PtrConst SDL_Event -> BG.Ptr BG.CChar -> BG.CInt -> IO BG.CInt))
 hs_bindgen_1326a7cde53572c5 =
-  BG.fromFFIType hs_bindgen_1326a7cde53572c5_base
+  fmap BG.fromFFIType hs_bindgen_1326a7cde53572c5_base
 
 {-# NOINLINE sDL_GetEventDescription #-}
 
@@ -945,7 +953,7 @@
 --
 --     @since 3.4.0
 --
---     [C declaration]: @SDL_GetEventDescription@, defined at @SDL3\/SDL_events.h 1638:33@
+--     [C declaration]: @SDL_GetEventDescription@, defined at @SDL3\/SDL_events.h 1643:33@
 sDL_GetEventDescription
   :: BG.FunPtr (PtrConst.PtrConst SDL_Event -> BG.Ptr BG.CChar -> BG.CInt -> IO BG.CInt)
 sDL_GetEventDescription =
diff --git a/src/SDL3/Sys/Bindgen/Events/Safe.hs b/src/SDL3/Sys/Bindgen/Events/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Events/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Events/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Events.Safe (
@@ -26,6 +28,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -35,7 +40,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_events.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_events.h>"
          , "void hs_bindgen_1f67d12e30b7c737 (void)"
          , "{"
          , "  (SDL_PumpEvents)();"
@@ -187,7 +196,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Safe_SDL_PumpEvents@
 hs_bindgen_1f67d12e30b7c737 :: IO ()
 hs_bindgen_1f67d12e30b7c737 =
-  BG.fromFFIType hs_bindgen_1f67d12e30b7c737_base
+  hs_bindgen_1f67d12e30b7c737_base
 
 -- | Pump the event loop, gathering events from the input devices.
 --
@@ -201,7 +210,7 @@
 --
 --     [See also]: 'sDL_PollEvent', 'sDL_WaitEvent'
 --
---     [C declaration]: @SDL_PumpEvents@, defined at @SDL3\/SDL_events.h 1101:34@
+--     [C declaration]: @SDL_PumpEvents@, defined at @SDL3\/SDL_events.h 1106:34@
 sDL_PumpEvents :: IO ()
 sDL_PumpEvents = hs_bindgen_1f67d12e30b7c737
 
@@ -209,11 +218,11 @@
 foreign import ccall safe "hs_bindgen_955ad135478289d8"
   hs_bindgen_955ad135478289d8_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Word32
-    -> IO BG.Int32
+    -> BG.CInt
+    -> BG.CUInt
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Safe_SDL_PeepEvents@
 hs_bindgen_955ad135478289d8
@@ -224,7 +233,20 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CInt
 hs_bindgen_955ad135478289d8 =
-  BG.fromFFIType hs_bindgen_955ad135478289d8_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_955ad135478289d8_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Check the event queue for messages and optionally return them.
 --
@@ -246,7 +268,7 @@
 --
 --     [See also]: 'sDL_PollEvent', 'sDL_PumpEvents', 'sDL_PushEvent'
 --
---     [C declaration]: @SDL_PeepEvents@, defined at @SDL3\/SDL_events.h 1159:33@
+--     [C declaration]: @SDL_PeepEvents@, defined at @SDL3\/SDL_events.h 1164:33@
 sDL_PeepEvents
   :: BG.Ptr SDL_Event
   -- ^
@@ -274,15 +296,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Safe_SDL_HasEvent@
 foreign import ccall safe "hs_bindgen_97c2d6376377c17b"
   hs_bindgen_97c2d6376377c17b_base
-    :: BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Safe_SDL_HasEvent@
 hs_bindgen_97c2d6376377c17b
   :: SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_97c2d6376377c17b =
-  BG.fromFFIType hs_bindgen_97c2d6376377c17b_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_97c2d6376377c17b_base (BG.toFFIType x0))
 
 -- | Check for the existence of a certain event type in the event queue.
 --
@@ -296,7 +319,7 @@
 --
 --     [See also]: 'sDL_HasEvents'
 --
---     [C declaration]: @SDL_HasEvent@, defined at @SDL3\/SDL_events.h 1178:34@
+--     [C declaration]: @SDL_HasEvent@, defined at @SDL3\/SDL_events.h 1183:34@
 sDL_HasEvent
   :: SDL3.Sys.Bindgen.Stdinc.Uint32
   -- ^
@@ -308,9 +331,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Safe_SDL_HasEvents@
 foreign import ccall safe "hs_bindgen_313622652a8473b1"
   hs_bindgen_313622652a8473b1_base
-    :: BG.Word32
-    -> BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Safe_SDL_HasEvents@
 hs_bindgen_313622652a8473b1
@@ -318,7 +341,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_313622652a8473b1 =
-  BG.fromFFIType hs_bindgen_313622652a8473b1_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_313622652a8473b1_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Check for the existence of certain event types in the event queue.
 --
@@ -332,7 +357,7 @@
 --
 --     [See also]: 'sDL_HasEvents'
 --
---     [C declaration]: @SDL_HasEvents@, defined at @SDL3\/SDL_events.h 1199:34@
+--     [C declaration]: @SDL_HasEvents@, defined at @SDL3\/SDL_events.h 1204:34@
 sDL_HasEvents
   :: SDL3.Sys.Bindgen.Stdinc.Uint32
   -- ^
@@ -348,7 +373,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Safe_SDL_FlushEvent@
 foreign import ccall safe "hs_bindgen_2d03a2b249bf7669"
   hs_bindgen_2d03a2b249bf7669_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Safe_SDL_FlushEvent@
@@ -356,7 +381,8 @@
   :: SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_2d03a2b249bf7669 =
-  BG.fromFFIType hs_bindgen_2d03a2b249bf7669_base
+  \x0 ->
+    hs_bindgen_2d03a2b249bf7669_base (BG.toFFIType x0)
 
 -- | Clear events of a specific type from the event queue.
 --
@@ -374,7 +400,7 @@
 --
 --     [See also]: 'sDL_FlushEvents'
 --
---     [C declaration]: @SDL_FlushEvent@, defined at @SDL3\/SDL_events.h 1227:34@
+--     [C declaration]: @SDL_FlushEvent@, defined at @SDL3\/SDL_events.h 1232:34@
 sDL_FlushEvent
   :: SDL3.Sys.Bindgen.Stdinc.Uint32
   -- ^
@@ -386,8 +412,8 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Safe_SDL_FlushEvents@
 foreign import ccall safe "hs_bindgen_445ea0272a2d7d08"
   hs_bindgen_445ea0272a2d7d08_base
-    :: BG.Word32
-    -> BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Safe_SDL_FlushEvents@
@@ -396,7 +422,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_445ea0272a2d7d08 =
-  BG.fromFFIType hs_bindgen_445ea0272a2d7d08_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_445ea0272a2d7d08_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Clear events of a range of types from the event queue.
 --
@@ -412,7 +440,7 @@
 --
 --     [See also]: 'sDL_FlushEvent'
 --
---     [C declaration]: @SDL_FlushEvents@, defined at @SDL3\/SDL_events.h 1254:34@
+--     [C declaration]: @SDL_FlushEvents@, defined at @SDL3\/SDL_events.h 1259:34@
 sDL_FlushEvents
   :: SDL3.Sys.Bindgen.Stdinc.Uint32
   -- ^
@@ -429,14 +457,15 @@
 foreign import ccall safe "hs_bindgen_ceef91a4b9f5e02b"
   hs_bindgen_ceef91a4b9f5e02b_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Safe_SDL_PollEvent@
 hs_bindgen_ceef91a4b9f5e02b
   :: BG.Ptr SDL_Event
   -> IO BG.CBool
 hs_bindgen_ceef91a4b9f5e02b =
-  BG.fromFFIType hs_bindgen_ceef91a4b9f5e02b_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_ceef91a4b9f5e02b_base (BG.toFFIType x0))
 
 -- | Poll for currently pending events.
 --
@@ -473,7 +502,7 @@
 --
 --     [See also]: 'sDL_PushEvent', 'sDL_WaitEvent', 'sDL_WaitEventTimeout'
 --
---     [C declaration]: @SDL_PollEvent@, defined at @SDL3\/SDL_events.h 1305:34@
+--     [C declaration]: @SDL_PollEvent@, defined at @SDL3\/SDL_events.h 1310:34@
 sDL_PollEvent
   :: BG.Ptr SDL_Event
   -- ^
@@ -486,14 +515,15 @@
 foreign import ccall safe "hs_bindgen_23e78ed0fb51a6da"
   hs_bindgen_23e78ed0fb51a6da_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Safe_SDL_WaitEvent@
 hs_bindgen_23e78ed0fb51a6da
   :: BG.Ptr SDL_Event
   -> IO BG.CBool
 hs_bindgen_23e78ed0fb51a6da =
-  BG.fromFFIType hs_bindgen_23e78ed0fb51a6da_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_23e78ed0fb51a6da_base (BG.toFFIType x0))
 
 -- | Wait indefinitely for the next available event.
 --
@@ -509,7 +539,7 @@
 --
 --     [See also]: 'sDL_PollEvent', 'sDL_PushEvent', 'sDL_WaitEventTimeout'
 --
---     [C declaration]: @SDL_WaitEvent@, defined at @SDL3\/SDL_events.h 1329:34@
+--     [C declaration]: @SDL_WaitEvent@, defined at @SDL3\/SDL_events.h 1334:34@
 sDL_WaitEvent
   :: BG.Ptr SDL_Event
   -- ^
@@ -522,8 +552,8 @@
 foreign import ccall safe "hs_bindgen_556eff19f5f71f6a"
   hs_bindgen_556eff19f5f71f6a_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Int32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Safe_SDL_WaitEventTimeout@
 hs_bindgen_556eff19f5f71f6a
@@ -531,7 +561,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Sint32
   -> IO BG.CBool
 hs_bindgen_556eff19f5f71f6a =
-  BG.fromFFIType hs_bindgen_556eff19f5f71f6a_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_556eff19f5f71f6a_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Wait until the specified timeout (in milliseconds) for the next available event.
 --
@@ -549,7 +581,7 @@
 --
 --     [See also]: 'sDL_PollEvent', 'sDL_PushEvent', 'sDL_WaitEvent'
 --
---     [C declaration]: @SDL_WaitEventTimeout@, defined at @SDL3\/SDL_events.h 1359:34@
+--     [C declaration]: @SDL_WaitEventTimeout@, defined at @SDL3\/SDL_events.h 1364:34@
 sDL_WaitEventTimeout
   :: BG.Ptr SDL_Event
   -- ^
@@ -566,14 +598,15 @@
 foreign import ccall safe "hs_bindgen_b43b72b75f8fc0a4"
   hs_bindgen_b43b72b75f8fc0a4_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Safe_SDL_PushEvent@
 hs_bindgen_b43b72b75f8fc0a4
   :: BG.Ptr SDL_Event
   -> IO BG.CBool
 hs_bindgen_b43b72b75f8fc0a4 =
-  BG.fromFFIType hs_bindgen_b43b72b75f8fc0a4_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_b43b72b75f8fc0a4_base (BG.toFFIType x0))
 
 -- | Add an event to the event queue.
 --
@@ -593,7 +626,7 @@
 --
 --     [See also]: 'sDL_PeepEvents', 'sDL_PollEvent', 'sDL_RegisterEvents'
 --
---     [C declaration]: @SDL_PushEvent@, defined at @SDL3\/SDL_events.h 1393:34@
+--     [C declaration]: @SDL_PushEvent@, defined at @SDL3\/SDL_events.h 1398:34@
 sDL_PushEvent
   :: BG.Ptr SDL_Event
   -- ^
@@ -615,7 +648,9 @@
   -> BG.Ptr BG.Void
   -> IO ()
 hs_bindgen_2af28699d7398805 =
-  BG.fromFFIType hs_bindgen_2af28699d7398805_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_2af28699d7398805_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Set up a filter to process all events before they are added to the internal event queue.
 --
@@ -637,7 +672,7 @@
 --
 --     [See also]: 'sDL_AddEventWatch', 'sDL_SetEventEnabled', 'sDL_GetEventFilter', 'sDL_PeepEvents', 'sDL_PushEvent'
 --
---     [C declaration]: @SDL_SetEventFilter@, defined at @SDL3\/SDL_events.h 1458:34@
+--     [C declaration]: @SDL_SetEventFilter@, defined at @SDL3\/SDL_events.h 1463:34@
 sDL_SetEventFilter
   :: SDL_EventFilter
   -- ^
@@ -655,7 +690,7 @@
   hs_bindgen_be8f273c9471fe63_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Safe_SDL_GetEventFilter@
 hs_bindgen_be8f273c9471fe63
@@ -663,7 +698,9 @@
   -> BG.Ptr (BG.Ptr BG.Void)
   -> IO BG.CBool
 hs_bindgen_be8f273c9471fe63 =
-  BG.fromFFIType hs_bindgen_be8f273c9471fe63_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_be8f273c9471fe63_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Query the current event filter.
 --
@@ -677,7 +714,7 @@
 --
 --     [See also]: 'sDL_SetEventFilter'
 --
---     [C declaration]: @SDL_GetEventFilter@, defined at @SDL3\/SDL_events.h 1477:34@
+--     [C declaration]: @SDL_GetEventFilter@, defined at @SDL3\/SDL_events.h 1482:34@
 sDL_GetEventFilter
   :: BG.Ptr SDL_EventFilter
   -- ^
@@ -695,7 +732,7 @@
   hs_bindgen_1032b9b1e1b3559e_base
     :: BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Safe_SDL_AddEventWatch@
 hs_bindgen_1032b9b1e1b3559e
@@ -703,7 +740,9 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_1032b9b1e1b3559e =
-  BG.fromFFIType hs_bindgen_1032b9b1e1b3559e_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_1032b9b1e1b3559e_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Add a callback to be triggered when an event is added to the event queue.
 --
@@ -723,7 +762,7 @@
 --
 --     [See also]: 'sDL_RemoveEventWatch', 'sDL_SetEventFilter'
 --
---     [C declaration]: @SDL_AddEventWatch@, defined at @SDL3\/SDL_events.h 1509:34@
+--     [C declaration]: @SDL_AddEventWatch@, defined at @SDL3\/SDL_events.h 1514:34@
 sDL_AddEventWatch
   :: SDL_EventFilter
   -- ^
@@ -749,7 +788,9 @@
   -> BG.Ptr BG.Void
   -> IO ()
 hs_bindgen_3dfeb3d0c0d67825 =
-  BG.fromFFIType hs_bindgen_3dfeb3d0c0d67825_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_3dfeb3d0c0d67825_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Remove an event watch callback added with @SDL_AddEventWatch()@.
 --
@@ -761,7 +802,7 @@
 --
 --     [See also]: 'sDL_AddEventWatch'
 --
---     [C declaration]: @SDL_RemoveEventWatch@, defined at @SDL3\/SDL_events.h 1526:34@
+--     [C declaration]: @SDL_RemoveEventWatch@, defined at @SDL3\/SDL_events.h 1531:34@
 sDL_RemoveEventWatch
   :: SDL_EventFilter
   -- ^
@@ -787,7 +828,9 @@
   -> BG.Ptr BG.Void
   -> IO ()
 hs_bindgen_6c8e2afc32ccc02a =
-  BG.fromFFIType hs_bindgen_6c8e2afc32ccc02a_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_6c8e2afc32ccc02a_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Run a specific filter function on the current event queue, removing any events for which the filter returns false.
 --
@@ -799,7 +842,7 @@
 --
 --     [See also]: 'sDL_GetEventFilter', 'sDL_SetEventFilter'
 --
---     [C declaration]: @SDL_FilterEvents@, defined at @SDL3\/SDL_events.h 1546:34@
+--     [C declaration]: @SDL_FilterEvents@, defined at @SDL3\/SDL_events.h 1551:34@
 sDL_FilterEvents
   :: SDL_EventFilter
   -- ^
@@ -815,8 +858,8 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Safe_SDL_SetEventEnabled@
 foreign import ccall safe "hs_bindgen_980b7ed1ad20c98e"
   hs_bindgen_980b7ed1ad20c98e_base
-    :: BG.Word32
-    -> BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> BG.CBool
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Safe_SDL_SetEventEnabled@
@@ -825,7 +868,9 @@
   -> BG.CBool
   -> IO ()
 hs_bindgen_980b7ed1ad20c98e =
-  BG.fromFFIType hs_bindgen_980b7ed1ad20c98e_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_980b7ed1ad20c98e_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Set the state of processing events by type.
 --
@@ -835,7 +880,7 @@
 --
 --     [See also]: 'sDL_EventEnabled'
 --
---     [C declaration]: @SDL_SetEventEnabled@, defined at @SDL3\/SDL_events.h 1560:34@
+--     [C declaration]: @SDL_SetEventEnabled@, defined at @SDL3\/SDL_events.h 1565:34@
 sDL_SetEventEnabled
   :: SDL3.Sys.Bindgen.Stdinc.Uint32
   -- ^
@@ -851,15 +896,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Safe_SDL_EventEnabled@
 foreign import ccall safe "hs_bindgen_581f5ed4b389f9ad"
   hs_bindgen_581f5ed4b389f9ad_base
-    :: BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Safe_SDL_EventEnabled@
 hs_bindgen_581f5ed4b389f9ad
   :: SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_581f5ed4b389f9ad =
-  BG.fromFFIType hs_bindgen_581f5ed4b389f9ad_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_581f5ed4b389f9ad_base (BG.toFFIType x0))
 
 -- | Query the state of processing events by type.
 --
@@ -871,7 +917,7 @@
 --
 --     [See also]: 'sDL_SetEventEnabled'
 --
---     [C declaration]: @SDL_EventEnabled@, defined at @SDL3\/SDL_events.h 1574:34@
+--     [C declaration]: @SDL_EventEnabled@, defined at @SDL3\/SDL_events.h 1579:34@
 sDL_EventEnabled
   :: SDL3.Sys.Bindgen.Stdinc.Uint32
   -- ^
@@ -883,15 +929,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Safe_SDL_RegisterEvents@
 foreign import ccall safe "hs_bindgen_68df500d3720ae65"
   hs_bindgen_68df500d3720ae65_base
-    :: BG.Int32
-    -> IO BG.Word32
+    :: BG.CInt
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Safe_SDL_RegisterEvents@
 hs_bindgen_68df500d3720ae65
   :: BG.CInt
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
 hs_bindgen_68df500d3720ae65 =
-  BG.fromFFIType hs_bindgen_68df500d3720ae65_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_68df500d3720ae65_base (BG.toFFIType x0))
 
 -- | Allocate a set of user-defined events, and return the beginning event number for that set of events.
 --
@@ -903,7 +950,7 @@
 --
 --     [See also]: 'sDL_PushEvent'
 --
---     [C declaration]: @SDL_RegisterEvents@, defined at @SDL3\/SDL_events.h 1590:36@
+--     [C declaration]: @SDL_RegisterEvents@, defined at @SDL3\/SDL_events.h 1595:36@
 sDL_RegisterEvents
   :: BG.CInt
   -- ^
@@ -923,7 +970,8 @@
   :: PtrConst.PtrConst SDL_Event
   -> IO (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window)
 hs_bindgen_bf32d25772bf7533 =
-  BG.fromFFIType hs_bindgen_bf32d25772bf7533_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_bf32d25772bf7533_base (BG.toFFIType x0))
 
 -- | Get window associated with an event.
 --
@@ -935,7 +983,7 @@
 --
 --     [See also]: 'sDL_PollEvent', 'sDL_WaitEvent', 'sDL_WaitEventTimeout'
 --
---     [C declaration]: @SDL_GetWindowFromEvent@, defined at @SDL3\/SDL_events.h 1606:42@
+--     [C declaration]: @SDL_GetWindowFromEvent@, defined at @SDL3\/SDL_events.h 1611:42@
 sDL_GetWindowFromEvent
   :: PtrConst.PtrConst SDL_Event
   -- ^
@@ -949,8 +997,8 @@
   hs_bindgen_791dc84efb7c9255_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Int32
+    -> BG.CInt
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Safe_SDL_GetEventDescription@
 hs_bindgen_791dc84efb7c9255
@@ -959,7 +1007,12 @@
   -> BG.CInt
   -> IO BG.CInt
 hs_bindgen_791dc84efb7c9255 =
-  BG.fromFFIType hs_bindgen_791dc84efb7c9255_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_791dc84efb7c9255_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Generate an English description of an event.
 --
@@ -979,7 +1032,7 @@
 --
 --     @since 3.4.0
 --
---     [C declaration]: @SDL_GetEventDescription@, defined at @SDL3\/SDL_events.h 1638:33@
+--     [C declaration]: @SDL_GetEventDescription@, defined at @SDL3\/SDL_events.h 1643:33@
 sDL_GetEventDescription
   :: PtrConst.PtrConst SDL_Event
   -- ^
diff --git a/src/SDL3/Sys/Bindgen/Events/Unsafe.hs b/src/SDL3/Sys/Bindgen/Events/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Events/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Events/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Events.Unsafe (
@@ -26,6 +28,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -35,7 +40,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_events.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_events.h>"
          , "void hs_bindgen_f4dc61bd10a4e23c (void)"
          , "{"
          , "  (SDL_PumpEvents)();"
@@ -187,7 +196,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Unsafe_SDL_PumpEvents@
 hs_bindgen_f4dc61bd10a4e23c :: IO ()
 hs_bindgen_f4dc61bd10a4e23c =
-  BG.fromFFIType hs_bindgen_f4dc61bd10a4e23c_base
+  hs_bindgen_f4dc61bd10a4e23c_base
 
 -- | Pump the event loop, gathering events from the input devices.
 --
@@ -201,7 +210,7 @@
 --
 --     [See also]: 'sDL_PollEvent', 'sDL_WaitEvent'
 --
---     [C declaration]: @SDL_PumpEvents@, defined at @SDL3\/SDL_events.h 1101:34@
+--     [C declaration]: @SDL_PumpEvents@, defined at @SDL3\/SDL_events.h 1106:34@
 sDL_PumpEvents :: IO ()
 sDL_PumpEvents = hs_bindgen_f4dc61bd10a4e23c
 
@@ -209,11 +218,11 @@
 foreign import ccall unsafe "hs_bindgen_8b3ec00d9b882e6d"
   hs_bindgen_8b3ec00d9b882e6d_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Word32
-    -> IO BG.Int32
+    -> BG.CInt
+    -> BG.CUInt
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Unsafe_SDL_PeepEvents@
 hs_bindgen_8b3ec00d9b882e6d
@@ -224,7 +233,20 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CInt
 hs_bindgen_8b3ec00d9b882e6d =
-  BG.fromFFIType hs_bindgen_8b3ec00d9b882e6d_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_8b3ec00d9b882e6d_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Check the event queue for messages and optionally return them.
 --
@@ -246,7 +268,7 @@
 --
 --     [See also]: 'sDL_PollEvent', 'sDL_PumpEvents', 'sDL_PushEvent'
 --
---     [C declaration]: @SDL_PeepEvents@, defined at @SDL3\/SDL_events.h 1159:33@
+--     [C declaration]: @SDL_PeepEvents@, defined at @SDL3\/SDL_events.h 1164:33@
 sDL_PeepEvents
   :: BG.Ptr SDL_Event
   -- ^
@@ -274,15 +296,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Unsafe_SDL_HasEvent@
 foreign import ccall unsafe "hs_bindgen_96f81eae40ffdcd6"
   hs_bindgen_96f81eae40ffdcd6_base
-    :: BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Unsafe_SDL_HasEvent@
 hs_bindgen_96f81eae40ffdcd6
   :: SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_96f81eae40ffdcd6 =
-  BG.fromFFIType hs_bindgen_96f81eae40ffdcd6_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_96f81eae40ffdcd6_base (BG.toFFIType x0))
 
 -- | Check for the existence of a certain event type in the event queue.
 --
@@ -296,7 +319,7 @@
 --
 --     [See also]: 'sDL_HasEvents'
 --
---     [C declaration]: @SDL_HasEvent@, defined at @SDL3\/SDL_events.h 1178:34@
+--     [C declaration]: @SDL_HasEvent@, defined at @SDL3\/SDL_events.h 1183:34@
 sDL_HasEvent
   :: SDL3.Sys.Bindgen.Stdinc.Uint32
   -- ^
@@ -308,9 +331,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Unsafe_SDL_HasEvents@
 foreign import ccall unsafe "hs_bindgen_1f3c013ef4ec1fa8"
   hs_bindgen_1f3c013ef4ec1fa8_base
-    :: BG.Word32
-    -> BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Unsafe_SDL_HasEvents@
 hs_bindgen_1f3c013ef4ec1fa8
@@ -318,7 +341,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_1f3c013ef4ec1fa8 =
-  BG.fromFFIType hs_bindgen_1f3c013ef4ec1fa8_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_1f3c013ef4ec1fa8_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Check for the existence of certain event types in the event queue.
 --
@@ -332,7 +357,7 @@
 --
 --     [See also]: 'sDL_HasEvents'
 --
---     [C declaration]: @SDL_HasEvents@, defined at @SDL3\/SDL_events.h 1199:34@
+--     [C declaration]: @SDL_HasEvents@, defined at @SDL3\/SDL_events.h 1204:34@
 sDL_HasEvents
   :: SDL3.Sys.Bindgen.Stdinc.Uint32
   -- ^
@@ -348,7 +373,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Unsafe_SDL_FlushEvent@
 foreign import ccall unsafe "hs_bindgen_fd83204a82d42e64"
   hs_bindgen_fd83204a82d42e64_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Unsafe_SDL_FlushEvent@
@@ -356,7 +381,8 @@
   :: SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_fd83204a82d42e64 =
-  BG.fromFFIType hs_bindgen_fd83204a82d42e64_base
+  \x0 ->
+    hs_bindgen_fd83204a82d42e64_base (BG.toFFIType x0)
 
 -- | Clear events of a specific type from the event queue.
 --
@@ -374,7 +400,7 @@
 --
 --     [See also]: 'sDL_FlushEvents'
 --
---     [C declaration]: @SDL_FlushEvent@, defined at @SDL3\/SDL_events.h 1227:34@
+--     [C declaration]: @SDL_FlushEvent@, defined at @SDL3\/SDL_events.h 1232:34@
 sDL_FlushEvent
   :: SDL3.Sys.Bindgen.Stdinc.Uint32
   -- ^
@@ -386,8 +412,8 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Unsafe_SDL_FlushEvents@
 foreign import ccall unsafe "hs_bindgen_40cd8ce8fa388aa3"
   hs_bindgen_40cd8ce8fa388aa3_base
-    :: BG.Word32
-    -> BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Unsafe_SDL_FlushEvents@
@@ -396,7 +422,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_40cd8ce8fa388aa3 =
-  BG.fromFFIType hs_bindgen_40cd8ce8fa388aa3_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_40cd8ce8fa388aa3_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Clear events of a range of types from the event queue.
 --
@@ -412,7 +440,7 @@
 --
 --     [See also]: 'sDL_FlushEvent'
 --
---     [C declaration]: @SDL_FlushEvents@, defined at @SDL3\/SDL_events.h 1254:34@
+--     [C declaration]: @SDL_FlushEvents@, defined at @SDL3\/SDL_events.h 1259:34@
 sDL_FlushEvents
   :: SDL3.Sys.Bindgen.Stdinc.Uint32
   -- ^
@@ -429,14 +457,15 @@
 foreign import ccall unsafe "hs_bindgen_74af0be08528ef8b"
   hs_bindgen_74af0be08528ef8b_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Unsafe_SDL_PollEvent@
 hs_bindgen_74af0be08528ef8b
   :: BG.Ptr SDL_Event
   -> IO BG.CBool
 hs_bindgen_74af0be08528ef8b =
-  BG.fromFFIType hs_bindgen_74af0be08528ef8b_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_74af0be08528ef8b_base (BG.toFFIType x0))
 
 -- | Poll for currently pending events.
 --
@@ -473,7 +502,7 @@
 --
 --     [See also]: 'sDL_PushEvent', 'sDL_WaitEvent', 'sDL_WaitEventTimeout'
 --
---     [C declaration]: @SDL_PollEvent@, defined at @SDL3\/SDL_events.h 1305:34@
+--     [C declaration]: @SDL_PollEvent@, defined at @SDL3\/SDL_events.h 1310:34@
 sDL_PollEvent
   :: BG.Ptr SDL_Event
   -- ^
@@ -486,14 +515,15 @@
 foreign import ccall unsafe "hs_bindgen_26650dda1162c384"
   hs_bindgen_26650dda1162c384_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Unsafe_SDL_WaitEvent@
 hs_bindgen_26650dda1162c384
   :: BG.Ptr SDL_Event
   -> IO BG.CBool
 hs_bindgen_26650dda1162c384 =
-  BG.fromFFIType hs_bindgen_26650dda1162c384_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_26650dda1162c384_base (BG.toFFIType x0))
 
 -- | Wait indefinitely for the next available event.
 --
@@ -509,7 +539,7 @@
 --
 --     [See also]: 'sDL_PollEvent', 'sDL_PushEvent', 'sDL_WaitEventTimeout'
 --
---     [C declaration]: @SDL_WaitEvent@, defined at @SDL3\/SDL_events.h 1329:34@
+--     [C declaration]: @SDL_WaitEvent@, defined at @SDL3\/SDL_events.h 1334:34@
 sDL_WaitEvent
   :: BG.Ptr SDL_Event
   -- ^
@@ -522,8 +552,8 @@
 foreign import ccall unsafe "hs_bindgen_8361c3f62bddca27"
   hs_bindgen_8361c3f62bddca27_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Int32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Unsafe_SDL_WaitEventTimeout@
 hs_bindgen_8361c3f62bddca27
@@ -531,7 +561,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Sint32
   -> IO BG.CBool
 hs_bindgen_8361c3f62bddca27 =
-  BG.fromFFIType hs_bindgen_8361c3f62bddca27_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_8361c3f62bddca27_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Wait until the specified timeout (in milliseconds) for the next available event.
 --
@@ -549,7 +581,7 @@
 --
 --     [See also]: 'sDL_PollEvent', 'sDL_PushEvent', 'sDL_WaitEvent'
 --
---     [C declaration]: @SDL_WaitEventTimeout@, defined at @SDL3\/SDL_events.h 1359:34@
+--     [C declaration]: @SDL_WaitEventTimeout@, defined at @SDL3\/SDL_events.h 1364:34@
 sDL_WaitEventTimeout
   :: BG.Ptr SDL_Event
   -- ^
@@ -566,14 +598,15 @@
 foreign import ccall unsafe "hs_bindgen_a3e2f1b85c30cc66"
   hs_bindgen_a3e2f1b85c30cc66_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Unsafe_SDL_PushEvent@
 hs_bindgen_a3e2f1b85c30cc66
   :: BG.Ptr SDL_Event
   -> IO BG.CBool
 hs_bindgen_a3e2f1b85c30cc66 =
-  BG.fromFFIType hs_bindgen_a3e2f1b85c30cc66_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a3e2f1b85c30cc66_base (BG.toFFIType x0))
 
 -- | Add an event to the event queue.
 --
@@ -593,7 +626,7 @@
 --
 --     [See also]: 'sDL_PeepEvents', 'sDL_PollEvent', 'sDL_RegisterEvents'
 --
---     [C declaration]: @SDL_PushEvent@, defined at @SDL3\/SDL_events.h 1393:34@
+--     [C declaration]: @SDL_PushEvent@, defined at @SDL3\/SDL_events.h 1398:34@
 sDL_PushEvent
   :: BG.Ptr SDL_Event
   -- ^
@@ -615,7 +648,9 @@
   -> BG.Ptr BG.Void
   -> IO ()
 hs_bindgen_0f7b893d64f3610c =
-  BG.fromFFIType hs_bindgen_0f7b893d64f3610c_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_0f7b893d64f3610c_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Set up a filter to process all events before they are added to the internal event queue.
 --
@@ -637,7 +672,7 @@
 --
 --     [See also]: 'sDL_AddEventWatch', 'sDL_SetEventEnabled', 'sDL_GetEventFilter', 'sDL_PeepEvents', 'sDL_PushEvent'
 --
---     [C declaration]: @SDL_SetEventFilter@, defined at @SDL3\/SDL_events.h 1458:34@
+--     [C declaration]: @SDL_SetEventFilter@, defined at @SDL3\/SDL_events.h 1463:34@
 sDL_SetEventFilter
   :: SDL_EventFilter
   -- ^
@@ -655,7 +690,7 @@
   hs_bindgen_610e4665d1826427_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Unsafe_SDL_GetEventFilter@
 hs_bindgen_610e4665d1826427
@@ -663,7 +698,9 @@
   -> BG.Ptr (BG.Ptr BG.Void)
   -> IO BG.CBool
 hs_bindgen_610e4665d1826427 =
-  BG.fromFFIType hs_bindgen_610e4665d1826427_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_610e4665d1826427_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Query the current event filter.
 --
@@ -677,7 +714,7 @@
 --
 --     [See also]: 'sDL_SetEventFilter'
 --
---     [C declaration]: @SDL_GetEventFilter@, defined at @SDL3\/SDL_events.h 1477:34@
+--     [C declaration]: @SDL_GetEventFilter@, defined at @SDL3\/SDL_events.h 1482:34@
 sDL_GetEventFilter
   :: BG.Ptr SDL_EventFilter
   -- ^
@@ -695,7 +732,7 @@
   hs_bindgen_33f96eba42fcb36e_base
     :: BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Unsafe_SDL_AddEventWatch@
 hs_bindgen_33f96eba42fcb36e
@@ -703,7 +740,9 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_33f96eba42fcb36e =
-  BG.fromFFIType hs_bindgen_33f96eba42fcb36e_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_33f96eba42fcb36e_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Add a callback to be triggered when an event is added to the event queue.
 --
@@ -723,7 +762,7 @@
 --
 --     [See also]: 'sDL_RemoveEventWatch', 'sDL_SetEventFilter'
 --
---     [C declaration]: @SDL_AddEventWatch@, defined at @SDL3\/SDL_events.h 1509:34@
+--     [C declaration]: @SDL_AddEventWatch@, defined at @SDL3\/SDL_events.h 1514:34@
 sDL_AddEventWatch
   :: SDL_EventFilter
   -- ^
@@ -749,7 +788,9 @@
   -> BG.Ptr BG.Void
   -> IO ()
 hs_bindgen_7be0009aedee08c7 =
-  BG.fromFFIType hs_bindgen_7be0009aedee08c7_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_7be0009aedee08c7_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Remove an event watch callback added with @SDL_AddEventWatch()@.
 --
@@ -761,7 +802,7 @@
 --
 --     [See also]: 'sDL_AddEventWatch'
 --
---     [C declaration]: @SDL_RemoveEventWatch@, defined at @SDL3\/SDL_events.h 1526:34@
+--     [C declaration]: @SDL_RemoveEventWatch@, defined at @SDL3\/SDL_events.h 1531:34@
 sDL_RemoveEventWatch
   :: SDL_EventFilter
   -- ^
@@ -787,7 +828,9 @@
   -> BG.Ptr BG.Void
   -> IO ()
 hs_bindgen_388ecd1fb86ecfc7 =
-  BG.fromFFIType hs_bindgen_388ecd1fb86ecfc7_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_388ecd1fb86ecfc7_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Run a specific filter function on the current event queue, removing any events for which the filter returns false.
 --
@@ -799,7 +842,7 @@
 --
 --     [See also]: 'sDL_GetEventFilter', 'sDL_SetEventFilter'
 --
---     [C declaration]: @SDL_FilterEvents@, defined at @SDL3\/SDL_events.h 1546:34@
+--     [C declaration]: @SDL_FilterEvents@, defined at @SDL3\/SDL_events.h 1551:34@
 sDL_FilterEvents
   :: SDL_EventFilter
   -- ^
@@ -815,8 +858,8 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Unsafe_SDL_SetEventEnabled@
 foreign import ccall unsafe "hs_bindgen_1e0e42e966f91945"
   hs_bindgen_1e0e42e966f91945_base
-    :: BG.Word32
-    -> BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> BG.CBool
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Unsafe_SDL_SetEventEnabled@
@@ -825,7 +868,9 @@
   -> BG.CBool
   -> IO ()
 hs_bindgen_1e0e42e966f91945 =
-  BG.fromFFIType hs_bindgen_1e0e42e966f91945_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_1e0e42e966f91945_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Set the state of processing events by type.
 --
@@ -835,7 +880,7 @@
 --
 --     [See also]: 'sDL_EventEnabled'
 --
---     [C declaration]: @SDL_SetEventEnabled@, defined at @SDL3\/SDL_events.h 1560:34@
+--     [C declaration]: @SDL_SetEventEnabled@, defined at @SDL3\/SDL_events.h 1565:34@
 sDL_SetEventEnabled
   :: SDL3.Sys.Bindgen.Stdinc.Uint32
   -- ^
@@ -851,15 +896,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Unsafe_SDL_EventEnabled@
 foreign import ccall unsafe "hs_bindgen_448bb1465977146b"
   hs_bindgen_448bb1465977146b_base
-    :: BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Unsafe_SDL_EventEnabled@
 hs_bindgen_448bb1465977146b
   :: SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_448bb1465977146b =
-  BG.fromFFIType hs_bindgen_448bb1465977146b_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_448bb1465977146b_base (BG.toFFIType x0))
 
 -- | Query the state of processing events by type.
 --
@@ -871,7 +917,7 @@
 --
 --     [See also]: 'sDL_SetEventEnabled'
 --
---     [C declaration]: @SDL_EventEnabled@, defined at @SDL3\/SDL_events.h 1574:34@
+--     [C declaration]: @SDL_EventEnabled@, defined at @SDL3\/SDL_events.h 1579:34@
 sDL_EventEnabled
   :: SDL3.Sys.Bindgen.Stdinc.Uint32
   -- ^
@@ -883,15 +929,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Unsafe_SDL_RegisterEvents@
 foreign import ccall unsafe "hs_bindgen_f5d1c83cd76363fe"
   hs_bindgen_f5d1c83cd76363fe_base
-    :: BG.Int32
-    -> IO BG.Word32
+    :: BG.CInt
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Unsafe_SDL_RegisterEvents@
 hs_bindgen_f5d1c83cd76363fe
   :: BG.CInt
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
 hs_bindgen_f5d1c83cd76363fe =
-  BG.fromFFIType hs_bindgen_f5d1c83cd76363fe_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_f5d1c83cd76363fe_base (BG.toFFIType x0))
 
 -- | Allocate a set of user-defined events, and return the beginning event number for that set of events.
 --
@@ -903,7 +950,7 @@
 --
 --     [See also]: 'sDL_PushEvent'
 --
---     [C declaration]: @SDL_RegisterEvents@, defined at @SDL3\/SDL_events.h 1590:36@
+--     [C declaration]: @SDL_RegisterEvents@, defined at @SDL3\/SDL_events.h 1595:36@
 sDL_RegisterEvents
   :: BG.CInt
   -- ^
@@ -923,7 +970,8 @@
   :: PtrConst.PtrConst SDL_Event
   -> IO (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window)
 hs_bindgen_ad9a414b46378fd2 =
-  BG.fromFFIType hs_bindgen_ad9a414b46378fd2_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_ad9a414b46378fd2_base (BG.toFFIType x0))
 
 -- | Get window associated with an event.
 --
@@ -935,7 +983,7 @@
 --
 --     [See also]: 'sDL_PollEvent', 'sDL_WaitEvent', 'sDL_WaitEventTimeout'
 --
---     [C declaration]: @SDL_GetWindowFromEvent@, defined at @SDL3\/SDL_events.h 1606:42@
+--     [C declaration]: @SDL_GetWindowFromEvent@, defined at @SDL3\/SDL_events.h 1611:42@
 sDL_GetWindowFromEvent
   :: PtrConst.PtrConst SDL_Event
   -- ^
@@ -949,8 +997,8 @@
   hs_bindgen_ff6611a2bb261892_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Int32
+    -> BG.CInt
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Events_Unsafe_SDL_GetEventDescription@
 hs_bindgen_ff6611a2bb261892
@@ -959,7 +1007,12 @@
   -> BG.CInt
   -> IO BG.CInt
 hs_bindgen_ff6611a2bb261892 =
-  BG.fromFFIType hs_bindgen_ff6611a2bb261892_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_ff6611a2bb261892_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Generate an English description of an event.
 --
@@ -979,7 +1032,7 @@
 --
 --     @since 3.4.0
 --
---     [C declaration]: @SDL_GetEventDescription@, defined at @SDL3\/SDL_events.h 1638:33@
+--     [C declaration]: @SDL_GetEventDescription@, defined at @SDL3\/SDL_events.h 1643:33@
 sDL_GetEventDescription
   :: PtrConst.PtrConst SDL_Event
   -- ^
diff --git a/src/SDL3/Sys/Bindgen/Filesystem.hs b/src/SDL3/Sys/Bindgen/Filesystem.hs
--- a/src/SDL3/Sys/Bindgen/Filesystem.hs
+++ b/src/SDL3/Sys/Bindgen/Filesystem.hs
@@ -6,6 +6,7 @@
 {-# LANGUAGE ExplicitForAll #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE MagicHash #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
@@ -17,6 +18,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | SDL offers an API for examining and manipulating the system\'s filesystem. This covers most things one would need to do with directories, except for actual file I\/O (which is covered by [CategoryIOStream](CategoryIOStream) and [CategoryAsyncIO](CategoryAsyncIO) instead).
 --
@@ -94,11 +96,31 @@
 )
 where
 
+import Prelude (
+  Bounded,
+  Enum,
+  Eq,
+  IO,
+  Int,
+  Integral,
+  Num,
+  Ord,
+  Read,
+  Real,
+  Show,
+  fmap,
+  pure,
+  (<*>),
+  (>>),
+  type (~),
+ )
+
 import C.Expr.HostPlatform qualified
 import HsBindgen.Runtime.CEnum qualified as CEnum
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.Marshal qualified as Marshal
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Struct qualified as Struct
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField
 import SDL3.Sys.Bindgen.Stdinc qualified
@@ -569,6 +591,11 @@
 
 deriving via Marshal.EquivStorable SDL_PathInfo instance BG.Storable SDL_PathInfo
 
+deriving via Struct.IsStructViaReadRaw SDL_PathInfo instance Struct.IsStruct SDL_PathInfo
+
+-- | the path type
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_filesystem.h 269:18@
 instance
   (ty ~ SDL_PathType)
   => BG.CompatHasField.HasField "type'" SDL_PathInfo ty
@@ -597,6 +624,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | the file size in bytes
+--
+--     [C declaration]: @size@, defined at @SDL3\/SDL_filesystem.h 270:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint64)
   => BG.CompatHasField.HasField "size" SDL_PathInfo ty
@@ -627,6 +657,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | the time when the path was created
+--
+--     [C declaration]: @create_time@, defined at @SDL3\/SDL_filesystem.h 271:14@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.SDL_Time)
   => BG.CompatHasField.HasField "create_time" SDL_PathInfo ty
@@ -658,6 +691,9 @@
 
   offset# = \_ -> \_ -> 16
 
+-- | the last time the path was modified
+--
+--     [C declaration]: @modify_time@, defined at @SDL3\/SDL_filesystem.h 272:14@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.SDL_Time)
   => BG.CompatHasField.HasField "modify_time" SDL_PathInfo ty
@@ -689,6 +725,9 @@
 
   offset# = \_ -> \_ -> 24
 
+-- | the last time the path was read
+--
+--     [C declaration]: @access_time@, defined at @SDL3\/SDL_filesystem.h 273:14@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.SDL_Time)
   => BG.CompatHasField.HasField "access_time" SDL_PathInfo ty
@@ -907,13 +946,12 @@
       -> IO SDL_EnumerationResult
   }
   deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
 
 -- __unique:__ @toSDL_EnumerateDirectoryCallback_Aux@
 foreign import ccall safe "wrapper"
   hs_bindgen_a7027a1d7d8836f6_base
-    :: (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.Word32)
-    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.Word32))
+    :: (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.CUInt)
+    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.CUInt))
 
 -- __unique:__ @toSDL_EnumerateDirectoryCallback_Aux@
 hs_bindgen_a7027a1d7d8836f6
@@ -921,16 +959,26 @@
   -> IO (BG.FunPtr SDL_EnumerateDirectoryCallback_Aux)
 hs_bindgen_a7027a1d7d8836f6 =
   \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_a7027a1d7d8836f6_base (BG.toFFIType fun0))
+    fmap
+      BG.castFunPtr
+      ( hs_bindgen_a7027a1d7d8836f6_base
+          ( \x1 ->
+              \x2 ->
+                \x3 ->
+                  fmap
+                    BG.toFFIType
+                    (BG.getField @"unwrap" fun0 (BG.fromFFIType x1) (BG.fromFFIType x2) (BG.fromFFIType x3))
+          )
+      )
 
 -- __unique:__ @fromSDL_EnumerateDirectoryCallback_Aux@
 foreign import ccall safe "dynamic"
   hs_bindgen_62890ffdaab536a5_base
-    :: BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.Word32)
+    :: BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.CUInt)
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @fromSDL_EnumerateDirectoryCallback_Aux@
 hs_bindgen_62890ffdaab536a5
@@ -938,7 +986,19 @@
   -> SDL_EnumerateDirectoryCallback_Aux
 hs_bindgen_62890ffdaab536a5 =
   \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_62890ffdaab536a5_base (BG.castFunPtrToFFIType funPtr0))
+    SDL_EnumerateDirectoryCallback_Aux
+      ( \x1 ->
+          \x2 ->
+            \x3 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_62890ffdaab536a5_base
+                    (BG.castFunPtr funPtr0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                )
+      )
 
 instance BG.ToFunPtr SDL_EnumerateDirectoryCallback_Aux where
   toFunPtr = hs_bindgen_a7027a1d7d8836f6
diff --git a/src/SDL3/Sys/Bindgen/Filesystem/FunPtr.hs b/src/SDL3/Sys/Bindgen/Filesystem/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Filesystem/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Filesystem/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Filesystem.FunPtr (
@@ -17,6 +19,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -24,7 +28,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_filesystem.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_filesystem.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Filesystem_get_SDL_GetBasePath */"
          , "__attribute__ ((const))"
          , "char const *(*hs_bindgen_2ed5dba72836bf2d (void)) (void)"
@@ -130,7 +138,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Filesystem_get_SDL_GetBasePath@
 hs_bindgen_2ed5dba72836bf2d :: IO (BG.FunPtr (IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_2ed5dba72836bf2d =
-  BG.fromFFIType hs_bindgen_2ed5dba72836bf2d_base
+  fmap BG.fromFFIType hs_bindgen_2ed5dba72836bf2d_base
 
 {-# NOINLINE sDL_GetBasePath #-}
 
@@ -148,7 +156,7 @@
 hs_bindgen_693f7d2fd575601d
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> PtrConst.PtrConst BG.CChar -> IO (BG.Ptr BG.CChar)))
 hs_bindgen_693f7d2fd575601d =
-  BG.fromFFIType hs_bindgen_693f7d2fd575601d_base
+  fmap BG.fromFFIType hs_bindgen_693f7d2fd575601d_base
 
 {-# NOINLINE sDL_GetPrefPath #-}
 
@@ -212,7 +220,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Filesystem_get_SDL_GetUserFolder@
 hs_bindgen_53fe991909d2361a :: IO (BG.FunPtr (SDL_Folder -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_53fe991909d2361a =
-  BG.fromFFIType hs_bindgen_53fe991909d2361a_base
+  fmap BG.fromFFIType hs_bindgen_53fe991909d2361a_base
 
 {-# NOINLINE sDL_GetUserFolder #-}
 
@@ -247,7 +255,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Filesystem_get_SDL_CreateDirectory@
 hs_bindgen_2a04cc89206a07e4 :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO BG.CBool))
 hs_bindgen_2a04cc89206a07e4 =
-  BG.fromFFIType hs_bindgen_2a04cc89206a07e4_base
+  fmap BG.fromFFIType hs_bindgen_2a04cc89206a07e4_base
 
 {-# NOINLINE sDL_CreateDirectory #-}
 
@@ -282,7 +290,7 @@
            (PtrConst.PtrConst BG.CChar -> SDL_EnumerateDirectoryCallback -> BG.Ptr BG.Void -> IO BG.CBool)
        )
 hs_bindgen_f96b84c7478907dc =
-  BG.fromFFIType hs_bindgen_f96b84c7478907dc_base
+  fmap BG.fromFFIType hs_bindgen_f96b84c7478907dc_base
 
 {-# NOINLINE sDL_EnumerateDirectory #-}
 
@@ -319,7 +327,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Filesystem_get_SDL_RemovePath@
 hs_bindgen_4ae39f185b082764 :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO BG.CBool))
 hs_bindgen_4ae39f185b082764 =
-  BG.fromFFIType hs_bindgen_4ae39f185b082764_base
+  fmap BG.fromFFIType hs_bindgen_4ae39f185b082764_base
 
 {-# NOINLINE sDL_RemovePath #-}
 
@@ -349,7 +357,7 @@
 hs_bindgen_adef5cb596ea35b1
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> PtrConst.PtrConst BG.CChar -> IO BG.CBool))
 hs_bindgen_adef5cb596ea35b1 =
-  BG.fromFFIType hs_bindgen_adef5cb596ea35b1_base
+  fmap BG.fromFFIType hs_bindgen_adef5cb596ea35b1_base
 
 {-# NOINLINE sDL_RenamePath #-}
 
@@ -386,7 +394,7 @@
 hs_bindgen_0ba2df1188540129
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> PtrConst.PtrConst BG.CChar -> IO BG.CBool))
 hs_bindgen_0ba2df1188540129 =
-  BG.fromFFIType hs_bindgen_0ba2df1188540129_base
+  fmap BG.fromFFIType hs_bindgen_0ba2df1188540129_base
 
 {-# NOINLINE sDL_CopyFile #-}
 
@@ -426,7 +434,7 @@
 hs_bindgen_e161df4dd9e79e80
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> BG.Ptr SDL_PathInfo -> IO BG.CBool))
 hs_bindgen_e161df4dd9e79e80 =
-  BG.fromFFIType hs_bindgen_e161df4dd9e79e80_base
+  fmap BG.fromFFIType hs_bindgen_e161df4dd9e79e80_base
 
 {-# NOINLINE sDL_GetPathInfo #-}
 
@@ -466,7 +474,7 @@
            )
        )
 hs_bindgen_ddd930892e7124f6 =
-  BG.fromFFIType hs_bindgen_ddd930892e7124f6_base
+  fmap BG.fromFFIType hs_bindgen_ddd930892e7124f6_base
 
 {-# NOINLINE sDL_GlobDirectory #-}
 
@@ -512,7 +520,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Filesystem_get_SDL_GetCurrentDirectory@
 hs_bindgen_8a07612d881643ee :: IO (BG.FunPtr (IO (BG.Ptr BG.CChar)))
 hs_bindgen_8a07612d881643ee =
-  BG.fromFFIType hs_bindgen_8a07612d881643ee_base
+  fmap BG.fromFFIType hs_bindgen_8a07612d881643ee_base
 
 {-# NOINLINE sDL_GetCurrentDirectory #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Filesystem/Safe.hs b/src/SDL3/Sys/Bindgen/Filesystem/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Filesystem/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Filesystem/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Filesystem.Safe (
@@ -17,6 +19,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -24,7 +29,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_filesystem.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_filesystem.h>"
          , "char const *hs_bindgen_f92cc8ff07ef9740 (void)"
          , "{"
          , "  return (SDL_GetBasePath)();"
@@ -108,7 +117,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Filesystem_Safe_SDL_GetBasePath@
 hs_bindgen_f92cc8ff07ef9740 :: IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_f92cc8ff07ef9740 =
-  BG.fromFFIType hs_bindgen_f92cc8ff07ef9740_base
+  fmap BG.fromFFIType hs_bindgen_f92cc8ff07ef9740_base
 
 -- | [C declaration]: @SDL_GetBasePath@, defined at @SDL3\/SDL_filesystem.h 101:42@
 sDL_GetBasePath :: IO (PtrConst.PtrConst BG.CChar)
@@ -127,7 +136,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO (BG.Ptr BG.CChar)
 hs_bindgen_619cc1fa3f4aefd0 =
-  BG.fromFFIType hs_bindgen_619cc1fa3f4aefd0_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_619cc1fa3f4aefd0_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the user-and-app-specific path where files can be written.
 --
@@ -187,7 +198,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Filesystem_Safe_SDL_GetUserFolder@
 foreign import ccall safe "hs_bindgen_c6c5688c3bb20e35"
   hs_bindgen_c6c5688c3bb20e35_base
-    :: BG.Word32
+    :: BG.CUInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Filesystem_Safe_SDL_GetUserFolder@
@@ -195,7 +206,8 @@
   :: SDL_Folder
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_c6c5688c3bb20e35 =
-  BG.fromFFIType hs_bindgen_c6c5688c3bb20e35_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c6c5688c3bb20e35_base (BG.toFFIType x0))
 
 -- | Finds the most suitable user folder for a specific purpose.
 --
@@ -226,14 +238,15 @@
 foreign import ccall safe "hs_bindgen_9f1feb13cd45a33b"
   hs_bindgen_9f1feb13cd45a33b_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Filesystem_Safe_SDL_CreateDirectory@
 hs_bindgen_9f1feb13cd45a33b
   :: PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_9f1feb13cd45a33b =
-  BG.fromFFIType hs_bindgen_9f1feb13cd45a33b_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_9f1feb13cd45a33b_base (BG.toFFIType x0))
 
 -- | Create a directory, and any missing parent directories.
 --
@@ -262,7 +275,7 @@
     :: BG.Ptr BG.Void
     -> BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Filesystem_Safe_SDL_EnumerateDirectory@
 hs_bindgen_e94d2a77c1f86c96
@@ -271,7 +284,12 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_e94d2a77c1f86c96 =
-  BG.fromFFIType hs_bindgen_e94d2a77c1f86c96_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_e94d2a77c1f86c96_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Enumerate a directory through a callback function.
 --
@@ -306,14 +324,15 @@
 foreign import ccall safe "hs_bindgen_84b6008494da965d"
   hs_bindgen_84b6008494da965d_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Filesystem_Safe_SDL_RemovePath@
 hs_bindgen_84b6008494da965d
   :: PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_84b6008494da965d =
-  BG.fromFFIType hs_bindgen_84b6008494da965d_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_84b6008494da965d_base (BG.toFFIType x0))
 
 -- | Remove a file or an empty directory.
 --
@@ -339,7 +358,7 @@
   hs_bindgen_41cbbf30c063ebd5_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Filesystem_Safe_SDL_RenamePath@
 hs_bindgen_41cbbf30c063ebd5
@@ -347,7 +366,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_41cbbf30c063ebd5 =
-  BG.fromFFIType hs_bindgen_41cbbf30c063ebd5_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_41cbbf30c063ebd5_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Rename a file or directory.
 --
@@ -381,7 +402,7 @@
   hs_bindgen_4feaee53c2645e31_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Filesystem_Safe_SDL_CopyFile@
 hs_bindgen_4feaee53c2645e31
@@ -389,7 +410,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_4feaee53c2645e31 =
-  BG.fromFFIType hs_bindgen_4feaee53c2645e31_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_4feaee53c2645e31_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Copy a file.
 --
@@ -427,7 +450,7 @@
   hs_bindgen_caa951538e03e0b0_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Filesystem_Safe_SDL_GetPathInfo@
 hs_bindgen_caa951538e03e0b0
@@ -435,7 +458,9 @@
   -> BG.Ptr SDL_PathInfo
   -> IO BG.CBool
 hs_bindgen_caa951538e03e0b0 =
-  BG.fromFFIType hs_bindgen_caa951538e03e0b0_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_caa951538e03e0b0_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get information about a filesystem path.
 --
@@ -465,7 +490,7 @@
   hs_bindgen_fb5d363e95cc2777_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> IO (BG.Ptr BG.Void)
 
@@ -477,7 +502,18 @@
   -> BG.Ptr BG.CInt
   -> IO (BG.Ptr (BG.Ptr BG.CChar))
 hs_bindgen_fb5d363e95cc2777 =
-  BG.fromFFIType hs_bindgen_fb5d363e95cc2777_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_fb5d363e95cc2777_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Enumerate a directory tree, filtered by pattern, and return a list.
 --
@@ -522,7 +558,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Filesystem_Safe_SDL_GetCurrentDirectory@
 hs_bindgen_1c738c64af33b51a :: IO (BG.Ptr BG.CChar)
 hs_bindgen_1c738c64af33b51a =
-  BG.fromFFIType hs_bindgen_1c738c64af33b51a_base
+  fmap BG.fromFFIType hs_bindgen_1c738c64af33b51a_base
 
 -- | Get what the system believes is the \"current working directory.\"
 --
diff --git a/src/SDL3/Sys/Bindgen/Filesystem/Unsafe.hs b/src/SDL3/Sys/Bindgen/Filesystem/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Filesystem/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Filesystem/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Filesystem.Unsafe (
@@ -17,6 +19,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -24,7 +29,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_filesystem.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_filesystem.h>"
          , "char const *hs_bindgen_f982860586cddc48 (void)"
          , "{"
          , "  return (SDL_GetBasePath)();"
@@ -108,7 +117,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Filesystem_Unsafe_SDL_GetBasePath@
 hs_bindgen_f982860586cddc48 :: IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_f982860586cddc48 =
-  BG.fromFFIType hs_bindgen_f982860586cddc48_base
+  fmap BG.fromFFIType hs_bindgen_f982860586cddc48_base
 
 -- | [C declaration]: @SDL_GetBasePath@, defined at @SDL3\/SDL_filesystem.h 101:42@
 sDL_GetBasePath :: IO (PtrConst.PtrConst BG.CChar)
@@ -127,7 +136,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO (BG.Ptr BG.CChar)
 hs_bindgen_207e183641556ba0 =
-  BG.fromFFIType hs_bindgen_207e183641556ba0_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_207e183641556ba0_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the user-and-app-specific path where files can be written.
 --
@@ -187,7 +198,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Filesystem_Unsafe_SDL_GetUserFolder@
 foreign import ccall unsafe "hs_bindgen_1e54016bd792c622"
   hs_bindgen_1e54016bd792c622_base
-    :: BG.Word32
+    :: BG.CUInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Filesystem_Unsafe_SDL_GetUserFolder@
@@ -195,7 +206,8 @@
   :: SDL_Folder
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_1e54016bd792c622 =
-  BG.fromFFIType hs_bindgen_1e54016bd792c622_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_1e54016bd792c622_base (BG.toFFIType x0))
 
 -- | Finds the most suitable user folder for a specific purpose.
 --
@@ -226,14 +238,15 @@
 foreign import ccall unsafe "hs_bindgen_3d4b267fb1966244"
   hs_bindgen_3d4b267fb1966244_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Filesystem_Unsafe_SDL_CreateDirectory@
 hs_bindgen_3d4b267fb1966244
   :: PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_3d4b267fb1966244 =
-  BG.fromFFIType hs_bindgen_3d4b267fb1966244_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3d4b267fb1966244_base (BG.toFFIType x0))
 
 -- | Create a directory, and any missing parent directories.
 --
@@ -262,7 +275,7 @@
     :: BG.Ptr BG.Void
     -> BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Filesystem_Unsafe_SDL_EnumerateDirectory@
 hs_bindgen_2cd5a0aba8d0a754
@@ -271,7 +284,12 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_2cd5a0aba8d0a754 =
-  BG.fromFFIType hs_bindgen_2cd5a0aba8d0a754_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_2cd5a0aba8d0a754_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Enumerate a directory through a callback function.
 --
@@ -306,14 +324,15 @@
 foreign import ccall unsafe "hs_bindgen_768df4cf2a845ec6"
   hs_bindgen_768df4cf2a845ec6_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Filesystem_Unsafe_SDL_RemovePath@
 hs_bindgen_768df4cf2a845ec6
   :: PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_768df4cf2a845ec6 =
-  BG.fromFFIType hs_bindgen_768df4cf2a845ec6_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_768df4cf2a845ec6_base (BG.toFFIType x0))
 
 -- | Remove a file or an empty directory.
 --
@@ -339,7 +358,7 @@
   hs_bindgen_8e887e0ab35ae63b_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Filesystem_Unsafe_SDL_RenamePath@
 hs_bindgen_8e887e0ab35ae63b
@@ -347,7 +366,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_8e887e0ab35ae63b =
-  BG.fromFFIType hs_bindgen_8e887e0ab35ae63b_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_8e887e0ab35ae63b_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Rename a file or directory.
 --
@@ -381,7 +402,7 @@
   hs_bindgen_936ea99b7b61f849_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Filesystem_Unsafe_SDL_CopyFile@
 hs_bindgen_936ea99b7b61f849
@@ -389,7 +410,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_936ea99b7b61f849 =
-  BG.fromFFIType hs_bindgen_936ea99b7b61f849_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_936ea99b7b61f849_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Copy a file.
 --
@@ -427,7 +450,7 @@
   hs_bindgen_6d818186cbd1c026_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Filesystem_Unsafe_SDL_GetPathInfo@
 hs_bindgen_6d818186cbd1c026
@@ -435,7 +458,9 @@
   -> BG.Ptr SDL_PathInfo
   -> IO BG.CBool
 hs_bindgen_6d818186cbd1c026 =
-  BG.fromFFIType hs_bindgen_6d818186cbd1c026_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_6d818186cbd1c026_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get information about a filesystem path.
 --
@@ -465,7 +490,7 @@
   hs_bindgen_9478904045755e53_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> IO (BG.Ptr BG.Void)
 
@@ -477,7 +502,18 @@
   -> BG.Ptr BG.CInt
   -> IO (BG.Ptr (BG.Ptr BG.CChar))
 hs_bindgen_9478904045755e53 =
-  BG.fromFFIType hs_bindgen_9478904045755e53_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_9478904045755e53_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Enumerate a directory tree, filtered by pattern, and return a list.
 --
@@ -522,7 +558,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Filesystem_Unsafe_SDL_GetCurrentDirectory@
 hs_bindgen_74e4e1cd3e20672c :: IO (BG.Ptr BG.CChar)
 hs_bindgen_74e4e1cd3e20672c =
-  BG.fromFFIType hs_bindgen_74e4e1cd3e20672c_base
+  fmap BG.fromFFIType hs_bindgen_74e4e1cd3e20672c_base
 
 -- | Get what the system believes is the \"current working directory.\"
 --
diff --git a/src/SDL3/Sys/Bindgen/Gamepad.hs b/src/SDL3/Sys/Bindgen/Gamepad.hs
--- a/src/SDL3/Sys/Bindgen/Gamepad.hs
+++ b/src/SDL3/Sys/Bindgen/Gamepad.hs
@@ -17,6 +17,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | SDL provides a low-level joystick API, which just treats joysticks as an arbitrary pile of buttons, axes, and hat switches. If you\'re planning to write your own control configuration screen, this can give you a lot of flexibility, but that\'s a lot of work, and most things that we consider \"joysticks\" now are actually console-style gamepads. So SDL provides the gamepad API on top of the lower-level joystick functionality.
 --
@@ -54,6 +55,7 @@
   pattern SDL3.Sys.Bindgen.Gamepad.SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_JOYCON_RIGHT,
   pattern SDL3.Sys.Bindgen.Gamepad.SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_JOYCON_PAIR,
   pattern SDL3.Sys.Bindgen.Gamepad.SDL_GAMEPAD_TYPE_GAMECUBE,
+  pattern SDL3.Sys.Bindgen.Gamepad.SDL_GAMEPAD_TYPE_STEAM,
   pattern SDL3.Sys.Bindgen.Gamepad.SDL_GAMEPAD_TYPE_COUNT,
   SDL3.Sys.Bindgen.Gamepad.SDL_GamepadButton (..),
   pattern SDL3.Sys.Bindgen.Gamepad.SDL_GAMEPAD_BUTTON_INVALID,
@@ -117,9 +119,12 @@
 )
 where
 
+import Prelude (Eq, Int, Ord, Read, Show, pure, (<*>), (>>), type (~))
+
 import HsBindgen.Runtime.CEnum qualified as CEnum
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.Marshal qualified as Marshal
+import HsBindgen.Runtime.Struct qualified as Struct
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField
 import HsBindgen.Runtime.Union qualified as Union
@@ -183,7 +188,8 @@
         , (9, BG.singleton "SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_JOYCON_RIGHT")
         , (10, BG.singleton "SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_JOYCON_PAIR")
         , (11, BG.singleton "SDL_GAMEPAD_TYPE_GAMECUBE")
-        , (12, BG.singleton "SDL_GAMEPAD_TYPE_COUNT")
+        , (12, BG.singleton "SDL_GAMEPAD_TYPE_STEAM")
+        , (13, BG.singleton "SDL_GAMEPAD_TYPE_COUNT")
         ]
 
   showsUndeclared =
@@ -281,9 +287,13 @@
 pattern SDL_GAMEPAD_TYPE_GAMECUBE :: SDL_GamepadType
 pattern SDL_GAMEPAD_TYPE_GAMECUBE = SDL_GamepadType 11
 
--- | [C declaration]: @SDL_GAMEPAD_TYPE_COUNT@, defined at @SDL3\/SDL_gamepad.h 125:5@
+-- | [C declaration]: @SDL_GAMEPAD_TYPE_STEAM@, defined at @SDL3\/SDL_gamepad.h 125:5@
+pattern SDL_GAMEPAD_TYPE_STEAM :: SDL_GamepadType
+pattern SDL_GAMEPAD_TYPE_STEAM = SDL_GamepadType 12
+
+-- | [C declaration]: @SDL_GAMEPAD_TYPE_COUNT@, defined at @SDL3\/SDL_gamepad.h 126:5@
 pattern SDL_GAMEPAD_TYPE_COUNT :: SDL_GamepadType
-pattern SDL_GAMEPAD_TYPE_COUNT = SDL_GamepadType 12
+pattern SDL_GAMEPAD_TYPE_COUNT = SDL_GamepadType 13
 
 -- | The list of buttons available on a gamepad
 --
@@ -297,7 +307,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @enum SDL_GamepadButton@, defined at @SDL3\/SDL_gamepad.h 152:14@
+--     [C declaration]: @enum SDL_GamepadButton@, defined at @SDL3\/SDL_gamepad.h 153:14@
 newtype SDL_GamepadButton = SDL_GamepadButton
   { unwrap :: BG.CInt
   }
@@ -414,145 +424,145 @@
 
   offset# = \_ -> \_ -> 0
 
--- | [C declaration]: @SDL_GAMEPAD_BUTTON_INVALID@, defined at @SDL3\/SDL_gamepad.h 154:5@
+-- | [C declaration]: @SDL_GAMEPAD_BUTTON_INVALID@, defined at @SDL3\/SDL_gamepad.h 155:5@
 pattern SDL_GAMEPAD_BUTTON_INVALID :: SDL_GamepadButton
 pattern SDL_GAMEPAD_BUTTON_INVALID = SDL_GamepadButton (-1)
 
 -- | Bottom face button (e.g. Xbox A button)
 --
---     [C declaration]: @SDL_GAMEPAD_BUTTON_SOUTH@, defined at @SDL3\/SDL_gamepad.h 155:5@
+--     [C declaration]: @SDL_GAMEPAD_BUTTON_SOUTH@, defined at @SDL3\/SDL_gamepad.h 156:5@
 pattern SDL_GAMEPAD_BUTTON_SOUTH :: SDL_GamepadButton
 pattern SDL_GAMEPAD_BUTTON_SOUTH = SDL_GamepadButton 0
 
 -- | Right face button (e.g. Xbox B button)
 --
---     [C declaration]: @SDL_GAMEPAD_BUTTON_EAST@, defined at @SDL3\/SDL_gamepad.h 156:5@
+--     [C declaration]: @SDL_GAMEPAD_BUTTON_EAST@, defined at @SDL3\/SDL_gamepad.h 157:5@
 pattern SDL_GAMEPAD_BUTTON_EAST :: SDL_GamepadButton
 pattern SDL_GAMEPAD_BUTTON_EAST = SDL_GamepadButton 1
 
 -- | Left face button (e.g. Xbox X button)
 --
---     [C declaration]: @SDL_GAMEPAD_BUTTON_WEST@, defined at @SDL3\/SDL_gamepad.h 157:5@
+--     [C declaration]: @SDL_GAMEPAD_BUTTON_WEST@, defined at @SDL3\/SDL_gamepad.h 158:5@
 pattern SDL_GAMEPAD_BUTTON_WEST :: SDL_GamepadButton
 pattern SDL_GAMEPAD_BUTTON_WEST = SDL_GamepadButton 2
 
 -- | Top face button (e.g. Xbox Y button)
 --
---     [C declaration]: @SDL_GAMEPAD_BUTTON_NORTH@, defined at @SDL3\/SDL_gamepad.h 158:5@
+--     [C declaration]: @SDL_GAMEPAD_BUTTON_NORTH@, defined at @SDL3\/SDL_gamepad.h 159:5@
 pattern SDL_GAMEPAD_BUTTON_NORTH :: SDL_GamepadButton
 pattern SDL_GAMEPAD_BUTTON_NORTH = SDL_GamepadButton 3
 
--- | [C declaration]: @SDL_GAMEPAD_BUTTON_BACK@, defined at @SDL3\/SDL_gamepad.h 159:5@
+-- | [C declaration]: @SDL_GAMEPAD_BUTTON_BACK@, defined at @SDL3\/SDL_gamepad.h 160:5@
 pattern SDL_GAMEPAD_BUTTON_BACK :: SDL_GamepadButton
 pattern SDL_GAMEPAD_BUTTON_BACK = SDL_GamepadButton 4
 
--- | [C declaration]: @SDL_GAMEPAD_BUTTON_GUIDE@, defined at @SDL3\/SDL_gamepad.h 160:5@
+-- | [C declaration]: @SDL_GAMEPAD_BUTTON_GUIDE@, defined at @SDL3\/SDL_gamepad.h 161:5@
 pattern SDL_GAMEPAD_BUTTON_GUIDE :: SDL_GamepadButton
 pattern SDL_GAMEPAD_BUTTON_GUIDE = SDL_GamepadButton 5
 
--- | [C declaration]: @SDL_GAMEPAD_BUTTON_START@, defined at @SDL3\/SDL_gamepad.h 161:5@
+-- | [C declaration]: @SDL_GAMEPAD_BUTTON_START@, defined at @SDL3\/SDL_gamepad.h 162:5@
 pattern SDL_GAMEPAD_BUTTON_START :: SDL_GamepadButton
 pattern SDL_GAMEPAD_BUTTON_START = SDL_GamepadButton 6
 
--- | [C declaration]: @SDL_GAMEPAD_BUTTON_LEFT_STICK@, defined at @SDL3\/SDL_gamepad.h 162:5@
+-- | [C declaration]: @SDL_GAMEPAD_BUTTON_LEFT_STICK@, defined at @SDL3\/SDL_gamepad.h 163:5@
 pattern SDL_GAMEPAD_BUTTON_LEFT_STICK :: SDL_GamepadButton
 pattern SDL_GAMEPAD_BUTTON_LEFT_STICK = SDL_GamepadButton 7
 
--- | [C declaration]: @SDL_GAMEPAD_BUTTON_RIGHT_STICK@, defined at @SDL3\/SDL_gamepad.h 163:5@
+-- | [C declaration]: @SDL_GAMEPAD_BUTTON_RIGHT_STICK@, defined at @SDL3\/SDL_gamepad.h 164:5@
 pattern SDL_GAMEPAD_BUTTON_RIGHT_STICK :: SDL_GamepadButton
 pattern SDL_GAMEPAD_BUTTON_RIGHT_STICK = SDL_GamepadButton 8
 
--- | [C declaration]: @SDL_GAMEPAD_BUTTON_LEFT_SHOULDER@, defined at @SDL3\/SDL_gamepad.h 164:5@
+-- | [C declaration]: @SDL_GAMEPAD_BUTTON_LEFT_SHOULDER@, defined at @SDL3\/SDL_gamepad.h 165:5@
 pattern SDL_GAMEPAD_BUTTON_LEFT_SHOULDER :: SDL_GamepadButton
 pattern SDL_GAMEPAD_BUTTON_LEFT_SHOULDER = SDL_GamepadButton 9
 
--- | [C declaration]: @SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER@, defined at @SDL3\/SDL_gamepad.h 165:5@
+-- | [C declaration]: @SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER@, defined at @SDL3\/SDL_gamepad.h 166:5@
 pattern SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER :: SDL_GamepadButton
 pattern SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER = SDL_GamepadButton 10
 
--- | [C declaration]: @SDL_GAMEPAD_BUTTON_DPAD_UP@, defined at @SDL3\/SDL_gamepad.h 166:5@
+-- | [C declaration]: @SDL_GAMEPAD_BUTTON_DPAD_UP@, defined at @SDL3\/SDL_gamepad.h 167:5@
 pattern SDL_GAMEPAD_BUTTON_DPAD_UP :: SDL_GamepadButton
 pattern SDL_GAMEPAD_BUTTON_DPAD_UP = SDL_GamepadButton 11
 
--- | [C declaration]: @SDL_GAMEPAD_BUTTON_DPAD_DOWN@, defined at @SDL3\/SDL_gamepad.h 167:5@
+-- | [C declaration]: @SDL_GAMEPAD_BUTTON_DPAD_DOWN@, defined at @SDL3\/SDL_gamepad.h 168:5@
 pattern SDL_GAMEPAD_BUTTON_DPAD_DOWN :: SDL_GamepadButton
 pattern SDL_GAMEPAD_BUTTON_DPAD_DOWN = SDL_GamepadButton 12
 
--- | [C declaration]: @SDL_GAMEPAD_BUTTON_DPAD_LEFT@, defined at @SDL3\/SDL_gamepad.h 168:5@
+-- | [C declaration]: @SDL_GAMEPAD_BUTTON_DPAD_LEFT@, defined at @SDL3\/SDL_gamepad.h 169:5@
 pattern SDL_GAMEPAD_BUTTON_DPAD_LEFT :: SDL_GamepadButton
 pattern SDL_GAMEPAD_BUTTON_DPAD_LEFT = SDL_GamepadButton 13
 
--- | [C declaration]: @SDL_GAMEPAD_BUTTON_DPAD_RIGHT@, defined at @SDL3\/SDL_gamepad.h 169:5@
+-- | [C declaration]: @SDL_GAMEPAD_BUTTON_DPAD_RIGHT@, defined at @SDL3\/SDL_gamepad.h 170:5@
 pattern SDL_GAMEPAD_BUTTON_DPAD_RIGHT :: SDL_GamepadButton
 pattern SDL_GAMEPAD_BUTTON_DPAD_RIGHT = SDL_GamepadButton 14
 
 -- | Additional button (e.g. Xbox Series X share button, PS5 microphone button, Nintendo Switch Pro capture button, Steam Controller QAM button, Amazon Luna microphone button, Google Stadia capture button)
 --
---     [C declaration]: @SDL_GAMEPAD_BUTTON_MISC1@, defined at @SDL3\/SDL_gamepad.h 170:5@
+--     [C declaration]: @SDL_GAMEPAD_BUTTON_MISC1@, defined at @SDL3\/SDL_gamepad.h 171:5@
 pattern SDL_GAMEPAD_BUTTON_MISC1 :: SDL_GamepadButton
 pattern SDL_GAMEPAD_BUTTON_MISC1 = SDL_GamepadButton 15
 
 -- | Upper or primary paddle, under your right hand (e.g. Xbox Elite paddle P1, DualSense Edge RB button, Right Joy-Con SR button, Steam Controller R4 button)
 --
---     [C declaration]: @SDL_GAMEPAD_BUTTON_RIGHT_PADDLE1@, defined at @SDL3\/SDL_gamepad.h 171:5@
+--     [C declaration]: @SDL_GAMEPAD_BUTTON_RIGHT_PADDLE1@, defined at @SDL3\/SDL_gamepad.h 172:5@
 pattern SDL_GAMEPAD_BUTTON_RIGHT_PADDLE1 :: SDL_GamepadButton
 pattern SDL_GAMEPAD_BUTTON_RIGHT_PADDLE1 = SDL_GamepadButton 16
 
 -- | Upper or primary paddle, under your left hand (e.g. Xbox Elite paddle P3, DualSense Edge LB button, Left Joy-Con SL button, Steam Controller L4 button)
 --
---     [C declaration]: @SDL_GAMEPAD_BUTTON_LEFT_PADDLE1@, defined at @SDL3\/SDL_gamepad.h 172:5@
+--     [C declaration]: @SDL_GAMEPAD_BUTTON_LEFT_PADDLE1@, defined at @SDL3\/SDL_gamepad.h 173:5@
 pattern SDL_GAMEPAD_BUTTON_LEFT_PADDLE1 :: SDL_GamepadButton
 pattern SDL_GAMEPAD_BUTTON_LEFT_PADDLE1 = SDL_GamepadButton 17
 
 -- | Lower or secondary paddle, under your right hand (e.g. Xbox Elite paddle P2, DualSense Edge right Fn button, Right Joy-Con SL button, Steam Controller R5 button)
 --
---     [C declaration]: @SDL_GAMEPAD_BUTTON_RIGHT_PADDLE2@, defined at @SDL3\/SDL_gamepad.h 173:5@
+--     [C declaration]: @SDL_GAMEPAD_BUTTON_RIGHT_PADDLE2@, defined at @SDL3\/SDL_gamepad.h 174:5@
 pattern SDL_GAMEPAD_BUTTON_RIGHT_PADDLE2 :: SDL_GamepadButton
 pattern SDL_GAMEPAD_BUTTON_RIGHT_PADDLE2 = SDL_GamepadButton 18
 
 -- | Lower or secondary paddle, under your left hand (e.g. Xbox Elite paddle P4, DualSense Edge left Fn button, Left Joy-Con SR button, Steam Controller L5 button)
 --
---     [C declaration]: @SDL_GAMEPAD_BUTTON_LEFT_PADDLE2@, defined at @SDL3\/SDL_gamepad.h 174:5@
+--     [C declaration]: @SDL_GAMEPAD_BUTTON_LEFT_PADDLE2@, defined at @SDL3\/SDL_gamepad.h 175:5@
 pattern SDL_GAMEPAD_BUTTON_LEFT_PADDLE2 :: SDL_GamepadButton
 pattern SDL_GAMEPAD_BUTTON_LEFT_PADDLE2 = SDL_GamepadButton 19
 
 -- | PS4\/PS5 touchpad button
 --
---     [C declaration]: @SDL_GAMEPAD_BUTTON_TOUCHPAD@, defined at @SDL3\/SDL_gamepad.h 175:5@
+--     [C declaration]: @SDL_GAMEPAD_BUTTON_TOUCHPAD@, defined at @SDL3\/SDL_gamepad.h 176:5@
 pattern SDL_GAMEPAD_BUTTON_TOUCHPAD :: SDL_GamepadButton
 pattern SDL_GAMEPAD_BUTTON_TOUCHPAD = SDL_GamepadButton 20
 
 -- | Additional button
 --
---     [C declaration]: @SDL_GAMEPAD_BUTTON_MISC2@, defined at @SDL3\/SDL_gamepad.h 176:5@
+--     [C declaration]: @SDL_GAMEPAD_BUTTON_MISC2@, defined at @SDL3\/SDL_gamepad.h 177:5@
 pattern SDL_GAMEPAD_BUTTON_MISC2 :: SDL_GamepadButton
 pattern SDL_GAMEPAD_BUTTON_MISC2 = SDL_GamepadButton 21
 
 -- | Additional button (e.g. Nintendo GameCube left trigger click)
 --
---     [C declaration]: @SDL_GAMEPAD_BUTTON_MISC3@, defined at @SDL3\/SDL_gamepad.h 177:5@
+--     [C declaration]: @SDL_GAMEPAD_BUTTON_MISC3@, defined at @SDL3\/SDL_gamepad.h 178:5@
 pattern SDL_GAMEPAD_BUTTON_MISC3 :: SDL_GamepadButton
 pattern SDL_GAMEPAD_BUTTON_MISC3 = SDL_GamepadButton 22
 
 -- | Additional button (e.g. Nintendo GameCube right trigger click)
 --
---     [C declaration]: @SDL_GAMEPAD_BUTTON_MISC4@, defined at @SDL3\/SDL_gamepad.h 178:5@
+--     [C declaration]: @SDL_GAMEPAD_BUTTON_MISC4@, defined at @SDL3\/SDL_gamepad.h 179:5@
 pattern SDL_GAMEPAD_BUTTON_MISC4 :: SDL_GamepadButton
 pattern SDL_GAMEPAD_BUTTON_MISC4 = SDL_GamepadButton 23
 
 -- | Additional button
 --
---     [C declaration]: @SDL_GAMEPAD_BUTTON_MISC5@, defined at @SDL3\/SDL_gamepad.h 179:5@
+--     [C declaration]: @SDL_GAMEPAD_BUTTON_MISC5@, defined at @SDL3\/SDL_gamepad.h 180:5@
 pattern SDL_GAMEPAD_BUTTON_MISC5 :: SDL_GamepadButton
 pattern SDL_GAMEPAD_BUTTON_MISC5 = SDL_GamepadButton 24
 
 -- | Additional button
 --
---     [C declaration]: @SDL_GAMEPAD_BUTTON_MISC6@, defined at @SDL3\/SDL_gamepad.h 180:5@
+--     [C declaration]: @SDL_GAMEPAD_BUTTON_MISC6@, defined at @SDL3\/SDL_gamepad.h 181:5@
 pattern SDL_GAMEPAD_BUTTON_MISC6 :: SDL_GamepadButton
 pattern SDL_GAMEPAD_BUTTON_MISC6 = SDL_GamepadButton 25
 
--- | [C declaration]: @SDL_GAMEPAD_BUTTON_COUNT@, defined at @SDL3\/SDL_gamepad.h 181:5@
+-- | [C declaration]: @SDL_GAMEPAD_BUTTON_COUNT@, defined at @SDL3\/SDL_gamepad.h 182:5@
 pattern SDL_GAMEPAD_BUTTON_COUNT :: SDL_GamepadButton
 pattern SDL_GAMEPAD_BUTTON_COUNT = SDL_GamepadButton 26
 
@@ -564,7 +574,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @enum SDL_GamepadButtonLabel@, defined at @SDL3\/SDL_gamepad.h 195:14@
+--     [C declaration]: @enum SDL_GamepadButtonLabel@, defined at @SDL3\/SDL_gamepad.h 196:14@
 newtype SDL_GamepadButtonLabel = SDL_GamepadButtonLabel
   { unwrap :: BG.CUInt
   }
@@ -667,39 +677,39 @@
 
   offset# = \_ -> \_ -> 0
 
--- | [C declaration]: @SDL_GAMEPAD_BUTTON_LABEL_UNKNOWN@, defined at @SDL3\/SDL_gamepad.h 197:5@
+-- | [C declaration]: @SDL_GAMEPAD_BUTTON_LABEL_UNKNOWN@, defined at @SDL3\/SDL_gamepad.h 198:5@
 pattern SDL_GAMEPAD_BUTTON_LABEL_UNKNOWN :: SDL_GamepadButtonLabel
 pattern SDL_GAMEPAD_BUTTON_LABEL_UNKNOWN = SDL_GamepadButtonLabel 0
 
--- | [C declaration]: @SDL_GAMEPAD_BUTTON_LABEL_A@, defined at @SDL3\/SDL_gamepad.h 198:5@
+-- | [C declaration]: @SDL_GAMEPAD_BUTTON_LABEL_A@, defined at @SDL3\/SDL_gamepad.h 199:5@
 pattern SDL_GAMEPAD_BUTTON_LABEL_A :: SDL_GamepadButtonLabel
 pattern SDL_GAMEPAD_BUTTON_LABEL_A = SDL_GamepadButtonLabel 1
 
--- | [C declaration]: @SDL_GAMEPAD_BUTTON_LABEL_B@, defined at @SDL3\/SDL_gamepad.h 199:5@
+-- | [C declaration]: @SDL_GAMEPAD_BUTTON_LABEL_B@, defined at @SDL3\/SDL_gamepad.h 200:5@
 pattern SDL_GAMEPAD_BUTTON_LABEL_B :: SDL_GamepadButtonLabel
 pattern SDL_GAMEPAD_BUTTON_LABEL_B = SDL_GamepadButtonLabel 2
 
--- | [C declaration]: @SDL_GAMEPAD_BUTTON_LABEL_X@, defined at @SDL3\/SDL_gamepad.h 200:5@
+-- | [C declaration]: @SDL_GAMEPAD_BUTTON_LABEL_X@, defined at @SDL3\/SDL_gamepad.h 201:5@
 pattern SDL_GAMEPAD_BUTTON_LABEL_X :: SDL_GamepadButtonLabel
 pattern SDL_GAMEPAD_BUTTON_LABEL_X = SDL_GamepadButtonLabel 3
 
--- | [C declaration]: @SDL_GAMEPAD_BUTTON_LABEL_Y@, defined at @SDL3\/SDL_gamepad.h 201:5@
+-- | [C declaration]: @SDL_GAMEPAD_BUTTON_LABEL_Y@, defined at @SDL3\/SDL_gamepad.h 202:5@
 pattern SDL_GAMEPAD_BUTTON_LABEL_Y :: SDL_GamepadButtonLabel
 pattern SDL_GAMEPAD_BUTTON_LABEL_Y = SDL_GamepadButtonLabel 4
 
--- | [C declaration]: @SDL_GAMEPAD_BUTTON_LABEL_CROSS@, defined at @SDL3\/SDL_gamepad.h 202:5@
+-- | [C declaration]: @SDL_GAMEPAD_BUTTON_LABEL_CROSS@, defined at @SDL3\/SDL_gamepad.h 203:5@
 pattern SDL_GAMEPAD_BUTTON_LABEL_CROSS :: SDL_GamepadButtonLabel
 pattern SDL_GAMEPAD_BUTTON_LABEL_CROSS = SDL_GamepadButtonLabel 5
 
--- | [C declaration]: @SDL_GAMEPAD_BUTTON_LABEL_CIRCLE@, defined at @SDL3\/SDL_gamepad.h 203:5@
+-- | [C declaration]: @SDL_GAMEPAD_BUTTON_LABEL_CIRCLE@, defined at @SDL3\/SDL_gamepad.h 204:5@
 pattern SDL_GAMEPAD_BUTTON_LABEL_CIRCLE :: SDL_GamepadButtonLabel
 pattern SDL_GAMEPAD_BUTTON_LABEL_CIRCLE = SDL_GamepadButtonLabel 6
 
--- | [C declaration]: @SDL_GAMEPAD_BUTTON_LABEL_SQUARE@, defined at @SDL3\/SDL_gamepad.h 204:5@
+-- | [C declaration]: @SDL_GAMEPAD_BUTTON_LABEL_SQUARE@, defined at @SDL3\/SDL_gamepad.h 205:5@
 pattern SDL_GAMEPAD_BUTTON_LABEL_SQUARE :: SDL_GamepadButtonLabel
 pattern SDL_GAMEPAD_BUTTON_LABEL_SQUARE = SDL_GamepadButtonLabel 7
 
--- | [C declaration]: @SDL_GAMEPAD_BUTTON_LABEL_TRIANGLE@, defined at @SDL3\/SDL_gamepad.h 205:5@
+-- | [C declaration]: @SDL_GAMEPAD_BUTTON_LABEL_TRIANGLE@, defined at @SDL3\/SDL_gamepad.h 206:5@
 pattern SDL_GAMEPAD_BUTTON_LABEL_TRIANGLE :: SDL_GamepadButtonLabel
 pattern SDL_GAMEPAD_BUTTON_LABEL_TRIANGLE = SDL_GamepadButtonLabel 8
 
@@ -711,7 +721,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @enum SDL_GamepadAxis@, defined at @SDL3\/SDL_gamepad.h 222:14@
+--     [C declaration]: @enum SDL_GamepadAxis@, defined at @SDL3\/SDL_gamepad.h 223:14@
 newtype SDL_GamepadAxis = SDL_GamepadAxis
   { unwrap :: BG.CInt
   }
@@ -808,35 +818,35 @@
 
   offset# = \_ -> \_ -> 0
 
--- | [C declaration]: @SDL_GAMEPAD_AXIS_INVALID@, defined at @SDL3\/SDL_gamepad.h 224:5@
+-- | [C declaration]: @SDL_GAMEPAD_AXIS_INVALID@, defined at @SDL3\/SDL_gamepad.h 225:5@
 pattern SDL_GAMEPAD_AXIS_INVALID :: SDL_GamepadAxis
 pattern SDL_GAMEPAD_AXIS_INVALID = SDL_GamepadAxis (-1)
 
--- | [C declaration]: @SDL_GAMEPAD_AXIS_LEFTX@, defined at @SDL3\/SDL_gamepad.h 225:5@
+-- | [C declaration]: @SDL_GAMEPAD_AXIS_LEFTX@, defined at @SDL3\/SDL_gamepad.h 226:5@
 pattern SDL_GAMEPAD_AXIS_LEFTX :: SDL_GamepadAxis
 pattern SDL_GAMEPAD_AXIS_LEFTX = SDL_GamepadAxis 0
 
--- | [C declaration]: @SDL_GAMEPAD_AXIS_LEFTY@, defined at @SDL3\/SDL_gamepad.h 226:5@
+-- | [C declaration]: @SDL_GAMEPAD_AXIS_LEFTY@, defined at @SDL3\/SDL_gamepad.h 227:5@
 pattern SDL_GAMEPAD_AXIS_LEFTY :: SDL_GamepadAxis
 pattern SDL_GAMEPAD_AXIS_LEFTY = SDL_GamepadAxis 1
 
--- | [C declaration]: @SDL_GAMEPAD_AXIS_RIGHTX@, defined at @SDL3\/SDL_gamepad.h 227:5@
+-- | [C declaration]: @SDL_GAMEPAD_AXIS_RIGHTX@, defined at @SDL3\/SDL_gamepad.h 228:5@
 pattern SDL_GAMEPAD_AXIS_RIGHTX :: SDL_GamepadAxis
 pattern SDL_GAMEPAD_AXIS_RIGHTX = SDL_GamepadAxis 2
 
--- | [C declaration]: @SDL_GAMEPAD_AXIS_RIGHTY@, defined at @SDL3\/SDL_gamepad.h 228:5@
+-- | [C declaration]: @SDL_GAMEPAD_AXIS_RIGHTY@, defined at @SDL3\/SDL_gamepad.h 229:5@
 pattern SDL_GAMEPAD_AXIS_RIGHTY :: SDL_GamepadAxis
 pattern SDL_GAMEPAD_AXIS_RIGHTY = SDL_GamepadAxis 3
 
--- | [C declaration]: @SDL_GAMEPAD_AXIS_LEFT_TRIGGER@, defined at @SDL3\/SDL_gamepad.h 229:5@
+-- | [C declaration]: @SDL_GAMEPAD_AXIS_LEFT_TRIGGER@, defined at @SDL3\/SDL_gamepad.h 230:5@
 pattern SDL_GAMEPAD_AXIS_LEFT_TRIGGER :: SDL_GamepadAxis
 pattern SDL_GAMEPAD_AXIS_LEFT_TRIGGER = SDL_GamepadAxis 4
 
--- | [C declaration]: @SDL_GAMEPAD_AXIS_RIGHT_TRIGGER@, defined at @SDL3\/SDL_gamepad.h 230:5@
+-- | [C declaration]: @SDL_GAMEPAD_AXIS_RIGHT_TRIGGER@, defined at @SDL3\/SDL_gamepad.h 231:5@
 pattern SDL_GAMEPAD_AXIS_RIGHT_TRIGGER :: SDL_GamepadAxis
 pattern SDL_GAMEPAD_AXIS_RIGHT_TRIGGER = SDL_GamepadAxis 5
 
--- | [C declaration]: @SDL_GAMEPAD_AXIS_COUNT@, defined at @SDL3\/SDL_gamepad.h 231:5@
+-- | [C declaration]: @SDL_GAMEPAD_AXIS_COUNT@, defined at @SDL3\/SDL_gamepad.h 232:5@
 pattern SDL_GAMEPAD_AXIS_COUNT :: SDL_GamepadAxis
 pattern SDL_GAMEPAD_AXIS_COUNT = SDL_GamepadAxis 6
 
@@ -846,7 +856,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @enum SDL_GamepadBindingType@, defined at @SDL3\/SDL_gamepad.h 244:14@
+--     [C declaration]: @enum SDL_GamepadBindingType@, defined at @SDL3\/SDL_gamepad.h 245:14@
 newtype SDL_GamepadBindingType = SDL_GamepadBindingType
   { unwrap :: BG.CUInt
   }
@@ -944,30 +954,30 @@
 
   offset# = \_ -> \_ -> 0
 
--- | [C declaration]: @SDL_GAMEPAD_BINDTYPE_NONE@, defined at @SDL3\/SDL_gamepad.h 246:5@
+-- | [C declaration]: @SDL_GAMEPAD_BINDTYPE_NONE@, defined at @SDL3\/SDL_gamepad.h 247:5@
 pattern SDL_GAMEPAD_BINDTYPE_NONE :: SDL_GamepadBindingType
 pattern SDL_GAMEPAD_BINDTYPE_NONE = SDL_GamepadBindingType 0
 
--- | [C declaration]: @SDL_GAMEPAD_BINDTYPE_BUTTON@, defined at @SDL3\/SDL_gamepad.h 247:5@
+-- | [C declaration]: @SDL_GAMEPAD_BINDTYPE_BUTTON@, defined at @SDL3\/SDL_gamepad.h 248:5@
 pattern SDL_GAMEPAD_BINDTYPE_BUTTON :: SDL_GamepadBindingType
 pattern SDL_GAMEPAD_BINDTYPE_BUTTON = SDL_GamepadBindingType 1
 
--- | [C declaration]: @SDL_GAMEPAD_BINDTYPE_AXIS@, defined at @SDL3\/SDL_gamepad.h 248:5@
+-- | [C declaration]: @SDL_GAMEPAD_BINDTYPE_AXIS@, defined at @SDL3\/SDL_gamepad.h 249:5@
 pattern SDL_GAMEPAD_BINDTYPE_AXIS :: SDL_GamepadBindingType
 pattern SDL_GAMEPAD_BINDTYPE_AXIS = SDL_GamepadBindingType 2
 
--- | [C declaration]: @SDL_GAMEPAD_BINDTYPE_HAT@, defined at @SDL3\/SDL_gamepad.h 249:5@
+-- | [C declaration]: @SDL_GAMEPAD_BINDTYPE_HAT@, defined at @SDL3\/SDL_gamepad.h 250:5@
 pattern SDL_GAMEPAD_BINDTYPE_HAT :: SDL_GamepadBindingType
 pattern SDL_GAMEPAD_BINDTYPE_HAT = SDL_GamepadBindingType 3
 
--- | [C declaration]: @struct \@SDL_GamepadBinding_input_axis@, defined at @SDL3\/SDL_gamepad.h 274:9@
+-- | [C declaration]: @struct \@SDL_GamepadBinding_input_axis@, defined at @SDL3\/SDL_gamepad.h 275:9@
 data SDL_GamepadBinding_input_axis = SDL_GamepadBinding_input_axis
   { axis :: BG.CInt
-  -- ^ [C declaration]: @axis@, defined at @SDL3\/SDL_gamepad.h 276:17@
+  -- ^ [C declaration]: @axis@, defined at @SDL3\/SDL_gamepad.h 277:17@
   , axis_min :: BG.CInt
-  -- ^ [C declaration]: @axis_min@, defined at @SDL3\/SDL_gamepad.h 277:17@
+  -- ^ [C declaration]: @axis_min@, defined at @SDL3\/SDL_gamepad.h 278:17@
   , axis_max :: BG.CInt
-  -- ^ [C declaration]: @axis_max@, defined at @SDL3\/SDL_gamepad.h 278:17@
+  -- ^ [C declaration]: @axis_max@, defined at @SDL3\/SDL_gamepad.h 279:17@
   }
   deriving stock (BG.Generic, Eq, Show)
 
@@ -999,6 +1009,12 @@
   instance
     BG.Storable SDL_GamepadBinding_input_axis
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GamepadBinding_input_axis
+  instance
+    Struct.IsStruct SDL_GamepadBinding_input_axis
+
+-- | [C declaration]: @axis@, defined at @SDL3\/SDL_gamepad.h 277:17@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "axis" SDL_GamepadBinding_input_axis ty
@@ -1027,6 +1043,7 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | [C declaration]: @axis_min@, defined at @SDL3\/SDL_gamepad.h 278:17@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "axis_min" SDL_GamepadBinding_input_axis ty
@@ -1055,6 +1072,7 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | [C declaration]: @axis_max@, defined at @SDL3\/SDL_gamepad.h 279:17@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "axis_max" SDL_GamepadBinding_input_axis ty
@@ -1083,12 +1101,12 @@
 
   offset# = \_ -> \_ -> 8
 
--- | [C declaration]: @struct \@SDL_GamepadBinding_input_hat@, defined at @SDL3\/SDL_gamepad.h 281:9@
+-- | [C declaration]: @struct \@SDL_GamepadBinding_input_hat@, defined at @SDL3\/SDL_gamepad.h 282:9@
 data SDL_GamepadBinding_input_hat = SDL_GamepadBinding_input_hat
   { hat :: BG.CInt
-  -- ^ [C declaration]: @hat@, defined at @SDL3\/SDL_gamepad.h 283:17@
+  -- ^ [C declaration]: @hat@, defined at @SDL3\/SDL_gamepad.h 284:17@
   , hat_mask :: BG.CInt
-  -- ^ [C declaration]: @hat_mask@, defined at @SDL3\/SDL_gamepad.h 284:17@
+  -- ^ [C declaration]: @hat_mask@, defined at @SDL3\/SDL_gamepad.h 285:17@
   }
   deriving stock (BG.Generic, Eq, Show)
 
@@ -1118,6 +1136,12 @@
   instance
     BG.Storable SDL_GamepadBinding_input_hat
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GamepadBinding_input_hat
+  instance
+    Struct.IsStruct SDL_GamepadBinding_input_hat
+
+-- | [C declaration]: @hat@, defined at @SDL3\/SDL_gamepad.h 284:17@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "hat" SDL_GamepadBinding_input_hat ty
@@ -1142,6 +1166,7 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | [C declaration]: @hat_mask@, defined at @SDL3\/SDL_gamepad.h 285:17@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "hat_mask" SDL_GamepadBinding_input_hat ty
@@ -1166,7 +1191,7 @@
 
   offset# = \_ -> \_ -> 4
 
--- | [C declaration]: @union \@SDL_GamepadBinding_input@, defined at @SDL3\/SDL_gamepad.h 270:5@
+-- | [C declaration]: @union \@SDL_GamepadBinding_input@, defined at @SDL3\/SDL_gamepad.h 271:5@
 newtype SDL_GamepadBinding_input = SDL_GamepadBinding_input
   { unwrap :: BG.ByteArray
   }
@@ -1185,20 +1210,24 @@
 
 deriving via BG.SizedByteArray 12 4 instance Union.IsUnion SDL_GamepadBinding_input
 
--- | [C declaration]: @button@, defined at @SDL3\/SDL_gamepad.h 272:13@
+-- | [C declaration]: @button@, defined at @SDL3\/SDL_gamepad.h 273:13@
 instance
   (ty ~ BG.CInt)
   => BG.HasField "button" SDL_GamepadBinding_input ty
   where
   getField = BG.getUnionPayload
 
--- | [C declaration]: @button@, defined at @SDL3\/SDL_gamepad.h 272:13@
+-- | [C declaration]: @button@, defined at @SDL3\/SDL_gamepad.h 273:13@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "button" SDL_GamepadBinding_input ty
   where
   hasField =
-    \x0 -> (BG.setUnionPayload, BG.getField @"button" x0)
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"button" x0
+      )
 
 instance
   (ty ~ BG.CInt)
@@ -1213,20 +1242,24 @@
 
   offset# = \_ -> \_ -> 0
 
--- | [C declaration]: @axis@, defined at @SDL3\/SDL_gamepad.h 279:11@
+-- | [C declaration]: @axis@, defined at @SDL3\/SDL_gamepad.h 280:11@
 instance
   (ty ~ SDL_GamepadBinding_input_axis)
   => BG.HasField "axis" SDL_GamepadBinding_input ty
   where
   getField = BG.getUnionPayload
 
--- | [C declaration]: @axis@, defined at @SDL3\/SDL_gamepad.h 279:11@
+-- | [C declaration]: @axis@, defined at @SDL3\/SDL_gamepad.h 280:11@
 instance
   (ty ~ SDL_GamepadBinding_input_axis)
   => BG.CompatHasField.HasField "axis" SDL_GamepadBinding_input ty
   where
   hasField =
-    \x0 -> (BG.setUnionPayload, BG.getField @"axis" x0)
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"axis" x0
+      )
 
 instance
   (ty ~ SDL_GamepadBinding_input_axis)
@@ -1241,20 +1274,24 @@
 
   offset# = \_ -> \_ -> 0
 
--- | [C declaration]: @hat@, defined at @SDL3\/SDL_gamepad.h 285:11@
+-- | [C declaration]: @hat@, defined at @SDL3\/SDL_gamepad.h 286:11@
 instance
   (ty ~ SDL_GamepadBinding_input_hat)
   => BG.HasField "hat" SDL_GamepadBinding_input ty
   where
   getField = BG.getUnionPayload
 
--- | [C declaration]: @hat@, defined at @SDL3\/SDL_gamepad.h 285:11@
+-- | [C declaration]: @hat@, defined at @SDL3\/SDL_gamepad.h 286:11@
 instance
   (ty ~ SDL_GamepadBinding_input_hat)
   => BG.CompatHasField.HasField "hat" SDL_GamepadBinding_input ty
   where
   hasField =
-    \x0 -> (BG.setUnionPayload, BG.getField @"hat" x0)
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"hat" x0
+      )
 
 instance
   (ty ~ SDL_GamepadBinding_input_hat)
@@ -1269,14 +1306,14 @@
 
   offset# = \_ -> \_ -> 0
 
--- | [C declaration]: @struct \@SDL_GamepadBinding_output_axis@, defined at @SDL3\/SDL_gamepad.h 294:9@
+-- | [C declaration]: @struct \@SDL_GamepadBinding_output_axis@, defined at @SDL3\/SDL_gamepad.h 295:9@
 data SDL_GamepadBinding_output_axis = SDL_GamepadBinding_output_axis
   { axis :: SDL_GamepadAxis
-  -- ^ [C declaration]: @axis@, defined at @SDL3\/SDL_gamepad.h 296:29@
+  -- ^ [C declaration]: @axis@, defined at @SDL3\/SDL_gamepad.h 297:29@
   , axis_min :: BG.CInt
-  -- ^ [C declaration]: @axis_min@, defined at @SDL3\/SDL_gamepad.h 297:17@
+  -- ^ [C declaration]: @axis_min@, defined at @SDL3\/SDL_gamepad.h 298:17@
   , axis_max :: BG.CInt
-  -- ^ [C declaration]: @axis_max@, defined at @SDL3\/SDL_gamepad.h 298:17@
+  -- ^ [C declaration]: @axis_max@, defined at @SDL3\/SDL_gamepad.h 299:17@
   }
   deriving stock (BG.Generic, Eq, Show)
 
@@ -1308,6 +1345,12 @@
   instance
     BG.Storable SDL_GamepadBinding_output_axis
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GamepadBinding_output_axis
+  instance
+    Struct.IsStruct SDL_GamepadBinding_output_axis
+
+-- | [C declaration]: @axis@, defined at @SDL3\/SDL_gamepad.h 297:29@
 instance
   (ty ~ SDL_GamepadAxis)
   => BG.CompatHasField.HasField "axis" SDL_GamepadBinding_output_axis ty
@@ -1336,6 +1379,7 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | [C declaration]: @axis_min@, defined at @SDL3\/SDL_gamepad.h 298:17@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "axis_min" SDL_GamepadBinding_output_axis ty
@@ -1364,6 +1408,7 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | [C declaration]: @axis_max@, defined at @SDL3\/SDL_gamepad.h 299:17@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "axis_max" SDL_GamepadBinding_output_axis ty
@@ -1392,7 +1437,7 @@
 
   offset# = \_ -> \_ -> 8
 
--- | [C declaration]: @union \@SDL_GamepadBinding_output@, defined at @SDL3\/SDL_gamepad.h 290:5@
+-- | [C declaration]: @union \@SDL_GamepadBinding_output@, defined at @SDL3\/SDL_gamepad.h 291:5@
 newtype SDL_GamepadBinding_output = SDL_GamepadBinding_output
   { unwrap :: BG.ByteArray
   }
@@ -1411,20 +1456,24 @@
 
 deriving via BG.SizedByteArray 12 4 instance Union.IsUnion SDL_GamepadBinding_output
 
--- | [C declaration]: @button@, defined at @SDL3\/SDL_gamepad.h 292:27@
+-- | [C declaration]: @button@, defined at @SDL3\/SDL_gamepad.h 293:27@
 instance
   (ty ~ SDL_GamepadButton)
   => BG.HasField "button" SDL_GamepadBinding_output ty
   where
   getField = BG.getUnionPayload
 
--- | [C declaration]: @button@, defined at @SDL3\/SDL_gamepad.h 292:27@
+-- | [C declaration]: @button@, defined at @SDL3\/SDL_gamepad.h 293:27@
 instance
   (ty ~ SDL_GamepadButton)
   => BG.CompatHasField.HasField "button" SDL_GamepadBinding_output ty
   where
   hasField =
-    \x0 -> (BG.setUnionPayload, BG.getField @"button" x0)
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"button" x0
+      )
 
 instance
   (ty ~ SDL_GamepadButton)
@@ -1439,20 +1488,24 @@
 
   offset# = \_ -> \_ -> 0
 
--- | [C declaration]: @axis@, defined at @SDL3\/SDL_gamepad.h 299:11@
+-- | [C declaration]: @axis@, defined at @SDL3\/SDL_gamepad.h 300:11@
 instance
   (ty ~ SDL_GamepadBinding_output_axis)
   => BG.HasField "axis" SDL_GamepadBinding_output ty
   where
   getField = BG.getUnionPayload
 
--- | [C declaration]: @axis@, defined at @SDL3\/SDL_gamepad.h 299:11@
+-- | [C declaration]: @axis@, defined at @SDL3\/SDL_gamepad.h 300:11@
 instance
   (ty ~ SDL_GamepadBinding_output_axis)
   => BG.CompatHasField.HasField "axis" SDL_GamepadBinding_output ty
   where
   hasField =
-    \x0 -> (BG.setUnionPayload, BG.getField @"axis" x0)
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"axis" x0
+      )
 
 instance
   (ty ~ SDL_GamepadBinding_output_axis)
@@ -1477,16 +1530,16 @@
 --
 --     [See also]: 'sDL_GetGamepadBindings'
 --
---     [C declaration]: @struct SDL_GamepadBinding@, defined at @SDL3\/SDL_gamepad.h 267:16@
+--     [C declaration]: @struct SDL_GamepadBinding@, defined at @SDL3\/SDL_gamepad.h 268:16@
 data SDL_GamepadBinding = SDL_GamepadBinding
   { input_type :: SDL_GamepadBindingType
-  -- ^ [C declaration]: @input_type@, defined at @SDL3\/SDL_gamepad.h 269:28@
+  -- ^ [C declaration]: @input_type@, defined at @SDL3\/SDL_gamepad.h 270:28@
   , input :: SDL_GamepadBinding_input
-  -- ^ [C declaration]: @input@, defined at @SDL3\/SDL_gamepad.h 287:7@
+  -- ^ [C declaration]: @input@, defined at @SDL3\/SDL_gamepad.h 288:7@
   , output_type :: SDL_GamepadBindingType
-  -- ^ [C declaration]: @output_type@, defined at @SDL3\/SDL_gamepad.h 289:28@
+  -- ^ [C declaration]: @output_type@, defined at @SDL3\/SDL_gamepad.h 290:28@
   , output :: SDL_GamepadBinding_output
-  -- ^ [C declaration]: @output@, defined at @SDL3\/SDL_gamepad.h 301:7@
+  -- ^ [C declaration]: @output@, defined at @SDL3\/SDL_gamepad.h 302:7@
   }
   deriving stock (BG.Generic)
 
@@ -1517,6 +1570,12 @@
 
 deriving via Marshal.EquivStorable SDL_GamepadBinding instance BG.Storable SDL_GamepadBinding
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GamepadBinding
+  instance
+    Struct.IsStruct SDL_GamepadBinding
+
+-- | [C declaration]: @input_type@, defined at @SDL3\/SDL_gamepad.h 270:28@
 instance
   (ty ~ SDL_GamepadBindingType)
   => BG.CompatHasField.HasField "input_type" SDL_GamepadBinding ty
@@ -1546,6 +1605,7 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | [C declaration]: @input@, defined at @SDL3\/SDL_gamepad.h 288:7@
 instance
   (ty ~ SDL_GamepadBinding_input)
   => BG.CompatHasField.HasField "input" SDL_GamepadBinding ty
@@ -1575,6 +1635,7 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | [C declaration]: @output_type@, defined at @SDL3\/SDL_gamepad.h 290:28@
 instance
   (ty ~ SDL_GamepadBindingType)
   => BG.CompatHasField.HasField "output_type" SDL_GamepadBinding ty
@@ -1605,6 +1666,7 @@
 
   offset# = \_ -> \_ -> 16
 
+-- | [C declaration]: @output@, defined at @SDL3\/SDL_gamepad.h 302:7@
 instance
   (ty ~ SDL_GamepadBinding_output)
   => BG.CompatHasField.HasField "output" SDL_GamepadBinding ty
diff --git a/src/SDL3/Sys/Bindgen/Gamepad/FunPtr.hs b/src/SDL3/Sys/Bindgen/Gamepad/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Gamepad/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Gamepad/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Gamepad.FunPtr (
@@ -79,6 +81,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -93,7 +97,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_gamepad.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_gamepad.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_get_SDL_AddGamepadMapping */"
          , "__attribute__ ((const))"
          , "signed int (*hs_bindgen_f56db84bc08d998c (void)) ("
@@ -721,7 +729,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_get_SDL_AddGamepadMapping@
 hs_bindgen_f56db84bc08d998c :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO BG.CInt))
 hs_bindgen_f56db84bc08d998c =
-  BG.fromFFIType hs_bindgen_f56db84bc08d998c_base
+  fmap BG.fromFFIType hs_bindgen_f56db84bc08d998c_base
 
 {-# NOINLINE sDL_AddGamepadMapping #-}
 
@@ -755,7 +763,7 @@
 --
 --     [See also]: 'sDL_AddGamepadMappingsFromFile', 'sDL_AddGamepadMappingsFromIO', 'sDL_GetGamepadMapping', 'sDL_GetGamepadMappingForGUID', SDL_HINT_GAMECONTROLLERCONFIG, SDL_HINT_GAMECONTROLLERCONFIG_FILE, SDL_EVENT_GAMEPAD_ADDED
 --
---     [C declaration]: @SDL_AddGamepadMapping@, defined at @SDL3\/SDL_gamepad.h 346:33@
+--     [C declaration]: @SDL_AddGamepadMapping@, defined at @SDL3\/SDL_gamepad.h 347:33@
 sDL_AddGamepadMapping :: BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO BG.CInt)
 sDL_AddGamepadMapping =
   BG.unsafePerformIO hs_bindgen_f56db84bc08d998c
@@ -769,7 +777,7 @@
 hs_bindgen_a541948e617e6e63
   :: IO (BG.FunPtr (BG.Ptr SDL3.Sys.Bindgen.Iostream.SDL_IOStream -> BG.CBool -> IO BG.CInt))
 hs_bindgen_a541948e617e6e63 =
-  BG.fromFFIType hs_bindgen_a541948e617e6e63_base
+  fmap BG.fromFFIType hs_bindgen_a541948e617e6e63_base
 
 {-# NOINLINE sDL_AddGamepadMappingsFromIO #-}
 
@@ -797,7 +805,7 @@
 --
 --     [See also]: 'sDL_AddGamepadMapping', 'sDL_AddGamepadMappingsFromFile', 'sDL_GetGamepadMapping', 'sDL_GetGamepadMappingForGUID', SDL_HINT_GAMECONTROLLERCONFIG, SDL_HINT_GAMECONTROLLERCONFIG_FILE, SDL_EVENT_GAMEPAD_ADDED
 --
---     [C declaration]: @SDL_AddGamepadMappingsFromIO@, defined at @SDL3\/SDL_gamepad.h 386:33@
+--     [C declaration]: @SDL_AddGamepadMappingsFromIO@, defined at @SDL3\/SDL_gamepad.h 387:33@
 sDL_AddGamepadMappingsFromIO
   :: BG.FunPtr (BG.Ptr SDL3.Sys.Bindgen.Iostream.SDL_IOStream -> BG.CBool -> IO BG.CInt)
 sDL_AddGamepadMappingsFromIO =
@@ -811,7 +819,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_get_SDL_AddGamepadMappingsFromFile@
 hs_bindgen_41978012228f1faa :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO BG.CInt))
 hs_bindgen_41978012228f1faa =
-  BG.fromFFIType hs_bindgen_41978012228f1faa_base
+  fmap BG.fromFFIType hs_bindgen_41978012228f1faa_base
 
 {-# NOINLINE sDL_AddGamepadMappingsFromFile #-}
 
@@ -835,7 +843,7 @@
 --
 --     [See also]: 'sDL_AddGamepadMapping', 'sDL_AddGamepadMappingsFromIO', 'sDL_GetGamepadMapping', 'sDL_GetGamepadMappingForGUID', SDL_HINT_GAMECONTROLLERCONFIG, SDL_HINT_GAMECONTROLLERCONFIG_FILE, SDL_EVENT_GAMEPAD_ADDED
 --
---     [C declaration]: @SDL_AddGamepadMappingsFromFile@, defined at @SDL3\/SDL_gamepad.h 420:33@
+--     [C declaration]: @SDL_AddGamepadMappingsFromFile@, defined at @SDL3\/SDL_gamepad.h 421:33@
 sDL_AddGamepadMappingsFromFile :: BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO BG.CInt)
 sDL_AddGamepadMappingsFromFile =
   BG.unsafePerformIO hs_bindgen_41978012228f1faa
@@ -848,7 +856,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_get_SDL_ReloadGamepadMappings@
 hs_bindgen_4df07d31710d5cb5 :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_4df07d31710d5cb5 =
-  BG.fromFFIType hs_bindgen_4df07d31710d5cb5_base
+  fmap BG.fromFFIType hs_bindgen_4df07d31710d5cb5_base
 
 {-# NOINLINE sDL_ReloadGamepadMappings #-}
 
@@ -862,7 +870,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_ReloadGamepadMappings@, defined at @SDL3\/SDL_gamepad.h 434:34@
+--     [C declaration]: @SDL_ReloadGamepadMappings@, defined at @SDL3\/SDL_gamepad.h 435:34@
 sDL_ReloadGamepadMappings :: BG.FunPtr (IO BG.CBool)
 sDL_ReloadGamepadMappings =
   BG.unsafePerformIO hs_bindgen_4df07d31710d5cb5
@@ -875,7 +883,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_get_SDL_GetGamepadMappings@
 hs_bindgen_eeb3cc137ed4da1e :: IO (BG.FunPtr (BG.Ptr BG.CInt -> IO (BG.Ptr (BG.Ptr BG.CChar))))
 hs_bindgen_eeb3cc137ed4da1e =
-  BG.fromFFIType hs_bindgen_eeb3cc137ed4da1e_base
+  fmap BG.fromFFIType hs_bindgen_eeb3cc137ed4da1e_base
 
 {-# NOINLINE sDL_GetGamepadMappings #-}
 
@@ -889,7 +897,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadMappings@, defined at @SDL3\/SDL_gamepad.h 450:37@
+--     [C declaration]: @SDL_GetGamepadMappings@, defined at @SDL3\/SDL_gamepad.h 451:37@
 sDL_GetGamepadMappings :: BG.FunPtr (BG.Ptr BG.CInt -> IO (BG.Ptr (BG.Ptr BG.CChar)))
 sDL_GetGamepadMappings =
   BG.unsafePerformIO hs_bindgen_eeb3cc137ed4da1e
@@ -903,7 +911,7 @@
 hs_bindgen_676f8bee7fec25e8
   :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Guid.SDL_GUID -> IO (BG.Ptr BG.CChar)))
 hs_bindgen_676f8bee7fec25e8 =
-  BG.fromFFIType hs_bindgen_676f8bee7fec25e8_base
+  fmap BG.fromFFIType hs_bindgen_676f8bee7fec25e8_base
 
 {-# NOINLINE sDL_GetGamepadMappingForGUID #-}
 
@@ -919,7 +927,7 @@
 --
 --     [See also]: SDL_GetJoystickGUIDForID, SDL_GetJoystickGUID
 --
---     [C declaration]: @SDL_GetGamepadMappingForGUID@, defined at @SDL3\/SDL_gamepad.h 467:36@
+--     [C declaration]: @SDL_GetGamepadMappingForGUID@, defined at @SDL3\/SDL_gamepad.h 468:36@
 sDL_GetGamepadMappingForGUID :: BG.FunPtr (SDL3.Sys.Bindgen.Guid.SDL_GUID -> IO (BG.Ptr BG.CChar))
 sDL_GetGamepadMappingForGUID =
   BG.unsafePerformIO hs_bindgen_676f8bee7fec25e8
@@ -932,7 +940,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_get_SDL_GetGamepadMapping@
 hs_bindgen_330564406990299e :: IO (BG.FunPtr (BG.Ptr SDL_Gamepad -> IO (BG.Ptr BG.CChar)))
 hs_bindgen_330564406990299e =
-  BG.fromFFIType hs_bindgen_330564406990299e_base
+  fmap BG.fromFFIType hs_bindgen_330564406990299e_base
 
 {-# NOINLINE sDL_GetGamepadMapping #-}
 
@@ -950,7 +958,7 @@
 --
 --     [See also]: 'sDL_AddGamepadMapping', 'sDL_GetGamepadMappingForID', 'sDL_GetGamepadMappingForGUID', 'sDL_SetGamepadMapping'
 --
---     [C declaration]: @SDL_GetGamepadMapping@, defined at @SDL3\/SDL_gamepad.h 488:36@
+--     [C declaration]: @SDL_GetGamepadMapping@, defined at @SDL3\/SDL_gamepad.h 489:36@
 sDL_GetGamepadMapping :: BG.FunPtr (BG.Ptr SDL_Gamepad -> IO (BG.Ptr BG.CChar))
 sDL_GetGamepadMapping =
   BG.unsafePerformIO hs_bindgen_330564406990299e
@@ -965,7 +973,7 @@
   :: IO
        (BG.FunPtr (SDL3.Sys.Bindgen.Joystick.SDL_JoystickID -> PtrConst.PtrConst BG.CChar -> IO BG.CBool))
 hs_bindgen_f7235f6f99c772ca =
-  BG.fromFFIType hs_bindgen_f7235f6f99c772ca_base
+  fmap BG.fromFFIType hs_bindgen_f7235f6f99c772ca_base
 
 {-# NOINLINE sDL_SetGamepadMapping #-}
 
@@ -985,7 +993,7 @@
 --
 --     [See also]: 'sDL_AddGamepadMapping', 'sDL_GetGamepadMapping'
 --
---     [C declaration]: @SDL_SetGamepadMapping@, defined at @SDL3\/SDL_gamepad.h 508:34@
+--     [C declaration]: @SDL_SetGamepadMapping@, defined at @SDL3\/SDL_gamepad.h 509:34@
 sDL_SetGamepadMapping
   :: BG.FunPtr (SDL3.Sys.Bindgen.Joystick.SDL_JoystickID -> PtrConst.PtrConst BG.CChar -> IO BG.CBool)
 sDL_SetGamepadMapping =
@@ -999,7 +1007,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_get_SDL_HasGamepad@
 hs_bindgen_171b935423ed7323 :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_171b935423ed7323 =
-  BG.fromFFIType hs_bindgen_171b935423ed7323_base
+  fmap BG.fromFFIType hs_bindgen_171b935423ed7323_base
 
 {-# NOINLINE sDL_HasGamepad #-}
 
@@ -1013,7 +1021,7 @@
 --
 --     [See also]: 'sDL_GetGamepads'
 --
---     [C declaration]: @SDL_HasGamepad@, defined at @SDL3\/SDL_gamepad.h 521:34@
+--     [C declaration]: @SDL_HasGamepad@, defined at @SDL3\/SDL_gamepad.h 522:34@
 sDL_HasGamepad :: BG.FunPtr (IO BG.CBool)
 sDL_HasGamepad =
   BG.unsafePerformIO hs_bindgen_171b935423ed7323
@@ -1027,7 +1035,7 @@
 hs_bindgen_095806a9813b5184
   :: IO (BG.FunPtr (BG.Ptr BG.CInt -> IO (BG.Ptr SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)))
 hs_bindgen_095806a9813b5184 =
-  BG.fromFFIType hs_bindgen_095806a9813b5184_base
+  fmap BG.fromFFIType hs_bindgen_095806a9813b5184_base
 
 {-# NOINLINE sDL_GetGamepads #-}
 
@@ -1043,7 +1051,7 @@
 --
 --     [See also]: 'sDL_HasGamepad', 'sDL_OpenGamepad'
 --
---     [C declaration]: @SDL_GetGamepads@, defined at @SDL3\/SDL_gamepad.h 539:46@
+--     [C declaration]: @SDL_GetGamepads@, defined at @SDL3\/SDL_gamepad.h 540:46@
 sDL_GetGamepads
   :: BG.FunPtr (BG.Ptr BG.CInt -> IO (BG.Ptr SDL3.Sys.Bindgen.Joystick.SDL_JoystickID))
 sDL_GetGamepads =
@@ -1058,7 +1066,7 @@
 hs_bindgen_d37b79b846feea5a
   :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Joystick.SDL_JoystickID -> IO BG.CBool))
 hs_bindgen_d37b79b846feea5a =
-  BG.fromFFIType hs_bindgen_d37b79b846feea5a_base
+  fmap BG.fromFFIType hs_bindgen_d37b79b846feea5a_base
 
 {-# NOINLINE sDL_IsGamepad #-}
 
@@ -1074,7 +1082,7 @@
 --
 --     [See also]: SDL_GetJoysticks, 'sDL_OpenGamepad'
 --
---     [C declaration]: @SDL_IsGamepad@, defined at @SDL3\/SDL_gamepad.h 555:34@
+--     [C declaration]: @SDL_IsGamepad@, defined at @SDL3\/SDL_gamepad.h 556:34@
 sDL_IsGamepad :: BG.FunPtr (SDL3.Sys.Bindgen.Joystick.SDL_JoystickID -> IO BG.CBool)
 sDL_IsGamepad =
   BG.unsafePerformIO hs_bindgen_d37b79b846feea5a
@@ -1088,7 +1096,7 @@
 hs_bindgen_4149d7834c57d24c
   :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Joystick.SDL_JoystickID -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_4149d7834c57d24c =
-  BG.fromFFIType hs_bindgen_4149d7834c57d24c_base
+  fmap BG.fromFFIType hs_bindgen_4149d7834c57d24c_base
 
 {-# NOINLINE sDL_GetGamepadNameForID #-}
 
@@ -1106,7 +1114,7 @@
 --
 --     [See also]: 'sDL_GetGamepadName', 'sDL_GetGamepads'
 --
---     [C declaration]: @SDL_GetGamepadNameForID@, defined at @SDL3\/SDL_gamepad.h 573:42@
+--     [C declaration]: @SDL_GetGamepadNameForID@, defined at @SDL3\/SDL_gamepad.h 574:42@
 sDL_GetGamepadNameForID
   :: BG.FunPtr (SDL3.Sys.Bindgen.Joystick.SDL_JoystickID -> IO (PtrConst.PtrConst BG.CChar))
 sDL_GetGamepadNameForID =
@@ -1121,7 +1129,7 @@
 hs_bindgen_e6466e1cd168d223
   :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Joystick.SDL_JoystickID -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_e6466e1cd168d223 =
-  BG.fromFFIType hs_bindgen_e6466e1cd168d223_base
+  fmap BG.fromFFIType hs_bindgen_e6466e1cd168d223_base
 
 {-# NOINLINE sDL_GetGamepadPathForID #-}
 
@@ -1139,7 +1147,7 @@
 --
 --     [See also]: 'sDL_GetGamepadPath', 'sDL_GetGamepads'
 --
---     [C declaration]: @SDL_GetGamepadPathForID@, defined at @SDL3\/SDL_gamepad.h 591:42@
+--     [C declaration]: @SDL_GetGamepadPathForID@, defined at @SDL3\/SDL_gamepad.h 592:42@
 sDL_GetGamepadPathForID
   :: BG.FunPtr (SDL3.Sys.Bindgen.Joystick.SDL_JoystickID -> IO (PtrConst.PtrConst BG.CChar))
 sDL_GetGamepadPathForID =
@@ -1154,7 +1162,7 @@
 hs_bindgen_2b10ba6f8bda9f40
   :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Joystick.SDL_JoystickID -> IO BG.CInt))
 hs_bindgen_2b10ba6f8bda9f40 =
-  BG.fromFFIType hs_bindgen_2b10ba6f8bda9f40_base
+  fmap BG.fromFFIType hs_bindgen_2b10ba6f8bda9f40_base
 
 {-# NOINLINE sDL_GetGamepadPlayerIndexForID #-}
 
@@ -1172,7 +1180,7 @@
 --
 --     [See also]: 'sDL_GetGamepadPlayerIndex', 'sDL_GetGamepads'
 --
---     [C declaration]: @SDL_GetGamepadPlayerIndexForID@, defined at @SDL3\/SDL_gamepad.h 608:33@
+--     [C declaration]: @SDL_GetGamepadPlayerIndexForID@, defined at @SDL3\/SDL_gamepad.h 609:33@
 sDL_GetGamepadPlayerIndexForID :: BG.FunPtr (SDL3.Sys.Bindgen.Joystick.SDL_JoystickID -> IO BG.CInt)
 sDL_GetGamepadPlayerIndexForID =
   BG.unsafePerformIO hs_bindgen_2b10ba6f8bda9f40
@@ -1186,7 +1194,7 @@
 hs_bindgen_a8f30b2ab2c4c03d
   :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Joystick.SDL_JoystickID -> IO SDL3.Sys.Bindgen.Guid.SDL_GUID))
 hs_bindgen_a8f30b2ab2c4c03d =
-  BG.fromFFIType hs_bindgen_a8f30b2ab2c4c03d_base
+  fmap BG.fromFFIType hs_bindgen_a8f30b2ab2c4c03d_base
 
 {-# NOINLINE sDL_GetGamepadGUIDForID #-}
 
@@ -1204,7 +1212,7 @@
 --
 --     [See also]: SDL_GUIDToString, 'sDL_GetGamepads'
 --
---     [C declaration]: @SDL_GetGamepadGUIDForID@, defined at @SDL3\/SDL_gamepad.h 626:38@
+--     [C declaration]: @SDL_GetGamepadGUIDForID@, defined at @SDL3\/SDL_gamepad.h 627:38@
 sDL_GetGamepadGUIDForID
   :: BG.FunPtr (SDL3.Sys.Bindgen.Joystick.SDL_JoystickID -> IO SDL3.Sys.Bindgen.Guid.SDL_GUID)
 sDL_GetGamepadGUIDForID =
@@ -1219,7 +1227,7 @@
 hs_bindgen_1c8946f34d79c303
   :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Joystick.SDL_JoystickID -> IO SDL3.Sys.Bindgen.Stdinc.Uint16))
 hs_bindgen_1c8946f34d79c303 =
-  BG.fromFFIType hs_bindgen_1c8946f34d79c303_base
+  fmap BG.fromFFIType hs_bindgen_1c8946f34d79c303_base
 
 {-# NOINLINE sDL_GetGamepadVendorForID #-}
 
@@ -1237,7 +1245,7 @@
 --
 --     [See also]: 'sDL_GetGamepadVendor', 'sDL_GetGamepads'
 --
---     [C declaration]: @SDL_GetGamepadVendorForID@, defined at @SDL3\/SDL_gamepad.h 645:36@
+--     [C declaration]: @SDL_GetGamepadVendorForID@, defined at @SDL3\/SDL_gamepad.h 646:36@
 sDL_GetGamepadVendorForID
   :: BG.FunPtr (SDL3.Sys.Bindgen.Joystick.SDL_JoystickID -> IO SDL3.Sys.Bindgen.Stdinc.Uint16)
 sDL_GetGamepadVendorForID =
@@ -1252,7 +1260,7 @@
 hs_bindgen_edfc500830dad203
   :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Joystick.SDL_JoystickID -> IO SDL3.Sys.Bindgen.Stdinc.Uint16))
 hs_bindgen_edfc500830dad203 =
-  BG.fromFFIType hs_bindgen_edfc500830dad203_base
+  fmap BG.fromFFIType hs_bindgen_edfc500830dad203_base
 
 {-# NOINLINE sDL_GetGamepadProductForID #-}
 
@@ -1270,7 +1278,7 @@
 --
 --     [See also]: 'sDL_GetGamepadProduct', 'sDL_GetGamepads'
 --
---     [C declaration]: @SDL_GetGamepadProductForID@, defined at @SDL3\/SDL_gamepad.h 664:36@
+--     [C declaration]: @SDL_GetGamepadProductForID@, defined at @SDL3\/SDL_gamepad.h 665:36@
 sDL_GetGamepadProductForID
   :: BG.FunPtr (SDL3.Sys.Bindgen.Joystick.SDL_JoystickID -> IO SDL3.Sys.Bindgen.Stdinc.Uint16)
 sDL_GetGamepadProductForID =
@@ -1285,7 +1293,7 @@
 hs_bindgen_ccbc199841dd7663
   :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Joystick.SDL_JoystickID -> IO SDL3.Sys.Bindgen.Stdinc.Uint16))
 hs_bindgen_ccbc199841dd7663 =
-  BG.fromFFIType hs_bindgen_ccbc199841dd7663_base
+  fmap BG.fromFFIType hs_bindgen_ccbc199841dd7663_base
 
 {-# NOINLINE sDL_GetGamepadProductVersionForID #-}
 
@@ -1303,7 +1311,7 @@
 --
 --     [See also]: 'sDL_GetGamepadProductVersion', 'sDL_GetGamepads'
 --
---     [C declaration]: @SDL_GetGamepadProductVersionForID@, defined at @SDL3\/SDL_gamepad.h 683:36@
+--     [C declaration]: @SDL_GetGamepadProductVersionForID@, defined at @SDL3\/SDL_gamepad.h 684:36@
 sDL_GetGamepadProductVersionForID
   :: BG.FunPtr (SDL3.Sys.Bindgen.Joystick.SDL_JoystickID -> IO SDL3.Sys.Bindgen.Stdinc.Uint16)
 sDL_GetGamepadProductVersionForID =
@@ -1318,7 +1326,7 @@
 hs_bindgen_a56519061f425d2d
   :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Joystick.SDL_JoystickID -> IO SDL_GamepadType))
 hs_bindgen_a56519061f425d2d =
-  BG.fromFFIType hs_bindgen_a56519061f425d2d_base
+  fmap BG.fromFFIType hs_bindgen_a56519061f425d2d_base
 
 {-# NOINLINE sDL_GetGamepadTypeForID #-}
 
@@ -1336,7 +1344,7 @@
 --
 --     [See also]: 'sDL_GetGamepadType', 'sDL_GetGamepads', 'sDL_GetRealGamepadTypeForID'
 --
---     [C declaration]: @SDL_GetGamepadTypeForID@, defined at @SDL3\/SDL_gamepad.h 701:45@
+--     [C declaration]: @SDL_GetGamepadTypeForID@, defined at @SDL3\/SDL_gamepad.h 702:45@
 sDL_GetGamepadTypeForID
   :: BG.FunPtr (SDL3.Sys.Bindgen.Joystick.SDL_JoystickID -> IO SDL_GamepadType)
 sDL_GetGamepadTypeForID =
@@ -1351,7 +1359,7 @@
 hs_bindgen_ea844fcc269b3863
   :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Joystick.SDL_JoystickID -> IO SDL_GamepadType))
 hs_bindgen_ea844fcc269b3863 =
-  BG.fromFFIType hs_bindgen_ea844fcc269b3863_base
+  fmap BG.fromFFIType hs_bindgen_ea844fcc269b3863_base
 
 {-# NOINLINE sDL_GetRealGamepadTypeForID #-}
 
@@ -1369,7 +1377,7 @@
 --
 --     [See also]: 'sDL_GetGamepadTypeForID', 'sDL_GetGamepads', 'sDL_GetRealGamepadType'
 --
---     [C declaration]: @SDL_GetRealGamepadTypeForID@, defined at @SDL3\/SDL_gamepad.h 719:45@
+--     [C declaration]: @SDL_GetRealGamepadTypeForID@, defined at @SDL3\/SDL_gamepad.h 720:45@
 sDL_GetRealGamepadTypeForID
   :: BG.FunPtr (SDL3.Sys.Bindgen.Joystick.SDL_JoystickID -> IO SDL_GamepadType)
 sDL_GetRealGamepadTypeForID =
@@ -1384,7 +1392,7 @@
 hs_bindgen_3a88aaf2c38a542b
   :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Joystick.SDL_JoystickID -> IO (BG.Ptr BG.CChar)))
 hs_bindgen_3a88aaf2c38a542b =
-  BG.fromFFIType hs_bindgen_3a88aaf2c38a542b_base
+  fmap BG.fromFFIType hs_bindgen_3a88aaf2c38a542b_base
 
 {-# NOINLINE sDL_GetGamepadMappingForID #-}
 
@@ -1402,7 +1410,7 @@
 --
 --     [See also]: 'sDL_GetGamepads', 'sDL_GetGamepadMapping'
 --
---     [C declaration]: @SDL_GetGamepadMappingForID@, defined at @SDL3\/SDL_gamepad.h 737:36@
+--     [C declaration]: @SDL_GetGamepadMappingForID@, defined at @SDL3\/SDL_gamepad.h 738:36@
 sDL_GetGamepadMappingForID
   :: BG.FunPtr (SDL3.Sys.Bindgen.Joystick.SDL_JoystickID -> IO (BG.Ptr BG.CChar))
 sDL_GetGamepadMappingForID =
@@ -1417,7 +1425,7 @@
 hs_bindgen_d2263d27295e9ca6
   :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Joystick.SDL_JoystickID -> IO (BG.Ptr SDL_Gamepad)))
 hs_bindgen_d2263d27295e9ca6 =
-  BG.fromFFIType hs_bindgen_d2263d27295e9ca6_base
+  fmap BG.fromFFIType hs_bindgen_d2263d27295e9ca6_base
 
 {-# NOINLINE sDL_OpenGamepad #-}
 
@@ -1433,7 +1441,7 @@
 --
 --     [See also]: 'sDL_CloseGamepad', 'sDL_IsGamepad'
 --
---     [C declaration]: @SDL_OpenGamepad@, defined at @SDL3\/SDL_gamepad.h 753:43@
+--     [C declaration]: @SDL_OpenGamepad@, defined at @SDL3\/SDL_gamepad.h 754:43@
 sDL_OpenGamepad :: BG.FunPtr (SDL3.Sys.Bindgen.Joystick.SDL_JoystickID -> IO (BG.Ptr SDL_Gamepad))
 sDL_OpenGamepad =
   BG.unsafePerformIO hs_bindgen_d2263d27295e9ca6
@@ -1447,7 +1455,7 @@
 hs_bindgen_a2eccf4e721a7b78
   :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Joystick.SDL_JoystickID -> IO (BG.Ptr SDL_Gamepad)))
 hs_bindgen_a2eccf4e721a7b78 =
-  BG.fromFFIType hs_bindgen_a2eccf4e721a7b78_base
+  fmap BG.fromFFIType hs_bindgen_a2eccf4e721a7b78_base
 
 {-# NOINLINE sDL_GetGamepadFromID #-}
 
@@ -1461,7 +1469,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadFromID@, defined at @SDL3\/SDL_gamepad.h 767:43@
+--     [C declaration]: @SDL_GetGamepadFromID@, defined at @SDL3\/SDL_gamepad.h 768:43@
 sDL_GetGamepadFromID
   :: BG.FunPtr (SDL3.Sys.Bindgen.Joystick.SDL_JoystickID -> IO (BG.Ptr SDL_Gamepad))
 sDL_GetGamepadFromID =
@@ -1475,7 +1483,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_get_SDL_GetGamepadFromPlayerIndex@
 hs_bindgen_d5762153bda1c5a2 :: IO (BG.FunPtr (BG.CInt -> IO (BG.Ptr SDL_Gamepad)))
 hs_bindgen_d5762153bda1c5a2 =
-  BG.fromFFIType hs_bindgen_d5762153bda1c5a2_base
+  fmap BG.fromFFIType hs_bindgen_d5762153bda1c5a2_base
 
 {-# NOINLINE sDL_GetGamepadFromPlayerIndex #-}
 
@@ -1491,7 +1499,7 @@
 --
 --     [See also]: 'sDL_GetGamepadPlayerIndex', 'sDL_SetGamepadPlayerIndex'
 --
---     [C declaration]: @SDL_GetGamepadFromPlayerIndex@, defined at @SDL3\/SDL_gamepad.h 782:43@
+--     [C declaration]: @SDL_GetGamepadFromPlayerIndex@, defined at @SDL3\/SDL_gamepad.h 783:43@
 sDL_GetGamepadFromPlayerIndex :: BG.FunPtr (BG.CInt -> IO (BG.Ptr SDL_Gamepad))
 sDL_GetGamepadFromPlayerIndex =
   BG.unsafePerformIO hs_bindgen_d5762153bda1c5a2
@@ -1505,7 +1513,7 @@
 hs_bindgen_f6b1c3e515df26bf
   :: IO (BG.FunPtr (BG.Ptr SDL_Gamepad -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID))
 hs_bindgen_f6b1c3e515df26bf =
-  BG.fromFFIType hs_bindgen_f6b1c3e515df26bf_base
+  fmap BG.fromFFIType hs_bindgen_f6b1c3e515df26bf_base
 
 {-# NOINLINE sDL_GetGamepadProperties #-}
 
@@ -1533,7 +1541,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadProperties@, defined at @SDL3\/SDL_gamepad.h 811:46@
+--     [C declaration]: @SDL_GetGamepadProperties@, defined at @SDL3\/SDL_gamepad.h 812:46@
 sDL_GetGamepadProperties
   :: BG.FunPtr (BG.Ptr SDL_Gamepad -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID)
 sDL_GetGamepadProperties =
@@ -1548,7 +1556,7 @@
 hs_bindgen_aeb6f834f1bb9bba
   :: IO (BG.FunPtr (BG.Ptr SDL_Gamepad -> IO SDL3.Sys.Bindgen.Joystick.SDL_JoystickID))
 hs_bindgen_aeb6f834f1bb9bba =
-  BG.fromFFIType hs_bindgen_aeb6f834f1bb9bba_base
+  fmap BG.fromFFIType hs_bindgen_aeb6f834f1bb9bba_base
 
 {-# NOINLINE sDL_GetGamepadID #-}
 
@@ -1562,7 +1570,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadID@, defined at @SDL3\/SDL_gamepad.h 831:44@
+--     [C declaration]: @SDL_GetGamepadID@, defined at @SDL3\/SDL_gamepad.h 832:44@
 sDL_GetGamepadID :: BG.FunPtr (BG.Ptr SDL_Gamepad -> IO SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
 sDL_GetGamepadID =
   BG.unsafePerformIO hs_bindgen_aeb6f834f1bb9bba
@@ -1576,7 +1584,7 @@
 hs_bindgen_a6ba120e3c657e82
   :: IO (BG.FunPtr (BG.Ptr SDL_Gamepad -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_a6ba120e3c657e82 =
-  BG.fromFFIType hs_bindgen_a6ba120e3c657e82_base
+  fmap BG.fromFFIType hs_bindgen_a6ba120e3c657e82_base
 
 {-# NOINLINE sDL_GetGamepadName #-}
 
@@ -1592,7 +1600,7 @@
 --
 --     [See also]: 'sDL_GetGamepadNameForID'
 --
---     [C declaration]: @SDL_GetGamepadName@, defined at @SDL3\/SDL_gamepad.h 847:42@
+--     [C declaration]: @SDL_GetGamepadName@, defined at @SDL3\/SDL_gamepad.h 848:42@
 sDL_GetGamepadName :: BG.FunPtr (BG.Ptr SDL_Gamepad -> IO (PtrConst.PtrConst BG.CChar))
 sDL_GetGamepadName =
   BG.unsafePerformIO hs_bindgen_a6ba120e3c657e82
@@ -1606,7 +1614,7 @@
 hs_bindgen_25cf3224bc5505cc
   :: IO (BG.FunPtr (BG.Ptr SDL_Gamepad -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_25cf3224bc5505cc =
-  BG.fromFFIType hs_bindgen_25cf3224bc5505cc_base
+  fmap BG.fromFFIType hs_bindgen_25cf3224bc5505cc_base
 
 {-# NOINLINE sDL_GetGamepadPath #-}
 
@@ -1622,7 +1630,7 @@
 --
 --     [See also]: 'sDL_GetGamepadPathForID'
 --
---     [C declaration]: @SDL_GetGamepadPath@, defined at @SDL3\/SDL_gamepad.h 863:42@
+--     [C declaration]: @SDL_GetGamepadPath@, defined at @SDL3\/SDL_gamepad.h 864:42@
 sDL_GetGamepadPath :: BG.FunPtr (BG.Ptr SDL_Gamepad -> IO (PtrConst.PtrConst BG.CChar))
 sDL_GetGamepadPath =
   BG.unsafePerformIO hs_bindgen_25cf3224bc5505cc
@@ -1635,7 +1643,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_get_SDL_GetGamepadType@
 hs_bindgen_131b0de798357722 :: IO (BG.FunPtr (BG.Ptr SDL_Gamepad -> IO SDL_GamepadType))
 hs_bindgen_131b0de798357722 =
-  BG.fromFFIType hs_bindgen_131b0de798357722_base
+  fmap BG.fromFFIType hs_bindgen_131b0de798357722_base
 
 {-# NOINLINE sDL_GetGamepadType #-}
 
@@ -1651,7 +1659,7 @@
 --
 --     [See also]: 'sDL_GetGamepadTypeForID'
 --
---     [C declaration]: @SDL_GetGamepadType@, defined at @SDL3\/SDL_gamepad.h 878:45@
+--     [C declaration]: @SDL_GetGamepadType@, defined at @SDL3\/SDL_gamepad.h 879:45@
 sDL_GetGamepadType :: BG.FunPtr (BG.Ptr SDL_Gamepad -> IO SDL_GamepadType)
 sDL_GetGamepadType =
   BG.unsafePerformIO hs_bindgen_131b0de798357722
@@ -1664,7 +1672,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_get_SDL_GetRealGamepadType@
 hs_bindgen_299f836c8b95a4d8 :: IO (BG.FunPtr (BG.Ptr SDL_Gamepad -> IO SDL_GamepadType))
 hs_bindgen_299f836c8b95a4d8 =
-  BG.fromFFIType hs_bindgen_299f836c8b95a4d8_base
+  fmap BG.fromFFIType hs_bindgen_299f836c8b95a4d8_base
 
 {-# NOINLINE sDL_GetRealGamepadType #-}
 
@@ -1680,7 +1688,7 @@
 --
 --     [See also]: 'sDL_GetRealGamepadTypeForID'
 --
---     [C declaration]: @SDL_GetRealGamepadType@, defined at @SDL3\/SDL_gamepad.h 893:45@
+--     [C declaration]: @SDL_GetRealGamepadType@, defined at @SDL3\/SDL_gamepad.h 894:45@
 sDL_GetRealGamepadType :: BG.FunPtr (BG.Ptr SDL_Gamepad -> IO SDL_GamepadType)
 sDL_GetRealGamepadType =
   BG.unsafePerformIO hs_bindgen_299f836c8b95a4d8
@@ -1693,7 +1701,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_get_SDL_GetGamepadPlayerIndex@
 hs_bindgen_c48d71502b4eef8f :: IO (BG.FunPtr (BG.Ptr SDL_Gamepad -> IO BG.CInt))
 hs_bindgen_c48d71502b4eef8f =
-  BG.fromFFIType hs_bindgen_c48d71502b4eef8f_base
+  fmap BG.fromFFIType hs_bindgen_c48d71502b4eef8f_base
 
 {-# NOINLINE sDL_GetGamepadPlayerIndex #-}
 
@@ -1711,7 +1719,7 @@
 --
 --     [See also]: 'sDL_SetGamepadPlayerIndex'
 --
---     [C declaration]: @SDL_GetGamepadPlayerIndex@, defined at @SDL3\/SDL_gamepad.h 909:33@
+--     [C declaration]: @SDL_GetGamepadPlayerIndex@, defined at @SDL3\/SDL_gamepad.h 910:33@
 sDL_GetGamepadPlayerIndex :: BG.FunPtr (BG.Ptr SDL_Gamepad -> IO BG.CInt)
 sDL_GetGamepadPlayerIndex =
   BG.unsafePerformIO hs_bindgen_c48d71502b4eef8f
@@ -1724,7 +1732,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_get_SDL_SetGamepadPlayerIndex@
 hs_bindgen_90716136f5deb4d3 :: IO (BG.FunPtr (BG.Ptr SDL_Gamepad -> BG.CInt -> IO BG.CBool))
 hs_bindgen_90716136f5deb4d3 =
-  BG.fromFFIType hs_bindgen_90716136f5deb4d3_base
+  fmap BG.fromFFIType hs_bindgen_90716136f5deb4d3_base
 
 {-# NOINLINE sDL_SetGamepadPlayerIndex #-}
 
@@ -1742,7 +1750,7 @@
 --
 --     [See also]: 'sDL_GetGamepadPlayerIndex'
 --
---     [C declaration]: @SDL_SetGamepadPlayerIndex@, defined at @SDL3\/SDL_gamepad.h 926:34@
+--     [C declaration]: @SDL_SetGamepadPlayerIndex@, defined at @SDL3\/SDL_gamepad.h 927:34@
 sDL_SetGamepadPlayerIndex :: BG.FunPtr (BG.Ptr SDL_Gamepad -> BG.CInt -> IO BG.CBool)
 sDL_SetGamepadPlayerIndex =
   BG.unsafePerformIO hs_bindgen_90716136f5deb4d3
@@ -1756,7 +1764,7 @@
 hs_bindgen_ffa764d02a95dc96
   :: IO (BG.FunPtr (BG.Ptr SDL_Gamepad -> IO SDL3.Sys.Bindgen.Stdinc.Uint16))
 hs_bindgen_ffa764d02a95dc96 =
-  BG.fromFFIType hs_bindgen_ffa764d02a95dc96_base
+  fmap BG.fromFFIType hs_bindgen_ffa764d02a95dc96_base
 
 {-# NOINLINE sDL_GetGamepadVendor #-}
 
@@ -1774,7 +1782,7 @@
 --
 --     [See also]: 'sDL_GetGamepadVendorForID'
 --
---     [C declaration]: @SDL_GetGamepadVendor@, defined at @SDL3\/SDL_gamepad.h 942:36@
+--     [C declaration]: @SDL_GetGamepadVendor@, defined at @SDL3\/SDL_gamepad.h 943:36@
 sDL_GetGamepadVendor :: BG.FunPtr (BG.Ptr SDL_Gamepad -> IO SDL3.Sys.Bindgen.Stdinc.Uint16)
 sDL_GetGamepadVendor =
   BG.unsafePerformIO hs_bindgen_ffa764d02a95dc96
@@ -1788,7 +1796,7 @@
 hs_bindgen_22ebf47a7ce663ce
   :: IO (BG.FunPtr (BG.Ptr SDL_Gamepad -> IO SDL3.Sys.Bindgen.Stdinc.Uint16))
 hs_bindgen_22ebf47a7ce663ce =
-  BG.fromFFIType hs_bindgen_22ebf47a7ce663ce_base
+  fmap BG.fromFFIType hs_bindgen_22ebf47a7ce663ce_base
 
 {-# NOINLINE sDL_GetGamepadProduct #-}
 
@@ -1806,7 +1814,7 @@
 --
 --     [See also]: 'sDL_GetGamepadProductForID'
 --
---     [C declaration]: @SDL_GetGamepadProduct@, defined at @SDL3\/SDL_gamepad.h 958:36@
+--     [C declaration]: @SDL_GetGamepadProduct@, defined at @SDL3\/SDL_gamepad.h 959:36@
 sDL_GetGamepadProduct :: BG.FunPtr (BG.Ptr SDL_Gamepad -> IO SDL3.Sys.Bindgen.Stdinc.Uint16)
 sDL_GetGamepadProduct =
   BG.unsafePerformIO hs_bindgen_22ebf47a7ce663ce
@@ -1820,7 +1828,7 @@
 hs_bindgen_cb998d733e296e5c
   :: IO (BG.FunPtr (BG.Ptr SDL_Gamepad -> IO SDL3.Sys.Bindgen.Stdinc.Uint16))
 hs_bindgen_cb998d733e296e5c =
-  BG.fromFFIType hs_bindgen_cb998d733e296e5c_base
+  fmap BG.fromFFIType hs_bindgen_cb998d733e296e5c_base
 
 {-# NOINLINE sDL_GetGamepadProductVersion #-}
 
@@ -1838,7 +1846,7 @@
 --
 --     [See also]: 'sDL_GetGamepadProductVersionForID'
 --
---     [C declaration]: @SDL_GetGamepadProductVersion@, defined at @SDL3\/SDL_gamepad.h 974:36@
+--     [C declaration]: @SDL_GetGamepadProductVersion@, defined at @SDL3\/SDL_gamepad.h 975:36@
 sDL_GetGamepadProductVersion :: BG.FunPtr (BG.Ptr SDL_Gamepad -> IO SDL3.Sys.Bindgen.Stdinc.Uint16)
 sDL_GetGamepadProductVersion =
   BG.unsafePerformIO hs_bindgen_cb998d733e296e5c
@@ -1852,7 +1860,7 @@
 hs_bindgen_dddc5b49b1eab050
   :: IO (BG.FunPtr (BG.Ptr SDL_Gamepad -> IO SDL3.Sys.Bindgen.Stdinc.Uint16))
 hs_bindgen_dddc5b49b1eab050 =
-  BG.fromFFIType hs_bindgen_dddc5b49b1eab050_base
+  fmap BG.fromFFIType hs_bindgen_dddc5b49b1eab050_base
 
 {-# NOINLINE sDL_GetGamepadFirmwareVersion #-}
 
@@ -1868,7 +1876,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadFirmwareVersion@, defined at @SDL3\/SDL_gamepad.h 988:36@
+--     [C declaration]: @SDL_GetGamepadFirmwareVersion@, defined at @SDL3\/SDL_gamepad.h 989:36@
 sDL_GetGamepadFirmwareVersion :: BG.FunPtr (BG.Ptr SDL_Gamepad -> IO SDL3.Sys.Bindgen.Stdinc.Uint16)
 sDL_GetGamepadFirmwareVersion =
   BG.unsafePerformIO hs_bindgen_dddc5b49b1eab050
@@ -1882,7 +1890,7 @@
 hs_bindgen_ee2ba2bdd8e4e8f4
   :: IO (BG.FunPtr (BG.Ptr SDL_Gamepad -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_ee2ba2bdd8e4e8f4 =
-  BG.fromFFIType hs_bindgen_ee2ba2bdd8e4e8f4_base
+  fmap BG.fromFFIType hs_bindgen_ee2ba2bdd8e4e8f4_base
 
 {-# NOINLINE sDL_GetGamepadSerial #-}
 
@@ -1898,7 +1906,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadSerial@, defined at @SDL3\/SDL_gamepad.h 1002:42@
+--     [C declaration]: @SDL_GetGamepadSerial@, defined at @SDL3\/SDL_gamepad.h 1003:42@
 sDL_GetGamepadSerial :: BG.FunPtr (BG.Ptr SDL_Gamepad -> IO (PtrConst.PtrConst BG.CChar))
 sDL_GetGamepadSerial =
   BG.unsafePerformIO hs_bindgen_ee2ba2bdd8e4e8f4
@@ -1912,7 +1920,7 @@
 hs_bindgen_3f35ecfbc73c387c
   :: IO (BG.FunPtr (BG.Ptr SDL_Gamepad -> IO SDL3.Sys.Bindgen.Stdinc.Uint64))
 hs_bindgen_3f35ecfbc73c387c =
-  BG.fromFFIType hs_bindgen_3f35ecfbc73c387c_base
+  fmap BG.fromFFIType hs_bindgen_3f35ecfbc73c387c_base
 
 {-# NOINLINE sDL_GetGamepadSteamHandle #-}
 
@@ -1928,7 +1936,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadSteamHandle@, defined at @SDL3\/SDL_gamepad.h 1017:36@
+--     [C declaration]: @SDL_GetGamepadSteamHandle@, defined at @SDL3\/SDL_gamepad.h 1018:36@
 sDL_GetGamepadSteamHandle :: BG.FunPtr (BG.Ptr SDL_Gamepad -> IO SDL3.Sys.Bindgen.Stdinc.Uint64)
 sDL_GetGamepadSteamHandle =
   BG.unsafePerformIO hs_bindgen_3f35ecfbc73c387c
@@ -1942,7 +1950,7 @@
 hs_bindgen_53909ff1f2a38eeb
   :: IO (BG.FunPtr (BG.Ptr SDL_Gamepad -> IO SDL3.Sys.Bindgen.Joystick.SDL_JoystickConnectionState))
 hs_bindgen_53909ff1f2a38eeb =
-  BG.fromFFIType hs_bindgen_53909ff1f2a38eeb_base
+  fmap BG.fromFFIType hs_bindgen_53909ff1f2a38eeb_base
 
 {-# NOINLINE sDL_GetGamepadConnectionState #-}
 
@@ -1956,7 +1964,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadConnectionState@, defined at @SDL3\/SDL_gamepad.h 1031:57@
+--     [C declaration]: @SDL_GetGamepadConnectionState@, defined at @SDL3\/SDL_gamepad.h 1032:57@
 sDL_GetGamepadConnectionState
   :: BG.FunPtr (BG.Ptr SDL_Gamepad -> IO SDL3.Sys.Bindgen.Joystick.SDL_JoystickConnectionState)
 sDL_GetGamepadConnectionState =
@@ -1971,7 +1979,7 @@
 hs_bindgen_c9db854f84cfdf17
   :: IO (BG.FunPtr (BG.Ptr SDL_Gamepad -> BG.Ptr BG.CInt -> IO SDL3.Sys.Bindgen.Power.SDL_PowerState))
 hs_bindgen_c9db854f84cfdf17 =
-  BG.fromFFIType hs_bindgen_c9db854f84cfdf17_base
+  fmap BG.fromFFIType hs_bindgen_c9db854f84cfdf17_base
 
 {-# NOINLINE sDL_GetGamepadPowerInfo #-}
 
@@ -1989,7 +1997,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadPowerInfo@, defined at @SDL3\/SDL_gamepad.h 1053:44@
+--     [C declaration]: @SDL_GetGamepadPowerInfo@, defined at @SDL3\/SDL_gamepad.h 1054:44@
 sDL_GetGamepadPowerInfo
   :: BG.FunPtr (BG.Ptr SDL_Gamepad -> BG.Ptr BG.CInt -> IO SDL3.Sys.Bindgen.Power.SDL_PowerState)
 sDL_GetGamepadPowerInfo =
@@ -2003,7 +2011,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_get_SDL_GamepadConnected@
 hs_bindgen_f53e7088d703eb0d :: IO (BG.FunPtr (BG.Ptr SDL_Gamepad -> IO BG.CBool))
 hs_bindgen_f53e7088d703eb0d =
-  BG.fromFFIType hs_bindgen_f53e7088d703eb0d_base
+  fmap BG.fromFFIType hs_bindgen_f53e7088d703eb0d_base
 
 {-# NOINLINE sDL_GamepadConnected #-}
 
@@ -2017,7 +2025,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GamepadConnected@, defined at @SDL3\/SDL_gamepad.h 1067:34@
+--     [C declaration]: @SDL_GamepadConnected@, defined at @SDL3\/SDL_gamepad.h 1068:34@
 sDL_GamepadConnected :: BG.FunPtr (BG.Ptr SDL_Gamepad -> IO BG.CBool)
 sDL_GamepadConnected =
   BG.unsafePerformIO hs_bindgen_f53e7088d703eb0d
@@ -2031,7 +2039,7 @@
 hs_bindgen_437957a44b873407
   :: IO (BG.FunPtr (BG.Ptr SDL_Gamepad -> IO (BG.Ptr SDL3.Sys.Bindgen.Joystick.SDL_Joystick)))
 hs_bindgen_437957a44b873407 =
-  BG.fromFFIType hs_bindgen_437957a44b873407_base
+  fmap BG.fromFFIType hs_bindgen_437957a44b873407_base
 
 {-# NOINLINE sDL_GetGamepadJoystick #-}
 
@@ -2049,7 +2057,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadJoystick@, defined at @SDL3\/SDL_gamepad.h 1089:44@
+--     [C declaration]: @SDL_GetGamepadJoystick@, defined at @SDL3\/SDL_gamepad.h 1090:44@
 sDL_GetGamepadJoystick
   :: BG.FunPtr (BG.Ptr SDL_Gamepad -> IO (BG.Ptr SDL3.Sys.Bindgen.Joystick.SDL_Joystick))
 sDL_GetGamepadJoystick =
@@ -2063,7 +2071,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_get_SDL_SetGamepadEventsEnabled@
 hs_bindgen_bd360bbccf8e02d1 :: IO (BG.FunPtr (BG.CBool -> IO ()))
 hs_bindgen_bd360bbccf8e02d1 =
-  BG.fromFFIType hs_bindgen_bd360bbccf8e02d1_base
+  fmap BG.fromFFIType hs_bindgen_bd360bbccf8e02d1_base
 
 {-# NOINLINE sDL_SetGamepadEventsEnabled #-}
 
@@ -2079,7 +2087,7 @@
 --
 --     [See also]: 'sDL_GamepadEventsEnabled', 'sDL_UpdateGamepads'
 --
---     [C declaration]: @SDL_SetGamepadEventsEnabled@, defined at @SDL3\/SDL_gamepad.h 1106:34@
+--     [C declaration]: @SDL_SetGamepadEventsEnabled@, defined at @SDL3\/SDL_gamepad.h 1107:34@
 sDL_SetGamepadEventsEnabled :: BG.FunPtr (BG.CBool -> IO ())
 sDL_SetGamepadEventsEnabled =
   BG.unsafePerformIO hs_bindgen_bd360bbccf8e02d1
@@ -2092,7 +2100,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_get_SDL_GamepadEventsEnabled@
 hs_bindgen_495749302a88fada :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_495749302a88fada =
-  BG.fromFFIType hs_bindgen_495749302a88fada_base
+  fmap BG.fromFFIType hs_bindgen_495749302a88fada_base
 
 {-# NOINLINE sDL_GamepadEventsEnabled #-}
 
@@ -2108,7 +2116,7 @@
 --
 --     [See also]: 'sDL_SetGamepadEventsEnabled'
 --
---     [C declaration]: @SDL_GamepadEventsEnabled@, defined at @SDL3\/SDL_gamepad.h 1122:34@
+--     [C declaration]: @SDL_GamepadEventsEnabled@, defined at @SDL3\/SDL_gamepad.h 1123:34@
 sDL_GamepadEventsEnabled :: BG.FunPtr (IO BG.CBool)
 sDL_GamepadEventsEnabled =
   BG.unsafePerformIO hs_bindgen_495749302a88fada
@@ -2122,7 +2130,7 @@
 hs_bindgen_3bbe8c4408199173
   :: IO (BG.FunPtr (BG.Ptr SDL_Gamepad -> BG.Ptr BG.CInt -> IO (BG.Ptr (BG.Ptr SDL_GamepadBinding))))
 hs_bindgen_3bbe8c4408199173 =
-  BG.fromFFIType hs_bindgen_3bbe8c4408199173_base
+  fmap BG.fromFFIType hs_bindgen_3bbe8c4408199173_base
 
 {-# NOINLINE sDL_GetGamepadBindings #-}
 
@@ -2138,7 +2146,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadBindings@, defined at @SDL3\/SDL_gamepad.h 1138:51@
+--     [C declaration]: @SDL_GetGamepadBindings@, defined at @SDL3\/SDL_gamepad.h 1139:51@
 sDL_GetGamepadBindings
   :: BG.FunPtr (BG.Ptr SDL_Gamepad -> BG.Ptr BG.CInt -> IO (BG.Ptr (BG.Ptr SDL_GamepadBinding)))
 sDL_GetGamepadBindings =
@@ -2152,7 +2160,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_get_SDL_UpdateGamepads@
 hs_bindgen_3029fdebe260ad88 :: IO (BG.FunPtr (IO ()))
 hs_bindgen_3029fdebe260ad88 =
-  BG.fromFFIType hs_bindgen_3029fdebe260ad88_base
+  fmap BG.fromFFIType hs_bindgen_3029fdebe260ad88_base
 
 {-# NOINLINE sDL_UpdateGamepads #-}
 
@@ -2164,7 +2172,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_UpdateGamepads@, defined at @SDL3\/SDL_gamepad.h 1151:34@
+--     [C declaration]: @SDL_UpdateGamepads@, defined at @SDL3\/SDL_gamepad.h 1152:34@
 sDL_UpdateGamepads :: BG.FunPtr (IO ())
 sDL_UpdateGamepads =
   BG.unsafePerformIO hs_bindgen_3029fdebe260ad88
@@ -2177,7 +2185,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_get_SDL_GetGamepadTypeFromString@
 hs_bindgen_919d1827bf3ece38 :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO SDL_GamepadType))
 hs_bindgen_919d1827bf3ece38 =
-  BG.fromFFIType hs_bindgen_919d1827bf3ece38_base
+  fmap BG.fromFFIType hs_bindgen_919d1827bf3ece38_base
 
 {-# NOINLINE sDL_GetGamepadTypeFromString #-}
 
@@ -2195,7 +2203,7 @@
 --
 --     [See also]: 'sDL_GetGamepadStringForType'
 --
---     [C declaration]: @SDL_GetGamepadTypeFromString@, defined at @SDL3\/SDL_gamepad.h 1171:45@
+--     [C declaration]: @SDL_GetGamepadTypeFromString@, defined at @SDL3\/SDL_gamepad.h 1172:45@
 sDL_GetGamepadTypeFromString :: BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO SDL_GamepadType)
 sDL_GetGamepadTypeFromString =
   BG.unsafePerformIO hs_bindgen_919d1827bf3ece38
@@ -2208,7 +2216,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_get_SDL_GetGamepadStringForType@
 hs_bindgen_e0a2bc0194ece97f :: IO (BG.FunPtr (SDL_GamepadType -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_e0a2bc0194ece97f =
-  BG.fromFFIType hs_bindgen_e0a2bc0194ece97f_base
+  fmap BG.fromFFIType hs_bindgen_e0a2bc0194ece97f_base
 
 {-# NOINLINE sDL_GetGamepadStringForType #-}
 
@@ -2224,7 +2232,7 @@
 --
 --     [See also]: 'sDL_GetGamepadTypeFromString'
 --
---     [C declaration]: @SDL_GetGamepadStringForType@, defined at @SDL3\/SDL_gamepad.h 1187:42@
+--     [C declaration]: @SDL_GetGamepadStringForType@, defined at @SDL3\/SDL_gamepad.h 1188:42@
 sDL_GetGamepadStringForType :: BG.FunPtr (SDL_GamepadType -> IO (PtrConst.PtrConst BG.CChar))
 sDL_GetGamepadStringForType =
   BG.unsafePerformIO hs_bindgen_e0a2bc0194ece97f
@@ -2237,7 +2245,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_get_SDL_GetGamepadAxisFromString@
 hs_bindgen_3e2dae12c3051365 :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO SDL_GamepadAxis))
 hs_bindgen_3e2dae12c3051365 =
-  BG.fromFFIType hs_bindgen_3e2dae12c3051365_base
+  fmap BG.fromFFIType hs_bindgen_3e2dae12c3051365_base
 
 {-# NOINLINE sDL_GetGamepadAxisFromString #-}
 
@@ -2257,7 +2265,7 @@
 --
 --     [See also]: 'sDL_GetGamepadStringForAxis'
 --
---     [C declaration]: @SDL_GetGamepadAxisFromString@, defined at @SDL3\/SDL_gamepad.h 1211:45@
+--     [C declaration]: @SDL_GetGamepadAxisFromString@, defined at @SDL3\/SDL_gamepad.h 1212:45@
 sDL_GetGamepadAxisFromString :: BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO SDL_GamepadAxis)
 sDL_GetGamepadAxisFromString =
   BG.unsafePerformIO hs_bindgen_3e2dae12c3051365
@@ -2270,7 +2278,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_get_SDL_GetGamepadStringForAxis@
 hs_bindgen_4979edfa77e4fc76 :: IO (BG.FunPtr (SDL_GamepadAxis -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_4979edfa77e4fc76 =
-  BG.fromFFIType hs_bindgen_4979edfa77e4fc76_base
+  fmap BG.fromFFIType hs_bindgen_4979edfa77e4fc76_base
 
 {-# NOINLINE sDL_GetGamepadStringForAxis #-}
 
@@ -2286,7 +2294,7 @@
 --
 --     [See also]: 'sDL_GetGamepadAxisFromString'
 --
---     [C declaration]: @SDL_GetGamepadStringForAxis@, defined at @SDL3\/SDL_gamepad.h 1227:42@
+--     [C declaration]: @SDL_GetGamepadStringForAxis@, defined at @SDL3\/SDL_gamepad.h 1228:42@
 sDL_GetGamepadStringForAxis :: BG.FunPtr (SDL_GamepadAxis -> IO (PtrConst.PtrConst BG.CChar))
 sDL_GetGamepadStringForAxis =
   BG.unsafePerformIO hs_bindgen_4979edfa77e4fc76
@@ -2299,7 +2307,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_get_SDL_GamepadHasAxis@
 hs_bindgen_3ea6abfb2ca9a69e :: IO (BG.FunPtr (BG.Ptr SDL_Gamepad -> SDL_GamepadAxis -> IO BG.CBool))
 hs_bindgen_3ea6abfb2ca9a69e =
-  BG.fromFFIType hs_bindgen_3ea6abfb2ca9a69e_base
+  fmap BG.fromFFIType hs_bindgen_3ea6abfb2ca9a69e_base
 
 {-# NOINLINE sDL_GamepadHasAxis #-}
 
@@ -2319,7 +2327,7 @@
 --
 --     [See also]: 'sDL_GamepadHasButton', 'sDL_GetGamepadAxis'
 --
---     [C declaration]: @SDL_GamepadHasAxis@, defined at @SDL3\/SDL_gamepad.h 1246:34@
+--     [C declaration]: @SDL_GamepadHasAxis@, defined at @SDL3\/SDL_gamepad.h 1247:34@
 sDL_GamepadHasAxis :: BG.FunPtr (BG.Ptr SDL_Gamepad -> SDL_GamepadAxis -> IO BG.CBool)
 sDL_GamepadHasAxis =
   BG.unsafePerformIO hs_bindgen_3ea6abfb2ca9a69e
@@ -2333,7 +2341,7 @@
 hs_bindgen_a8dfd9fddde7c51f
   :: IO (BG.FunPtr (BG.Ptr SDL_Gamepad -> SDL_GamepadAxis -> IO SDL3.Sys.Bindgen.Stdinc.Sint16))
 hs_bindgen_a8dfd9fddde7c51f =
-  BG.fromFFIType hs_bindgen_a8dfd9fddde7c51f_base
+  fmap BG.fromFFIType hs_bindgen_a8dfd9fddde7c51f_base
 
 {-# NOINLINE sDL_GetGamepadAxis #-}
 
@@ -2359,7 +2367,7 @@
 --
 --     [See also]: 'sDL_GamepadHasAxis', 'sDL_GetGamepadButton'
 --
---     [C declaration]: @SDL_GetGamepadAxis@, defined at @SDL3\/SDL_gamepad.h 1274:36@
+--     [C declaration]: @SDL_GetGamepadAxis@, defined at @SDL3\/SDL_gamepad.h 1275:36@
 sDL_GetGamepadAxis
   :: BG.FunPtr (BG.Ptr SDL_Gamepad -> SDL_GamepadAxis -> IO SDL3.Sys.Bindgen.Stdinc.Sint16)
 sDL_GetGamepadAxis =
@@ -2373,7 +2381,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_get_SDL_GetGamepadButtonFromString@
 hs_bindgen_aacf61245766bd7f :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO SDL_GamepadButton))
 hs_bindgen_aacf61245766bd7f =
-  BG.fromFFIType hs_bindgen_aacf61245766bd7f_base
+  fmap BG.fromFFIType hs_bindgen_aacf61245766bd7f_base
 
 {-# NOINLINE sDL_GetGamepadButtonFromString #-}
 
@@ -2391,7 +2399,7 @@
 --
 --     [See also]: 'sDL_GetGamepadStringForButton'
 --
---     [C declaration]: @SDL_GetGamepadButtonFromString@, defined at @SDL3\/SDL_gamepad.h 1294:47@
+--     [C declaration]: @SDL_GetGamepadButtonFromString@, defined at @SDL3\/SDL_gamepad.h 1295:47@
 sDL_GetGamepadButtonFromString :: BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO SDL_GamepadButton)
 sDL_GetGamepadButtonFromString =
   BG.unsafePerformIO hs_bindgen_aacf61245766bd7f
@@ -2404,7 +2412,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_get_SDL_GetGamepadStringForButton@
 hs_bindgen_e28b377b66d430c7 :: IO (BG.FunPtr (SDL_GamepadButton -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_e28b377b66d430c7 =
-  BG.fromFFIType hs_bindgen_e28b377b66d430c7_base
+  fmap BG.fromFFIType hs_bindgen_e28b377b66d430c7_base
 
 {-# NOINLINE sDL_GetGamepadStringForButton #-}
 
@@ -2420,7 +2428,7 @@
 --
 --     [See also]: 'sDL_GetGamepadButtonFromString'
 --
---     [C declaration]: @SDL_GetGamepadStringForButton@, defined at @SDL3\/SDL_gamepad.h 1310:42@
+--     [C declaration]: @SDL_GetGamepadStringForButton@, defined at @SDL3\/SDL_gamepad.h 1311:42@
 sDL_GetGamepadStringForButton :: BG.FunPtr (SDL_GamepadButton -> IO (PtrConst.PtrConst BG.CChar))
 sDL_GetGamepadStringForButton =
   BG.unsafePerformIO hs_bindgen_e28b377b66d430c7
@@ -2434,7 +2442,7 @@
 hs_bindgen_915b6e8126454256
   :: IO (BG.FunPtr (BG.Ptr SDL_Gamepad -> SDL_GamepadButton -> IO BG.CBool))
 hs_bindgen_915b6e8126454256 =
-  BG.fromFFIType hs_bindgen_915b6e8126454256_base
+  fmap BG.fromFFIType hs_bindgen_915b6e8126454256_base
 
 {-# NOINLINE sDL_GamepadHasButton #-}
 
@@ -2454,7 +2462,7 @@
 --
 --     [See also]: 'sDL_GamepadHasAxis'
 --
---     [C declaration]: @SDL_GamepadHasButton@, defined at @SDL3\/SDL_gamepad.h 1328:34@
+--     [C declaration]: @SDL_GamepadHasButton@, defined at @SDL3\/SDL_gamepad.h 1329:34@
 sDL_GamepadHasButton :: BG.FunPtr (BG.Ptr SDL_Gamepad -> SDL_GamepadButton -> IO BG.CBool)
 sDL_GamepadHasButton =
   BG.unsafePerformIO hs_bindgen_915b6e8126454256
@@ -2468,7 +2476,7 @@
 hs_bindgen_f63603565928dd6d
   :: IO (BG.FunPtr (BG.Ptr SDL_Gamepad -> SDL_GamepadButton -> IO BG.CBool))
 hs_bindgen_f63603565928dd6d =
-  BG.fromFFIType hs_bindgen_f63603565928dd6d_base
+  fmap BG.fromFFIType hs_bindgen_f63603565928dd6d_base
 
 {-# NOINLINE sDL_GetGamepadButton #-}
 
@@ -2486,7 +2494,7 @@
 --
 --     [See also]: 'sDL_GamepadHasButton', 'sDL_GetGamepadAxis'
 --
---     [C declaration]: @SDL_GetGamepadButton@, defined at @SDL3\/SDL_gamepad.h 1344:34@
+--     [C declaration]: @SDL_GetGamepadButton@, defined at @SDL3\/SDL_gamepad.h 1345:34@
 sDL_GetGamepadButton :: BG.FunPtr (BG.Ptr SDL_Gamepad -> SDL_GamepadButton -> IO BG.CBool)
 sDL_GetGamepadButton =
   BG.unsafePerformIO hs_bindgen_f63603565928dd6d
@@ -2500,7 +2508,7 @@
 hs_bindgen_5d5da36c408f3ed5
   :: IO (BG.FunPtr (SDL_GamepadType -> SDL_GamepadButton -> IO SDL_GamepadButtonLabel))
 hs_bindgen_5d5da36c408f3ed5 =
-  BG.fromFFIType hs_bindgen_5d5da36c408f3ed5_base
+  fmap BG.fromFFIType hs_bindgen_5d5da36c408f3ed5_base
 
 {-# NOINLINE sDL_GetGamepadButtonLabelForType #-}
 
@@ -2518,7 +2526,7 @@
 --
 --     [See also]: 'sDL_GetGamepadButtonLabel'
 --
---     [C declaration]: @SDL_GetGamepadButtonLabelForType@, defined at @SDL3\/SDL_gamepad.h 1359:52@
+--     [C declaration]: @SDL_GetGamepadButtonLabelForType@, defined at @SDL3\/SDL_gamepad.h 1360:52@
 sDL_GetGamepadButtonLabelForType
   :: BG.FunPtr (SDL_GamepadType -> SDL_GamepadButton -> IO SDL_GamepadButtonLabel)
 sDL_GetGamepadButtonLabelForType =
@@ -2533,7 +2541,7 @@
 hs_bindgen_6c96bb1d7ac32853
   :: IO (BG.FunPtr (BG.Ptr SDL_Gamepad -> SDL_GamepadButton -> IO SDL_GamepadButtonLabel))
 hs_bindgen_6c96bb1d7ac32853 =
-  BG.fromFFIType hs_bindgen_6c96bb1d7ac32853_base
+  fmap BG.fromFFIType hs_bindgen_6c96bb1d7ac32853_base
 
 {-# NOINLINE sDL_GetGamepadButtonLabel #-}
 
@@ -2551,7 +2559,7 @@
 --
 --     [See also]: 'sDL_GetGamepadButtonLabelForType'
 --
---     [C declaration]: @SDL_GetGamepadButtonLabel@, defined at @SDL3\/SDL_gamepad.h 1374:52@
+--     [C declaration]: @SDL_GetGamepadButtonLabel@, defined at @SDL3\/SDL_gamepad.h 1375:52@
 sDL_GetGamepadButtonLabel
   :: BG.FunPtr (BG.Ptr SDL_Gamepad -> SDL_GamepadButton -> IO SDL_GamepadButtonLabel)
 sDL_GetGamepadButtonLabel =
@@ -2565,7 +2573,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_get_SDL_GetNumGamepadTouchpads@
 hs_bindgen_de275259788d26ed :: IO (BG.FunPtr (BG.Ptr SDL_Gamepad -> IO BG.CInt))
 hs_bindgen_de275259788d26ed =
-  BG.fromFFIType hs_bindgen_de275259788d26ed_base
+  fmap BG.fromFFIType hs_bindgen_de275259788d26ed_base
 
 {-# NOINLINE sDL_GetNumGamepadTouchpads #-}
 
@@ -2581,7 +2589,7 @@
 --
 --     [See also]: 'sDL_GetNumGamepadTouchpadFingers'
 --
---     [C declaration]: @SDL_GetNumGamepadTouchpads@, defined at @SDL3\/SDL_gamepad.h 1388:33@
+--     [C declaration]: @SDL_GetNumGamepadTouchpads@, defined at @SDL3\/SDL_gamepad.h 1389:33@
 sDL_GetNumGamepadTouchpads :: BG.FunPtr (BG.Ptr SDL_Gamepad -> IO BG.CInt)
 sDL_GetNumGamepadTouchpads =
   BG.unsafePerformIO hs_bindgen_de275259788d26ed
@@ -2594,7 +2602,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_get_SDL_GetNumGamepadTouchpadFingers@
 hs_bindgen_acaeb05c5893aeba :: IO (BG.FunPtr (BG.Ptr SDL_Gamepad -> BG.CInt -> IO BG.CInt))
 hs_bindgen_acaeb05c5893aeba =
-  BG.fromFFIType hs_bindgen_acaeb05c5893aeba_base
+  fmap BG.fromFFIType hs_bindgen_acaeb05c5893aeba_base
 
 {-# NOINLINE sDL_GetNumGamepadTouchpadFingers #-}
 
@@ -2612,7 +2620,7 @@
 --
 --     [See also]: 'sDL_GetGamepadTouchpadFinger', 'sDL_GetNumGamepadTouchpads'
 --
---     [C declaration]: @SDL_GetNumGamepadTouchpadFingers@, defined at @SDL3\/SDL_gamepad.h 1405:33@
+--     [C declaration]: @SDL_GetNumGamepadTouchpadFingers@, defined at @SDL3\/SDL_gamepad.h 1406:33@
 sDL_GetNumGamepadTouchpadFingers :: BG.FunPtr (BG.Ptr SDL_Gamepad -> BG.CInt -> IO BG.CInt)
 sDL_GetNumGamepadTouchpadFingers =
   BG.unsafePerformIO hs_bindgen_acaeb05c5893aeba
@@ -2637,7 +2645,7 @@
            )
        )
 hs_bindgen_4408908532932c4e =
-  BG.fromFFIType hs_bindgen_4408908532932c4e_base
+  fmap BG.fromFFIType hs_bindgen_4408908532932c4e_base
 
 {-# NOINLINE sDL_GetGamepadTouchpadFinger #-}
 
@@ -2665,7 +2673,7 @@
 --
 --     [See also]: 'sDL_GetNumGamepadTouchpadFingers'
 --
---     [C declaration]: @SDL_GetGamepadTouchpadFinger@, defined at @SDL3\/SDL_gamepad.h 1429:34@
+--     [C declaration]: @SDL_GetGamepadTouchpadFinger@, defined at @SDL3\/SDL_gamepad.h 1430:34@
 sDL_GetGamepadTouchpadFinger
   :: BG.FunPtr
        ( BG.Ptr SDL_Gamepad
@@ -2689,7 +2697,7 @@
 hs_bindgen_041741220ac7e52d
   :: IO (BG.FunPtr (BG.Ptr SDL_Gamepad -> SDL3.Sys.Bindgen.Sensor.SDL_SensorType -> IO BG.CBool))
 hs_bindgen_041741220ac7e52d =
-  BG.fromFFIType hs_bindgen_041741220ac7e52d_base
+  fmap BG.fromFFIType hs_bindgen_041741220ac7e52d_base
 
 {-# NOINLINE sDL_GamepadHasSensor #-}
 
@@ -2707,7 +2715,7 @@
 --
 --     [See also]: 'sDL_GetGamepadSensorData', 'sDL_GetGamepadSensorDataRate', 'sDL_SetGamepadSensorEnabled'
 --
---     [C declaration]: @SDL_GamepadHasSensor@, defined at @SDL3\/SDL_gamepad.h 1446:34@
+--     [C declaration]: @SDL_GamepadHasSensor@, defined at @SDL3\/SDL_gamepad.h 1447:34@
 sDL_GamepadHasSensor
   :: BG.FunPtr (BG.Ptr SDL_Gamepad -> SDL3.Sys.Bindgen.Sensor.SDL_SensorType -> IO BG.CBool)
 sDL_GamepadHasSensor =
@@ -2723,7 +2731,7 @@
   :: IO
        (BG.FunPtr (BG.Ptr SDL_Gamepad -> SDL3.Sys.Bindgen.Sensor.SDL_SensorType -> BG.CBool -> IO BG.CBool))
 hs_bindgen_04571bb432b35b67 =
-  BG.fromFFIType hs_bindgen_04571bb432b35b67_base
+  fmap BG.fromFFIType hs_bindgen_04571bb432b35b67_base
 
 {-# NOINLINE sDL_SetGamepadSensorEnabled #-}
 
@@ -2743,7 +2751,7 @@
 --
 --     [See also]: 'sDL_GamepadHasSensor', 'sDL_GamepadSensorEnabled'
 --
---     [C declaration]: @SDL_SetGamepadSensorEnabled@, defined at @SDL3\/SDL_gamepad.h 1464:34@
+--     [C declaration]: @SDL_SetGamepadSensorEnabled@, defined at @SDL3\/SDL_gamepad.h 1465:34@
 sDL_SetGamepadSensorEnabled
   :: BG.FunPtr (BG.Ptr SDL_Gamepad -> SDL3.Sys.Bindgen.Sensor.SDL_SensorType -> BG.CBool -> IO BG.CBool)
 sDL_SetGamepadSensorEnabled =
@@ -2758,7 +2766,7 @@
 hs_bindgen_98c53abf20c77167
   :: IO (BG.FunPtr (BG.Ptr SDL_Gamepad -> SDL3.Sys.Bindgen.Sensor.SDL_SensorType -> IO BG.CBool))
 hs_bindgen_98c53abf20c77167 =
-  BG.fromFFIType hs_bindgen_98c53abf20c77167_base
+  fmap BG.fromFFIType hs_bindgen_98c53abf20c77167_base
 
 {-# NOINLINE sDL_GamepadSensorEnabled #-}
 
@@ -2776,7 +2784,7 @@
 --
 --     [See also]: 'sDL_SetGamepadSensorEnabled'
 --
---     [C declaration]: @SDL_GamepadSensorEnabled@, defined at @SDL3\/SDL_gamepad.h 1479:34@
+--     [C declaration]: @SDL_GamepadSensorEnabled@, defined at @SDL3\/SDL_gamepad.h 1480:34@
 sDL_GamepadSensorEnabled
   :: BG.FunPtr (BG.Ptr SDL_Gamepad -> SDL3.Sys.Bindgen.Sensor.SDL_SensorType -> IO BG.CBool)
 sDL_GamepadSensorEnabled =
@@ -2791,7 +2799,7 @@
 hs_bindgen_b6592bd554a6f989
   :: IO (BG.FunPtr (BG.Ptr SDL_Gamepad -> SDL3.Sys.Bindgen.Sensor.SDL_SensorType -> IO BG.CFloat))
 hs_bindgen_b6592bd554a6f989 =
-  BG.fromFFIType hs_bindgen_b6592bd554a6f989_base
+  fmap BG.fromFFIType hs_bindgen_b6592bd554a6f989_base
 
 {-# NOINLINE sDL_GetGamepadSensorDataRate #-}
 
@@ -2807,7 +2815,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadSensorDataRate@, defined at @SDL3\/SDL_gamepad.h 1492:35@
+--     [C declaration]: @SDL_GetGamepadSensorDataRate@, defined at @SDL3\/SDL_gamepad.h 1493:35@
 sDL_GetGamepadSensorDataRate
   :: BG.FunPtr (BG.Ptr SDL_Gamepad -> SDL3.Sys.Bindgen.Sensor.SDL_SensorType -> IO BG.CFloat)
 sDL_GetGamepadSensorDataRate =
@@ -2830,7 +2838,7 @@
            )
        )
 hs_bindgen_9753ce47b936d3ec =
-  BG.fromFFIType hs_bindgen_9753ce47b936d3ec_base
+  fmap BG.fromFFIType hs_bindgen_9753ce47b936d3ec_base
 
 {-# NOINLINE sDL_GetGamepadSensorData #-}
 
@@ -2852,7 +2860,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadSensorData@, defined at @SDL3\/SDL_gamepad.h 1511:34@
+--     [C declaration]: @SDL_GetGamepadSensorData@, defined at @SDL3\/SDL_gamepad.h 1512:34@
 sDL_GetGamepadSensorData
   :: BG.FunPtr
        ( BG.Ptr SDL_Gamepad
@@ -2881,7 +2889,7 @@
            )
        )
 hs_bindgen_66c29b053dd2103a =
-  BG.fromFFIType hs_bindgen_66c29b053dd2103a_base
+  fmap BG.fromFFIType hs_bindgen_66c29b053dd2103a_base
 
 {-# NOINLINE sDL_RumbleGamepad #-}
 
@@ -2905,7 +2913,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_RumbleGamepad@, defined at @SDL3\/SDL_gamepad.h 1535:34@
+--     [C declaration]: @SDL_RumbleGamepad@, defined at @SDL3\/SDL_gamepad.h 1536:34@
 sDL_RumbleGamepad
   :: BG.FunPtr
        ( BG.Ptr SDL_Gamepad
@@ -2934,7 +2942,7 @@
            )
        )
 hs_bindgen_d96d791857c3d06b =
-  BG.fromFFIType hs_bindgen_d96d791857c3d06b_base
+  fmap BG.fromFFIType hs_bindgen_d96d791857c3d06b_base
 
 {-# NOINLINE sDL_RumbleGamepadTriggers #-}
 
@@ -2962,7 +2970,7 @@
 --
 --     [See also]: 'sDL_RumbleGamepad'
 --
---     [C declaration]: @SDL_RumbleGamepadTriggers@, defined at @SDL3\/SDL_gamepad.h 1565:34@
+--     [C declaration]: @SDL_RumbleGamepadTriggers@, defined at @SDL3\/SDL_gamepad.h 1566:34@
 sDL_RumbleGamepadTriggers
   :: BG.FunPtr
        ( BG.Ptr SDL_Gamepad
@@ -2991,7 +2999,7 @@
            )
        )
 hs_bindgen_fb1de1463dc236a8 =
-  BG.fromFFIType hs_bindgen_fb1de1463dc236a8_base
+  fmap BG.fromFFIType hs_bindgen_fb1de1463dc236a8_base
 
 {-# NOINLINE sDL_SetGamepadLED #-}
 
@@ -3015,7 +3023,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_SetGamepadLED@, defined at @SDL3\/SDL_gamepad.h 1587:34@
+--     [C declaration]: @SDL_SetGamepadLED@, defined at @SDL3\/SDL_gamepad.h 1588:34@
 sDL_SetGamepadLED
   :: BG.FunPtr
        ( BG.Ptr SDL_Gamepad
@@ -3036,7 +3044,7 @@
 hs_bindgen_5961396a3fadcac6
   :: IO (BG.FunPtr (BG.Ptr SDL_Gamepad -> PtrConst.PtrConst BG.Void -> BG.CInt -> IO BG.CBool))
 hs_bindgen_5961396a3fadcac6 =
-  BG.fromFFIType hs_bindgen_5961396a3fadcac6_base
+  fmap BG.fromFFIType hs_bindgen_5961396a3fadcac6_base
 
 {-# NOINLINE sDL_SendGamepadEffect #-}
 
@@ -3054,7 +3062,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_SendGamepadEffect@, defined at @SDL3\/SDL_gamepad.h 1602:34@
+--     [C declaration]: @SDL_SendGamepadEffect@, defined at @SDL3\/SDL_gamepad.h 1603:34@
 sDL_SendGamepadEffect
   :: BG.FunPtr (BG.Ptr SDL_Gamepad -> PtrConst.PtrConst BG.Void -> BG.CInt -> IO BG.CBool)
 sDL_SendGamepadEffect =
@@ -3068,7 +3076,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_get_SDL_CloseGamepad@
 hs_bindgen_599bdf2afa4631b2 :: IO (BG.FunPtr (BG.Ptr SDL_Gamepad -> IO ()))
 hs_bindgen_599bdf2afa4631b2 =
-  BG.fromFFIType hs_bindgen_599bdf2afa4631b2_base
+  fmap BG.fromFFIType hs_bindgen_599bdf2afa4631b2_base
 
 {-# NOINLINE sDL_CloseGamepad #-}
 
@@ -3082,7 +3090,7 @@
 --
 --     [See also]: 'sDL_OpenGamepad'
 --
---     [C declaration]: @SDL_CloseGamepad@, defined at @SDL3\/SDL_gamepad.h 1616:34@
+--     [C declaration]: @SDL_CloseGamepad@, defined at @SDL3\/SDL_gamepad.h 1617:34@
 sDL_CloseGamepad :: BG.FunPtr (BG.Ptr SDL_Gamepad -> IO ())
 sDL_CloseGamepad =
   BG.unsafePerformIO hs_bindgen_599bdf2afa4631b2
@@ -3096,7 +3104,7 @@
 hs_bindgen_901b303b0d647ea4
   :: IO (BG.FunPtr (BG.Ptr SDL_Gamepad -> SDL_GamepadButton -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_901b303b0d647ea4 =
-  BG.fromFFIType hs_bindgen_901b303b0d647ea4_base
+  fmap BG.fromFFIType hs_bindgen_901b303b0d647ea4_base
 
 {-# NOINLINE sDL_GetGamepadAppleSFSymbolsNameForButton #-}
 
@@ -3114,7 +3122,7 @@
 --
 --     [See also]: 'sDL_GetGamepadAppleSFSymbolsNameForAxis'
 --
---     [C declaration]: @SDL_GetGamepadAppleSFSymbolsNameForButton@, defined at @SDL3\/SDL_gamepad.h 1632:42@
+--     [C declaration]: @SDL_GetGamepadAppleSFSymbolsNameForButton@, defined at @SDL3\/SDL_gamepad.h 1633:42@
 sDL_GetGamepadAppleSFSymbolsNameForButton
   :: BG.FunPtr (BG.Ptr SDL_Gamepad -> SDL_GamepadButton -> IO (PtrConst.PtrConst BG.CChar))
 sDL_GetGamepadAppleSFSymbolsNameForButton =
@@ -3129,7 +3137,7 @@
 hs_bindgen_0f564808a8b0fec7
   :: IO (BG.FunPtr (BG.Ptr SDL_Gamepad -> SDL_GamepadAxis -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_0f564808a8b0fec7 =
-  BG.fromFFIType hs_bindgen_0f564808a8b0fec7_base
+  fmap BG.fromFFIType hs_bindgen_0f564808a8b0fec7_base
 
 {-# NOINLINE sDL_GetGamepadAppleSFSymbolsNameForAxis #-}
 
@@ -3147,7 +3155,7 @@
 --
 --     [See also]: 'sDL_GetGamepadAppleSFSymbolsNameForButton'
 --
---     [C declaration]: @SDL_GetGamepadAppleSFSymbolsNameForAxis@, defined at @SDL3\/SDL_gamepad.h 1647:42@
+--     [C declaration]: @SDL_GetGamepadAppleSFSymbolsNameForAxis@, defined at @SDL3\/SDL_gamepad.h 1648:42@
 sDL_GetGamepadAppleSFSymbolsNameForAxis
   :: BG.FunPtr (BG.Ptr SDL_Gamepad -> SDL_GamepadAxis -> IO (PtrConst.PtrConst BG.CChar))
 sDL_GetGamepadAppleSFSymbolsNameForAxis =
diff --git a/src/SDL3/Sys/Bindgen/Gamepad/Safe.hs b/src/SDL3/Sys/Bindgen/Gamepad/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Gamepad/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Gamepad/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Gamepad.Safe (
@@ -79,7 +81,11 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Gamepad
@@ -93,7 +99,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_gamepad.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_gamepad.h>"
          , "signed int hs_bindgen_bfecaa94b4bb559c ("
          , "  char const *arg1"
          , ")"
@@ -572,14 +582,15 @@
 foreign import ccall safe "hs_bindgen_bfecaa94b4bb559c"
   hs_bindgen_bfecaa94b4bb559c_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_AddGamepadMapping@
 hs_bindgen_bfecaa94b4bb559c
   :: PtrConst.PtrConst BG.CChar
   -> IO BG.CInt
 hs_bindgen_bfecaa94b4bb559c =
-  BG.fromFFIType hs_bindgen_bfecaa94b4bb559c_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_bfecaa94b4bb559c_base (BG.toFFIType x0))
 
 -- | Add support for gamepads that SDL is unaware of or change the binding of an existing gamepad.
 --
@@ -609,7 +620,7 @@
 --
 --     [See also]: 'sDL_AddGamepadMappingsFromFile', 'sDL_AddGamepadMappingsFromIO', 'sDL_GetGamepadMapping', 'sDL_GetGamepadMappingForGUID', SDL_HINT_GAMECONTROLLERCONFIG, SDL_HINT_GAMECONTROLLERCONFIG_FILE, SDL_EVENT_GAMEPAD_ADDED
 --
---     [C declaration]: @SDL_AddGamepadMapping@, defined at @SDL3\/SDL_gamepad.h 346:33@
+--     [C declaration]: @SDL_AddGamepadMapping@, defined at @SDL3\/SDL_gamepad.h 347:33@
 sDL_AddGamepadMapping
   :: PtrConst.PtrConst BG.CChar
   -- ^
@@ -622,8 +633,8 @@
 foreign import ccall safe "hs_bindgen_353a6b5bd096f6c7"
   hs_bindgen_353a6b5bd096f6c7_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Int32
+    -> BG.CBool
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_AddGamepadMappingsFromIO@
 hs_bindgen_353a6b5bd096f6c7
@@ -631,7 +642,9 @@
   -> BG.CBool
   -> IO BG.CInt
 hs_bindgen_353a6b5bd096f6c7 =
-  BG.fromFFIType hs_bindgen_353a6b5bd096f6c7_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_353a6b5bd096f6c7_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Load a set of gamepad mappings from an SDL_IOStream.
 --
@@ -653,7 +666,7 @@
 --
 --     [See also]: 'sDL_AddGamepadMapping', 'sDL_AddGamepadMappingsFromFile', 'sDL_GetGamepadMapping', 'sDL_GetGamepadMappingForGUID', SDL_HINT_GAMECONTROLLERCONFIG, SDL_HINT_GAMECONTROLLERCONFIG_FILE, SDL_EVENT_GAMEPAD_ADDED
 --
---     [C declaration]: @SDL_AddGamepadMappingsFromIO@, defined at @SDL3\/SDL_gamepad.h 386:33@
+--     [C declaration]: @SDL_AddGamepadMappingsFromIO@, defined at @SDL3\/SDL_gamepad.h 387:33@
 sDL_AddGamepadMappingsFromIO
   :: BG.Ptr SDL3.Sys.Bindgen.Iostream.SDL_IOStream
   -- ^
@@ -671,14 +684,15 @@
 foreign import ccall safe "hs_bindgen_614bba8a883d270a"
   hs_bindgen_614bba8a883d270a_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_AddGamepadMappingsFromFile@
 hs_bindgen_614bba8a883d270a
   :: PtrConst.PtrConst BG.CChar
   -> IO BG.CInt
 hs_bindgen_614bba8a883d270a =
-  BG.fromFFIType hs_bindgen_614bba8a883d270a_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_614bba8a883d270a_base (BG.toFFIType x0))
 
 -- | Load a set of gamepad mappings from a file.
 --
@@ -698,7 +712,7 @@
 --
 --     [See also]: 'sDL_AddGamepadMapping', 'sDL_AddGamepadMappingsFromIO', 'sDL_GetGamepadMapping', 'sDL_GetGamepadMappingForGUID', SDL_HINT_GAMECONTROLLERCONFIG, SDL_HINT_GAMECONTROLLERCONFIG_FILE, SDL_EVENT_GAMEPAD_ADDED
 --
---     [C declaration]: @SDL_AddGamepadMappingsFromFile@, defined at @SDL3\/SDL_gamepad.h 420:33@
+--     [C declaration]: @SDL_AddGamepadMappingsFromFile@, defined at @SDL3\/SDL_gamepad.h 421:33@
 sDL_AddGamepadMappingsFromFile
   :: PtrConst.PtrConst BG.CChar
   -- ^
@@ -711,12 +725,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_ReloadGamepadMappings@
 foreign import ccall safe "hs_bindgen_31760265cd8832be"
   hs_bindgen_31760265cd8832be_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_ReloadGamepadMappings@
 hs_bindgen_31760265cd8832be :: IO BG.CBool
 hs_bindgen_31760265cd8832be =
-  BG.fromFFIType hs_bindgen_31760265cd8832be_base
+  fmap BG.fromFFIType hs_bindgen_31760265cd8832be_base
 
 -- | Reinitialize the SDL mapping database to its initial state.
 --
@@ -728,7 +742,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_ReloadGamepadMappings@, defined at @SDL3\/SDL_gamepad.h 434:34@
+--     [C declaration]: @SDL_ReloadGamepadMappings@, defined at @SDL3\/SDL_gamepad.h 435:34@
 sDL_ReloadGamepadMappings :: IO BG.CBool
 sDL_ReloadGamepadMappings =
   hs_bindgen_31760265cd8832be
@@ -744,7 +758,8 @@
   :: BG.Ptr BG.CInt
   -> IO (BG.Ptr (BG.Ptr BG.CChar))
 hs_bindgen_81df6a54918d3add =
-  BG.fromFFIType hs_bindgen_81df6a54918d3add_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_81df6a54918d3add_base (BG.toFFIType x0))
 
 -- | Get the current gamepad mappings.
 --
@@ -754,7 +769,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadMappings@, defined at @SDL3\/SDL_gamepad.h 450:37@
+--     [C declaration]: @SDL_GetGamepadMappings@, defined at @SDL3\/SDL_gamepad.h 451:37@
 sDL_GetGamepadMappings
   :: BG.Ptr BG.CInt
   -- ^
@@ -774,7 +789,8 @@
   :: BG.Ptr SDL3.Sys.Bindgen.Guid.SDL_GUID
   -> IO (BG.Ptr BG.CChar)
 hs_bindgen_896f29e315329343 =
-  BG.fromFFIType hs_bindgen_896f29e315329343_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_896f29e315329343_base (BG.toFFIType x0))
 
 -- | Get the gamepad mapping string for a given GUID.
 --
@@ -786,7 +802,7 @@
 --
 --     [See also]: SDL_GetJoystickGUIDForID, SDL_GetJoystickGUID
 --
---     [C declaration]: @SDL_GetGamepadMappingForGUID@, defined at @SDL3\/SDL_gamepad.h 467:36@
+--     [C declaration]: @SDL_GetGamepadMappingForGUID@, defined at @SDL3\/SDL_gamepad.h 468:36@
 sDL_GetGamepadMappingForGUID
   :: SDL3.Sys.Bindgen.Guid.SDL_GUID
   -- ^
@@ -812,7 +828,8 @@
   :: BG.Ptr SDL_Gamepad
   -> IO (BG.Ptr BG.CChar)
 hs_bindgen_5d0f77ae41093626 =
-  BG.fromFFIType hs_bindgen_5d0f77ae41093626_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_5d0f77ae41093626_base (BG.toFFIType x0))
 
 -- | Get the current mapping of a gamepad.
 --
@@ -826,7 +843,7 @@
 --
 --     [See also]: 'sDL_AddGamepadMapping', 'sDL_GetGamepadMappingForID', 'sDL_GetGamepadMappingForGUID', 'sDL_SetGamepadMapping'
 --
---     [C declaration]: @SDL_GetGamepadMapping@, defined at @SDL3\/SDL_gamepad.h 488:36@
+--     [C declaration]: @SDL_GetGamepadMapping@, defined at @SDL3\/SDL_gamepad.h 489:36@
 sDL_GetGamepadMapping
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -838,9 +855,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_SetGamepadMapping@
 foreign import ccall safe "hs_bindgen_cc4c1668ad855e48"
   hs_bindgen_cc4c1668ad855e48_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_SetGamepadMapping@
 hs_bindgen_cc4c1668ad855e48
@@ -848,7 +865,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_cc4c1668ad855e48 =
-  BG.fromFFIType hs_bindgen_cc4c1668ad855e48_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_cc4c1668ad855e48_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the current mapping of a joystick or gamepad.
 --
@@ -862,7 +881,7 @@
 --
 --     [See also]: 'sDL_AddGamepadMapping', 'sDL_GetGamepadMapping'
 --
---     [C declaration]: @SDL_SetGamepadMapping@, defined at @SDL3\/SDL_gamepad.h 508:34@
+--     [C declaration]: @SDL_SetGamepadMapping@, defined at @SDL3\/SDL_gamepad.h 509:34@
 sDL_SetGamepadMapping
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -878,12 +897,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_HasGamepad@
 foreign import ccall safe "hs_bindgen_ead7e9bae6cc8b6c"
   hs_bindgen_ead7e9bae6cc8b6c_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_HasGamepad@
 hs_bindgen_ead7e9bae6cc8b6c :: IO BG.CBool
 hs_bindgen_ead7e9bae6cc8b6c =
-  BG.fromFFIType hs_bindgen_ead7e9bae6cc8b6c_base
+  fmap BG.fromFFIType hs_bindgen_ead7e9bae6cc8b6c_base
 
 -- | Return whether a gamepad is currently connected.
 --
@@ -895,7 +914,7 @@
 --
 --     [See also]: 'sDL_GetGamepads'
 --
---     [C declaration]: @SDL_HasGamepad@, defined at @SDL3\/SDL_gamepad.h 521:34@
+--     [C declaration]: @SDL_HasGamepad@, defined at @SDL3\/SDL_gamepad.h 522:34@
 sDL_HasGamepad :: IO BG.CBool
 sDL_HasGamepad = hs_bindgen_ead7e9bae6cc8b6c
 
@@ -910,7 +929,8 @@
   :: BG.Ptr BG.CInt
   -> IO (BG.Ptr SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
 hs_bindgen_421fff3e92caf69d =
-  BG.fromFFIType hs_bindgen_421fff3e92caf69d_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_421fff3e92caf69d_base (BG.toFFIType x0))
 
 -- | Get a list of currently connected gamepads.
 --
@@ -922,7 +942,7 @@
 --
 --     [See also]: 'sDL_HasGamepad', 'sDL_OpenGamepad'
 --
---     [C declaration]: @SDL_GetGamepads@, defined at @SDL3\/SDL_gamepad.h 539:46@
+--     [C declaration]: @SDL_GetGamepads@, defined at @SDL3\/SDL_gamepad.h 540:46@
 sDL_GetGamepads
   :: BG.Ptr BG.CInt
   -- ^
@@ -934,15 +954,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_IsGamepad@
 foreign import ccall safe "hs_bindgen_9b50cb92bd86f924"
   hs_bindgen_9b50cb92bd86f924_base
-    :: BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_IsGamepad@
 hs_bindgen_9b50cb92bd86f924
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -> IO BG.CBool
 hs_bindgen_9b50cb92bd86f924 =
-  BG.fromFFIType hs_bindgen_9b50cb92bd86f924_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_9b50cb92bd86f924_base (BG.toFFIType x0))
 
 -- | Check if the given joystick is supported by the gamepad interface.
 --
@@ -954,7 +975,7 @@
 --
 --     [See also]: SDL_GetJoysticks, 'sDL_OpenGamepad'
 --
---     [C declaration]: @SDL_IsGamepad@, defined at @SDL3\/SDL_gamepad.h 555:34@
+--     [C declaration]: @SDL_IsGamepad@, defined at @SDL3\/SDL_gamepad.h 556:34@
 sDL_IsGamepad
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -966,7 +987,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadNameForID@
 foreign import ccall safe "hs_bindgen_6a86daab9ce329fa"
   hs_bindgen_6a86daab9ce329fa_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadNameForID@
@@ -974,7 +995,8 @@
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_6a86daab9ce329fa =
-  BG.fromFFIType hs_bindgen_6a86daab9ce329fa_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_6a86daab9ce329fa_base (BG.toFFIType x0))
 
 -- | Get the implementation dependent name of a gamepad.
 --
@@ -988,7 +1010,7 @@
 --
 --     [See also]: 'sDL_GetGamepadName', 'sDL_GetGamepads'
 --
---     [C declaration]: @SDL_GetGamepadNameForID@, defined at @SDL3\/SDL_gamepad.h 573:42@
+--     [C declaration]: @SDL_GetGamepadNameForID@, defined at @SDL3\/SDL_gamepad.h 574:42@
 sDL_GetGamepadNameForID
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1000,7 +1022,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadPathForID@
 foreign import ccall safe "hs_bindgen_e0c61c43c91c2ad5"
   hs_bindgen_e0c61c43c91c2ad5_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadPathForID@
@@ -1008,7 +1030,8 @@
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_e0c61c43c91c2ad5 =
-  BG.fromFFIType hs_bindgen_e0c61c43c91c2ad5_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_e0c61c43c91c2ad5_base (BG.toFFIType x0))
 
 -- | Get the implementation dependent path of a gamepad.
 --
@@ -1022,7 +1045,7 @@
 --
 --     [See also]: 'sDL_GetGamepadPath', 'sDL_GetGamepads'
 --
---     [C declaration]: @SDL_GetGamepadPathForID@, defined at @SDL3\/SDL_gamepad.h 591:42@
+--     [C declaration]: @SDL_GetGamepadPathForID@, defined at @SDL3\/SDL_gamepad.h 592:42@
 sDL_GetGamepadPathForID
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1034,15 +1057,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadPlayerIndexForID@
 foreign import ccall safe "hs_bindgen_9e9627ec0fb95c91"
   hs_bindgen_9e9627ec0fb95c91_base
-    :: BG.Word32
-    -> IO BG.Int32
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadPlayerIndexForID@
 hs_bindgen_9e9627ec0fb95c91
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -> IO BG.CInt
 hs_bindgen_9e9627ec0fb95c91 =
-  BG.fromFFIType hs_bindgen_9e9627ec0fb95c91_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_9e9627ec0fb95c91_base (BG.toFFIType x0))
 
 -- | Get the player index of a gamepad.
 --
@@ -1056,7 +1080,7 @@
 --
 --     [See also]: 'sDL_GetGamepadPlayerIndex', 'sDL_GetGamepads'
 --
---     [C declaration]: @SDL_GetGamepadPlayerIndexForID@, defined at @SDL3\/SDL_gamepad.h 608:33@
+--     [C declaration]: @SDL_GetGamepadPlayerIndexForID@, defined at @SDL3\/SDL_gamepad.h 609:33@
 sDL_GetGamepadPlayerIndexForID
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1069,7 +1093,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadGUIDForID@
 foreign import ccall safe "hs_bindgen_894e3d306a7238d1"
   hs_bindgen_894e3d306a7238d1_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> IO ()
 
@@ -1079,7 +1103,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Guid.SDL_GUID
   -> IO ()
 hs_bindgen_894e3d306a7238d1 =
-  BG.fromFFIType hs_bindgen_894e3d306a7238d1_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_894e3d306a7238d1_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Get the implementation-dependent GUID of a gamepad.
 --
@@ -1093,7 +1119,7 @@
 --
 --     [See also]: SDL_GUIDToString, 'sDL_GetGamepads'
 --
---     [C declaration]: @SDL_GetGamepadGUIDForID@, defined at @SDL3\/SDL_gamepad.h 626:38@
+--     [C declaration]: @SDL_GetGamepadGUIDForID@, defined at @SDL3\/SDL_gamepad.h 627:38@
 sDL_GetGamepadGUIDForID
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1110,15 +1136,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadVendorForID@
 foreign import ccall safe "hs_bindgen_e7c705655b3a7874"
   hs_bindgen_e7c705655b3a7874_base
-    :: BG.Word32
-    -> IO BG.Word16
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO HsBindgen.Runtime.LibC.Word16
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadVendorForID@
 hs_bindgen_e7c705655b3a7874
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
 hs_bindgen_e7c705655b3a7874 =
-  BG.fromFFIType hs_bindgen_e7c705655b3a7874_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_e7c705655b3a7874_base (BG.toFFIType x0))
 
 -- | Get the USB vendor ID of a gamepad, if available.
 --
@@ -1132,7 +1159,7 @@
 --
 --     [See also]: 'sDL_GetGamepadVendor', 'sDL_GetGamepads'
 --
---     [C declaration]: @SDL_GetGamepadVendorForID@, defined at @SDL3\/SDL_gamepad.h 645:36@
+--     [C declaration]: @SDL_GetGamepadVendorForID@, defined at @SDL3\/SDL_gamepad.h 646:36@
 sDL_GetGamepadVendorForID
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1145,15 +1172,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadProductForID@
 foreign import ccall safe "hs_bindgen_4e686291196aa2c3"
   hs_bindgen_4e686291196aa2c3_base
-    :: BG.Word32
-    -> IO BG.Word16
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO HsBindgen.Runtime.LibC.Word16
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadProductForID@
 hs_bindgen_4e686291196aa2c3
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
 hs_bindgen_4e686291196aa2c3 =
-  BG.fromFFIType hs_bindgen_4e686291196aa2c3_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_4e686291196aa2c3_base (BG.toFFIType x0))
 
 -- | Get the USB product ID of a gamepad, if available.
 --
@@ -1167,7 +1195,7 @@
 --
 --     [See also]: 'sDL_GetGamepadProduct', 'sDL_GetGamepads'
 --
---     [C declaration]: @SDL_GetGamepadProductForID@, defined at @SDL3\/SDL_gamepad.h 664:36@
+--     [C declaration]: @SDL_GetGamepadProductForID@, defined at @SDL3\/SDL_gamepad.h 665:36@
 sDL_GetGamepadProductForID
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1180,15 +1208,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadProductVersionForID@
 foreign import ccall safe "hs_bindgen_1ccf92ac47175916"
   hs_bindgen_1ccf92ac47175916_base
-    :: BG.Word32
-    -> IO BG.Word16
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO HsBindgen.Runtime.LibC.Word16
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadProductVersionForID@
 hs_bindgen_1ccf92ac47175916
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
 hs_bindgen_1ccf92ac47175916 =
-  BG.fromFFIType hs_bindgen_1ccf92ac47175916_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_1ccf92ac47175916_base (BG.toFFIType x0))
 
 -- | Get the product version of a gamepad, if available.
 --
@@ -1202,7 +1231,7 @@
 --
 --     [See also]: 'sDL_GetGamepadProductVersion', 'sDL_GetGamepads'
 --
---     [C declaration]: @SDL_GetGamepadProductVersionForID@, defined at @SDL3\/SDL_gamepad.h 683:36@
+--     [C declaration]: @SDL_GetGamepadProductVersionForID@, defined at @SDL3\/SDL_gamepad.h 684:36@
 sDL_GetGamepadProductVersionForID
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1215,15 +1244,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadTypeForID@
 foreign import ccall safe "hs_bindgen_40fe0886e7b4ca2b"
   hs_bindgen_40fe0886e7b4ca2b_base
-    :: BG.Word32
-    -> IO BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadTypeForID@
 hs_bindgen_40fe0886e7b4ca2b
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -> IO SDL_GamepadType
 hs_bindgen_40fe0886e7b4ca2b =
-  BG.fromFFIType hs_bindgen_40fe0886e7b4ca2b_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_40fe0886e7b4ca2b_base (BG.toFFIType x0))
 
 -- | Get the type of a gamepad.
 --
@@ -1237,7 +1267,7 @@
 --
 --     [See also]: 'sDL_GetGamepadType', 'sDL_GetGamepads', 'sDL_GetRealGamepadTypeForID'
 --
---     [C declaration]: @SDL_GetGamepadTypeForID@, defined at @SDL3\/SDL_gamepad.h 701:45@
+--     [C declaration]: @SDL_GetGamepadTypeForID@, defined at @SDL3\/SDL_gamepad.h 702:45@
 sDL_GetGamepadTypeForID
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1249,15 +1279,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetRealGamepadTypeForID@
 foreign import ccall safe "hs_bindgen_ce2f9a72f07740df"
   hs_bindgen_ce2f9a72f07740df_base
-    :: BG.Word32
-    -> IO BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetRealGamepadTypeForID@
 hs_bindgen_ce2f9a72f07740df
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -> IO SDL_GamepadType
 hs_bindgen_ce2f9a72f07740df =
-  BG.fromFFIType hs_bindgen_ce2f9a72f07740df_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_ce2f9a72f07740df_base (BG.toFFIType x0))
 
 -- | Get the type of a gamepad, ignoring any mapping override.
 --
@@ -1271,7 +1302,7 @@
 --
 --     [See also]: 'sDL_GetGamepadTypeForID', 'sDL_GetGamepads', 'sDL_GetRealGamepadType'
 --
---     [C declaration]: @SDL_GetRealGamepadTypeForID@, defined at @SDL3\/SDL_gamepad.h 719:45@
+--     [C declaration]: @SDL_GetRealGamepadTypeForID@, defined at @SDL3\/SDL_gamepad.h 720:45@
 sDL_GetRealGamepadTypeForID
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1284,7 +1315,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadMappingForID@
 foreign import ccall safe "hs_bindgen_35f90517327ebff6"
   hs_bindgen_35f90517327ebff6_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadMappingForID@
@@ -1292,7 +1323,8 @@
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -> IO (BG.Ptr BG.CChar)
 hs_bindgen_35f90517327ebff6 =
-  BG.fromFFIType hs_bindgen_35f90517327ebff6_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_35f90517327ebff6_base (BG.toFFIType x0))
 
 -- | Get the mapping of a gamepad.
 --
@@ -1306,7 +1338,7 @@
 --
 --     [See also]: 'sDL_GetGamepads', 'sDL_GetGamepadMapping'
 --
---     [C declaration]: @SDL_GetGamepadMappingForID@, defined at @SDL3\/SDL_gamepad.h 737:36@
+--     [C declaration]: @SDL_GetGamepadMappingForID@, defined at @SDL3\/SDL_gamepad.h 738:36@
 sDL_GetGamepadMappingForID
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1319,7 +1351,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_OpenGamepad@
 foreign import ccall safe "hs_bindgen_7a69f326fc28f33f"
   hs_bindgen_7a69f326fc28f33f_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_OpenGamepad@
@@ -1327,7 +1359,8 @@
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -> IO (BG.Ptr SDL_Gamepad)
 hs_bindgen_7a69f326fc28f33f =
-  BG.fromFFIType hs_bindgen_7a69f326fc28f33f_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_7a69f326fc28f33f_base (BG.toFFIType x0))
 
 -- | Open a gamepad for use.
 --
@@ -1339,7 +1372,7 @@
 --
 --     [See also]: 'sDL_CloseGamepad', 'sDL_IsGamepad'
 --
---     [C declaration]: @SDL_OpenGamepad@, defined at @SDL3\/SDL_gamepad.h 753:43@
+--     [C declaration]: @SDL_OpenGamepad@, defined at @SDL3\/SDL_gamepad.h 754:43@
 sDL_OpenGamepad
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1351,7 +1384,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadFromID@
 foreign import ccall safe "hs_bindgen_4439659d3691bcae"
   hs_bindgen_4439659d3691bcae_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadFromID@
@@ -1359,7 +1392,8 @@
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -> IO (BG.Ptr SDL_Gamepad)
 hs_bindgen_4439659d3691bcae =
-  BG.fromFFIType hs_bindgen_4439659d3691bcae_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_4439659d3691bcae_base (BG.toFFIType x0))
 
 -- | Get the 'SDL_Gamepad' associated with a joystick instance ID, if it has been opened.
 --
@@ -1369,7 +1403,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadFromID@, defined at @SDL3\/SDL_gamepad.h 767:43@
+--     [C declaration]: @SDL_GetGamepadFromID@, defined at @SDL3\/SDL_gamepad.h 768:43@
 sDL_GetGamepadFromID
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1381,7 +1415,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadFromPlayerIndex@
 foreign import ccall safe "hs_bindgen_9fa3f1ff076954bb"
   hs_bindgen_9fa3f1ff076954bb_base
-    :: BG.Int32
+    :: BG.CInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadFromPlayerIndex@
@@ -1389,7 +1423,8 @@
   :: BG.CInt
   -> IO (BG.Ptr SDL_Gamepad)
 hs_bindgen_9fa3f1ff076954bb =
-  BG.fromFFIType hs_bindgen_9fa3f1ff076954bb_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_9fa3f1ff076954bb_base (BG.toFFIType x0))
 
 -- | Get the 'SDL_Gamepad' associated with a player index.
 --
@@ -1401,7 +1436,7 @@
 --
 --     [See also]: 'sDL_GetGamepadPlayerIndex', 'sDL_SetGamepadPlayerIndex'
 --
---     [C declaration]: @SDL_GetGamepadFromPlayerIndex@, defined at @SDL3\/SDL_gamepad.h 782:43@
+--     [C declaration]: @SDL_GetGamepadFromPlayerIndex@, defined at @SDL3\/SDL_gamepad.h 783:43@
 sDL_GetGamepadFromPlayerIndex
   :: BG.CInt
   -- ^
@@ -1415,14 +1450,15 @@
 foreign import ccall safe "hs_bindgen_f9762d299959cd11"
   hs_bindgen_f9762d299959cd11_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadProperties@
 hs_bindgen_f9762d299959cd11
   :: BG.Ptr SDL_Gamepad
   -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
 hs_bindgen_f9762d299959cd11 =
-  BG.fromFFIType hs_bindgen_f9762d299959cd11_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_f9762d299959cd11_base (BG.toFFIType x0))
 
 -- | Get the properties associated with an opened gamepad.
 --
@@ -1446,7 +1482,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadProperties@, defined at @SDL3\/SDL_gamepad.h 811:46@
+--     [C declaration]: @SDL_GetGamepadProperties@, defined at @SDL3\/SDL_gamepad.h 812:46@
 sDL_GetGamepadProperties
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1460,14 +1496,15 @@
 foreign import ccall safe "hs_bindgen_88d41ce44a0eaed7"
   hs_bindgen_88d41ce44a0eaed7_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadID@
 hs_bindgen_88d41ce44a0eaed7
   :: BG.Ptr SDL_Gamepad
   -> IO SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
 hs_bindgen_88d41ce44a0eaed7 =
-  BG.fromFFIType hs_bindgen_88d41ce44a0eaed7_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_88d41ce44a0eaed7_base (BG.toFFIType x0))
 
 -- | Get the instance ID of an opened gamepad.
 --
@@ -1477,7 +1514,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadID@, defined at @SDL3\/SDL_gamepad.h 831:44@
+--     [C declaration]: @SDL_GetGamepadID@, defined at @SDL3\/SDL_gamepad.h 832:44@
 sDL_GetGamepadID
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1497,7 +1534,8 @@
   :: BG.Ptr SDL_Gamepad
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_a897dca974b53f52 =
-  BG.fromFFIType hs_bindgen_a897dca974b53f52_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a897dca974b53f52_base (BG.toFFIType x0))
 
 -- | Get the implementation-dependent name for an opened gamepad.
 --
@@ -1509,7 +1547,7 @@
 --
 --     [See also]: 'sDL_GetGamepadNameForID'
 --
---     [C declaration]: @SDL_GetGamepadName@, defined at @SDL3\/SDL_gamepad.h 847:42@
+--     [C declaration]: @SDL_GetGamepadName@, defined at @SDL3\/SDL_gamepad.h 848:42@
 sDL_GetGamepadName
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1529,7 +1567,8 @@
   :: BG.Ptr SDL_Gamepad
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_94e78977a2626634 =
-  BG.fromFFIType hs_bindgen_94e78977a2626634_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_94e78977a2626634_base (BG.toFFIType x0))
 
 -- | Get the implementation-dependent path for an opened gamepad.
 --
@@ -1541,7 +1580,7 @@
 --
 --     [See also]: 'sDL_GetGamepadPathForID'
 --
---     [C declaration]: @SDL_GetGamepadPath@, defined at @SDL3\/SDL_gamepad.h 863:42@
+--     [C declaration]: @SDL_GetGamepadPath@, defined at @SDL3\/SDL_gamepad.h 864:42@
 sDL_GetGamepadPath
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1554,14 +1593,15 @@
 foreign import ccall safe "hs_bindgen_9bee20d3afd78c1c"
   hs_bindgen_9bee20d3afd78c1c_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadType@
 hs_bindgen_9bee20d3afd78c1c
   :: BG.Ptr SDL_Gamepad
   -> IO SDL_GamepadType
 hs_bindgen_9bee20d3afd78c1c =
-  BG.fromFFIType hs_bindgen_9bee20d3afd78c1c_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_9bee20d3afd78c1c_base (BG.toFFIType x0))
 
 -- | Get the type of an opened gamepad.
 --
@@ -1573,7 +1613,7 @@
 --
 --     [See also]: 'sDL_GetGamepadTypeForID'
 --
---     [C declaration]: @SDL_GetGamepadType@, defined at @SDL3\/SDL_gamepad.h 878:45@
+--     [C declaration]: @SDL_GetGamepadType@, defined at @SDL3\/SDL_gamepad.h 879:45@
 sDL_GetGamepadType
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1586,14 +1626,15 @@
 foreign import ccall safe "hs_bindgen_991d5e997600b0ae"
   hs_bindgen_991d5e997600b0ae_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetRealGamepadType@
 hs_bindgen_991d5e997600b0ae
   :: BG.Ptr SDL_Gamepad
   -> IO SDL_GamepadType
 hs_bindgen_991d5e997600b0ae =
-  BG.fromFFIType hs_bindgen_991d5e997600b0ae_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_991d5e997600b0ae_base (BG.toFFIType x0))
 
 -- | Get the type of an opened gamepad, ignoring any mapping override.
 --
@@ -1605,7 +1646,7 @@
 --
 --     [See also]: 'sDL_GetRealGamepadTypeForID'
 --
---     [C declaration]: @SDL_GetRealGamepadType@, defined at @SDL3\/SDL_gamepad.h 893:45@
+--     [C declaration]: @SDL_GetRealGamepadType@, defined at @SDL3\/SDL_gamepad.h 894:45@
 sDL_GetRealGamepadType
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1618,14 +1659,15 @@
 foreign import ccall safe "hs_bindgen_9092bfb7b9ba5238"
   hs_bindgen_9092bfb7b9ba5238_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadPlayerIndex@
 hs_bindgen_9092bfb7b9ba5238
   :: BG.Ptr SDL_Gamepad
   -> IO BG.CInt
 hs_bindgen_9092bfb7b9ba5238 =
-  BG.fromFFIType hs_bindgen_9092bfb7b9ba5238_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_9092bfb7b9ba5238_base (BG.toFFIType x0))
 
 -- | Get the player index of an opened gamepad.
 --
@@ -1639,7 +1681,7 @@
 --
 --     [See also]: 'sDL_SetGamepadPlayerIndex'
 --
---     [C declaration]: @SDL_GetGamepadPlayerIndex@, defined at @SDL3\/SDL_gamepad.h 909:33@
+--     [C declaration]: @SDL_GetGamepadPlayerIndex@, defined at @SDL3\/SDL_gamepad.h 910:33@
 sDL_GetGamepadPlayerIndex
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1653,8 +1695,8 @@
 foreign import ccall safe "hs_bindgen_d6c6ba326b1b08b5"
   hs_bindgen_d6c6ba326b1b08b5_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_SetGamepadPlayerIndex@
 hs_bindgen_d6c6ba326b1b08b5
@@ -1662,7 +1704,9 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_d6c6ba326b1b08b5 =
-  BG.fromFFIType hs_bindgen_d6c6ba326b1b08b5_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_d6c6ba326b1b08b5_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the player index of an opened gamepad.
 --
@@ -1674,7 +1718,7 @@
 --
 --     [See also]: 'sDL_GetGamepadPlayerIndex'
 --
---     [C declaration]: @SDL_SetGamepadPlayerIndex@, defined at @SDL3\/SDL_gamepad.h 926:34@
+--     [C declaration]: @SDL_SetGamepadPlayerIndex@, defined at @SDL3\/SDL_gamepad.h 927:34@
 sDL_SetGamepadPlayerIndex
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1692,14 +1736,15 @@
 foreign import ccall safe "hs_bindgen_b499336f8c368df7"
   hs_bindgen_b499336f8c368df7_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word16
+    -> IO HsBindgen.Runtime.LibC.Word16
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadVendor@
 hs_bindgen_b499336f8c368df7
   :: BG.Ptr SDL_Gamepad
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
 hs_bindgen_b499336f8c368df7 =
-  BG.fromFFIType hs_bindgen_b499336f8c368df7_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_b499336f8c368df7_base (BG.toFFIType x0))
 
 -- | Get the USB vendor ID of an opened gamepad, if available.
 --
@@ -1713,7 +1758,7 @@
 --
 --     [See also]: 'sDL_GetGamepadVendorForID'
 --
---     [C declaration]: @SDL_GetGamepadVendor@, defined at @SDL3\/SDL_gamepad.h 942:36@
+--     [C declaration]: @SDL_GetGamepadVendor@, defined at @SDL3\/SDL_gamepad.h 943:36@
 sDL_GetGamepadVendor
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1726,14 +1771,15 @@
 foreign import ccall safe "hs_bindgen_6795759ef7183633"
   hs_bindgen_6795759ef7183633_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word16
+    -> IO HsBindgen.Runtime.LibC.Word16
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadProduct@
 hs_bindgen_6795759ef7183633
   :: BG.Ptr SDL_Gamepad
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
 hs_bindgen_6795759ef7183633 =
-  BG.fromFFIType hs_bindgen_6795759ef7183633_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_6795759ef7183633_base (BG.toFFIType x0))
 
 -- | Get the USB product ID of an opened gamepad, if available.
 --
@@ -1747,7 +1793,7 @@
 --
 --     [See also]: 'sDL_GetGamepadProductForID'
 --
---     [C declaration]: @SDL_GetGamepadProduct@, defined at @SDL3\/SDL_gamepad.h 958:36@
+--     [C declaration]: @SDL_GetGamepadProduct@, defined at @SDL3\/SDL_gamepad.h 959:36@
 sDL_GetGamepadProduct
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1760,14 +1806,15 @@
 foreign import ccall safe "hs_bindgen_aad1976ca8def689"
   hs_bindgen_aad1976ca8def689_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word16
+    -> IO HsBindgen.Runtime.LibC.Word16
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadProductVersion@
 hs_bindgen_aad1976ca8def689
   :: BG.Ptr SDL_Gamepad
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
 hs_bindgen_aad1976ca8def689 =
-  BG.fromFFIType hs_bindgen_aad1976ca8def689_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_aad1976ca8def689_base (BG.toFFIType x0))
 
 -- | Get the product version of an opened gamepad, if available.
 --
@@ -1781,7 +1828,7 @@
 --
 --     [See also]: 'sDL_GetGamepadProductVersionForID'
 --
---     [C declaration]: @SDL_GetGamepadProductVersion@, defined at @SDL3\/SDL_gamepad.h 974:36@
+--     [C declaration]: @SDL_GetGamepadProductVersion@, defined at @SDL3\/SDL_gamepad.h 975:36@
 sDL_GetGamepadProductVersion
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1795,14 +1842,15 @@
 foreign import ccall safe "hs_bindgen_9c5cbeb562bcb1a7"
   hs_bindgen_9c5cbeb562bcb1a7_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word16
+    -> IO HsBindgen.Runtime.LibC.Word16
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadFirmwareVersion@
 hs_bindgen_9c5cbeb562bcb1a7
   :: BG.Ptr SDL_Gamepad
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
 hs_bindgen_9c5cbeb562bcb1a7 =
-  BG.fromFFIType hs_bindgen_9c5cbeb562bcb1a7_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_9c5cbeb562bcb1a7_base (BG.toFFIType x0))
 
 -- | Get the firmware version of an opened gamepad, if available.
 --
@@ -1814,7 +1862,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadFirmwareVersion@, defined at @SDL3\/SDL_gamepad.h 988:36@
+--     [C declaration]: @SDL_GetGamepadFirmwareVersion@, defined at @SDL3\/SDL_gamepad.h 989:36@
 sDL_GetGamepadFirmwareVersion
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1835,7 +1883,8 @@
   :: BG.Ptr SDL_Gamepad
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_d5f06aeaa91c80e0 =
-  BG.fromFFIType hs_bindgen_d5f06aeaa91c80e0_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d5f06aeaa91c80e0_base (BG.toFFIType x0))
 
 -- | Get the serial number of an opened gamepad, if available.
 --
@@ -1847,7 +1896,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadSerial@, defined at @SDL3\/SDL_gamepad.h 1002:42@
+--     [C declaration]: @SDL_GetGamepadSerial@, defined at @SDL3\/SDL_gamepad.h 1003:42@
 sDL_GetGamepadSerial
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1860,14 +1909,15 @@
 foreign import ccall safe "hs_bindgen_67b2a6827bcd3e6d"
   hs_bindgen_67b2a6827bcd3e6d_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word64
+    -> IO HsBindgen.Runtime.LibC.Word64
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadSteamHandle@
 hs_bindgen_67b2a6827bcd3e6d
   :: BG.Ptr SDL_Gamepad
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint64
 hs_bindgen_67b2a6827bcd3e6d =
-  BG.fromFFIType hs_bindgen_67b2a6827bcd3e6d_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_67b2a6827bcd3e6d_base (BG.toFFIType x0))
 
 -- | Get the Steam Input handle of an opened gamepad, if available.
 --
@@ -1879,7 +1929,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadSteamHandle@, defined at @SDL3\/SDL_gamepad.h 1017:36@
+--     [C declaration]: @SDL_GetGamepadSteamHandle@, defined at @SDL3\/SDL_gamepad.h 1018:36@
 sDL_GetGamepadSteamHandle
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1893,14 +1943,15 @@
 foreign import ccall safe "hs_bindgen_51ab18aa239a2b97"
   hs_bindgen_51ab18aa239a2b97_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO HsBindgen.Runtime.Support.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadConnectionState@
 hs_bindgen_51ab18aa239a2b97
   :: BG.Ptr SDL_Gamepad
   -> IO SDL3.Sys.Bindgen.Joystick.SDL_JoystickConnectionState
 hs_bindgen_51ab18aa239a2b97 =
-  BG.fromFFIType hs_bindgen_51ab18aa239a2b97_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_51ab18aa239a2b97_base (BG.toFFIType x0))
 
 -- | Get the connection state of a gamepad.
 --
@@ -1910,7 +1961,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadConnectionState@, defined at @SDL3\/SDL_gamepad.h 1031:57@
+--     [C declaration]: @SDL_GetGamepadConnectionState@, defined at @SDL3\/SDL_gamepad.h 1032:57@
 sDL_GetGamepadConnectionState
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1925,7 +1976,7 @@
   hs_bindgen_9ac35ffbdb9db2d8_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO HsBindgen.Runtime.Support.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadPowerInfo@
 hs_bindgen_9ac35ffbdb9db2d8
@@ -1933,7 +1984,9 @@
   -> BG.Ptr BG.CInt
   -> IO SDL3.Sys.Bindgen.Power.SDL_PowerState
 hs_bindgen_9ac35ffbdb9db2d8 =
-  BG.fromFFIType hs_bindgen_9ac35ffbdb9db2d8_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_9ac35ffbdb9db2d8_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the battery state of a gamepad.
 --
@@ -1945,7 +1998,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadPowerInfo@, defined at @SDL3\/SDL_gamepad.h 1053:44@
+--     [C declaration]: @SDL_GetGamepadPowerInfo@, defined at @SDL3\/SDL_gamepad.h 1054:44@
 sDL_GetGamepadPowerInfo
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1962,14 +2015,15 @@
 foreign import ccall safe "hs_bindgen_ceb9282898627775"
   hs_bindgen_ceb9282898627775_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GamepadConnected@
 hs_bindgen_ceb9282898627775
   :: BG.Ptr SDL_Gamepad
   -> IO BG.CBool
 hs_bindgen_ceb9282898627775 =
-  BG.fromFFIType hs_bindgen_ceb9282898627775_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_ceb9282898627775_base (BG.toFFIType x0))
 
 -- | Check if a gamepad has been opened and is currently connected.
 --
@@ -1979,7 +2033,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GamepadConnected@, defined at @SDL3\/SDL_gamepad.h 1067:34@
+--     [C declaration]: @SDL_GamepadConnected@, defined at @SDL3\/SDL_gamepad.h 1068:34@
 sDL_GamepadConnected
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1999,7 +2053,8 @@
   :: BG.Ptr SDL_Gamepad
   -> IO (BG.Ptr SDL3.Sys.Bindgen.Joystick.SDL_Joystick)
 hs_bindgen_c1e15069e5f0b3b4 =
-  BG.fromFFIType hs_bindgen_c1e15069e5f0b3b4_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c1e15069e5f0b3b4_base (BG.toFFIType x0))
 
 -- | Get the underlying joystick from a gamepad.
 --
@@ -2013,7 +2068,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadJoystick@, defined at @SDL3\/SDL_gamepad.h 1089:44@
+--     [C declaration]: @SDL_GetGamepadJoystick@, defined at @SDL3\/SDL_gamepad.h 1090:44@
 sDL_GetGamepadJoystick
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2025,7 +2080,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_SetGamepadEventsEnabled@
 foreign import ccall safe "hs_bindgen_aa68cf392dbe1717"
   hs_bindgen_aa68cf392dbe1717_base
-    :: BG.Word8
+    :: BG.CBool
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_SetGamepadEventsEnabled@
@@ -2033,7 +2088,8 @@
   :: BG.CBool
   -> IO ()
 hs_bindgen_aa68cf392dbe1717 =
-  BG.fromFFIType hs_bindgen_aa68cf392dbe1717_base
+  \x0 ->
+    hs_bindgen_aa68cf392dbe1717_base (BG.toFFIType x0)
 
 -- | Set the state of gamepad event processing.
 --
@@ -2045,7 +2101,7 @@
 --
 --     [See also]: 'sDL_GamepadEventsEnabled', 'sDL_UpdateGamepads'
 --
---     [C declaration]: @SDL_SetGamepadEventsEnabled@, defined at @SDL3\/SDL_gamepad.h 1106:34@
+--     [C declaration]: @SDL_SetGamepadEventsEnabled@, defined at @SDL3\/SDL_gamepad.h 1107:34@
 sDL_SetGamepadEventsEnabled
   :: BG.CBool
   -- ^
@@ -2058,12 +2114,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GamepadEventsEnabled@
 foreign import ccall safe "hs_bindgen_cd08b36ef0436bc1"
   hs_bindgen_cd08b36ef0436bc1_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GamepadEventsEnabled@
 hs_bindgen_cd08b36ef0436bc1 :: IO BG.CBool
 hs_bindgen_cd08b36ef0436bc1 =
-  BG.fromFFIType hs_bindgen_cd08b36ef0436bc1_base
+  fmap BG.fromFFIType hs_bindgen_cd08b36ef0436bc1_base
 
 -- | Query the state of gamepad event processing.
 --
@@ -2077,7 +2133,7 @@
 --
 --     [See also]: 'sDL_SetGamepadEventsEnabled'
 --
---     [C declaration]: @SDL_GamepadEventsEnabled@, defined at @SDL3\/SDL_gamepad.h 1122:34@
+--     [C declaration]: @SDL_GamepadEventsEnabled@, defined at @SDL3\/SDL_gamepad.h 1123:34@
 sDL_GamepadEventsEnabled :: IO BG.CBool
 sDL_GamepadEventsEnabled =
   hs_bindgen_cd08b36ef0436bc1
@@ -2095,7 +2151,9 @@
   -> BG.Ptr BG.CInt
   -> IO (BG.Ptr (BG.Ptr SDL_GamepadBinding))
 hs_bindgen_213ad716fb12ea93 =
-  BG.fromFFIType hs_bindgen_213ad716fb12ea93_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_213ad716fb12ea93_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the SDL joystick layer bindings for a gamepad.
 --
@@ -2105,7 +2163,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadBindings@, defined at @SDL3\/SDL_gamepad.h 1138:51@
+--     [C declaration]: @SDL_GetGamepadBindings@, defined at @SDL3\/SDL_gamepad.h 1139:51@
 sDL_GetGamepadBindings
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2126,7 +2184,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_UpdateGamepads@
 hs_bindgen_0006fa783d3b66ec :: IO ()
 hs_bindgen_0006fa783d3b66ec =
-  BG.fromFFIType hs_bindgen_0006fa783d3b66ec_base
+  hs_bindgen_0006fa783d3b66ec_base
 
 -- | Manually pump gamepad updates if not using the loop.
 --
@@ -2136,7 +2194,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_UpdateGamepads@, defined at @SDL3\/SDL_gamepad.h 1151:34@
+--     [C declaration]: @SDL_UpdateGamepads@, defined at @SDL3\/SDL_gamepad.h 1152:34@
 sDL_UpdateGamepads :: IO ()
 sDL_UpdateGamepads = hs_bindgen_0006fa783d3b66ec
 
@@ -2144,14 +2202,15 @@
 foreign import ccall safe "hs_bindgen_793ab6d7edd0a66d"
   hs_bindgen_793ab6d7edd0a66d_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadTypeFromString@
 hs_bindgen_793ab6d7edd0a66d
   :: PtrConst.PtrConst BG.CChar
   -> IO SDL_GamepadType
 hs_bindgen_793ab6d7edd0a66d =
-  BG.fromFFIType hs_bindgen_793ab6d7edd0a66d_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_793ab6d7edd0a66d_base (BG.toFFIType x0))
 
 -- | Convert a string into 'SDL_GamepadType' enum.
 --
@@ -2165,7 +2224,7 @@
 --
 --     [See also]: 'sDL_GetGamepadStringForType'
 --
---     [C declaration]: @SDL_GetGamepadTypeFromString@, defined at @SDL3\/SDL_gamepad.h 1171:45@
+--     [C declaration]: @SDL_GetGamepadTypeFromString@, defined at @SDL3\/SDL_gamepad.h 1172:45@
 sDL_GetGamepadTypeFromString
   :: PtrConst.PtrConst BG.CChar
   -- ^
@@ -2178,7 +2237,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadStringForType@
 foreign import ccall safe "hs_bindgen_d426a8b3d196baf4"
   hs_bindgen_d426a8b3d196baf4_base
-    :: BG.Word32
+    :: BG.CUInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadStringForType@
@@ -2186,7 +2245,8 @@
   :: SDL_GamepadType
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_d426a8b3d196baf4 =
-  BG.fromFFIType hs_bindgen_d426a8b3d196baf4_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d426a8b3d196baf4_base (BG.toFFIType x0))
 
 -- | Convert from an 'SDL_GamepadType' enum to a string.
 --
@@ -2198,7 +2258,7 @@
 --
 --     [See also]: 'sDL_GetGamepadTypeFromString'
 --
---     [C declaration]: @SDL_GetGamepadStringForType@, defined at @SDL3\/SDL_gamepad.h 1187:42@
+--     [C declaration]: @SDL_GetGamepadStringForType@, defined at @SDL3\/SDL_gamepad.h 1188:42@
 sDL_GetGamepadStringForType
   :: SDL_GamepadType
   -- ^
@@ -2212,14 +2272,15 @@
 foreign import ccall safe "hs_bindgen_5a9d122ea5094f40"
   hs_bindgen_5a9d122ea5094f40_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadAxisFromString@
 hs_bindgen_5a9d122ea5094f40
   :: PtrConst.PtrConst BG.CChar
   -> IO SDL_GamepadAxis
 hs_bindgen_5a9d122ea5094f40 =
-  BG.fromFFIType hs_bindgen_5a9d122ea5094f40_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_5a9d122ea5094f40_base (BG.toFFIType x0))
 
 -- | Convert a string into 'SDL_GamepadAxis' enum.
 --
@@ -2235,7 +2296,7 @@
 --
 --     [See also]: 'sDL_GetGamepadStringForAxis'
 --
---     [C declaration]: @SDL_GetGamepadAxisFromString@, defined at @SDL3\/SDL_gamepad.h 1211:45@
+--     [C declaration]: @SDL_GetGamepadAxisFromString@, defined at @SDL3\/SDL_gamepad.h 1212:45@
 sDL_GetGamepadAxisFromString
   :: PtrConst.PtrConst BG.CChar
   -- ^
@@ -2248,7 +2309,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadStringForAxis@
 foreign import ccall safe "hs_bindgen_9cbed523522c86f2"
   hs_bindgen_9cbed523522c86f2_base
-    :: BG.Int32
+    :: BG.CInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadStringForAxis@
@@ -2256,7 +2317,8 @@
   :: SDL_GamepadAxis
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_9cbed523522c86f2 =
-  BG.fromFFIType hs_bindgen_9cbed523522c86f2_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_9cbed523522c86f2_base (BG.toFFIType x0))
 
 -- | Convert from an 'SDL_GamepadAxis' enum to a string.
 --
@@ -2268,7 +2330,7 @@
 --
 --     [See also]: 'sDL_GetGamepadAxisFromString'
 --
---     [C declaration]: @SDL_GetGamepadStringForAxis@, defined at @SDL3\/SDL_gamepad.h 1227:42@
+--     [C declaration]: @SDL_GetGamepadStringForAxis@, defined at @SDL3\/SDL_gamepad.h 1228:42@
 sDL_GetGamepadStringForAxis
   :: SDL_GamepadAxis
   -- ^
@@ -2282,8 +2344,8 @@
 foreign import ccall safe "hs_bindgen_6d87cb6c759a128e"
   hs_bindgen_6d87cb6c759a128e_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GamepadHasAxis@
 hs_bindgen_6d87cb6c759a128e
@@ -2291,7 +2353,9 @@
   -> SDL_GamepadAxis
   -> IO BG.CBool
 hs_bindgen_6d87cb6c759a128e =
-  BG.fromFFIType hs_bindgen_6d87cb6c759a128e_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_6d87cb6c759a128e_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Query whether a gamepad has a given axis.
 --
@@ -2305,7 +2369,7 @@
 --
 --     [See also]: 'sDL_GamepadHasButton', 'sDL_GetGamepadAxis'
 --
---     [C declaration]: @SDL_GamepadHasAxis@, defined at @SDL3\/SDL_gamepad.h 1246:34@
+--     [C declaration]: @SDL_GamepadHasAxis@, defined at @SDL3\/SDL_gamepad.h 1247:34@
 sDL_GamepadHasAxis
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2322,8 +2386,8 @@
 foreign import ccall safe "hs_bindgen_d4e206062bf3a0b7"
   hs_bindgen_d4e206062bf3a0b7_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Int16
+    -> BG.CInt
+    -> IO HsBindgen.Runtime.LibC.Int16
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadAxis@
 hs_bindgen_d4e206062bf3a0b7
@@ -2331,7 +2395,9 @@
   -> SDL_GamepadAxis
   -> IO SDL3.Sys.Bindgen.Stdinc.Sint16
 hs_bindgen_d4e206062bf3a0b7 =
-  BG.fromFFIType hs_bindgen_d4e206062bf3a0b7_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_d4e206062bf3a0b7_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the current state of an axis control on a gamepad.
 --
@@ -2351,7 +2417,7 @@
 --
 --     [See also]: 'sDL_GamepadHasAxis', 'sDL_GetGamepadButton'
 --
---     [C declaration]: @SDL_GetGamepadAxis@, defined at @SDL3\/SDL_gamepad.h 1274:36@
+--     [C declaration]: @SDL_GetGamepadAxis@, defined at @SDL3\/SDL_gamepad.h 1275:36@
 sDL_GetGamepadAxis
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2368,14 +2434,15 @@
 foreign import ccall safe "hs_bindgen_3d3d13260e5bf752"
   hs_bindgen_3d3d13260e5bf752_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadButtonFromString@
 hs_bindgen_3d3d13260e5bf752
   :: PtrConst.PtrConst BG.CChar
   -> IO SDL_GamepadButton
 hs_bindgen_3d3d13260e5bf752 =
-  BG.fromFFIType hs_bindgen_3d3d13260e5bf752_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3d3d13260e5bf752_base (BG.toFFIType x0))
 
 -- | Convert a string into an 'SDL_GamepadButton' enum.
 --
@@ -2389,7 +2456,7 @@
 --
 --     [See also]: 'sDL_GetGamepadStringForButton'
 --
---     [C declaration]: @SDL_GetGamepadButtonFromString@, defined at @SDL3\/SDL_gamepad.h 1294:47@
+--     [C declaration]: @SDL_GetGamepadButtonFromString@, defined at @SDL3\/SDL_gamepad.h 1295:47@
 sDL_GetGamepadButtonFromString
   :: PtrConst.PtrConst BG.CChar
   -- ^
@@ -2402,7 +2469,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadStringForButton@
 foreign import ccall safe "hs_bindgen_7d3134eb357b2911"
   hs_bindgen_7d3134eb357b2911_base
-    :: BG.Int32
+    :: BG.CInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadStringForButton@
@@ -2410,7 +2477,8 @@
   :: SDL_GamepadButton
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_7d3134eb357b2911 =
-  BG.fromFFIType hs_bindgen_7d3134eb357b2911_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_7d3134eb357b2911_base (BG.toFFIType x0))
 
 -- | Convert from an 'SDL_GamepadButton' enum to a string.
 --
@@ -2422,7 +2490,7 @@
 --
 --     [See also]: 'sDL_GetGamepadButtonFromString'
 --
---     [C declaration]: @SDL_GetGamepadStringForButton@, defined at @SDL3\/SDL_gamepad.h 1310:42@
+--     [C declaration]: @SDL_GetGamepadStringForButton@, defined at @SDL3\/SDL_gamepad.h 1311:42@
 sDL_GetGamepadStringForButton
   :: SDL_GamepadButton
   -- ^
@@ -2436,8 +2504,8 @@
 foreign import ccall safe "hs_bindgen_835e151fd6fbdcd9"
   hs_bindgen_835e151fd6fbdcd9_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GamepadHasButton@
 hs_bindgen_835e151fd6fbdcd9
@@ -2445,7 +2513,9 @@
   -> SDL_GamepadButton
   -> IO BG.CBool
 hs_bindgen_835e151fd6fbdcd9 =
-  BG.fromFFIType hs_bindgen_835e151fd6fbdcd9_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_835e151fd6fbdcd9_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Query whether a gamepad has a given button.
 --
@@ -2459,7 +2529,7 @@
 --
 --     [See also]: 'sDL_GamepadHasAxis'
 --
---     [C declaration]: @SDL_GamepadHasButton@, defined at @SDL3\/SDL_gamepad.h 1328:34@
+--     [C declaration]: @SDL_GamepadHasButton@, defined at @SDL3\/SDL_gamepad.h 1329:34@
 sDL_GamepadHasButton
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2476,8 +2546,8 @@
 foreign import ccall safe "hs_bindgen_930a123ab5a67173"
   hs_bindgen_930a123ab5a67173_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadButton@
 hs_bindgen_930a123ab5a67173
@@ -2485,7 +2555,9 @@
   -> SDL_GamepadButton
   -> IO BG.CBool
 hs_bindgen_930a123ab5a67173 =
-  BG.fromFFIType hs_bindgen_930a123ab5a67173_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_930a123ab5a67173_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the current state of a button on a gamepad.
 --
@@ -2497,7 +2569,7 @@
 --
 --     [See also]: 'sDL_GamepadHasButton', 'sDL_GetGamepadAxis'
 --
---     [C declaration]: @SDL_GetGamepadButton@, defined at @SDL3\/SDL_gamepad.h 1344:34@
+--     [C declaration]: @SDL_GetGamepadButton@, defined at @SDL3\/SDL_gamepad.h 1345:34@
 sDL_GetGamepadButton
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2513,9 +2585,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadButtonLabelForType@
 foreign import ccall safe "hs_bindgen_3a07981024fde2b9"
   hs_bindgen_3a07981024fde2b9_base
-    :: BG.Word32
-    -> BG.Int32
-    -> IO BG.Word32
+    :: BG.CUInt
+    -> BG.CInt
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadButtonLabelForType@
 hs_bindgen_3a07981024fde2b9
@@ -2523,7 +2595,9 @@
   -> SDL_GamepadButton
   -> IO SDL_GamepadButtonLabel
 hs_bindgen_3a07981024fde2b9 =
-  BG.fromFFIType hs_bindgen_3a07981024fde2b9_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_3a07981024fde2b9_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the label of a button on a gamepad.
 --
@@ -2535,7 +2609,7 @@
 --
 --     [See also]: 'sDL_GetGamepadButtonLabel'
 --
---     [C declaration]: @SDL_GetGamepadButtonLabelForType@, defined at @SDL3\/SDL_gamepad.h 1359:52@
+--     [C declaration]: @SDL_GetGamepadButtonLabelForType@, defined at @SDL3\/SDL_gamepad.h 1360:52@
 sDL_GetGamepadButtonLabelForType
   :: SDL_GamepadType
   -- ^
@@ -2553,8 +2627,8 @@
 foreign import ccall safe "hs_bindgen_80f031ee04caea84"
   hs_bindgen_80f031ee04caea84_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word32
+    -> BG.CInt
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadButtonLabel@
 hs_bindgen_80f031ee04caea84
@@ -2562,7 +2636,9 @@
   -> SDL_GamepadButton
   -> IO SDL_GamepadButtonLabel
 hs_bindgen_80f031ee04caea84 =
-  BG.fromFFIType hs_bindgen_80f031ee04caea84_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_80f031ee04caea84_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the label of a button on a gamepad.
 --
@@ -2574,7 +2650,7 @@
 --
 --     [See also]: 'sDL_GetGamepadButtonLabelForType'
 --
---     [C declaration]: @SDL_GetGamepadButtonLabel@, defined at @SDL3\/SDL_gamepad.h 1374:52@
+--     [C declaration]: @SDL_GetGamepadButtonLabel@, defined at @SDL3\/SDL_gamepad.h 1375:52@
 sDL_GetGamepadButtonLabel
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2592,14 +2668,15 @@
 foreign import ccall safe "hs_bindgen_65d4ab0a10c0f69e"
   hs_bindgen_65d4ab0a10c0f69e_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetNumGamepadTouchpads@
 hs_bindgen_65d4ab0a10c0f69e
   :: BG.Ptr SDL_Gamepad
   -> IO BG.CInt
 hs_bindgen_65d4ab0a10c0f69e =
-  BG.fromFFIType hs_bindgen_65d4ab0a10c0f69e_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_65d4ab0a10c0f69e_base (BG.toFFIType x0))
 
 -- | Get the number of touchpads on a gamepad.
 --
@@ -2611,7 +2688,7 @@
 --
 --     [See also]: 'sDL_GetNumGamepadTouchpadFingers'
 --
---     [C declaration]: @SDL_GetNumGamepadTouchpads@, defined at @SDL3\/SDL_gamepad.h 1388:33@
+--     [C declaration]: @SDL_GetNumGamepadTouchpads@, defined at @SDL3\/SDL_gamepad.h 1389:33@
 sDL_GetNumGamepadTouchpads
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2625,8 +2702,8 @@
 foreign import ccall safe "hs_bindgen_d33ef1d9882dcbad"
   hs_bindgen_d33ef1d9882dcbad_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Int32
+    -> BG.CInt
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetNumGamepadTouchpadFingers@
 hs_bindgen_d33ef1d9882dcbad
@@ -2634,7 +2711,9 @@
   -> BG.CInt
   -> IO BG.CInt
 hs_bindgen_d33ef1d9882dcbad =
-  BG.fromFFIType hs_bindgen_d33ef1d9882dcbad_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_d33ef1d9882dcbad_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the number of supported simultaneous fingers on a touchpad on a game gamepad.
 --
@@ -2646,7 +2725,7 @@
 --
 --     [See also]: 'sDL_GetGamepadTouchpadFinger', 'sDL_GetNumGamepadTouchpads'
 --
---     [C declaration]: @SDL_GetNumGamepadTouchpadFingers@, defined at @SDL3\/SDL_gamepad.h 1405:33@
+--     [C declaration]: @SDL_GetNumGamepadTouchpadFingers@, defined at @SDL3\/SDL_gamepad.h 1406:33@
 sDL_GetNumGamepadTouchpadFingers
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2664,13 +2743,13 @@
 foreign import ccall safe "hs_bindgen_225a3688e71f439f"
   hs_bindgen_225a3688e71f439f_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
+    -> BG.CInt
+    -> BG.CInt
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadTouchpadFinger@
 hs_bindgen_225a3688e71f439f
@@ -2683,7 +2762,24 @@
   -> BG.Ptr BG.CFloat
   -> IO BG.CBool
 hs_bindgen_225a3688e71f439f =
-  BG.fromFFIType hs_bindgen_225a3688e71f439f_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                fmap
+                  BG.fromFFIType
+                  ( hs_bindgen_225a3688e71f439f_base
+                      (BG.toFFIType x0)
+                      (BG.toFFIType x1)
+                      (BG.toFFIType x2)
+                      (BG.toFFIType x3)
+                      (BG.toFFIType x4)
+                      (BG.toFFIType x5)
+                      (BG.toFFIType x6)
+                  )
 
 -- | Get the current state of a finger on a touchpad on a gamepad.
 --
@@ -2695,7 +2791,7 @@
 --
 --     [See also]: 'sDL_GetNumGamepadTouchpadFingers'
 --
---     [C declaration]: @SDL_GetGamepadTouchpadFinger@, defined at @SDL3\/SDL_gamepad.h 1429:34@
+--     [C declaration]: @SDL_GetGamepadTouchpadFinger@, defined at @SDL3\/SDL_gamepad.h 1430:34@
 sDL_GetGamepadTouchpadFinger
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2733,8 +2829,8 @@
 foreign import ccall safe "hs_bindgen_1b3239ce64af9f86"
   hs_bindgen_1b3239ce64af9f86_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.Support.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GamepadHasSensor@
 hs_bindgen_1b3239ce64af9f86
@@ -2742,7 +2838,9 @@
   -> SDL3.Sys.Bindgen.Sensor.SDL_SensorType
   -> IO BG.CBool
 hs_bindgen_1b3239ce64af9f86 =
-  BG.fromFFIType hs_bindgen_1b3239ce64af9f86_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_1b3239ce64af9f86_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Return whether a gamepad has a particular sensor.
 --
@@ -2754,7 +2852,7 @@
 --
 --     [See also]: 'sDL_GetGamepadSensorData', 'sDL_GetGamepadSensorDataRate', 'sDL_SetGamepadSensorEnabled'
 --
---     [C declaration]: @SDL_GamepadHasSensor@, defined at @SDL3\/SDL_gamepad.h 1446:34@
+--     [C declaration]: @SDL_GamepadHasSensor@, defined at @SDL3\/SDL_gamepad.h 1447:34@
 sDL_GamepadHasSensor
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2771,9 +2869,9 @@
 foreign import ccall safe "hs_bindgen_3e3fc29af15c71c1"
   hs_bindgen_3e3fc29af15c71c1_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Word8
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.Support.CInt
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_SetGamepadSensorEnabled@
 hs_bindgen_3e3fc29af15c71c1
@@ -2782,7 +2880,12 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_3e3fc29af15c71c1 =
-  BG.fromFFIType hs_bindgen_3e3fc29af15c71c1_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_3e3fc29af15c71c1_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set whether data reporting for a gamepad sensor is enabled.
 --
@@ -2794,7 +2897,7 @@
 --
 --     [See also]: 'sDL_GamepadHasSensor', 'sDL_GamepadSensorEnabled'
 --
---     [C declaration]: @SDL_SetGamepadSensorEnabled@, defined at @SDL3\/SDL_gamepad.h 1464:34@
+--     [C declaration]: @SDL_SetGamepadSensorEnabled@, defined at @SDL3\/SDL_gamepad.h 1465:34@
 sDL_SetGamepadSensorEnabled
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2816,8 +2919,8 @@
 foreign import ccall safe "hs_bindgen_826f084dc9c761ff"
   hs_bindgen_826f084dc9c761ff_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.Support.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GamepadSensorEnabled@
 hs_bindgen_826f084dc9c761ff
@@ -2825,7 +2928,9 @@
   -> SDL3.Sys.Bindgen.Sensor.SDL_SensorType
   -> IO BG.CBool
 hs_bindgen_826f084dc9c761ff =
-  BG.fromFFIType hs_bindgen_826f084dc9c761ff_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_826f084dc9c761ff_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Query whether sensor data reporting is enabled for a gamepad.
 --
@@ -2837,7 +2942,7 @@
 --
 --     [See also]: 'sDL_SetGamepadSensorEnabled'
 --
---     [C declaration]: @SDL_GamepadSensorEnabled@, defined at @SDL3\/SDL_gamepad.h 1479:34@
+--     [C declaration]: @SDL_GamepadSensorEnabled@, defined at @SDL3\/SDL_gamepad.h 1480:34@
 sDL_GamepadSensorEnabled
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2855,8 +2960,8 @@
 foreign import ccall safe "hs_bindgen_69751d524bc7ba71"
   hs_bindgen_69751d524bc7ba71_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO Float
+    -> HsBindgen.Runtime.Support.CInt
+    -> IO BG.CFloat
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadSensorDataRate@
 hs_bindgen_69751d524bc7ba71
@@ -2864,7 +2969,9 @@
   -> SDL3.Sys.Bindgen.Sensor.SDL_SensorType
   -> IO BG.CFloat
 hs_bindgen_69751d524bc7ba71 =
-  BG.fromFFIType hs_bindgen_69751d524bc7ba71_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_69751d524bc7ba71_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the data rate (number of events per second) of a gamepad sensor.
 --
@@ -2874,7 +2981,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadSensorDataRate@, defined at @SDL3\/SDL_gamepad.h 1492:35@
+--     [C declaration]: @SDL_GetGamepadSensorDataRate@, defined at @SDL3\/SDL_gamepad.h 1493:35@
 sDL_GetGamepadSensorDataRate
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2892,10 +2999,10 @@
 foreign import ccall safe "hs_bindgen_2c02178932dc8e57"
   hs_bindgen_2c02178932dc8e57_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
+    -> HsBindgen.Runtime.Support.CInt
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadSensorData@
 hs_bindgen_2c02178932dc8e57
@@ -2905,7 +3012,18 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_2c02178932dc8e57 =
-  BG.fromFFIType hs_bindgen_2c02178932dc8e57_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_2c02178932dc8e57_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Get the current state of a gamepad sensor.
 --
@@ -2917,7 +3035,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadSensorData@, defined at @SDL3\/SDL_gamepad.h 1511:34@
+--     [C declaration]: @SDL_GetGamepadSensorData@, defined at @SDL3\/SDL_gamepad.h 1512:34@
 sDL_GetGamepadSensorData
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2943,10 +3061,10 @@
 foreign import ccall safe "hs_bindgen_36f6edc2de497d1f"
   hs_bindgen_36f6edc2de497d1f_base
     :: BG.Ptr BG.Void
-    -> BG.Word16
-    -> BG.Word16
-    -> BG.Word32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word16
+    -> HsBindgen.Runtime.LibC.Word16
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_RumbleGamepad@
 hs_bindgen_36f6edc2de497d1f
@@ -2956,7 +3074,18 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_36f6edc2de497d1f =
-  BG.fromFFIType hs_bindgen_36f6edc2de497d1f_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_36f6edc2de497d1f_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Start a rumble effect on a gamepad.
 --
@@ -2970,7 +3099,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_RumbleGamepad@, defined at @SDL3\/SDL_gamepad.h 1535:34@
+--     [C declaration]: @SDL_RumbleGamepad@, defined at @SDL3\/SDL_gamepad.h 1536:34@
 sDL_RumbleGamepad
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2995,10 +3124,10 @@
 foreign import ccall safe "hs_bindgen_1ab471fbae93c977"
   hs_bindgen_1ab471fbae93c977_base
     :: BG.Ptr BG.Void
-    -> BG.Word16
-    -> BG.Word16
-    -> BG.Word32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word16
+    -> HsBindgen.Runtime.LibC.Word16
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_RumbleGamepadTriggers@
 hs_bindgen_1ab471fbae93c977
@@ -3008,7 +3137,18 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_1ab471fbae93c977 =
-  BG.fromFFIType hs_bindgen_1ab471fbae93c977_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_1ab471fbae93c977_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Start a rumble effect in the gamepad\'s triggers.
 --
@@ -3026,7 +3166,7 @@
 --
 --     [See also]: 'sDL_RumbleGamepad'
 --
---     [C declaration]: @SDL_RumbleGamepadTriggers@, defined at @SDL3\/SDL_gamepad.h 1565:34@
+--     [C declaration]: @SDL_RumbleGamepadTriggers@, defined at @SDL3\/SDL_gamepad.h 1566:34@
 sDL_RumbleGamepadTriggers
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -3052,10 +3192,10 @@
 foreign import ccall safe "hs_bindgen_99951861ed614368"
   hs_bindgen_99951861ed614368_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> BG.Word8
-    -> BG.Word8
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_SetGamepadLED@
 hs_bindgen_99951861ed614368
@@ -3065,7 +3205,18 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO BG.CBool
 hs_bindgen_99951861ed614368 =
-  BG.fromFFIType hs_bindgen_99951861ed614368_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_99951861ed614368_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Update a gamepad\'s LED color.
 --
@@ -3079,7 +3230,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_SetGamepadLED@, defined at @SDL3\/SDL_gamepad.h 1587:34@
+--     [C declaration]: @SDL_SetGamepadLED@, defined at @SDL3\/SDL_gamepad.h 1588:34@
 sDL_SetGamepadLED
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -3105,8 +3256,8 @@
   hs_bindgen_0a60e2e403cd6afc_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_SendGamepadEffect@
 hs_bindgen_0a60e2e403cd6afc
@@ -3115,7 +3266,12 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_0a60e2e403cd6afc =
-  BG.fromFFIType hs_bindgen_0a60e2e403cd6afc_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_0a60e2e403cd6afc_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Send a gamepad specific effect packet.
 --
@@ -3125,7 +3281,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_SendGamepadEffect@, defined at @SDL3\/SDL_gamepad.h 1602:34@
+--     [C declaration]: @SDL_SendGamepadEffect@, defined at @SDL3\/SDL_gamepad.h 1603:34@
 sDL_SendGamepadEffect
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -3153,7 +3309,8 @@
   :: BG.Ptr SDL_Gamepad
   -> IO ()
 hs_bindgen_7615a65af389a834 =
-  BG.fromFFIType hs_bindgen_7615a65af389a834_base
+  \x0 ->
+    hs_bindgen_7615a65af389a834_base (BG.toFFIType x0)
 
 -- | Close a gamepad previously opened with @SDL_OpenGamepad()@.
 --
@@ -3163,7 +3320,7 @@
 --
 --     [See also]: 'sDL_OpenGamepad'
 --
---     [C declaration]: @SDL_CloseGamepad@, defined at @SDL3\/SDL_gamepad.h 1616:34@
+--     [C declaration]: @SDL_CloseGamepad@, defined at @SDL3\/SDL_gamepad.h 1617:34@
 sDL_CloseGamepad
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -3176,7 +3333,7 @@
 foreign import ccall safe "hs_bindgen_99f1aa16515a60df"
   hs_bindgen_99f1aa16515a60df_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadAppleSFSymbolsNameForButton@
@@ -3185,7 +3342,9 @@
   -> SDL_GamepadButton
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_99f1aa16515a60df =
-  BG.fromFFIType hs_bindgen_99f1aa16515a60df_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_99f1aa16515a60df_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Return the sfSymbolsName for a given button on a gamepad on Apple platforms.
 --
@@ -3197,7 +3356,7 @@
 --
 --     [See also]: 'sDL_GetGamepadAppleSFSymbolsNameForAxis'
 --
---     [C declaration]: @SDL_GetGamepadAppleSFSymbolsNameForButton@, defined at @SDL3\/SDL_gamepad.h 1632:42@
+--     [C declaration]: @SDL_GetGamepadAppleSFSymbolsNameForButton@, defined at @SDL3\/SDL_gamepad.h 1633:42@
 sDL_GetGamepadAppleSFSymbolsNameForButton
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -3215,7 +3374,7 @@
 foreign import ccall safe "hs_bindgen_076ad522cfc3e68e"
   hs_bindgen_076ad522cfc3e68e_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Safe_SDL_GetGamepadAppleSFSymbolsNameForAxis@
@@ -3224,7 +3383,9 @@
   -> SDL_GamepadAxis
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_076ad522cfc3e68e =
-  BG.fromFFIType hs_bindgen_076ad522cfc3e68e_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_076ad522cfc3e68e_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Return the sfSymbolsName for a given axis on a gamepad on Apple platforms.
 --
@@ -3236,7 +3397,7 @@
 --
 --     [See also]: 'sDL_GetGamepadAppleSFSymbolsNameForButton'
 --
---     [C declaration]: @SDL_GetGamepadAppleSFSymbolsNameForAxis@, defined at @SDL3\/SDL_gamepad.h 1647:42@
+--     [C declaration]: @SDL_GetGamepadAppleSFSymbolsNameForAxis@, defined at @SDL3\/SDL_gamepad.h 1648:42@
 sDL_GetGamepadAppleSFSymbolsNameForAxis
   :: BG.Ptr SDL_Gamepad
   -- ^
diff --git a/src/SDL3/Sys/Bindgen/Gamepad/Unsafe.hs b/src/SDL3/Sys/Bindgen/Gamepad/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Gamepad/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Gamepad/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Gamepad.Unsafe (
@@ -79,7 +81,11 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Gamepad
@@ -93,7 +99,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_gamepad.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_gamepad.h>"
          , "signed int hs_bindgen_36135983181db04c ("
          , "  char const *arg1"
          , ")"
@@ -572,14 +582,15 @@
 foreign import ccall unsafe "hs_bindgen_36135983181db04c"
   hs_bindgen_36135983181db04c_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_AddGamepadMapping@
 hs_bindgen_36135983181db04c
   :: PtrConst.PtrConst BG.CChar
   -> IO BG.CInt
 hs_bindgen_36135983181db04c =
-  BG.fromFFIType hs_bindgen_36135983181db04c_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_36135983181db04c_base (BG.toFFIType x0))
 
 -- | Add support for gamepads that SDL is unaware of or change the binding of an existing gamepad.
 --
@@ -609,7 +620,7 @@
 --
 --     [See also]: 'sDL_AddGamepadMappingsFromFile', 'sDL_AddGamepadMappingsFromIO', 'sDL_GetGamepadMapping', 'sDL_GetGamepadMappingForGUID', SDL_HINT_GAMECONTROLLERCONFIG, SDL_HINT_GAMECONTROLLERCONFIG_FILE, SDL_EVENT_GAMEPAD_ADDED
 --
---     [C declaration]: @SDL_AddGamepadMapping@, defined at @SDL3\/SDL_gamepad.h 346:33@
+--     [C declaration]: @SDL_AddGamepadMapping@, defined at @SDL3\/SDL_gamepad.h 347:33@
 sDL_AddGamepadMapping
   :: PtrConst.PtrConst BG.CChar
   -- ^
@@ -622,8 +633,8 @@
 foreign import ccall unsafe "hs_bindgen_7bcfa7483bb6c304"
   hs_bindgen_7bcfa7483bb6c304_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Int32
+    -> BG.CBool
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_AddGamepadMappingsFromIO@
 hs_bindgen_7bcfa7483bb6c304
@@ -631,7 +642,9 @@
   -> BG.CBool
   -> IO BG.CInt
 hs_bindgen_7bcfa7483bb6c304 =
-  BG.fromFFIType hs_bindgen_7bcfa7483bb6c304_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_7bcfa7483bb6c304_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Load a set of gamepad mappings from an SDL_IOStream.
 --
@@ -653,7 +666,7 @@
 --
 --     [See also]: 'sDL_AddGamepadMapping', 'sDL_AddGamepadMappingsFromFile', 'sDL_GetGamepadMapping', 'sDL_GetGamepadMappingForGUID', SDL_HINT_GAMECONTROLLERCONFIG, SDL_HINT_GAMECONTROLLERCONFIG_FILE, SDL_EVENT_GAMEPAD_ADDED
 --
---     [C declaration]: @SDL_AddGamepadMappingsFromIO@, defined at @SDL3\/SDL_gamepad.h 386:33@
+--     [C declaration]: @SDL_AddGamepadMappingsFromIO@, defined at @SDL3\/SDL_gamepad.h 387:33@
 sDL_AddGamepadMappingsFromIO
   :: BG.Ptr SDL3.Sys.Bindgen.Iostream.SDL_IOStream
   -- ^
@@ -671,14 +684,15 @@
 foreign import ccall unsafe "hs_bindgen_183e11c34dd8b81f"
   hs_bindgen_183e11c34dd8b81f_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_AddGamepadMappingsFromFile@
 hs_bindgen_183e11c34dd8b81f
   :: PtrConst.PtrConst BG.CChar
   -> IO BG.CInt
 hs_bindgen_183e11c34dd8b81f =
-  BG.fromFFIType hs_bindgen_183e11c34dd8b81f_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_183e11c34dd8b81f_base (BG.toFFIType x0))
 
 -- | Load a set of gamepad mappings from a file.
 --
@@ -698,7 +712,7 @@
 --
 --     [See also]: 'sDL_AddGamepadMapping', 'sDL_AddGamepadMappingsFromIO', 'sDL_GetGamepadMapping', 'sDL_GetGamepadMappingForGUID', SDL_HINT_GAMECONTROLLERCONFIG, SDL_HINT_GAMECONTROLLERCONFIG_FILE, SDL_EVENT_GAMEPAD_ADDED
 --
---     [C declaration]: @SDL_AddGamepadMappingsFromFile@, defined at @SDL3\/SDL_gamepad.h 420:33@
+--     [C declaration]: @SDL_AddGamepadMappingsFromFile@, defined at @SDL3\/SDL_gamepad.h 421:33@
 sDL_AddGamepadMappingsFromFile
   :: PtrConst.PtrConst BG.CChar
   -- ^
@@ -711,12 +725,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_ReloadGamepadMappings@
 foreign import ccall unsafe "hs_bindgen_779c89fdca5b9a0e"
   hs_bindgen_779c89fdca5b9a0e_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_ReloadGamepadMappings@
 hs_bindgen_779c89fdca5b9a0e :: IO BG.CBool
 hs_bindgen_779c89fdca5b9a0e =
-  BG.fromFFIType hs_bindgen_779c89fdca5b9a0e_base
+  fmap BG.fromFFIType hs_bindgen_779c89fdca5b9a0e_base
 
 -- | Reinitialize the SDL mapping database to its initial state.
 --
@@ -728,7 +742,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_ReloadGamepadMappings@, defined at @SDL3\/SDL_gamepad.h 434:34@
+--     [C declaration]: @SDL_ReloadGamepadMappings@, defined at @SDL3\/SDL_gamepad.h 435:34@
 sDL_ReloadGamepadMappings :: IO BG.CBool
 sDL_ReloadGamepadMappings =
   hs_bindgen_779c89fdca5b9a0e
@@ -744,7 +758,8 @@
   :: BG.Ptr BG.CInt
   -> IO (BG.Ptr (BG.Ptr BG.CChar))
 hs_bindgen_d561ea70cab1346c =
-  BG.fromFFIType hs_bindgen_d561ea70cab1346c_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d561ea70cab1346c_base (BG.toFFIType x0))
 
 -- | Get the current gamepad mappings.
 --
@@ -754,7 +769,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadMappings@, defined at @SDL3\/SDL_gamepad.h 450:37@
+--     [C declaration]: @SDL_GetGamepadMappings@, defined at @SDL3\/SDL_gamepad.h 451:37@
 sDL_GetGamepadMappings
   :: BG.Ptr BG.CInt
   -- ^
@@ -774,7 +789,8 @@
   :: BG.Ptr SDL3.Sys.Bindgen.Guid.SDL_GUID
   -> IO (BG.Ptr BG.CChar)
 hs_bindgen_a9d84a5aab18bd61 =
-  BG.fromFFIType hs_bindgen_a9d84a5aab18bd61_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a9d84a5aab18bd61_base (BG.toFFIType x0))
 
 -- | Get the gamepad mapping string for a given GUID.
 --
@@ -786,7 +802,7 @@
 --
 --     [See also]: SDL_GetJoystickGUIDForID, SDL_GetJoystickGUID
 --
---     [C declaration]: @SDL_GetGamepadMappingForGUID@, defined at @SDL3\/SDL_gamepad.h 467:36@
+--     [C declaration]: @SDL_GetGamepadMappingForGUID@, defined at @SDL3\/SDL_gamepad.h 468:36@
 sDL_GetGamepadMappingForGUID
   :: SDL3.Sys.Bindgen.Guid.SDL_GUID
   -- ^
@@ -812,7 +828,8 @@
   :: BG.Ptr SDL_Gamepad
   -> IO (BG.Ptr BG.CChar)
 hs_bindgen_094250e7cd4814e2 =
-  BG.fromFFIType hs_bindgen_094250e7cd4814e2_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_094250e7cd4814e2_base (BG.toFFIType x0))
 
 -- | Get the current mapping of a gamepad.
 --
@@ -826,7 +843,7 @@
 --
 --     [See also]: 'sDL_AddGamepadMapping', 'sDL_GetGamepadMappingForID', 'sDL_GetGamepadMappingForGUID', 'sDL_SetGamepadMapping'
 --
---     [C declaration]: @SDL_GetGamepadMapping@, defined at @SDL3\/SDL_gamepad.h 488:36@
+--     [C declaration]: @SDL_GetGamepadMapping@, defined at @SDL3\/SDL_gamepad.h 489:36@
 sDL_GetGamepadMapping
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -838,9 +855,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_SetGamepadMapping@
 foreign import ccall unsafe "hs_bindgen_cf9c12a3e0081cba"
   hs_bindgen_cf9c12a3e0081cba_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_SetGamepadMapping@
 hs_bindgen_cf9c12a3e0081cba
@@ -848,7 +865,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_cf9c12a3e0081cba =
-  BG.fromFFIType hs_bindgen_cf9c12a3e0081cba_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_cf9c12a3e0081cba_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the current mapping of a joystick or gamepad.
 --
@@ -862,7 +881,7 @@
 --
 --     [See also]: 'sDL_AddGamepadMapping', 'sDL_GetGamepadMapping'
 --
---     [C declaration]: @SDL_SetGamepadMapping@, defined at @SDL3\/SDL_gamepad.h 508:34@
+--     [C declaration]: @SDL_SetGamepadMapping@, defined at @SDL3\/SDL_gamepad.h 509:34@
 sDL_SetGamepadMapping
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -878,12 +897,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_HasGamepad@
 foreign import ccall unsafe "hs_bindgen_5b29afb080773dd8"
   hs_bindgen_5b29afb080773dd8_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_HasGamepad@
 hs_bindgen_5b29afb080773dd8 :: IO BG.CBool
 hs_bindgen_5b29afb080773dd8 =
-  BG.fromFFIType hs_bindgen_5b29afb080773dd8_base
+  fmap BG.fromFFIType hs_bindgen_5b29afb080773dd8_base
 
 -- | Return whether a gamepad is currently connected.
 --
@@ -895,7 +914,7 @@
 --
 --     [See also]: 'sDL_GetGamepads'
 --
---     [C declaration]: @SDL_HasGamepad@, defined at @SDL3\/SDL_gamepad.h 521:34@
+--     [C declaration]: @SDL_HasGamepad@, defined at @SDL3\/SDL_gamepad.h 522:34@
 sDL_HasGamepad :: IO BG.CBool
 sDL_HasGamepad = hs_bindgen_5b29afb080773dd8
 
@@ -910,7 +929,8 @@
   :: BG.Ptr BG.CInt
   -> IO (BG.Ptr SDL3.Sys.Bindgen.Joystick.SDL_JoystickID)
 hs_bindgen_e99c053042181461 =
-  BG.fromFFIType hs_bindgen_e99c053042181461_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_e99c053042181461_base (BG.toFFIType x0))
 
 -- | Get a list of currently connected gamepads.
 --
@@ -922,7 +942,7 @@
 --
 --     [See also]: 'sDL_HasGamepad', 'sDL_OpenGamepad'
 --
---     [C declaration]: @SDL_GetGamepads@, defined at @SDL3\/SDL_gamepad.h 539:46@
+--     [C declaration]: @SDL_GetGamepads@, defined at @SDL3\/SDL_gamepad.h 540:46@
 sDL_GetGamepads
   :: BG.Ptr BG.CInt
   -- ^
@@ -934,15 +954,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_IsGamepad@
 foreign import ccall unsafe "hs_bindgen_48b133a0a1a04fee"
   hs_bindgen_48b133a0a1a04fee_base
-    :: BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_IsGamepad@
 hs_bindgen_48b133a0a1a04fee
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -> IO BG.CBool
 hs_bindgen_48b133a0a1a04fee =
-  BG.fromFFIType hs_bindgen_48b133a0a1a04fee_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_48b133a0a1a04fee_base (BG.toFFIType x0))
 
 -- | Check if the given joystick is supported by the gamepad interface.
 --
@@ -954,7 +975,7 @@
 --
 --     [See also]: SDL_GetJoysticks, 'sDL_OpenGamepad'
 --
---     [C declaration]: @SDL_IsGamepad@, defined at @SDL3\/SDL_gamepad.h 555:34@
+--     [C declaration]: @SDL_IsGamepad@, defined at @SDL3\/SDL_gamepad.h 556:34@
 sDL_IsGamepad
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -966,7 +987,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadNameForID@
 foreign import ccall unsafe "hs_bindgen_51b0ed9ede139ced"
   hs_bindgen_51b0ed9ede139ced_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadNameForID@
@@ -974,7 +995,8 @@
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_51b0ed9ede139ced =
-  BG.fromFFIType hs_bindgen_51b0ed9ede139ced_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_51b0ed9ede139ced_base (BG.toFFIType x0))
 
 -- | Get the implementation dependent name of a gamepad.
 --
@@ -988,7 +1010,7 @@
 --
 --     [See also]: 'sDL_GetGamepadName', 'sDL_GetGamepads'
 --
---     [C declaration]: @SDL_GetGamepadNameForID@, defined at @SDL3\/SDL_gamepad.h 573:42@
+--     [C declaration]: @SDL_GetGamepadNameForID@, defined at @SDL3\/SDL_gamepad.h 574:42@
 sDL_GetGamepadNameForID
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1000,7 +1022,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadPathForID@
 foreign import ccall unsafe "hs_bindgen_c1fe082501f756ae"
   hs_bindgen_c1fe082501f756ae_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadPathForID@
@@ -1008,7 +1030,8 @@
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_c1fe082501f756ae =
-  BG.fromFFIType hs_bindgen_c1fe082501f756ae_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c1fe082501f756ae_base (BG.toFFIType x0))
 
 -- | Get the implementation dependent path of a gamepad.
 --
@@ -1022,7 +1045,7 @@
 --
 --     [See also]: 'sDL_GetGamepadPath', 'sDL_GetGamepads'
 --
---     [C declaration]: @SDL_GetGamepadPathForID@, defined at @SDL3\/SDL_gamepad.h 591:42@
+--     [C declaration]: @SDL_GetGamepadPathForID@, defined at @SDL3\/SDL_gamepad.h 592:42@
 sDL_GetGamepadPathForID
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1034,15 +1057,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadPlayerIndexForID@
 foreign import ccall unsafe "hs_bindgen_9dac07bb4aa4a0e0"
   hs_bindgen_9dac07bb4aa4a0e0_base
-    :: BG.Word32
-    -> IO BG.Int32
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadPlayerIndexForID@
 hs_bindgen_9dac07bb4aa4a0e0
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -> IO BG.CInt
 hs_bindgen_9dac07bb4aa4a0e0 =
-  BG.fromFFIType hs_bindgen_9dac07bb4aa4a0e0_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_9dac07bb4aa4a0e0_base (BG.toFFIType x0))
 
 -- | Get the player index of a gamepad.
 --
@@ -1056,7 +1080,7 @@
 --
 --     [See also]: 'sDL_GetGamepadPlayerIndex', 'sDL_GetGamepads'
 --
---     [C declaration]: @SDL_GetGamepadPlayerIndexForID@, defined at @SDL3\/SDL_gamepad.h 608:33@
+--     [C declaration]: @SDL_GetGamepadPlayerIndexForID@, defined at @SDL3\/SDL_gamepad.h 609:33@
 sDL_GetGamepadPlayerIndexForID
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1069,7 +1093,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadGUIDForID@
 foreign import ccall unsafe "hs_bindgen_2280985bb32deb1f"
   hs_bindgen_2280985bb32deb1f_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> IO ()
 
@@ -1079,7 +1103,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Guid.SDL_GUID
   -> IO ()
 hs_bindgen_2280985bb32deb1f =
-  BG.fromFFIType hs_bindgen_2280985bb32deb1f_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_2280985bb32deb1f_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Get the implementation-dependent GUID of a gamepad.
 --
@@ -1093,7 +1119,7 @@
 --
 --     [See also]: SDL_GUIDToString, 'sDL_GetGamepads'
 --
---     [C declaration]: @SDL_GetGamepadGUIDForID@, defined at @SDL3\/SDL_gamepad.h 626:38@
+--     [C declaration]: @SDL_GetGamepadGUIDForID@, defined at @SDL3\/SDL_gamepad.h 627:38@
 sDL_GetGamepadGUIDForID
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1110,15 +1136,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadVendorForID@
 foreign import ccall unsafe "hs_bindgen_1702db5431a9f4d5"
   hs_bindgen_1702db5431a9f4d5_base
-    :: BG.Word32
-    -> IO BG.Word16
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO HsBindgen.Runtime.LibC.Word16
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadVendorForID@
 hs_bindgen_1702db5431a9f4d5
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
 hs_bindgen_1702db5431a9f4d5 =
-  BG.fromFFIType hs_bindgen_1702db5431a9f4d5_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_1702db5431a9f4d5_base (BG.toFFIType x0))
 
 -- | Get the USB vendor ID of a gamepad, if available.
 --
@@ -1132,7 +1159,7 @@
 --
 --     [See also]: 'sDL_GetGamepadVendor', 'sDL_GetGamepads'
 --
---     [C declaration]: @SDL_GetGamepadVendorForID@, defined at @SDL3\/SDL_gamepad.h 645:36@
+--     [C declaration]: @SDL_GetGamepadVendorForID@, defined at @SDL3\/SDL_gamepad.h 646:36@
 sDL_GetGamepadVendorForID
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1145,15 +1172,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadProductForID@
 foreign import ccall unsafe "hs_bindgen_c6d0670cd6f1d312"
   hs_bindgen_c6d0670cd6f1d312_base
-    :: BG.Word32
-    -> IO BG.Word16
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO HsBindgen.Runtime.LibC.Word16
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadProductForID@
 hs_bindgen_c6d0670cd6f1d312
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
 hs_bindgen_c6d0670cd6f1d312 =
-  BG.fromFFIType hs_bindgen_c6d0670cd6f1d312_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c6d0670cd6f1d312_base (BG.toFFIType x0))
 
 -- | Get the USB product ID of a gamepad, if available.
 --
@@ -1167,7 +1195,7 @@
 --
 --     [See also]: 'sDL_GetGamepadProduct', 'sDL_GetGamepads'
 --
---     [C declaration]: @SDL_GetGamepadProductForID@, defined at @SDL3\/SDL_gamepad.h 664:36@
+--     [C declaration]: @SDL_GetGamepadProductForID@, defined at @SDL3\/SDL_gamepad.h 665:36@
 sDL_GetGamepadProductForID
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1180,15 +1208,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadProductVersionForID@
 foreign import ccall unsafe "hs_bindgen_c5762d27fdb0fe20"
   hs_bindgen_c5762d27fdb0fe20_base
-    :: BG.Word32
-    -> IO BG.Word16
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO HsBindgen.Runtime.LibC.Word16
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadProductVersionForID@
 hs_bindgen_c5762d27fdb0fe20
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
 hs_bindgen_c5762d27fdb0fe20 =
-  BG.fromFFIType hs_bindgen_c5762d27fdb0fe20_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c5762d27fdb0fe20_base (BG.toFFIType x0))
 
 -- | Get the product version of a gamepad, if available.
 --
@@ -1202,7 +1231,7 @@
 --
 --     [See also]: 'sDL_GetGamepadProductVersion', 'sDL_GetGamepads'
 --
---     [C declaration]: @SDL_GetGamepadProductVersionForID@, defined at @SDL3\/SDL_gamepad.h 683:36@
+--     [C declaration]: @SDL_GetGamepadProductVersionForID@, defined at @SDL3\/SDL_gamepad.h 684:36@
 sDL_GetGamepadProductVersionForID
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1215,15 +1244,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadTypeForID@
 foreign import ccall unsafe "hs_bindgen_ab8ba638efb36686"
   hs_bindgen_ab8ba638efb36686_base
-    :: BG.Word32
-    -> IO BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadTypeForID@
 hs_bindgen_ab8ba638efb36686
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -> IO SDL_GamepadType
 hs_bindgen_ab8ba638efb36686 =
-  BG.fromFFIType hs_bindgen_ab8ba638efb36686_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_ab8ba638efb36686_base (BG.toFFIType x0))
 
 -- | Get the type of a gamepad.
 --
@@ -1237,7 +1267,7 @@
 --
 --     [See also]: 'sDL_GetGamepadType', 'sDL_GetGamepads', 'sDL_GetRealGamepadTypeForID'
 --
---     [C declaration]: @SDL_GetGamepadTypeForID@, defined at @SDL3\/SDL_gamepad.h 701:45@
+--     [C declaration]: @SDL_GetGamepadTypeForID@, defined at @SDL3\/SDL_gamepad.h 702:45@
 sDL_GetGamepadTypeForID
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1249,15 +1279,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetRealGamepadTypeForID@
 foreign import ccall unsafe "hs_bindgen_dbd35ae44acef0c3"
   hs_bindgen_dbd35ae44acef0c3_base
-    :: BG.Word32
-    -> IO BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetRealGamepadTypeForID@
 hs_bindgen_dbd35ae44acef0c3
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -> IO SDL_GamepadType
 hs_bindgen_dbd35ae44acef0c3 =
-  BG.fromFFIType hs_bindgen_dbd35ae44acef0c3_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_dbd35ae44acef0c3_base (BG.toFFIType x0))
 
 -- | Get the type of a gamepad, ignoring any mapping override.
 --
@@ -1271,7 +1302,7 @@
 --
 --     [See also]: 'sDL_GetGamepadTypeForID', 'sDL_GetGamepads', 'sDL_GetRealGamepadType'
 --
---     [C declaration]: @SDL_GetRealGamepadTypeForID@, defined at @SDL3\/SDL_gamepad.h 719:45@
+--     [C declaration]: @SDL_GetRealGamepadTypeForID@, defined at @SDL3\/SDL_gamepad.h 720:45@
 sDL_GetRealGamepadTypeForID
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1284,7 +1315,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadMappingForID@
 foreign import ccall unsafe "hs_bindgen_70db76a3c7fda9bd"
   hs_bindgen_70db76a3c7fda9bd_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadMappingForID@
@@ -1292,7 +1323,8 @@
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -> IO (BG.Ptr BG.CChar)
 hs_bindgen_70db76a3c7fda9bd =
-  BG.fromFFIType hs_bindgen_70db76a3c7fda9bd_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_70db76a3c7fda9bd_base (BG.toFFIType x0))
 
 -- | Get the mapping of a gamepad.
 --
@@ -1306,7 +1338,7 @@
 --
 --     [See also]: 'sDL_GetGamepads', 'sDL_GetGamepadMapping'
 --
---     [C declaration]: @SDL_GetGamepadMappingForID@, defined at @SDL3\/SDL_gamepad.h 737:36@
+--     [C declaration]: @SDL_GetGamepadMappingForID@, defined at @SDL3\/SDL_gamepad.h 738:36@
 sDL_GetGamepadMappingForID
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1319,7 +1351,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_OpenGamepad@
 foreign import ccall unsafe "hs_bindgen_cbd487a8a2440863"
   hs_bindgen_cbd487a8a2440863_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_OpenGamepad@
@@ -1327,7 +1359,8 @@
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -> IO (BG.Ptr SDL_Gamepad)
 hs_bindgen_cbd487a8a2440863 =
-  BG.fromFFIType hs_bindgen_cbd487a8a2440863_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_cbd487a8a2440863_base (BG.toFFIType x0))
 
 -- | Open a gamepad for use.
 --
@@ -1339,7 +1372,7 @@
 --
 --     [See also]: 'sDL_CloseGamepad', 'sDL_IsGamepad'
 --
---     [C declaration]: @SDL_OpenGamepad@, defined at @SDL3\/SDL_gamepad.h 753:43@
+--     [C declaration]: @SDL_OpenGamepad@, defined at @SDL3\/SDL_gamepad.h 754:43@
 sDL_OpenGamepad
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1351,7 +1384,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadFromID@
 foreign import ccall unsafe "hs_bindgen_a76618005d317dbe"
   hs_bindgen_a76618005d317dbe_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadFromID@
@@ -1359,7 +1392,8 @@
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -> IO (BG.Ptr SDL_Gamepad)
 hs_bindgen_a76618005d317dbe =
-  BG.fromFFIType hs_bindgen_a76618005d317dbe_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a76618005d317dbe_base (BG.toFFIType x0))
 
 -- | Get the 'SDL_Gamepad' associated with a joystick instance ID, if it has been opened.
 --
@@ -1369,7 +1403,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadFromID@, defined at @SDL3\/SDL_gamepad.h 767:43@
+--     [C declaration]: @SDL_GetGamepadFromID@, defined at @SDL3\/SDL_gamepad.h 768:43@
 sDL_GetGamepadFromID
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1381,7 +1415,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadFromPlayerIndex@
 foreign import ccall unsafe "hs_bindgen_23e0c7566ddc098f"
   hs_bindgen_23e0c7566ddc098f_base
-    :: BG.Int32
+    :: BG.CInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadFromPlayerIndex@
@@ -1389,7 +1423,8 @@
   :: BG.CInt
   -> IO (BG.Ptr SDL_Gamepad)
 hs_bindgen_23e0c7566ddc098f =
-  BG.fromFFIType hs_bindgen_23e0c7566ddc098f_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_23e0c7566ddc098f_base (BG.toFFIType x0))
 
 -- | Get the 'SDL_Gamepad' associated with a player index.
 --
@@ -1401,7 +1436,7 @@
 --
 --     [See also]: 'sDL_GetGamepadPlayerIndex', 'sDL_SetGamepadPlayerIndex'
 --
---     [C declaration]: @SDL_GetGamepadFromPlayerIndex@, defined at @SDL3\/SDL_gamepad.h 782:43@
+--     [C declaration]: @SDL_GetGamepadFromPlayerIndex@, defined at @SDL3\/SDL_gamepad.h 783:43@
 sDL_GetGamepadFromPlayerIndex
   :: BG.CInt
   -- ^
@@ -1415,14 +1450,15 @@
 foreign import ccall unsafe "hs_bindgen_e986873f08423af3"
   hs_bindgen_e986873f08423af3_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadProperties@
 hs_bindgen_e986873f08423af3
   :: BG.Ptr SDL_Gamepad
   -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
 hs_bindgen_e986873f08423af3 =
-  BG.fromFFIType hs_bindgen_e986873f08423af3_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_e986873f08423af3_base (BG.toFFIType x0))
 
 -- | Get the properties associated with an opened gamepad.
 --
@@ -1446,7 +1482,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadProperties@, defined at @SDL3\/SDL_gamepad.h 811:46@
+--     [C declaration]: @SDL_GetGamepadProperties@, defined at @SDL3\/SDL_gamepad.h 812:46@
 sDL_GetGamepadProperties
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1460,14 +1496,15 @@
 foreign import ccall unsafe "hs_bindgen_e2d0c689bb9fdafb"
   hs_bindgen_e2d0c689bb9fdafb_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadID@
 hs_bindgen_e2d0c689bb9fdafb
   :: BG.Ptr SDL_Gamepad
   -> IO SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
 hs_bindgen_e2d0c689bb9fdafb =
-  BG.fromFFIType hs_bindgen_e2d0c689bb9fdafb_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_e2d0c689bb9fdafb_base (BG.toFFIType x0))
 
 -- | Get the instance ID of an opened gamepad.
 --
@@ -1477,7 +1514,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadID@, defined at @SDL3\/SDL_gamepad.h 831:44@
+--     [C declaration]: @SDL_GetGamepadID@, defined at @SDL3\/SDL_gamepad.h 832:44@
 sDL_GetGamepadID
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1497,7 +1534,8 @@
   :: BG.Ptr SDL_Gamepad
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_9d53319611fb7b21 =
-  BG.fromFFIType hs_bindgen_9d53319611fb7b21_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_9d53319611fb7b21_base (BG.toFFIType x0))
 
 -- | Get the implementation-dependent name for an opened gamepad.
 --
@@ -1509,7 +1547,7 @@
 --
 --     [See also]: 'sDL_GetGamepadNameForID'
 --
---     [C declaration]: @SDL_GetGamepadName@, defined at @SDL3\/SDL_gamepad.h 847:42@
+--     [C declaration]: @SDL_GetGamepadName@, defined at @SDL3\/SDL_gamepad.h 848:42@
 sDL_GetGamepadName
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1529,7 +1567,8 @@
   :: BG.Ptr SDL_Gamepad
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_d7698305b32d2548 =
-  BG.fromFFIType hs_bindgen_d7698305b32d2548_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d7698305b32d2548_base (BG.toFFIType x0))
 
 -- | Get the implementation-dependent path for an opened gamepad.
 --
@@ -1541,7 +1580,7 @@
 --
 --     [See also]: 'sDL_GetGamepadPathForID'
 --
---     [C declaration]: @SDL_GetGamepadPath@, defined at @SDL3\/SDL_gamepad.h 863:42@
+--     [C declaration]: @SDL_GetGamepadPath@, defined at @SDL3\/SDL_gamepad.h 864:42@
 sDL_GetGamepadPath
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1554,14 +1593,15 @@
 foreign import ccall unsafe "hs_bindgen_e2d440eeb9de4199"
   hs_bindgen_e2d440eeb9de4199_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadType@
 hs_bindgen_e2d440eeb9de4199
   :: BG.Ptr SDL_Gamepad
   -> IO SDL_GamepadType
 hs_bindgen_e2d440eeb9de4199 =
-  BG.fromFFIType hs_bindgen_e2d440eeb9de4199_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_e2d440eeb9de4199_base (BG.toFFIType x0))
 
 -- | Get the type of an opened gamepad.
 --
@@ -1573,7 +1613,7 @@
 --
 --     [See also]: 'sDL_GetGamepadTypeForID'
 --
---     [C declaration]: @SDL_GetGamepadType@, defined at @SDL3\/SDL_gamepad.h 878:45@
+--     [C declaration]: @SDL_GetGamepadType@, defined at @SDL3\/SDL_gamepad.h 879:45@
 sDL_GetGamepadType
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1586,14 +1626,15 @@
 foreign import ccall unsafe "hs_bindgen_ee5c3fd3f0de744f"
   hs_bindgen_ee5c3fd3f0de744f_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetRealGamepadType@
 hs_bindgen_ee5c3fd3f0de744f
   :: BG.Ptr SDL_Gamepad
   -> IO SDL_GamepadType
 hs_bindgen_ee5c3fd3f0de744f =
-  BG.fromFFIType hs_bindgen_ee5c3fd3f0de744f_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_ee5c3fd3f0de744f_base (BG.toFFIType x0))
 
 -- | Get the type of an opened gamepad, ignoring any mapping override.
 --
@@ -1605,7 +1646,7 @@
 --
 --     [See also]: 'sDL_GetRealGamepadTypeForID'
 --
---     [C declaration]: @SDL_GetRealGamepadType@, defined at @SDL3\/SDL_gamepad.h 893:45@
+--     [C declaration]: @SDL_GetRealGamepadType@, defined at @SDL3\/SDL_gamepad.h 894:45@
 sDL_GetRealGamepadType
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1618,14 +1659,15 @@
 foreign import ccall unsafe "hs_bindgen_8457d3ba6fab74fd"
   hs_bindgen_8457d3ba6fab74fd_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadPlayerIndex@
 hs_bindgen_8457d3ba6fab74fd
   :: BG.Ptr SDL_Gamepad
   -> IO BG.CInt
 hs_bindgen_8457d3ba6fab74fd =
-  BG.fromFFIType hs_bindgen_8457d3ba6fab74fd_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_8457d3ba6fab74fd_base (BG.toFFIType x0))
 
 -- | Get the player index of an opened gamepad.
 --
@@ -1639,7 +1681,7 @@
 --
 --     [See also]: 'sDL_SetGamepadPlayerIndex'
 --
---     [C declaration]: @SDL_GetGamepadPlayerIndex@, defined at @SDL3\/SDL_gamepad.h 909:33@
+--     [C declaration]: @SDL_GetGamepadPlayerIndex@, defined at @SDL3\/SDL_gamepad.h 910:33@
 sDL_GetGamepadPlayerIndex
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1653,8 +1695,8 @@
 foreign import ccall unsafe "hs_bindgen_c7a0bcec2cc038f5"
   hs_bindgen_c7a0bcec2cc038f5_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_SetGamepadPlayerIndex@
 hs_bindgen_c7a0bcec2cc038f5
@@ -1662,7 +1704,9 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_c7a0bcec2cc038f5 =
-  BG.fromFFIType hs_bindgen_c7a0bcec2cc038f5_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_c7a0bcec2cc038f5_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the player index of an opened gamepad.
 --
@@ -1674,7 +1718,7 @@
 --
 --     [See also]: 'sDL_GetGamepadPlayerIndex'
 --
---     [C declaration]: @SDL_SetGamepadPlayerIndex@, defined at @SDL3\/SDL_gamepad.h 926:34@
+--     [C declaration]: @SDL_SetGamepadPlayerIndex@, defined at @SDL3\/SDL_gamepad.h 927:34@
 sDL_SetGamepadPlayerIndex
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1692,14 +1736,15 @@
 foreign import ccall unsafe "hs_bindgen_2552182f80b54cf6"
   hs_bindgen_2552182f80b54cf6_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word16
+    -> IO HsBindgen.Runtime.LibC.Word16
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadVendor@
 hs_bindgen_2552182f80b54cf6
   :: BG.Ptr SDL_Gamepad
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
 hs_bindgen_2552182f80b54cf6 =
-  BG.fromFFIType hs_bindgen_2552182f80b54cf6_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_2552182f80b54cf6_base (BG.toFFIType x0))
 
 -- | Get the USB vendor ID of an opened gamepad, if available.
 --
@@ -1713,7 +1758,7 @@
 --
 --     [See also]: 'sDL_GetGamepadVendorForID'
 --
---     [C declaration]: @SDL_GetGamepadVendor@, defined at @SDL3\/SDL_gamepad.h 942:36@
+--     [C declaration]: @SDL_GetGamepadVendor@, defined at @SDL3\/SDL_gamepad.h 943:36@
 sDL_GetGamepadVendor
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1726,14 +1771,15 @@
 foreign import ccall unsafe "hs_bindgen_5aa969efd1bc8f50"
   hs_bindgen_5aa969efd1bc8f50_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word16
+    -> IO HsBindgen.Runtime.LibC.Word16
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadProduct@
 hs_bindgen_5aa969efd1bc8f50
   :: BG.Ptr SDL_Gamepad
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
 hs_bindgen_5aa969efd1bc8f50 =
-  BG.fromFFIType hs_bindgen_5aa969efd1bc8f50_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_5aa969efd1bc8f50_base (BG.toFFIType x0))
 
 -- | Get the USB product ID of an opened gamepad, if available.
 --
@@ -1747,7 +1793,7 @@
 --
 --     [See also]: 'sDL_GetGamepadProductForID'
 --
---     [C declaration]: @SDL_GetGamepadProduct@, defined at @SDL3\/SDL_gamepad.h 958:36@
+--     [C declaration]: @SDL_GetGamepadProduct@, defined at @SDL3\/SDL_gamepad.h 959:36@
 sDL_GetGamepadProduct
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1760,14 +1806,15 @@
 foreign import ccall unsafe "hs_bindgen_becbadc225729788"
   hs_bindgen_becbadc225729788_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word16
+    -> IO HsBindgen.Runtime.LibC.Word16
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadProductVersion@
 hs_bindgen_becbadc225729788
   :: BG.Ptr SDL_Gamepad
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
 hs_bindgen_becbadc225729788 =
-  BG.fromFFIType hs_bindgen_becbadc225729788_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_becbadc225729788_base (BG.toFFIType x0))
 
 -- | Get the product version of an opened gamepad, if available.
 --
@@ -1781,7 +1828,7 @@
 --
 --     [See also]: 'sDL_GetGamepadProductVersionForID'
 --
---     [C declaration]: @SDL_GetGamepadProductVersion@, defined at @SDL3\/SDL_gamepad.h 974:36@
+--     [C declaration]: @SDL_GetGamepadProductVersion@, defined at @SDL3\/SDL_gamepad.h 975:36@
 sDL_GetGamepadProductVersion
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1795,14 +1842,15 @@
 foreign import ccall unsafe "hs_bindgen_d97e9cb9945dd63f"
   hs_bindgen_d97e9cb9945dd63f_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word16
+    -> IO HsBindgen.Runtime.LibC.Word16
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadFirmwareVersion@
 hs_bindgen_d97e9cb9945dd63f
   :: BG.Ptr SDL_Gamepad
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
 hs_bindgen_d97e9cb9945dd63f =
-  BG.fromFFIType hs_bindgen_d97e9cb9945dd63f_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d97e9cb9945dd63f_base (BG.toFFIType x0))
 
 -- | Get the firmware version of an opened gamepad, if available.
 --
@@ -1814,7 +1862,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadFirmwareVersion@, defined at @SDL3\/SDL_gamepad.h 988:36@
+--     [C declaration]: @SDL_GetGamepadFirmwareVersion@, defined at @SDL3\/SDL_gamepad.h 989:36@
 sDL_GetGamepadFirmwareVersion
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1835,7 +1883,8 @@
   :: BG.Ptr SDL_Gamepad
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_c119e40b53da3b69 =
-  BG.fromFFIType hs_bindgen_c119e40b53da3b69_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c119e40b53da3b69_base (BG.toFFIType x0))
 
 -- | Get the serial number of an opened gamepad, if available.
 --
@@ -1847,7 +1896,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadSerial@, defined at @SDL3\/SDL_gamepad.h 1002:42@
+--     [C declaration]: @SDL_GetGamepadSerial@, defined at @SDL3\/SDL_gamepad.h 1003:42@
 sDL_GetGamepadSerial
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1860,14 +1909,15 @@
 foreign import ccall unsafe "hs_bindgen_d965293df8f905d5"
   hs_bindgen_d965293df8f905d5_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word64
+    -> IO HsBindgen.Runtime.LibC.Word64
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadSteamHandle@
 hs_bindgen_d965293df8f905d5
   :: BG.Ptr SDL_Gamepad
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint64
 hs_bindgen_d965293df8f905d5 =
-  BG.fromFFIType hs_bindgen_d965293df8f905d5_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d965293df8f905d5_base (BG.toFFIType x0))
 
 -- | Get the Steam Input handle of an opened gamepad, if available.
 --
@@ -1879,7 +1929,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadSteamHandle@, defined at @SDL3\/SDL_gamepad.h 1017:36@
+--     [C declaration]: @SDL_GetGamepadSteamHandle@, defined at @SDL3\/SDL_gamepad.h 1018:36@
 sDL_GetGamepadSteamHandle
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1893,14 +1943,15 @@
 foreign import ccall unsafe "hs_bindgen_4d7b7d6dc4affab6"
   hs_bindgen_4d7b7d6dc4affab6_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO HsBindgen.Runtime.Support.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadConnectionState@
 hs_bindgen_4d7b7d6dc4affab6
   :: BG.Ptr SDL_Gamepad
   -> IO SDL3.Sys.Bindgen.Joystick.SDL_JoystickConnectionState
 hs_bindgen_4d7b7d6dc4affab6 =
-  BG.fromFFIType hs_bindgen_4d7b7d6dc4affab6_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_4d7b7d6dc4affab6_base (BG.toFFIType x0))
 
 -- | Get the connection state of a gamepad.
 --
@@ -1910,7 +1961,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadConnectionState@, defined at @SDL3\/SDL_gamepad.h 1031:57@
+--     [C declaration]: @SDL_GetGamepadConnectionState@, defined at @SDL3\/SDL_gamepad.h 1032:57@
 sDL_GetGamepadConnectionState
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1925,7 +1976,7 @@
   hs_bindgen_440cd7470f43f8b7_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO HsBindgen.Runtime.Support.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadPowerInfo@
 hs_bindgen_440cd7470f43f8b7
@@ -1933,7 +1984,9 @@
   -> BG.Ptr BG.CInt
   -> IO SDL3.Sys.Bindgen.Power.SDL_PowerState
 hs_bindgen_440cd7470f43f8b7 =
-  BG.fromFFIType hs_bindgen_440cd7470f43f8b7_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_440cd7470f43f8b7_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the battery state of a gamepad.
 --
@@ -1945,7 +1998,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadPowerInfo@, defined at @SDL3\/SDL_gamepad.h 1053:44@
+--     [C declaration]: @SDL_GetGamepadPowerInfo@, defined at @SDL3\/SDL_gamepad.h 1054:44@
 sDL_GetGamepadPowerInfo
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1962,14 +2015,15 @@
 foreign import ccall unsafe "hs_bindgen_73bf6a166bb6fc05"
   hs_bindgen_73bf6a166bb6fc05_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GamepadConnected@
 hs_bindgen_73bf6a166bb6fc05
   :: BG.Ptr SDL_Gamepad
   -> IO BG.CBool
 hs_bindgen_73bf6a166bb6fc05 =
-  BG.fromFFIType hs_bindgen_73bf6a166bb6fc05_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_73bf6a166bb6fc05_base (BG.toFFIType x0))
 
 -- | Check if a gamepad has been opened and is currently connected.
 --
@@ -1979,7 +2033,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GamepadConnected@, defined at @SDL3\/SDL_gamepad.h 1067:34@
+--     [C declaration]: @SDL_GamepadConnected@, defined at @SDL3\/SDL_gamepad.h 1068:34@
 sDL_GamepadConnected
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1999,7 +2053,8 @@
   :: BG.Ptr SDL_Gamepad
   -> IO (BG.Ptr SDL3.Sys.Bindgen.Joystick.SDL_Joystick)
 hs_bindgen_cfa9e14aa308a355 =
-  BG.fromFFIType hs_bindgen_cfa9e14aa308a355_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_cfa9e14aa308a355_base (BG.toFFIType x0))
 
 -- | Get the underlying joystick from a gamepad.
 --
@@ -2013,7 +2068,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadJoystick@, defined at @SDL3\/SDL_gamepad.h 1089:44@
+--     [C declaration]: @SDL_GetGamepadJoystick@, defined at @SDL3\/SDL_gamepad.h 1090:44@
 sDL_GetGamepadJoystick
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2025,7 +2080,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_SetGamepadEventsEnabled@
 foreign import ccall unsafe "hs_bindgen_bfc8618e24183771"
   hs_bindgen_bfc8618e24183771_base
-    :: BG.Word8
+    :: BG.CBool
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_SetGamepadEventsEnabled@
@@ -2033,7 +2088,8 @@
   :: BG.CBool
   -> IO ()
 hs_bindgen_bfc8618e24183771 =
-  BG.fromFFIType hs_bindgen_bfc8618e24183771_base
+  \x0 ->
+    hs_bindgen_bfc8618e24183771_base (BG.toFFIType x0)
 
 -- | Set the state of gamepad event processing.
 --
@@ -2045,7 +2101,7 @@
 --
 --     [See also]: 'sDL_GamepadEventsEnabled', 'sDL_UpdateGamepads'
 --
---     [C declaration]: @SDL_SetGamepadEventsEnabled@, defined at @SDL3\/SDL_gamepad.h 1106:34@
+--     [C declaration]: @SDL_SetGamepadEventsEnabled@, defined at @SDL3\/SDL_gamepad.h 1107:34@
 sDL_SetGamepadEventsEnabled
   :: BG.CBool
   -- ^
@@ -2058,12 +2114,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GamepadEventsEnabled@
 foreign import ccall unsafe "hs_bindgen_5871c031639ba44f"
   hs_bindgen_5871c031639ba44f_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GamepadEventsEnabled@
 hs_bindgen_5871c031639ba44f :: IO BG.CBool
 hs_bindgen_5871c031639ba44f =
-  BG.fromFFIType hs_bindgen_5871c031639ba44f_base
+  fmap BG.fromFFIType hs_bindgen_5871c031639ba44f_base
 
 -- | Query the state of gamepad event processing.
 --
@@ -2077,7 +2133,7 @@
 --
 --     [See also]: 'sDL_SetGamepadEventsEnabled'
 --
---     [C declaration]: @SDL_GamepadEventsEnabled@, defined at @SDL3\/SDL_gamepad.h 1122:34@
+--     [C declaration]: @SDL_GamepadEventsEnabled@, defined at @SDL3\/SDL_gamepad.h 1123:34@
 sDL_GamepadEventsEnabled :: IO BG.CBool
 sDL_GamepadEventsEnabled =
   hs_bindgen_5871c031639ba44f
@@ -2095,7 +2151,9 @@
   -> BG.Ptr BG.CInt
   -> IO (BG.Ptr (BG.Ptr SDL_GamepadBinding))
 hs_bindgen_5bc2e24705268e1e =
-  BG.fromFFIType hs_bindgen_5bc2e24705268e1e_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_5bc2e24705268e1e_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the SDL joystick layer bindings for a gamepad.
 --
@@ -2105,7 +2163,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadBindings@, defined at @SDL3\/SDL_gamepad.h 1138:51@
+--     [C declaration]: @SDL_GetGamepadBindings@, defined at @SDL3\/SDL_gamepad.h 1139:51@
 sDL_GetGamepadBindings
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2126,7 +2184,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_UpdateGamepads@
 hs_bindgen_0cb5e97304f01ed4 :: IO ()
 hs_bindgen_0cb5e97304f01ed4 =
-  BG.fromFFIType hs_bindgen_0cb5e97304f01ed4_base
+  hs_bindgen_0cb5e97304f01ed4_base
 
 -- | Manually pump gamepad updates if not using the loop.
 --
@@ -2136,7 +2194,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_UpdateGamepads@, defined at @SDL3\/SDL_gamepad.h 1151:34@
+--     [C declaration]: @SDL_UpdateGamepads@, defined at @SDL3\/SDL_gamepad.h 1152:34@
 sDL_UpdateGamepads :: IO ()
 sDL_UpdateGamepads = hs_bindgen_0cb5e97304f01ed4
 
@@ -2144,14 +2202,15 @@
 foreign import ccall unsafe "hs_bindgen_ff738f26b34db99d"
   hs_bindgen_ff738f26b34db99d_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadTypeFromString@
 hs_bindgen_ff738f26b34db99d
   :: PtrConst.PtrConst BG.CChar
   -> IO SDL_GamepadType
 hs_bindgen_ff738f26b34db99d =
-  BG.fromFFIType hs_bindgen_ff738f26b34db99d_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_ff738f26b34db99d_base (BG.toFFIType x0))
 
 -- | Convert a string into 'SDL_GamepadType' enum.
 --
@@ -2165,7 +2224,7 @@
 --
 --     [See also]: 'sDL_GetGamepadStringForType'
 --
---     [C declaration]: @SDL_GetGamepadTypeFromString@, defined at @SDL3\/SDL_gamepad.h 1171:45@
+--     [C declaration]: @SDL_GetGamepadTypeFromString@, defined at @SDL3\/SDL_gamepad.h 1172:45@
 sDL_GetGamepadTypeFromString
   :: PtrConst.PtrConst BG.CChar
   -- ^
@@ -2178,7 +2237,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadStringForType@
 foreign import ccall unsafe "hs_bindgen_aeff65b0b5fbbe2f"
   hs_bindgen_aeff65b0b5fbbe2f_base
-    :: BG.Word32
+    :: BG.CUInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadStringForType@
@@ -2186,7 +2245,8 @@
   :: SDL_GamepadType
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_aeff65b0b5fbbe2f =
-  BG.fromFFIType hs_bindgen_aeff65b0b5fbbe2f_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_aeff65b0b5fbbe2f_base (BG.toFFIType x0))
 
 -- | Convert from an 'SDL_GamepadType' enum to a string.
 --
@@ -2198,7 +2258,7 @@
 --
 --     [See also]: 'sDL_GetGamepadTypeFromString'
 --
---     [C declaration]: @SDL_GetGamepadStringForType@, defined at @SDL3\/SDL_gamepad.h 1187:42@
+--     [C declaration]: @SDL_GetGamepadStringForType@, defined at @SDL3\/SDL_gamepad.h 1188:42@
 sDL_GetGamepadStringForType
   :: SDL_GamepadType
   -- ^
@@ -2212,14 +2272,15 @@
 foreign import ccall unsafe "hs_bindgen_9c4d3cd24f36df1d"
   hs_bindgen_9c4d3cd24f36df1d_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadAxisFromString@
 hs_bindgen_9c4d3cd24f36df1d
   :: PtrConst.PtrConst BG.CChar
   -> IO SDL_GamepadAxis
 hs_bindgen_9c4d3cd24f36df1d =
-  BG.fromFFIType hs_bindgen_9c4d3cd24f36df1d_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_9c4d3cd24f36df1d_base (BG.toFFIType x0))
 
 -- | Convert a string into 'SDL_GamepadAxis' enum.
 --
@@ -2235,7 +2296,7 @@
 --
 --     [See also]: 'sDL_GetGamepadStringForAxis'
 --
---     [C declaration]: @SDL_GetGamepadAxisFromString@, defined at @SDL3\/SDL_gamepad.h 1211:45@
+--     [C declaration]: @SDL_GetGamepadAxisFromString@, defined at @SDL3\/SDL_gamepad.h 1212:45@
 sDL_GetGamepadAxisFromString
   :: PtrConst.PtrConst BG.CChar
   -- ^
@@ -2248,7 +2309,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadStringForAxis@
 foreign import ccall unsafe "hs_bindgen_23a85badb8b28574"
   hs_bindgen_23a85badb8b28574_base
-    :: BG.Int32
+    :: BG.CInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadStringForAxis@
@@ -2256,7 +2317,8 @@
   :: SDL_GamepadAxis
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_23a85badb8b28574 =
-  BG.fromFFIType hs_bindgen_23a85badb8b28574_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_23a85badb8b28574_base (BG.toFFIType x0))
 
 -- | Convert from an 'SDL_GamepadAxis' enum to a string.
 --
@@ -2268,7 +2330,7 @@
 --
 --     [See also]: 'sDL_GetGamepadAxisFromString'
 --
---     [C declaration]: @SDL_GetGamepadStringForAxis@, defined at @SDL3\/SDL_gamepad.h 1227:42@
+--     [C declaration]: @SDL_GetGamepadStringForAxis@, defined at @SDL3\/SDL_gamepad.h 1228:42@
 sDL_GetGamepadStringForAxis
   :: SDL_GamepadAxis
   -- ^
@@ -2282,8 +2344,8 @@
 foreign import ccall unsafe "hs_bindgen_25802ce0c34b6a29"
   hs_bindgen_25802ce0c34b6a29_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GamepadHasAxis@
 hs_bindgen_25802ce0c34b6a29
@@ -2291,7 +2353,9 @@
   -> SDL_GamepadAxis
   -> IO BG.CBool
 hs_bindgen_25802ce0c34b6a29 =
-  BG.fromFFIType hs_bindgen_25802ce0c34b6a29_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_25802ce0c34b6a29_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Query whether a gamepad has a given axis.
 --
@@ -2305,7 +2369,7 @@
 --
 --     [See also]: 'sDL_GamepadHasButton', 'sDL_GetGamepadAxis'
 --
---     [C declaration]: @SDL_GamepadHasAxis@, defined at @SDL3\/SDL_gamepad.h 1246:34@
+--     [C declaration]: @SDL_GamepadHasAxis@, defined at @SDL3\/SDL_gamepad.h 1247:34@
 sDL_GamepadHasAxis
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2322,8 +2386,8 @@
 foreign import ccall unsafe "hs_bindgen_68503ad7a0b89c08"
   hs_bindgen_68503ad7a0b89c08_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Int16
+    -> BG.CInt
+    -> IO HsBindgen.Runtime.LibC.Int16
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadAxis@
 hs_bindgen_68503ad7a0b89c08
@@ -2331,7 +2395,9 @@
   -> SDL_GamepadAxis
   -> IO SDL3.Sys.Bindgen.Stdinc.Sint16
 hs_bindgen_68503ad7a0b89c08 =
-  BG.fromFFIType hs_bindgen_68503ad7a0b89c08_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_68503ad7a0b89c08_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the current state of an axis control on a gamepad.
 --
@@ -2351,7 +2417,7 @@
 --
 --     [See also]: 'sDL_GamepadHasAxis', 'sDL_GetGamepadButton'
 --
---     [C declaration]: @SDL_GetGamepadAxis@, defined at @SDL3\/SDL_gamepad.h 1274:36@
+--     [C declaration]: @SDL_GetGamepadAxis@, defined at @SDL3\/SDL_gamepad.h 1275:36@
 sDL_GetGamepadAxis
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2368,14 +2434,15 @@
 foreign import ccall unsafe "hs_bindgen_cecec50fb2b3f9c0"
   hs_bindgen_cecec50fb2b3f9c0_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadButtonFromString@
 hs_bindgen_cecec50fb2b3f9c0
   :: PtrConst.PtrConst BG.CChar
   -> IO SDL_GamepadButton
 hs_bindgen_cecec50fb2b3f9c0 =
-  BG.fromFFIType hs_bindgen_cecec50fb2b3f9c0_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_cecec50fb2b3f9c0_base (BG.toFFIType x0))
 
 -- | Convert a string into an 'SDL_GamepadButton' enum.
 --
@@ -2389,7 +2456,7 @@
 --
 --     [See also]: 'sDL_GetGamepadStringForButton'
 --
---     [C declaration]: @SDL_GetGamepadButtonFromString@, defined at @SDL3\/SDL_gamepad.h 1294:47@
+--     [C declaration]: @SDL_GetGamepadButtonFromString@, defined at @SDL3\/SDL_gamepad.h 1295:47@
 sDL_GetGamepadButtonFromString
   :: PtrConst.PtrConst BG.CChar
   -- ^
@@ -2402,7 +2469,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadStringForButton@
 foreign import ccall unsafe "hs_bindgen_65d07695662b7e7c"
   hs_bindgen_65d07695662b7e7c_base
-    :: BG.Int32
+    :: BG.CInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadStringForButton@
@@ -2410,7 +2477,8 @@
   :: SDL_GamepadButton
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_65d07695662b7e7c =
-  BG.fromFFIType hs_bindgen_65d07695662b7e7c_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_65d07695662b7e7c_base (BG.toFFIType x0))
 
 -- | Convert from an 'SDL_GamepadButton' enum to a string.
 --
@@ -2422,7 +2490,7 @@
 --
 --     [See also]: 'sDL_GetGamepadButtonFromString'
 --
---     [C declaration]: @SDL_GetGamepadStringForButton@, defined at @SDL3\/SDL_gamepad.h 1310:42@
+--     [C declaration]: @SDL_GetGamepadStringForButton@, defined at @SDL3\/SDL_gamepad.h 1311:42@
 sDL_GetGamepadStringForButton
   :: SDL_GamepadButton
   -- ^
@@ -2436,8 +2504,8 @@
 foreign import ccall unsafe "hs_bindgen_05064f987387bd45"
   hs_bindgen_05064f987387bd45_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GamepadHasButton@
 hs_bindgen_05064f987387bd45
@@ -2445,7 +2513,9 @@
   -> SDL_GamepadButton
   -> IO BG.CBool
 hs_bindgen_05064f987387bd45 =
-  BG.fromFFIType hs_bindgen_05064f987387bd45_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_05064f987387bd45_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Query whether a gamepad has a given button.
 --
@@ -2459,7 +2529,7 @@
 --
 --     [See also]: 'sDL_GamepadHasAxis'
 --
---     [C declaration]: @SDL_GamepadHasButton@, defined at @SDL3\/SDL_gamepad.h 1328:34@
+--     [C declaration]: @SDL_GamepadHasButton@, defined at @SDL3\/SDL_gamepad.h 1329:34@
 sDL_GamepadHasButton
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2476,8 +2546,8 @@
 foreign import ccall unsafe "hs_bindgen_a672f55d7740b70a"
   hs_bindgen_a672f55d7740b70a_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadButton@
 hs_bindgen_a672f55d7740b70a
@@ -2485,7 +2555,9 @@
   -> SDL_GamepadButton
   -> IO BG.CBool
 hs_bindgen_a672f55d7740b70a =
-  BG.fromFFIType hs_bindgen_a672f55d7740b70a_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_a672f55d7740b70a_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the current state of a button on a gamepad.
 --
@@ -2497,7 +2569,7 @@
 --
 --     [See also]: 'sDL_GamepadHasButton', 'sDL_GetGamepadAxis'
 --
---     [C declaration]: @SDL_GetGamepadButton@, defined at @SDL3\/SDL_gamepad.h 1344:34@
+--     [C declaration]: @SDL_GetGamepadButton@, defined at @SDL3\/SDL_gamepad.h 1345:34@
 sDL_GetGamepadButton
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2513,9 +2585,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadButtonLabelForType@
 foreign import ccall unsafe "hs_bindgen_6a6a621cfd450022"
   hs_bindgen_6a6a621cfd450022_base
-    :: BG.Word32
-    -> BG.Int32
-    -> IO BG.Word32
+    :: BG.CUInt
+    -> BG.CInt
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadButtonLabelForType@
 hs_bindgen_6a6a621cfd450022
@@ -2523,7 +2595,9 @@
   -> SDL_GamepadButton
   -> IO SDL_GamepadButtonLabel
 hs_bindgen_6a6a621cfd450022 =
-  BG.fromFFIType hs_bindgen_6a6a621cfd450022_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_6a6a621cfd450022_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the label of a button on a gamepad.
 --
@@ -2535,7 +2609,7 @@
 --
 --     [See also]: 'sDL_GetGamepadButtonLabel'
 --
---     [C declaration]: @SDL_GetGamepadButtonLabelForType@, defined at @SDL3\/SDL_gamepad.h 1359:52@
+--     [C declaration]: @SDL_GetGamepadButtonLabelForType@, defined at @SDL3\/SDL_gamepad.h 1360:52@
 sDL_GetGamepadButtonLabelForType
   :: SDL_GamepadType
   -- ^
@@ -2553,8 +2627,8 @@
 foreign import ccall unsafe "hs_bindgen_ea461caaa5e77e3a"
   hs_bindgen_ea461caaa5e77e3a_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word32
+    -> BG.CInt
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadButtonLabel@
 hs_bindgen_ea461caaa5e77e3a
@@ -2562,7 +2636,9 @@
   -> SDL_GamepadButton
   -> IO SDL_GamepadButtonLabel
 hs_bindgen_ea461caaa5e77e3a =
-  BG.fromFFIType hs_bindgen_ea461caaa5e77e3a_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_ea461caaa5e77e3a_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the label of a button on a gamepad.
 --
@@ -2574,7 +2650,7 @@
 --
 --     [See also]: 'sDL_GetGamepadButtonLabelForType'
 --
---     [C declaration]: @SDL_GetGamepadButtonLabel@, defined at @SDL3\/SDL_gamepad.h 1374:52@
+--     [C declaration]: @SDL_GetGamepadButtonLabel@, defined at @SDL3\/SDL_gamepad.h 1375:52@
 sDL_GetGamepadButtonLabel
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2592,14 +2668,15 @@
 foreign import ccall unsafe "hs_bindgen_2d66738e85627648"
   hs_bindgen_2d66738e85627648_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetNumGamepadTouchpads@
 hs_bindgen_2d66738e85627648
   :: BG.Ptr SDL_Gamepad
   -> IO BG.CInt
 hs_bindgen_2d66738e85627648 =
-  BG.fromFFIType hs_bindgen_2d66738e85627648_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_2d66738e85627648_base (BG.toFFIType x0))
 
 -- | Get the number of touchpads on a gamepad.
 --
@@ -2611,7 +2688,7 @@
 --
 --     [See also]: 'sDL_GetNumGamepadTouchpadFingers'
 --
---     [C declaration]: @SDL_GetNumGamepadTouchpads@, defined at @SDL3\/SDL_gamepad.h 1388:33@
+--     [C declaration]: @SDL_GetNumGamepadTouchpads@, defined at @SDL3\/SDL_gamepad.h 1389:33@
 sDL_GetNumGamepadTouchpads
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2625,8 +2702,8 @@
 foreign import ccall unsafe "hs_bindgen_741e82f074f3aae4"
   hs_bindgen_741e82f074f3aae4_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Int32
+    -> BG.CInt
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetNumGamepadTouchpadFingers@
 hs_bindgen_741e82f074f3aae4
@@ -2634,7 +2711,9 @@
   -> BG.CInt
   -> IO BG.CInt
 hs_bindgen_741e82f074f3aae4 =
-  BG.fromFFIType hs_bindgen_741e82f074f3aae4_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_741e82f074f3aae4_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the number of supported simultaneous fingers on a touchpad on a game gamepad.
 --
@@ -2646,7 +2725,7 @@
 --
 --     [See also]: 'sDL_GetGamepadTouchpadFinger', 'sDL_GetNumGamepadTouchpads'
 --
---     [C declaration]: @SDL_GetNumGamepadTouchpadFingers@, defined at @SDL3\/SDL_gamepad.h 1405:33@
+--     [C declaration]: @SDL_GetNumGamepadTouchpadFingers@, defined at @SDL3\/SDL_gamepad.h 1406:33@
 sDL_GetNumGamepadTouchpadFingers
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2664,13 +2743,13 @@
 foreign import ccall unsafe "hs_bindgen_1b8db5e7a78bcf2a"
   hs_bindgen_1b8db5e7a78bcf2a_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
+    -> BG.CInt
+    -> BG.CInt
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadTouchpadFinger@
 hs_bindgen_1b8db5e7a78bcf2a
@@ -2683,7 +2762,24 @@
   -> BG.Ptr BG.CFloat
   -> IO BG.CBool
 hs_bindgen_1b8db5e7a78bcf2a =
-  BG.fromFFIType hs_bindgen_1b8db5e7a78bcf2a_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                fmap
+                  BG.fromFFIType
+                  ( hs_bindgen_1b8db5e7a78bcf2a_base
+                      (BG.toFFIType x0)
+                      (BG.toFFIType x1)
+                      (BG.toFFIType x2)
+                      (BG.toFFIType x3)
+                      (BG.toFFIType x4)
+                      (BG.toFFIType x5)
+                      (BG.toFFIType x6)
+                  )
 
 -- | Get the current state of a finger on a touchpad on a gamepad.
 --
@@ -2695,7 +2791,7 @@
 --
 --     [See also]: 'sDL_GetNumGamepadTouchpadFingers'
 --
---     [C declaration]: @SDL_GetGamepadTouchpadFinger@, defined at @SDL3\/SDL_gamepad.h 1429:34@
+--     [C declaration]: @SDL_GetGamepadTouchpadFinger@, defined at @SDL3\/SDL_gamepad.h 1430:34@
 sDL_GetGamepadTouchpadFinger
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2733,8 +2829,8 @@
 foreign import ccall unsafe "hs_bindgen_d58388fe9017bfd7"
   hs_bindgen_d58388fe9017bfd7_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.Support.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GamepadHasSensor@
 hs_bindgen_d58388fe9017bfd7
@@ -2742,7 +2838,9 @@
   -> SDL3.Sys.Bindgen.Sensor.SDL_SensorType
   -> IO BG.CBool
 hs_bindgen_d58388fe9017bfd7 =
-  BG.fromFFIType hs_bindgen_d58388fe9017bfd7_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_d58388fe9017bfd7_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Return whether a gamepad has a particular sensor.
 --
@@ -2754,7 +2852,7 @@
 --
 --     [See also]: 'sDL_GetGamepadSensorData', 'sDL_GetGamepadSensorDataRate', 'sDL_SetGamepadSensorEnabled'
 --
---     [C declaration]: @SDL_GamepadHasSensor@, defined at @SDL3\/SDL_gamepad.h 1446:34@
+--     [C declaration]: @SDL_GamepadHasSensor@, defined at @SDL3\/SDL_gamepad.h 1447:34@
 sDL_GamepadHasSensor
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2771,9 +2869,9 @@
 foreign import ccall unsafe "hs_bindgen_5229480da62895d3"
   hs_bindgen_5229480da62895d3_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Word8
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.Support.CInt
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_SetGamepadSensorEnabled@
 hs_bindgen_5229480da62895d3
@@ -2782,7 +2880,12 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_5229480da62895d3 =
-  BG.fromFFIType hs_bindgen_5229480da62895d3_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_5229480da62895d3_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set whether data reporting for a gamepad sensor is enabled.
 --
@@ -2794,7 +2897,7 @@
 --
 --     [See also]: 'sDL_GamepadHasSensor', 'sDL_GamepadSensorEnabled'
 --
---     [C declaration]: @SDL_SetGamepadSensorEnabled@, defined at @SDL3\/SDL_gamepad.h 1464:34@
+--     [C declaration]: @SDL_SetGamepadSensorEnabled@, defined at @SDL3\/SDL_gamepad.h 1465:34@
 sDL_SetGamepadSensorEnabled
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2816,8 +2919,8 @@
 foreign import ccall unsafe "hs_bindgen_cf910522abc1f0a2"
   hs_bindgen_cf910522abc1f0a2_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.Support.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GamepadSensorEnabled@
 hs_bindgen_cf910522abc1f0a2
@@ -2825,7 +2928,9 @@
   -> SDL3.Sys.Bindgen.Sensor.SDL_SensorType
   -> IO BG.CBool
 hs_bindgen_cf910522abc1f0a2 =
-  BG.fromFFIType hs_bindgen_cf910522abc1f0a2_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_cf910522abc1f0a2_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Query whether sensor data reporting is enabled for a gamepad.
 --
@@ -2837,7 +2942,7 @@
 --
 --     [See also]: 'sDL_SetGamepadSensorEnabled'
 --
---     [C declaration]: @SDL_GamepadSensorEnabled@, defined at @SDL3\/SDL_gamepad.h 1479:34@
+--     [C declaration]: @SDL_GamepadSensorEnabled@, defined at @SDL3\/SDL_gamepad.h 1480:34@
 sDL_GamepadSensorEnabled
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2855,8 +2960,8 @@
 foreign import ccall unsafe "hs_bindgen_523e72497fe70de7"
   hs_bindgen_523e72497fe70de7_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO Float
+    -> HsBindgen.Runtime.Support.CInt
+    -> IO BG.CFloat
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadSensorDataRate@
 hs_bindgen_523e72497fe70de7
@@ -2864,7 +2969,9 @@
   -> SDL3.Sys.Bindgen.Sensor.SDL_SensorType
   -> IO BG.CFloat
 hs_bindgen_523e72497fe70de7 =
-  BG.fromFFIType hs_bindgen_523e72497fe70de7_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_523e72497fe70de7_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the data rate (number of events per second) of a gamepad sensor.
 --
@@ -2874,7 +2981,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadSensorDataRate@, defined at @SDL3\/SDL_gamepad.h 1492:35@
+--     [C declaration]: @SDL_GetGamepadSensorDataRate@, defined at @SDL3\/SDL_gamepad.h 1493:35@
 sDL_GetGamepadSensorDataRate
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2892,10 +2999,10 @@
 foreign import ccall unsafe "hs_bindgen_772b88104300cbe9"
   hs_bindgen_772b88104300cbe9_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
+    -> HsBindgen.Runtime.Support.CInt
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadSensorData@
 hs_bindgen_772b88104300cbe9
@@ -2905,7 +3012,18 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_772b88104300cbe9 =
-  BG.fromFFIType hs_bindgen_772b88104300cbe9_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_772b88104300cbe9_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Get the current state of a gamepad sensor.
 --
@@ -2917,7 +3035,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGamepadSensorData@, defined at @SDL3\/SDL_gamepad.h 1511:34@
+--     [C declaration]: @SDL_GetGamepadSensorData@, defined at @SDL3\/SDL_gamepad.h 1512:34@
 sDL_GetGamepadSensorData
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2943,10 +3061,10 @@
 foreign import ccall unsafe "hs_bindgen_8a8a058abd787e14"
   hs_bindgen_8a8a058abd787e14_base
     :: BG.Ptr BG.Void
-    -> BG.Word16
-    -> BG.Word16
-    -> BG.Word32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word16
+    -> HsBindgen.Runtime.LibC.Word16
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_RumbleGamepad@
 hs_bindgen_8a8a058abd787e14
@@ -2956,7 +3074,18 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_8a8a058abd787e14 =
-  BG.fromFFIType hs_bindgen_8a8a058abd787e14_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_8a8a058abd787e14_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Start a rumble effect on a gamepad.
 --
@@ -2970,7 +3099,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_RumbleGamepad@, defined at @SDL3\/SDL_gamepad.h 1535:34@
+--     [C declaration]: @SDL_RumbleGamepad@, defined at @SDL3\/SDL_gamepad.h 1536:34@
 sDL_RumbleGamepad
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2995,10 +3124,10 @@
 foreign import ccall unsafe "hs_bindgen_70ab0a767dbce57a"
   hs_bindgen_70ab0a767dbce57a_base
     :: BG.Ptr BG.Void
-    -> BG.Word16
-    -> BG.Word16
-    -> BG.Word32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word16
+    -> HsBindgen.Runtime.LibC.Word16
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_RumbleGamepadTriggers@
 hs_bindgen_70ab0a767dbce57a
@@ -3008,7 +3137,18 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_70ab0a767dbce57a =
-  BG.fromFFIType hs_bindgen_70ab0a767dbce57a_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_70ab0a767dbce57a_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Start a rumble effect in the gamepad\'s triggers.
 --
@@ -3026,7 +3166,7 @@
 --
 --     [See also]: 'sDL_RumbleGamepad'
 --
---     [C declaration]: @SDL_RumbleGamepadTriggers@, defined at @SDL3\/SDL_gamepad.h 1565:34@
+--     [C declaration]: @SDL_RumbleGamepadTriggers@, defined at @SDL3\/SDL_gamepad.h 1566:34@
 sDL_RumbleGamepadTriggers
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -3052,10 +3192,10 @@
 foreign import ccall unsafe "hs_bindgen_2ae54d3de778ff13"
   hs_bindgen_2ae54d3de778ff13_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> BG.Word8
-    -> BG.Word8
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_SetGamepadLED@
 hs_bindgen_2ae54d3de778ff13
@@ -3065,7 +3205,18 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO BG.CBool
 hs_bindgen_2ae54d3de778ff13 =
-  BG.fromFFIType hs_bindgen_2ae54d3de778ff13_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_2ae54d3de778ff13_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Update a gamepad\'s LED color.
 --
@@ -3079,7 +3230,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_SetGamepadLED@, defined at @SDL3\/SDL_gamepad.h 1587:34@
+--     [C declaration]: @SDL_SetGamepadLED@, defined at @SDL3\/SDL_gamepad.h 1588:34@
 sDL_SetGamepadLED
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -3105,8 +3256,8 @@
   hs_bindgen_d29e9a9cdc821a93_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_SendGamepadEffect@
 hs_bindgen_d29e9a9cdc821a93
@@ -3115,7 +3266,12 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_d29e9a9cdc821a93 =
-  BG.fromFFIType hs_bindgen_d29e9a9cdc821a93_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_d29e9a9cdc821a93_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Send a gamepad specific effect packet.
 --
@@ -3125,7 +3281,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_SendGamepadEffect@, defined at @SDL3\/SDL_gamepad.h 1602:34@
+--     [C declaration]: @SDL_SendGamepadEffect@, defined at @SDL3\/SDL_gamepad.h 1603:34@
 sDL_SendGamepadEffect
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -3153,7 +3309,8 @@
   :: BG.Ptr SDL_Gamepad
   -> IO ()
 hs_bindgen_49ebda4983cdcbad =
-  BG.fromFFIType hs_bindgen_49ebda4983cdcbad_base
+  \x0 ->
+    hs_bindgen_49ebda4983cdcbad_base (BG.toFFIType x0)
 
 -- | Close a gamepad previously opened with @SDL_OpenGamepad()@.
 --
@@ -3163,7 +3320,7 @@
 --
 --     [See also]: 'sDL_OpenGamepad'
 --
---     [C declaration]: @SDL_CloseGamepad@, defined at @SDL3\/SDL_gamepad.h 1616:34@
+--     [C declaration]: @SDL_CloseGamepad@, defined at @SDL3\/SDL_gamepad.h 1617:34@
 sDL_CloseGamepad
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -3176,7 +3333,7 @@
 foreign import ccall unsafe "hs_bindgen_3b3870e2dc35c94a"
   hs_bindgen_3b3870e2dc35c94a_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadAppleSFSymbolsNameForButton@
@@ -3185,7 +3342,9 @@
   -> SDL_GamepadButton
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_3b3870e2dc35c94a =
-  BG.fromFFIType hs_bindgen_3b3870e2dc35c94a_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_3b3870e2dc35c94a_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Return the sfSymbolsName for a given button on a gamepad on Apple platforms.
 --
@@ -3197,7 +3356,7 @@
 --
 --     [See also]: 'sDL_GetGamepadAppleSFSymbolsNameForAxis'
 --
---     [C declaration]: @SDL_GetGamepadAppleSFSymbolsNameForButton@, defined at @SDL3\/SDL_gamepad.h 1632:42@
+--     [C declaration]: @SDL_GetGamepadAppleSFSymbolsNameForButton@, defined at @SDL3\/SDL_gamepad.h 1633:42@
 sDL_GetGamepadAppleSFSymbolsNameForButton
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -3215,7 +3374,7 @@
 foreign import ccall unsafe "hs_bindgen_d904c8d057a68120"
   hs_bindgen_d904c8d057a68120_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gamepad_Unsafe_SDL_GetGamepadAppleSFSymbolsNameForAxis@
@@ -3224,7 +3383,9 @@
   -> SDL_GamepadAxis
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_d904c8d057a68120 =
-  BG.fromFFIType hs_bindgen_d904c8d057a68120_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_d904c8d057a68120_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Return the sfSymbolsName for a given axis on a gamepad on Apple platforms.
 --
@@ -3236,7 +3397,7 @@
 --
 --     [See also]: 'sDL_GetGamepadAppleSFSymbolsNameForButton'
 --
---     [C declaration]: @SDL_GetGamepadAppleSFSymbolsNameForAxis@, defined at @SDL3\/SDL_gamepad.h 1647:42@
+--     [C declaration]: @SDL_GetGamepadAppleSFSymbolsNameForAxis@, defined at @SDL3\/SDL_gamepad.h 1648:42@
 sDL_GetGamepadAppleSFSymbolsNameForAxis
   :: BG.Ptr SDL_Gamepad
   -- ^
diff --git a/src/SDL3/Sys/Bindgen/Gpu.hs b/src/SDL3/Sys/Bindgen/Gpu.hs
--- a/src/SDL3/Sys/Bindgen/Gpu.hs
+++ b/src/SDL3/Sys/Bindgen/Gpu.hs
@@ -18,6 +18,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | The GPU API offers a cross-platform way for apps to talk to modern graphics hardware. It offers both 3D graphics and compute support, in the style of Metal, Vulkan, and Direct3D 12.
 --
@@ -627,12 +628,30 @@
 )
 where
 
+import Prelude (
+  Bounded,
+  Enum,
+  Eq,
+  Int,
+  Integral,
+  Num,
+  Ord,
+  Read,
+  Real,
+  Show,
+  pure,
+  (<*>),
+  (>>),
+  type (~),
+ )
+
 import C.Expr.HostPlatform qualified
 import HsBindgen.Runtime.CEnum qualified as CEnum
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.Marshal qualified as Marshal
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Struct qualified as Struct
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField
 import SDL3.Sys.Bindgen.Pixels qualified
@@ -5025,6 +5044,11 @@
 
 deriving via Marshal.EquivStorable SDL_GPUViewport instance BG.Storable SDL_GPUViewport
 
+deriving via Struct.IsStructViaReadRaw SDL_GPUViewport instance Struct.IsStruct SDL_GPUViewport
+
+-- | The left offset of the viewport.
+--
+--     [C declaration]: @x@, defined at @SDL3\/SDL_gpu.h 1386:11@
 instance
   (ty ~ BG.CFloat)
   => BG.CompatHasField.HasField "x" SDL_GPUViewport ty
@@ -5054,6 +5078,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The top offset of the viewport.
+--
+--     [C declaration]: @y@, defined at @SDL3\/SDL_gpu.h 1387:11@
 instance
   (ty ~ BG.CFloat)
   => BG.CompatHasField.HasField "y" SDL_GPUViewport ty
@@ -5083,6 +5110,9 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | The width of the viewport.
+--
+--     [C declaration]: @w@, defined at @SDL3\/SDL_gpu.h 1388:11@
 instance
   (ty ~ BG.CFloat)
   => BG.CompatHasField.HasField "w" SDL_GPUViewport ty
@@ -5112,6 +5142,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | The height of the viewport.
+--
+--     [C declaration]: @h@, defined at @SDL3\/SDL_gpu.h 1389:11@
 instance
   (ty ~ BG.CFloat)
   => BG.CompatHasField.HasField "h" SDL_GPUViewport ty
@@ -5141,6 +5174,9 @@
 
   offset# = \_ -> \_ -> 12
 
+-- | The minimum depth of the viewport.
+--
+--     [C declaration]: @min_depth@, defined at @SDL3\/SDL_gpu.h 1390:11@
 instance
   (ty ~ BG.CFloat)
   => BG.CompatHasField.HasField "min_depth" SDL_GPUViewport ty
@@ -5172,6 +5208,9 @@
 
   offset# = \_ -> \_ -> 16
 
+-- | The maximum depth of the viewport.
+--
+--     [C declaration]: @max_depth@, defined at @SDL3\/SDL_gpu.h 1391:11@
 instance
   (ty ~ BG.CFloat)
   => BG.CompatHasField.HasField "max_depth" SDL_GPUViewport ty
@@ -5268,6 +5307,14 @@
   instance
     BG.Storable SDL_GPUTextureTransferInfo
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GPUTextureTransferInfo
+  instance
+    Struct.IsStruct SDL_GPUTextureTransferInfo
+
+-- | The transfer buffer used in the transfer operation.
+--
+--     [C declaration]: @transfer_buffer@, defined at @SDL3\/SDL_gpu.h 1418:28@
 instance
   (ty ~ BG.Ptr SDL_GPUTransferBuffer)
   => BG.CompatHasField.HasField "transfer_buffer" SDL_GPUTextureTransferInfo ty
@@ -5298,6 +5345,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The starting byte of the image data in the transfer buffer.
+--
+--     [C declaration]: @offset@, defined at @SDL3\/SDL_gpu.h 1419:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "offset" SDL_GPUTextureTransferInfo ty
@@ -5327,6 +5377,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | The number of pixels from one row to the next.
+--
+--     [C declaration]: @pixels_per_row@, defined at @SDL3\/SDL_gpu.h 1420:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "pixels_per_row" SDL_GPUTextureTransferInfo ty
@@ -5357,6 +5410,9 @@
 
   offset# = \_ -> \_ -> 12
 
+-- | The number of rows from one layer\/depth-slice to the next.
+--
+--     [C declaration]: @rows_per_layer@, defined at @SDL3\/SDL_gpu.h 1421:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "rows_per_layer" SDL_GPUTextureTransferInfo ty
@@ -5434,6 +5490,14 @@
   instance
     BG.Storable SDL_GPUTransferBufferLocation
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GPUTransferBufferLocation
+  instance
+    Struct.IsStruct SDL_GPUTransferBufferLocation
+
+-- | The transfer buffer used in the transfer operation.
+--
+--     [C declaration]: @transfer_buffer@, defined at @SDL3\/SDL_gpu.h 1437:28@
 instance
   (ty ~ BG.Ptr SDL_GPUTransferBuffer)
   => BG.CompatHasField.HasField "transfer_buffer" SDL_GPUTransferBufferLocation ty
@@ -5459,6 +5523,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The starting byte of the buffer data in the transfer buffer.
+--
+--     [C declaration]: @offset@, defined at @SDL3\/SDL_gpu.h 1438:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "offset" SDL_GPUTransferBufferLocation ty
@@ -5554,6 +5621,14 @@
   instance
     BG.Storable SDL_GPUTextureLocation
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GPUTextureLocation
+  instance
+    Struct.IsStruct SDL_GPUTextureLocation
+
+-- | The texture used in the copy operation.
+--
+--     [C declaration]: @texture@, defined at @SDL3\/SDL_gpu.h 1453:21@
 instance
   (ty ~ BG.Ptr SDL_GPUTexture)
   => BG.CompatHasField.HasField "texture" SDL_GPUTextureLocation ty
@@ -5585,6 +5660,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The mip level index of the location.
+--
+--     [C declaration]: @mip_level@, defined at @SDL3\/SDL_gpu.h 1454:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "mip_level" SDL_GPUTextureLocation ty
@@ -5616,6 +5694,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | The layer index of the location.
+--
+--     [C declaration]: @layer@, defined at @SDL3\/SDL_gpu.h 1455:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "layer" SDL_GPUTextureLocation ty
@@ -5647,6 +5728,9 @@
 
   offset# = \_ -> \_ -> 12
 
+-- | The left offset of the location.
+--
+--     [C declaration]: @x@, defined at @SDL3\/SDL_gpu.h 1456:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "x" SDL_GPUTextureLocation ty
@@ -5678,6 +5762,9 @@
 
   offset# = \_ -> \_ -> 16
 
+-- | The top offset of the location.
+--
+--     [C declaration]: @y@, defined at @SDL3\/SDL_gpu.h 1457:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "y" SDL_GPUTextureLocation ty
@@ -5709,6 +5796,9 @@
 
   offset# = \_ -> \_ -> 20
 
+-- | The front offset of the location.
+--
+--     [C declaration]: @z@, defined at @SDL3\/SDL_gpu.h 1458:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "z" SDL_GPUTextureLocation ty
@@ -5826,6 +5916,14 @@
 
 deriving via Marshal.EquivStorable SDL_GPUTextureRegion instance BG.Storable SDL_GPUTextureRegion
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GPUTextureRegion
+  instance
+    Struct.IsStruct SDL_GPUTextureRegion
+
+-- | The texture used in the copy operation.
+--
+--     [C declaration]: @texture@, defined at @SDL3\/SDL_gpu.h 1475:21@
 instance
   (ty ~ BG.Ptr SDL_GPUTexture)
   => BG.CompatHasField.HasField "texture" SDL_GPUTextureRegion ty
@@ -5860,6 +5958,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The mip level index to transfer.
+--
+--     [C declaration]: @mip_level@, defined at @SDL3\/SDL_gpu.h 1476:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "mip_level" SDL_GPUTextureRegion ty
@@ -5894,6 +5995,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | The layer index to transfer.
+--
+--     [C declaration]: @layer@, defined at @SDL3\/SDL_gpu.h 1477:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "layer" SDL_GPUTextureRegion ty
@@ -5928,6 +6032,9 @@
 
   offset# = \_ -> \_ -> 12
 
+-- | The left offset of the region.
+--
+--     [C declaration]: @x@, defined at @SDL3\/SDL_gpu.h 1478:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "x" SDL_GPUTextureRegion ty
@@ -5962,6 +6069,9 @@
 
   offset# = \_ -> \_ -> 16
 
+-- | The top offset of the region.
+--
+--     [C declaration]: @y@, defined at @SDL3\/SDL_gpu.h 1479:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "y" SDL_GPUTextureRegion ty
@@ -5996,6 +6106,9 @@
 
   offset# = \_ -> \_ -> 20
 
+-- | The front offset of the region.
+--
+--     [C declaration]: @z@, defined at @SDL3\/SDL_gpu.h 1480:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "z" SDL_GPUTextureRegion ty
@@ -6030,6 +6143,9 @@
 
   offset# = \_ -> \_ -> 24
 
+-- | The width of the region.
+--
+--     [C declaration]: @w@, defined at @SDL3\/SDL_gpu.h 1481:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "w" SDL_GPUTextureRegion ty
@@ -6064,6 +6180,9 @@
 
   offset# = \_ -> \_ -> 28
 
+-- | The height of the region.
+--
+--     [C declaration]: @h@, defined at @SDL3\/SDL_gpu.h 1482:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "h" SDL_GPUTextureRegion ty
@@ -6098,6 +6217,9 @@
 
   offset# = \_ -> \_ -> 32
 
+-- | The depth of the region.
+--
+--     [C declaration]: @d@, defined at @SDL3\/SDL_gpu.h 1483:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "d" SDL_GPUTextureRegion ty
@@ -6204,6 +6326,11 @@
 
 deriving via Marshal.EquivStorable SDL_GPUBlitRegion instance BG.Storable SDL_GPUBlitRegion
 
+deriving via Struct.IsStructViaReadRaw SDL_GPUBlitRegion instance Struct.IsStruct SDL_GPUBlitRegion
+
+-- | The texture.
+--
+--     [C declaration]: @texture@, defined at @SDL3\/SDL_gpu.h 1496:21@
 instance
   (ty ~ BG.Ptr SDL_GPUTexture)
   => BG.CompatHasField.HasField "texture" SDL_GPUBlitRegion ty
@@ -6236,6 +6363,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The mip level index of the region.
+--
+--     [C declaration]: @mip_level@, defined at @SDL3\/SDL_gpu.h 1497:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "mip_level" SDL_GPUBlitRegion ty
@@ -6268,6 +6398,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | The layer index or depth plane of the region. This value is treated as a layer index on 2D array and cube textures, and as a depth plane on 3D textures.
+--
+--     [C declaration]: @layer_or_depth_plane@, defined at @SDL3\/SDL_gpu.h 1498:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "layer_or_depth_plane" SDL_GPUBlitRegion ty
@@ -6301,6 +6434,9 @@
 
   offset# = \_ -> \_ -> 12
 
+-- | The left offset of the region.
+--
+--     [C declaration]: @x@, defined at @SDL3\/SDL_gpu.h 1499:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "x" SDL_GPUBlitRegion ty
@@ -6333,6 +6469,9 @@
 
   offset# = \_ -> \_ -> 16
 
+-- | The top offset of the region.
+--
+--     [C declaration]: @y@, defined at @SDL3\/SDL_gpu.h 1500:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "y" SDL_GPUBlitRegion ty
@@ -6365,6 +6504,9 @@
 
   offset# = \_ -> \_ -> 20
 
+-- | The width of the region.
+--
+--     [C declaration]: @w@, defined at @SDL3\/SDL_gpu.h 1501:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "w" SDL_GPUBlitRegion ty
@@ -6397,6 +6539,9 @@
 
   offset# = \_ -> \_ -> 24
 
+-- | The height of the region.
+--
+--     [C declaration]: @h@, defined at @SDL3\/SDL_gpu.h 1502:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "h" SDL_GPUBlitRegion ty
@@ -6473,6 +6618,14 @@
 
 deriving via Marshal.EquivStorable SDL_GPUBufferLocation instance BG.Storable SDL_GPUBufferLocation
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GPUBufferLocation
+  instance
+    Struct.IsStruct SDL_GPUBufferLocation
+
+-- | The buffer.
+--
+--     [C declaration]: @buffer@, defined at @SDL3\/SDL_gpu.h 1516:20@
 instance
   (ty ~ BG.Ptr SDL_GPUBuffer)
   => BG.CompatHasField.HasField "buffer" SDL_GPUBufferLocation ty
@@ -6497,6 +6650,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The starting byte within the buffer.
+--
+--     [C declaration]: @offset@, defined at @SDL3\/SDL_gpu.h 1517:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "offset" SDL_GPUBufferLocation ty
@@ -6571,6 +6727,14 @@
 
 deriving via Marshal.EquivStorable SDL_GPUBufferRegion instance BG.Storable SDL_GPUBufferRegion
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GPUBufferRegion
+  instance
+    Struct.IsStruct SDL_GPUBufferRegion
+
+-- | The buffer.
+--
+--     [C declaration]: @buffer@, defined at @SDL3\/SDL_gpu.h 1532:20@
 instance
   (ty ~ BG.Ptr SDL_GPUBuffer)
   => BG.CompatHasField.HasField "buffer" SDL_GPUBufferRegion ty
@@ -6595,6 +6759,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The starting byte within the buffer.
+--
+--     [C declaration]: @offset@, defined at @SDL3\/SDL_gpu.h 1533:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "offset" SDL_GPUBufferRegion ty
@@ -6619,6 +6786,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | The size in bytes of the region.
+--
+--     [C declaration]: @size@, defined at @SDL3\/SDL_gpu.h 1534:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "size" SDL_GPUBufferRegion ty
@@ -6710,6 +6880,14 @@
   instance
     BG.Storable SDL_GPUIndirectDrawCommand
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GPUIndirectDrawCommand
+  instance
+    Struct.IsStruct SDL_GPUIndirectDrawCommand
+
+-- | The number of vertices to draw.
+--
+--     [C declaration]: @num_vertices@, defined at @SDL3\/SDL_gpu.h 1553:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "num_vertices" SDL_GPUIndirectDrawCommand ty
@@ -6740,6 +6918,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The number of instances to draw.
+--
+--     [C declaration]: @num_instances@, defined at @SDL3\/SDL_gpu.h 1554:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "num_instances" SDL_GPUIndirectDrawCommand ty
@@ -6770,6 +6951,9 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | The index of the first vertex to draw.
+--
+--     [C declaration]: @first_vertex@, defined at @SDL3\/SDL_gpu.h 1555:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "first_vertex" SDL_GPUIndirectDrawCommand ty
@@ -6800,6 +6984,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | The ID of the first instance to draw.
+--
+--     [C declaration]: @first_instance@, defined at @SDL3\/SDL_gpu.h 1556:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "first_instance" SDL_GPUIndirectDrawCommand ty
@@ -6900,6 +7087,14 @@
   instance
     BG.Storable SDL_GPUIndexedIndirectDrawCommand
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GPUIndexedIndirectDrawCommand
+  instance
+    Struct.IsStruct SDL_GPUIndexedIndirectDrawCommand
+
+-- | The number of indices to draw per instance.
+--
+--     [C declaration]: @num_indices@, defined at @SDL3\/SDL_gpu.h 1575:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "num_indices" SDL_GPUIndexedIndirectDrawCommand ty
@@ -6931,6 +7126,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The number of instances to draw.
+--
+--     [C declaration]: @num_instances@, defined at @SDL3\/SDL_gpu.h 1576:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "num_instances" SDL_GPUIndexedIndirectDrawCommand ty
@@ -6962,6 +7160,9 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | The base index within the index buffer.
+--
+--     [C declaration]: @first_index@, defined at @SDL3\/SDL_gpu.h 1577:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "first_index" SDL_GPUIndexedIndirectDrawCommand ty
@@ -6993,6 +7194,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | The value added to the vertex index before indexing into the vertex buffer.
+--
+--     [C declaration]: @vertex_offset@, defined at @SDL3\/SDL_gpu.h 1578:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
   => BG.CompatHasField.HasField "vertex_offset" SDL_GPUIndexedIndirectDrawCommand ty
@@ -7024,6 +7228,9 @@
 
   offset# = \_ -> \_ -> 12
 
+-- | The ID of the first instance to draw.
+--
+--     [C declaration]: @first_instance@, defined at @SDL3\/SDL_gpu.h 1579:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "first_instance" SDL_GPUIndexedIndirectDrawCommand ty
@@ -7106,6 +7313,14 @@
   instance
     BG.Storable SDL_GPUIndirectDispatchCommand
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GPUIndirectDispatchCommand
+  instance
+    Struct.IsStruct SDL_GPUIndirectDispatchCommand
+
+-- | The number of local workgroups to dispatch in the X dimension.
+--
+--     [C declaration]: @groupcount_x@, defined at @SDL3\/SDL_gpu.h 1591:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "groupcount_x" SDL_GPUIndirectDispatchCommand ty
@@ -7135,6 +7350,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The number of local workgroups to dispatch in the Y dimension.
+--
+--     [C declaration]: @groupcount_y@, defined at @SDL3\/SDL_gpu.h 1592:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "groupcount_y" SDL_GPUIndirectDispatchCommand ty
@@ -7164,6 +7382,9 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | The number of local workgroups to dispatch in the Z dimension.
+--
+--     [C declaration]: @groupcount_z@, defined at @SDL3\/SDL_gpu.h 1593:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "groupcount_z" SDL_GPUIndirectDispatchCommand ty
@@ -7336,6 +7557,14 @@
   instance
     BG.Storable SDL_GPUSamplerCreateInfo
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GPUSamplerCreateInfo
+  instance
+    Struct.IsStruct SDL_GPUSamplerCreateInfo
+
+-- | The minification filter to apply to lookups.
+--
+--     [C declaration]: @min_filter@, defined at @SDL3\/SDL_gpu.h 1614:19@
 instance
   (ty ~ SDL_GPUFilter)
   => BG.CompatHasField.HasField "min_filter" SDL_GPUSamplerCreateInfo ty
@@ -7377,6 +7606,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The magnification filter to apply to lookups.
+--
+--     [C declaration]: @mag_filter@, defined at @SDL3\/SDL_gpu.h 1615:19@
 instance
   (ty ~ SDL_GPUFilter)
   => BG.CompatHasField.HasField "mag_filter" SDL_GPUSamplerCreateInfo ty
@@ -7418,6 +7650,9 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | The mipmap filter to apply to lookups.
+--
+--     [C declaration]: @mipmap_mode@, defined at @SDL3\/SDL_gpu.h 1616:30@
 instance
   (ty ~ SDL_GPUSamplerMipmapMode)
   => BG.CompatHasField.HasField "mipmap_mode" SDL_GPUSamplerCreateInfo ty
@@ -7460,6 +7695,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | The addressing mode for U coordinates outside [0, 1).
+--
+--     [C declaration]: @address_mode_u@, defined at @SDL3\/SDL_gpu.h 1617:31@
 instance
   (ty ~ SDL_GPUSamplerAddressMode)
   => BG.CompatHasField.HasField "address_mode_u" SDL_GPUSamplerCreateInfo ty
@@ -7502,6 +7740,9 @@
 
   offset# = \_ -> \_ -> 12
 
+-- | The addressing mode for V coordinates outside [0, 1).
+--
+--     [C declaration]: @address_mode_v@, defined at @SDL3\/SDL_gpu.h 1618:31@
 instance
   (ty ~ SDL_GPUSamplerAddressMode)
   => BG.CompatHasField.HasField "address_mode_v" SDL_GPUSamplerCreateInfo ty
@@ -7544,6 +7785,9 @@
 
   offset# = \_ -> \_ -> 16
 
+-- | The addressing mode for W coordinates outside [0, 1).
+--
+--     [C declaration]: @address_mode_w@, defined at @SDL3\/SDL_gpu.h 1619:31@
 instance
   (ty ~ SDL_GPUSamplerAddressMode)
   => BG.CompatHasField.HasField "address_mode_w" SDL_GPUSamplerCreateInfo ty
@@ -7586,6 +7830,9 @@
 
   offset# = \_ -> \_ -> 20
 
+-- | The bias to be added to mipmap LOD calculation.
+--
+--     [C declaration]: @mip_lod_bias@, defined at @SDL3\/SDL_gpu.h 1620:11@
 instance
   (ty ~ BG.CFloat)
   => BG.CompatHasField.HasField "mip_lod_bias" SDL_GPUSamplerCreateInfo ty
@@ -7628,6 +7875,9 @@
 
   offset# = \_ -> \_ -> 24
 
+-- | The anisotropy value clamp used by the sampler. If enable_anisotropy is false, this is ignored.
+--
+--     [C declaration]: @max_anisotropy@, defined at @SDL3\/SDL_gpu.h 1621:11@
 instance
   (ty ~ BG.CFloat)
   => BG.CompatHasField.HasField "max_anisotropy" SDL_GPUSamplerCreateInfo ty
@@ -7670,6 +7920,9 @@
 
   offset# = \_ -> \_ -> 28
 
+-- | The comparison operator to apply to fetched data before filtering.
+--
+--     [C declaration]: @compare_op@, defined at @SDL3\/SDL_gpu.h 1622:22@
 instance
   (ty ~ SDL_GPUCompareOp)
   => BG.CompatHasField.HasField "compare_op" SDL_GPUSamplerCreateInfo ty
@@ -7711,6 +7964,9 @@
 
   offset# = \_ -> \_ -> 32
 
+-- | Clamps the minimum of the computed LOD value.
+--
+--     [C declaration]: @min_lod@, defined at @SDL3\/SDL_gpu.h 1623:11@
 instance
   (ty ~ BG.CFloat)
   => BG.CompatHasField.HasField "min_lod" SDL_GPUSamplerCreateInfo ty
@@ -7752,6 +8008,9 @@
 
   offset# = \_ -> \_ -> 36
 
+-- | Clamps the maximum of the computed LOD value.
+--
+--     [C declaration]: @max_lod@, defined at @SDL3\/SDL_gpu.h 1624:11@
 instance
   (ty ~ BG.CFloat)
   => BG.CompatHasField.HasField "max_lod" SDL_GPUSamplerCreateInfo ty
@@ -7793,6 +8052,9 @@
 
   offset# = \_ -> \_ -> 40
 
+-- | true to enable anisotropic filtering.
+--
+--     [C declaration]: @enable_anisotropy@, defined at @SDL3\/SDL_gpu.h 1625:10@
 instance
   (ty ~ BG.CBool)
   => BG.CompatHasField.HasField "enable_anisotropy" SDL_GPUSamplerCreateInfo ty
@@ -7835,6 +8097,9 @@
 
   offset# = \_ -> \_ -> 44
 
+-- | true to enable comparison against a reference value during lookups.
+--
+--     [C declaration]: @enable_compare@, defined at @SDL3\/SDL_gpu.h 1626:10@
 instance
   (ty ~ BG.CBool)
   => BG.CompatHasField.HasField "enable_compare" SDL_GPUSamplerCreateInfo ty
@@ -7877,6 +8142,7 @@
 
   offset# = \_ -> \_ -> 45
 
+-- | [C declaration]: @padding1@, defined at @SDL3\/SDL_gpu.h 1627:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "padding1" SDL_GPUSamplerCreateInfo ty
@@ -7918,6 +8184,7 @@
 
   offset# = \_ -> \_ -> 46
 
+-- | [C declaration]: @padding2@, defined at @SDL3\/SDL_gpu.h 1628:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "padding2" SDL_GPUSamplerCreateInfo ty
@@ -7959,6 +8226,9 @@
 
   offset# = \_ -> \_ -> 47
 
+-- | A properties ID for extensions. Should be 0 if no extensions are needed.
+--
+--     [C declaration]: @props@, defined at @SDL3\/SDL_gpu.h 1630:22@
 instance
   (ty ~ SDL3.Sys.Bindgen.Properties.SDL_PropertiesID)
   => BG.CompatHasField.HasField "props" SDL_GPUSamplerCreateInfo ty
@@ -8061,6 +8331,14 @@
   instance
     BG.Storable SDL_GPUVertexBufferDescription
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GPUVertexBufferDescription
+  instance
+    Struct.IsStruct SDL_GPUVertexBufferDescription
+
+-- | The binding slot of the vertex buffer.
+--
+--     [C declaration]: @slot@, defined at @SDL3\/SDL_gpu.h 1653:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "slot" SDL_GPUVertexBufferDescription ty
@@ -8090,6 +8368,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The size of a single element + the offset between elements.
+--
+--     [C declaration]: @pitch@, defined at @SDL3\/SDL_gpu.h 1654:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "pitch" SDL_GPUVertexBufferDescription ty
@@ -8119,6 +8400,9 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | Whether attribute addressing is a function of the vertex index or instance index.
+--
+--     [C declaration]: @input_rate@, defined at @SDL3\/SDL_gpu.h 1655:28@
 instance
   (ty ~ SDL_GPUVertexInputRate)
   => BG.CompatHasField.HasField "input_rate" SDL_GPUVertexBufferDescription ty
@@ -8148,6 +8432,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | Reserved for future use. Must be set to 0.
+--
+--     [C declaration]: @instance_step_rate@, defined at @SDL3\/SDL_gpu.h 1656:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "instance_step_rate" SDL_GPUVertexBufferDescription ty
@@ -8237,6 +8524,14 @@
   instance
     BG.Storable SDL_GPUVertexAttribute
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GPUVertexAttribute
+  instance
+    Struct.IsStruct SDL_GPUVertexAttribute
+
+-- | The shader input location index.
+--
+--     [C declaration]: @location@, defined at @SDL3\/SDL_gpu.h 1673:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "location" SDL_GPUVertexAttribute ty
@@ -8266,6 +8561,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The binding slot of the associated vertex buffer.
+--
+--     [C declaration]: @buffer_slot@, defined at @SDL3\/SDL_gpu.h 1674:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "buffer_slot" SDL_GPUVertexAttribute ty
@@ -8296,6 +8594,9 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | The size and type of the attribute data.
+--
+--     [C declaration]: @format@, defined at @SDL3\/SDL_gpu.h 1675:32@
 instance
   (ty ~ SDL_GPUVertexElementFormat)
   => BG.CompatHasField.HasField "format" SDL_GPUVertexAttribute ty
@@ -8325,6 +8626,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | The byte offset of this attribute relative to the start of the vertex element.
+--
+--     [C declaration]: @offset@, defined at @SDL3\/SDL_gpu.h 1676:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "offset" SDL_GPUVertexAttribute ty
@@ -8415,6 +8719,14 @@
   instance
     BG.Storable SDL_GPUVertexInputState
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GPUVertexInputState
+  instance
+    Struct.IsStruct SDL_GPUVertexInputState
+
+-- | A pointer to an array of vertex buffer descriptions.
+--
+--     [C declaration]: @vertex_buffer_descriptions@, defined at @SDL3\/SDL_gpu.h 1691:43@
 instance
   (ty ~ PtrConst.PtrConst SDL_GPUVertexBufferDescription)
   => BG.CompatHasField.HasField "vertex_buffer_descriptions" SDL_GPUVertexInputState ty
@@ -8445,6 +8757,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The number of vertex buffer descriptions in the above array.
+--
+--     [C declaration]: @num_vertex_buffers@, defined at @SDL3\/SDL_gpu.h 1692:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "num_vertex_buffers" SDL_GPUVertexInputState ty
@@ -8475,6 +8790,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | A pointer to an array of vertex attribute descriptions.
+--
+--     [C declaration]: @vertex_attributes@, defined at @SDL3\/SDL_gpu.h 1693:35@
 instance
   (ty ~ PtrConst.PtrConst SDL_GPUVertexAttribute)
   => BG.CompatHasField.HasField "vertex_attributes" SDL_GPUVertexInputState ty
@@ -8505,6 +8823,9 @@
 
   offset# = \_ -> \_ -> 16
 
+-- | The number of vertex attribute descriptions in the above array.
+--
+--     [C declaration]: @num_vertex_attributes@, defined at @SDL3\/SDL_gpu.h 1694:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "num_vertex_attributes" SDL_GPUVertexInputState ty
@@ -8589,6 +8910,14 @@
 
 deriving via Marshal.EquivStorable SDL_GPUStencilOpState instance BG.Storable SDL_GPUStencilOpState
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GPUStencilOpState
+  instance
+    Struct.IsStruct SDL_GPUStencilOpState
+
+-- | The action performed on samples that fail the stencil test.
+--
+--     [C declaration]: @fail_op@, defined at @SDL3\/SDL_gpu.h 1706:22@
 instance
   (ty ~ SDL_GPUStencilOp)
   => BG.CompatHasField.HasField "fail_op" SDL_GPUStencilOpState ty
@@ -8618,6 +8947,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The action performed on samples that pass the depth and stencil tests.
+--
+--     [C declaration]: @pass_op@, defined at @SDL3\/SDL_gpu.h 1707:22@
 instance
   (ty ~ SDL_GPUStencilOp)
   => BG.CompatHasField.HasField "pass_op" SDL_GPUStencilOpState ty
@@ -8647,6 +8979,9 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | The action performed on samples that pass the stencil test and fail the depth test.
+--
+--     [C declaration]: @depth_fail_op@, defined at @SDL3\/SDL_gpu.h 1708:22@
 instance
   (ty ~ SDL_GPUStencilOp)
   => BG.CompatHasField.HasField "depth_fail_op" SDL_GPUStencilOpState ty
@@ -8677,6 +9012,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | The comparison operator used in the stencil test.
+--
+--     [C declaration]: @compare_op@, defined at @SDL3\/SDL_gpu.h 1709:22@
 instance
   (ty ~ SDL_GPUCompareOp)
   => BG.CompatHasField.HasField "compare_op" SDL_GPUStencilOpState ty
@@ -8812,6 +9150,14 @@
   instance
     BG.Storable SDL_GPUColorTargetBlendState
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GPUColorTargetBlendState
+  instance
+    Struct.IsStruct SDL_GPUColorTargetBlendState
+
+-- | The value to be multiplied by the source RGB value.
+--
+--     [C declaration]: @src_color_blendfactor@, defined at @SDL3\/SDL_gpu.h 1725:24@
 instance
   (ty ~ SDL_GPUBlendFactor)
   => BG.CompatHasField.HasField "src_color_blendfactor" SDL_GPUColorTargetBlendState ty
@@ -8849,6 +9195,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The value to be multiplied by the destination RGB value.
+--
+--     [C declaration]: @dst_color_blendfactor@, defined at @SDL3\/SDL_gpu.h 1726:24@
 instance
   (ty ~ SDL_GPUBlendFactor)
   => BG.CompatHasField.HasField "dst_color_blendfactor" SDL_GPUColorTargetBlendState ty
@@ -8886,6 +9235,9 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | The blend operation for the RGB components.
+--
+--     [C declaration]: @color_blend_op@, defined at @SDL3\/SDL_gpu.h 1727:20@
 instance
   (ty ~ SDL_GPUBlendOp)
   => BG.CompatHasField.HasField "color_blend_op" SDL_GPUColorTargetBlendState ty
@@ -8923,6 +9275,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | The value to be multiplied by the source alpha.
+--
+--     [C declaration]: @src_alpha_blendfactor@, defined at @SDL3\/SDL_gpu.h 1728:24@
 instance
   (ty ~ SDL_GPUBlendFactor)
   => BG.CompatHasField.HasField "src_alpha_blendfactor" SDL_GPUColorTargetBlendState ty
@@ -8960,6 +9315,9 @@
 
   offset# = \_ -> \_ -> 12
 
+-- | The value to be multiplied by the destination alpha.
+--
+--     [C declaration]: @dst_alpha_blendfactor@, defined at @SDL3\/SDL_gpu.h 1729:24@
 instance
   (ty ~ SDL_GPUBlendFactor)
   => BG.CompatHasField.HasField "dst_alpha_blendfactor" SDL_GPUColorTargetBlendState ty
@@ -8997,6 +9355,9 @@
 
   offset# = \_ -> \_ -> 16
 
+-- | The blend operation for the alpha component.
+--
+--     [C declaration]: @alpha_blend_op@, defined at @SDL3\/SDL_gpu.h 1730:20@
 instance
   (ty ~ SDL_GPUBlendOp)
   => BG.CompatHasField.HasField "alpha_blend_op" SDL_GPUColorTargetBlendState ty
@@ -9034,6 +9395,9 @@
 
   offset# = \_ -> \_ -> 20
 
+-- | A bitmask specifying which of the RGBA components are enabled for writing. Writes to all channels if enable_color_write_mask is false.
+--
+--     [C declaration]: @color_write_mask@, defined at @SDL3\/SDL_gpu.h 1731:32@
 instance
   (ty ~ SDL_GPUColorComponentFlags)
   => BG.CompatHasField.HasField "color_write_mask" SDL_GPUColorTargetBlendState ty
@@ -9071,6 +9435,9 @@
 
   offset# = \_ -> \_ -> 24
 
+-- | Whether blending is enabled for the color target.
+--
+--     [C declaration]: @enable_blend@, defined at @SDL3\/SDL_gpu.h 1732:10@
 instance
   (ty ~ BG.CBool)
   => BG.CompatHasField.HasField "enable_blend" SDL_GPUColorTargetBlendState ty
@@ -9108,6 +9475,9 @@
 
   offset# = \_ -> \_ -> 25
 
+-- | Whether the color write mask is enabled.
+--
+--     [C declaration]: @enable_color_write_mask@, defined at @SDL3\/SDL_gpu.h 1733:10@
 instance
   (ty ~ BG.CBool)
   => BG.CompatHasField.HasField "enable_color_write_mask" SDL_GPUColorTargetBlendState ty
@@ -9145,6 +9515,7 @@
 
   offset# = \_ -> \_ -> 26
 
+-- | [C declaration]: @padding1@, defined at @SDL3\/SDL_gpu.h 1734:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "padding1" SDL_GPUColorTargetBlendState ty
@@ -9181,6 +9552,7 @@
 
   offset# = \_ -> \_ -> 27
 
+-- | [C declaration]: @padding2@, defined at @SDL3\/SDL_gpu.h 1735:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "padding2" SDL_GPUColorTargetBlendState ty
@@ -9320,6 +9692,14 @@
   instance
     BG.Storable SDL_GPUShaderCreateInfo
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GPUShaderCreateInfo
+  instance
+    Struct.IsStruct SDL_GPUShaderCreateInfo
+
+-- | The size in bytes of the code pointed to.
+--
+--     [C declaration]: @code_size@, defined at @SDL3\/SDL_gpu.h 1750:12@
 instance
   (ty ~ HsBindgen.Runtime.LibC.CSize)
   => BG.CompatHasField.HasField "code_size" SDL_GPUShaderCreateInfo ty
@@ -9355,6 +9735,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | A pointer to shader code.
+--
+--     [C declaration]: @code@, defined at @SDL3\/SDL_gpu.h 1751:18@
 instance
   (ty ~ PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "code" SDL_GPUShaderCreateInfo ty
@@ -9390,6 +9773,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | A pointer to a null-terminated UTF-8 string specifying the entry point function name for the shader.
+--
+--     [C declaration]: @entrypoint@, defined at @SDL3\/SDL_gpu.h 1752:17@
 instance
   (ty ~ PtrConst.PtrConst BG.CChar)
   => BG.CompatHasField.HasField "entrypoint" SDL_GPUShaderCreateInfo ty
@@ -9425,6 +9811,9 @@
 
   offset# = \_ -> \_ -> 16
 
+-- | The format of the shader code.
+--
+--     [C declaration]: @format@, defined at @SDL3\/SDL_gpu.h 1753:25@
 instance
   (ty ~ SDL_GPUShaderFormat)
   => BG.CompatHasField.HasField "format" SDL_GPUShaderCreateInfo ty
@@ -9460,6 +9849,9 @@
 
   offset# = \_ -> \_ -> 24
 
+-- | The stage the shader program corresponds to.
+--
+--     [C declaration]: @stage@, defined at @SDL3\/SDL_gpu.h 1754:24@
 instance
   (ty ~ SDL_GPUShaderStage)
   => BG.CompatHasField.HasField "stage" SDL_GPUShaderCreateInfo ty
@@ -9495,6 +9887,9 @@
 
   offset# = \_ -> \_ -> 28
 
+-- | The number of samplers defined in the shader.
+--
+--     [C declaration]: @num_samplers@, defined at @SDL3\/SDL_gpu.h 1755:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "num_samplers" SDL_GPUShaderCreateInfo ty
@@ -9531,6 +9926,9 @@
 
   offset# = \_ -> \_ -> 32
 
+-- | The number of storage textures defined in the shader.
+--
+--     [C declaration]: @num_storage_textures@, defined at @SDL3\/SDL_gpu.h 1756:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "num_storage_textures" SDL_GPUShaderCreateInfo ty
@@ -9567,6 +9965,9 @@
 
   offset# = \_ -> \_ -> 36
 
+-- | The number of storage buffers defined in the shader.
+--
+--     [C declaration]: @num_storage_buffers@, defined at @SDL3\/SDL_gpu.h 1757:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "num_storage_buffers" SDL_GPUShaderCreateInfo ty
@@ -9603,6 +10004,9 @@
 
   offset# = \_ -> \_ -> 40
 
+-- | The number of uniform buffers defined in the shader.
+--
+--     [C declaration]: @num_uniform_buffers@, defined at @SDL3\/SDL_gpu.h 1758:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "num_uniform_buffers" SDL_GPUShaderCreateInfo ty
@@ -9639,6 +10043,9 @@
 
   offset# = \_ -> \_ -> 44
 
+-- | A properties ID for extensions. Should be 0 if no extensions are needed.
+--
+--     [C declaration]: @props@, defined at @SDL3\/SDL_gpu.h 1760:22@
 instance
   (ty ~ SDL3.Sys.Bindgen.Properties.SDL_PropertiesID)
   => BG.CompatHasField.HasField "props" SDL_GPUShaderCreateInfo ty
@@ -9772,6 +10179,14 @@
   instance
     BG.Storable SDL_GPUTextureCreateInfo
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GPUTextureCreateInfo
+  instance
+    Struct.IsStruct SDL_GPUTextureCreateInfo
+
+-- | The base dimensionality of the texture.
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_gpu.h 1780:24@
 instance
   (ty ~ SDL_GPUTextureType)
   => BG.CompatHasField.HasField "type'" SDL_GPUTextureCreateInfo ty
@@ -9806,6 +10221,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The pixel format of the texture.
+--
+--     [C declaration]: @format@, defined at @SDL3\/SDL_gpu.h 1781:26@
 instance
   (ty ~ SDL_GPUTextureFormat)
   => BG.CompatHasField.HasField "format" SDL_GPUTextureCreateInfo ty
@@ -9840,6 +10258,9 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | How the texture is intended to be used by the client.
+--
+--     [C declaration]: @usage@, defined at @SDL3\/SDL_gpu.h 1782:30@
 instance
   (ty ~ SDL_GPUTextureUsageFlags)
   => BG.CompatHasField.HasField "usage" SDL_GPUTextureCreateInfo ty
@@ -9874,6 +10295,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | The width of the texture.
+--
+--     [C declaration]: @width@, defined at @SDL3\/SDL_gpu.h 1783:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "width" SDL_GPUTextureCreateInfo ty
@@ -9908,6 +10332,9 @@
 
   offset# = \_ -> \_ -> 12
 
+-- | The height of the texture.
+--
+--     [C declaration]: @height@, defined at @SDL3\/SDL_gpu.h 1784:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "height" SDL_GPUTextureCreateInfo ty
@@ -9942,6 +10369,9 @@
 
   offset# = \_ -> \_ -> 16
 
+-- | The layer count or depth of the texture. This value is treated as a layer count on 2D array textures, and as a depth value on 3D textures.
+--
+--     [C declaration]: @layer_count_or_depth@, defined at @SDL3\/SDL_gpu.h 1785:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "layer_count_or_depth" SDL_GPUTextureCreateInfo ty
@@ -9977,6 +10407,9 @@
 
   offset# = \_ -> \_ -> 20
 
+-- | The number of mip levels in the texture.
+--
+--     [C declaration]: @num_levels@, defined at @SDL3\/SDL_gpu.h 1786:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "num_levels" SDL_GPUTextureCreateInfo ty
@@ -10011,6 +10444,9 @@
 
   offset# = \_ -> \_ -> 24
 
+-- | The number of samples per texel. Only applies if the texture is used as a render target.
+--
+--     [C declaration]: @sample_count@, defined at @SDL3\/SDL_gpu.h 1787:24@
 instance
   (ty ~ SDL_GPUSampleCount)
   => BG.CompatHasField.HasField "sample_count" SDL_GPUTextureCreateInfo ty
@@ -10046,6 +10482,9 @@
 
   offset# = \_ -> \_ -> 28
 
+-- | A properties ID for extensions. Should be 0 if no extensions are needed.
+--
+--     [C declaration]: @props@, defined at @SDL3\/SDL_gpu.h 1789:22@
 instance
   (ty ~ SDL3.Sys.Bindgen.Properties.SDL_PropertiesID)
   => BG.CompatHasField.HasField "props" SDL_GPUTextureCreateInfo ty
@@ -10133,6 +10572,14 @@
   instance
     BG.Storable SDL_GPUBufferCreateInfo
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GPUBufferCreateInfo
+  instance
+    Struct.IsStruct SDL_GPUBufferCreateInfo
+
+-- | How the buffer is intended to be used by the client.
+--
+--     [C declaration]: @usage@, defined at @SDL3\/SDL_gpu.h 1805:29@
 instance
   (ty ~ SDL_GPUBufferUsageFlags)
   => BG.CompatHasField.HasField "usage" SDL_GPUBufferCreateInfo ty
@@ -10157,6 +10604,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The size in bytes of the buffer.
+--
+--     [C declaration]: @size@, defined at @SDL3\/SDL_gpu.h 1806:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "size" SDL_GPUBufferCreateInfo ty
@@ -10185,6 +10635,9 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | A properties ID for extensions. Should be 0 if no extensions are needed.
+--
+--     [C declaration]: @props@, defined at @SDL3\/SDL_gpu.h 1808:22@
 instance
   (ty ~ SDL3.Sys.Bindgen.Properties.SDL_PropertiesID)
   => BG.CompatHasField.HasField "props" SDL_GPUBufferCreateInfo ty
@@ -10260,6 +10713,14 @@
   instance
     BG.Storable SDL_GPUTransferBufferCreateInfo
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GPUTransferBufferCreateInfo
+  instance
+    Struct.IsStruct SDL_GPUTransferBufferCreateInfo
+
+-- | How the transfer buffer is intended to be used by the client.
+--
+--     [C declaration]: @usage@, defined at @SDL3\/SDL_gpu.h 1820:32@
 instance
   (ty ~ SDL_GPUTransferBufferUsage)
   => BG.CompatHasField.HasField "usage" SDL_GPUTransferBufferCreateInfo ty
@@ -10288,6 +10749,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The size in bytes of the transfer buffer.
+--
+--     [C declaration]: @size@, defined at @SDL3\/SDL_gpu.h 1821:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "size" SDL_GPUTransferBufferCreateInfo ty
@@ -10316,6 +10780,9 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | A properties ID for extensions. Should be 0 if no extensions are needed.
+--
+--     [C declaration]: @props@, defined at @SDL3\/SDL_gpu.h 1823:22@
 instance
   (ty ~ SDL3.Sys.Bindgen.Properties.SDL_PropertiesID)
   => BG.CompatHasField.HasField "props" SDL_GPUTransferBufferCreateInfo ty
@@ -10447,6 +10914,14 @@
   instance
     BG.Storable SDL_GPURasterizerState
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GPURasterizerState
+  instance
+    Struct.IsStruct SDL_GPURasterizerState
+
+-- | Whether polygons will be filled in or drawn as lines.
+--
+--     [C declaration]: @fill_mode@, defined at @SDL3\/SDL_gpu.h 1846:21@
 instance
   (ty ~ SDL_GPUFillMode)
   => BG.CompatHasField.HasField "fill_mode" SDL_GPURasterizerState ty
@@ -10482,6 +10957,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The facing direction in which triangles will be culled.
+--
+--     [C declaration]: @cull_mode@, defined at @SDL3\/SDL_gpu.h 1847:21@
 instance
   (ty ~ SDL_GPUCullMode)
   => BG.CompatHasField.HasField "cull_mode" SDL_GPURasterizerState ty
@@ -10517,6 +10995,9 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | The vertex winding that will cause a triangle to be determined as front-facing.
+--
+--     [C declaration]: @front_face@, defined at @SDL3\/SDL_gpu.h 1848:22@
 instance
   (ty ~ SDL_GPUFrontFace)
   => BG.CompatHasField.HasField "front_face" SDL_GPURasterizerState ty
@@ -10552,6 +11033,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | A scalar factor controlling the depth value added to each fragment.
+--
+--     [C declaration]: @depth_bias_constant_factor@, defined at @SDL3\/SDL_gpu.h 1849:11@
 instance
   (ty ~ BG.CFloat)
   => BG.CompatHasField.HasField "depth_bias_constant_factor" SDL_GPURasterizerState ty
@@ -10588,6 +11072,9 @@
 
   offset# = \_ -> \_ -> 12
 
+-- | The maximum depth bias of a fragment.
+--
+--     [C declaration]: @depth_bias_clamp@, defined at @SDL3\/SDL_gpu.h 1850:11@
 instance
   (ty ~ BG.CFloat)
   => BG.CompatHasField.HasField "depth_bias_clamp" SDL_GPURasterizerState ty
@@ -10624,6 +11111,9 @@
 
   offset# = \_ -> \_ -> 16
 
+-- | A scalar factor applied to a fragment\'s slope in depth calculations.
+--
+--     [C declaration]: @depth_bias_slope_factor@, defined at @SDL3\/SDL_gpu.h 1851:11@
 instance
   (ty ~ BG.CFloat)
   => BG.CompatHasField.HasField "depth_bias_slope_factor" SDL_GPURasterizerState ty
@@ -10660,6 +11150,9 @@
 
   offset# = \_ -> \_ -> 20
 
+-- | true to bias fragment depth values.
+--
+--     [C declaration]: @enable_depth_bias@, defined at @SDL3\/SDL_gpu.h 1852:10@
 instance
   (ty ~ BG.CBool)
   => BG.CompatHasField.HasField "enable_depth_bias" SDL_GPURasterizerState ty
@@ -10696,6 +11189,9 @@
 
   offset# = \_ -> \_ -> 24
 
+-- | true to enable depth clip, false to enable depth clamp.
+--
+--     [C declaration]: @enable_depth_clip@, defined at @SDL3\/SDL_gpu.h 1853:10@
 instance
   (ty ~ BG.CBool)
   => BG.CompatHasField.HasField "enable_depth_clip" SDL_GPURasterizerState ty
@@ -10732,6 +11228,7 @@
 
   offset# = \_ -> \_ -> 25
 
+-- | [C declaration]: @padding1@, defined at @SDL3\/SDL_gpu.h 1854:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "padding1" SDL_GPURasterizerState ty
@@ -10767,6 +11264,7 @@
 
   offset# = \_ -> \_ -> 26
 
+-- | [C declaration]: @padding2@, defined at @SDL3\/SDL_gpu.h 1855:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "padding2" SDL_GPURasterizerState ty
@@ -10873,6 +11371,14 @@
   instance
     BG.Storable SDL_GPUMultisampleState
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GPUMultisampleState
+  instance
+    Struct.IsStruct SDL_GPUMultisampleState
+
+-- | The number of samples to be used in rasterization.
+--
+--     [C declaration]: @sample_count@, defined at @SDL3\/SDL_gpu.h 1868:24@
 instance
   (ty ~ SDL_GPUSampleCount)
   => BG.CompatHasField.HasField "sample_count" SDL_GPUMultisampleState ty
@@ -10905,6 +11411,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | Reserved for future use. Must be set to 0.
+--
+--     [C declaration]: @sample_mask@, defined at @SDL3\/SDL_gpu.h 1869:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "sample_mask" SDL_GPUMultisampleState ty
@@ -10937,6 +11446,9 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | Reserved for future use. Must be set to false.
+--
+--     [C declaration]: @enable_mask@, defined at @SDL3\/SDL_gpu.h 1870:10@
 instance
   (ty ~ BG.CBool)
   => BG.CompatHasField.HasField "enable_mask" SDL_GPUMultisampleState ty
@@ -10969,6 +11481,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | true enables the alpha-to-coverage feature.
+--
+--     [C declaration]: @enable_alpha_to_coverage@, defined at @SDL3\/SDL_gpu.h 1871:10@
 instance
   (ty ~ BG.CBool)
   => BG.CompatHasField.HasField "enable_alpha_to_coverage" SDL_GPUMultisampleState ty
@@ -11001,6 +11516,7 @@
 
   offset# = \_ -> \_ -> 9
 
+-- | [C declaration]: @padding2@, defined at @SDL3\/SDL_gpu.h 1872:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "padding2" SDL_GPUMultisampleState ty
@@ -11032,6 +11548,7 @@
 
   offset# = \_ -> \_ -> 10
 
+-- | [C declaration]: @padding3@, defined at @SDL3\/SDL_gpu.h 1873:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "padding3" SDL_GPUMultisampleState ty
@@ -11167,6 +11684,14 @@
   instance
     BG.Storable SDL_GPUDepthStencilState
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GPUDepthStencilState
+  instance
+    Struct.IsStruct SDL_GPUDepthStencilState
+
+-- | The comparison operator used for depth testing.
+--
+--     [C declaration]: @compare_op@, defined at @SDL3\/SDL_gpu.h 1886:22@
 instance
   (ty ~ SDL_GPUCompareOp)
   => BG.CompatHasField.HasField "compare_op" SDL_GPUDepthStencilState ty
@@ -11203,6 +11728,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The stencil op state for back-facing triangles.
+--
+--     [C declaration]: @back_stencil_state@, defined at @SDL3\/SDL_gpu.h 1887:27@
 instance
   (ty ~ SDL_GPUStencilOpState)
   => BG.CompatHasField.HasField "back_stencil_state" SDL_GPUDepthStencilState ty
@@ -11240,6 +11768,9 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | The stencil op state for front-facing triangles.
+--
+--     [C declaration]: @front_stencil_state@, defined at @SDL3\/SDL_gpu.h 1888:27@
 instance
   (ty ~ SDL_GPUStencilOpState)
   => BG.CompatHasField.HasField "front_stencil_state" SDL_GPUDepthStencilState ty
@@ -11277,6 +11808,9 @@
 
   offset# = \_ -> \_ -> 20
 
+-- | Selects the bits of the stencil values participating in the stencil test.
+--
+--     [C declaration]: @compare_mask@, defined at @SDL3\/SDL_gpu.h 1889:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "compare_mask" SDL_GPUDepthStencilState ty
@@ -11314,6 +11848,9 @@
 
   offset# = \_ -> \_ -> 36
 
+-- | Selects the bits of the stencil values updated by the stencil test.
+--
+--     [C declaration]: @write_mask@, defined at @SDL3\/SDL_gpu.h 1890:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "write_mask" SDL_GPUDepthStencilState ty
@@ -11350,6 +11887,9 @@
 
   offset# = \_ -> \_ -> 37
 
+-- | true enables the depth test.
+--
+--     [C declaration]: @enable_depth_test@, defined at @SDL3\/SDL_gpu.h 1891:10@
 instance
   (ty ~ BG.CBool)
   => BG.CompatHasField.HasField "enable_depth_test" SDL_GPUDepthStencilState ty
@@ -11387,6 +11927,9 @@
 
   offset# = \_ -> \_ -> 38
 
+-- | true enables depth writes. Depth writes are always disabled when enable_depth_test is false.
+--
+--     [C declaration]: @enable_depth_write@, defined at @SDL3\/SDL_gpu.h 1892:10@
 instance
   (ty ~ BG.CBool)
   => BG.CompatHasField.HasField "enable_depth_write" SDL_GPUDepthStencilState ty
@@ -11424,6 +11967,9 @@
 
   offset# = \_ -> \_ -> 39
 
+-- | true enables the stencil test.
+--
+--     [C declaration]: @enable_stencil_test@, defined at @SDL3\/SDL_gpu.h 1893:10@
 instance
   (ty ~ BG.CBool)
   => BG.CompatHasField.HasField "enable_stencil_test" SDL_GPUDepthStencilState ty
@@ -11461,6 +12007,7 @@
 
   offset# = \_ -> \_ -> 40
 
+-- | [C declaration]: @padding1@, defined at @SDL3\/SDL_gpu.h 1894:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "padding1" SDL_GPUDepthStencilState ty
@@ -11497,6 +12044,7 @@
 
   offset# = \_ -> \_ -> 41
 
+-- | [C declaration]: @padding2@, defined at @SDL3\/SDL_gpu.h 1895:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "padding2" SDL_GPUDepthStencilState ty
@@ -11533,6 +12081,7 @@
 
   offset# = \_ -> \_ -> 42
 
+-- | [C declaration]: @padding3@, defined at @SDL3\/SDL_gpu.h 1896:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "padding3" SDL_GPUDepthStencilState ty
@@ -11614,6 +12163,14 @@
   instance
     BG.Storable SDL_GPUColorTargetDescription
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GPUColorTargetDescription
+  instance
+    Struct.IsStruct SDL_GPUColorTargetDescription
+
+-- | The pixel format of the texture to be used as a color target.
+--
+--     [C declaration]: @format@, defined at @SDL3\/SDL_gpu.h 1909:26@
 instance
   (ty ~ SDL_GPUTextureFormat)
   => BG.CompatHasField.HasField "format" SDL_GPUColorTargetDescription ty
@@ -11638,6 +12195,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The blend state to be used for the color target.
+--
+--     [C declaration]: @blend_state@, defined at @SDL3\/SDL_gpu.h 1910:34@
 instance
   (ty ~ SDL_GPUColorTargetBlendState)
   => BG.CompatHasField.HasField "blend_state" SDL_GPUColorTargetDescription ty
@@ -11739,6 +12299,14 @@
   instance
     BG.Storable SDL_GPUGraphicsPipelineTargetInfo
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GPUGraphicsPipelineTargetInfo
+  instance
+    Struct.IsStruct SDL_GPUGraphicsPipelineTargetInfo
+
+-- | A pointer to an array of color target descriptions.
+--
+--     [C declaration]: @color_target_descriptions@, defined at @SDL3\/SDL_gpu.h 1925:42@
 instance
   (ty ~ PtrConst.PtrConst SDL_GPUColorTargetDescription)
   => BG.CompatHasField.HasField "color_target_descriptions" SDL_GPUGraphicsPipelineTargetInfo ty
@@ -11772,6 +12340,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The number of color target descriptions in the above array.
+--
+--     [C declaration]: @num_color_targets@, defined at @SDL3\/SDL_gpu.h 1926:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "num_color_targets" SDL_GPUGraphicsPipelineTargetInfo ty
@@ -11805,6 +12376,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | The pixel format of the depth-stencil target. Ignored if has_depth_stencil_target is false.
+--
+--     [C declaration]: @depth_stencil_format@, defined at @SDL3\/SDL_gpu.h 1927:26@
 instance
   (ty ~ SDL_GPUTextureFormat)
   => BG.CompatHasField.HasField "depth_stencil_format" SDL_GPUGraphicsPipelineTargetInfo ty
@@ -11838,6 +12412,9 @@
 
   offset# = \_ -> \_ -> 12
 
+-- | true specifies that the pipeline uses a depth-stencil target.
+--
+--     [C declaration]: @has_depth_stencil_target@, defined at @SDL3\/SDL_gpu.h 1928:10@
 instance
   (ty ~ BG.CBool)
   => BG.CompatHasField.HasField "has_depth_stencil_target" SDL_GPUGraphicsPipelineTargetInfo ty
@@ -11871,6 +12448,7 @@
 
   offset# = \_ -> \_ -> 16
 
+-- | [C declaration]: @padding1@, defined at @SDL3\/SDL_gpu.h 1929:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "padding1" SDL_GPUGraphicsPipelineTargetInfo ty
@@ -11903,6 +12481,7 @@
 
   offset# = \_ -> \_ -> 17
 
+-- | [C declaration]: @padding2@, defined at @SDL3\/SDL_gpu.h 1930:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "padding2" SDL_GPUGraphicsPipelineTargetInfo ty
@@ -11935,6 +12514,7 @@
 
   offset# = \_ -> \_ -> 18
 
+-- | [C declaration]: @padding3@, defined at @SDL3\/SDL_gpu.h 1931:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "padding3" SDL_GPUGraphicsPipelineTargetInfo ty
@@ -12063,6 +12643,14 @@
   instance
     BG.Storable SDL_GPUGraphicsPipelineCreateInfo
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GPUGraphicsPipelineCreateInfo
+  instance
+    Struct.IsStruct SDL_GPUGraphicsPipelineCreateInfo
+
+-- | The vertex shader used by the graphics pipeline.
+--
+--     [C declaration]: @vertex_shader@, defined at @SDL3\/SDL_gpu.h 1950:20@
 instance
   (ty ~ BG.Ptr SDL_GPUShader)
   => BG.CompatHasField.HasField "vertex_shader" SDL_GPUGraphicsPipelineCreateInfo ty
@@ -12098,6 +12686,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The fragment shader used by the graphics pipeline.
+--
+--     [C declaration]: @fragment_shader@, defined at @SDL3\/SDL_gpu.h 1951:20@
 instance
   (ty ~ BG.Ptr SDL_GPUShader)
   => BG.CompatHasField.HasField "fragment_shader" SDL_GPUGraphicsPipelineCreateInfo ty
@@ -12133,6 +12724,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | The vertex layout of the graphics pipeline.
+--
+--     [C declaration]: @vertex_input_state@, defined at @SDL3\/SDL_gpu.h 1952:29@
 instance
   (ty ~ SDL_GPUVertexInputState)
   => BG.CompatHasField.HasField "vertex_input_state" SDL_GPUGraphicsPipelineCreateInfo ty
@@ -12168,6 +12762,9 @@
 
   offset# = \_ -> \_ -> 16
 
+-- | The primitive topology of the graphics pipeline.
+--
+--     [C declaration]: @primitive_type@, defined at @SDL3\/SDL_gpu.h 1953:26@
 instance
   (ty ~ SDL_GPUPrimitiveType)
   => BG.CompatHasField.HasField "primitive_type" SDL_GPUGraphicsPipelineCreateInfo ty
@@ -12203,6 +12800,9 @@
 
   offset# = \_ -> \_ -> 48
 
+-- | The rasterizer state of the graphics pipeline.
+--
+--     [C declaration]: @rasterizer_state@, defined at @SDL3\/SDL_gpu.h 1954:28@
 instance
   (ty ~ SDL_GPURasterizerState)
   => BG.CompatHasField.HasField "rasterizer_state" SDL_GPUGraphicsPipelineCreateInfo ty
@@ -12238,6 +12838,9 @@
 
   offset# = \_ -> \_ -> 52
 
+-- | The multisample state of the graphics pipeline.
+--
+--     [C declaration]: @multisample_state@, defined at @SDL3\/SDL_gpu.h 1955:29@
 instance
   (ty ~ SDL_GPUMultisampleState)
   => BG.CompatHasField.HasField "multisample_state" SDL_GPUGraphicsPipelineCreateInfo ty
@@ -12273,6 +12876,9 @@
 
   offset# = \_ -> \_ -> 80
 
+-- | The depth-stencil state of the graphics pipeline.
+--
+--     [C declaration]: @depth_stencil_state@, defined at @SDL3\/SDL_gpu.h 1956:30@
 instance
   (ty ~ SDL_GPUDepthStencilState)
   => BG.CompatHasField.HasField "depth_stencil_state" SDL_GPUGraphicsPipelineCreateInfo ty
@@ -12308,6 +12914,9 @@
 
   offset# = \_ -> \_ -> 92
 
+-- | Formats and blend modes for the render targets of the graphics pipeline.
+--
+--     [C declaration]: @target_info@, defined at @SDL3\/SDL_gpu.h 1957:39@
 instance
   (ty ~ SDL_GPUGraphicsPipelineTargetInfo)
   => BG.CompatHasField.HasField "target_info" SDL_GPUGraphicsPipelineCreateInfo ty
@@ -12343,6 +12952,9 @@
 
   offset# = \_ -> \_ -> 136
 
+-- | A properties ID for extensions. Should be 0 if no extensions are needed.
+--
+--     [C declaration]: @props@, defined at @SDL3\/SDL_gpu.h 1959:22@
 instance
   (ty ~ SDL3.Sys.Bindgen.Properties.SDL_PropertiesID)
   => BG.CompatHasField.HasField "props" SDL_GPUGraphicsPipelineCreateInfo ty
@@ -12508,6 +13120,14 @@
   instance
     BG.Storable SDL_GPUComputePipelineCreateInfo
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GPUComputePipelineCreateInfo
+  instance
+    Struct.IsStruct SDL_GPUComputePipelineCreateInfo
+
+-- | The size in bytes of the compute shader code pointed to.
+--
+--     [C declaration]: @code_size@, defined at @SDL3\/SDL_gpu.h 1972:12@
 instance
   (ty ~ HsBindgen.Runtime.LibC.CSize)
   => BG.CompatHasField.HasField "code_size" SDL_GPUComputePipelineCreateInfo ty
@@ -12547,6 +13167,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | A pointer to compute shader code.
+--
+--     [C declaration]: @code@, defined at @SDL3\/SDL_gpu.h 1973:18@
 instance
   (ty ~ PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "code" SDL_GPUComputePipelineCreateInfo ty
@@ -12586,6 +13209,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | A pointer to a null-terminated UTF-8 string specifying the entry point function name for the shader.
+--
+--     [C declaration]: @entrypoint@, defined at @SDL3\/SDL_gpu.h 1974:17@
 instance
   (ty ~ PtrConst.PtrConst BG.CChar)
   => BG.CompatHasField.HasField "entrypoint" SDL_GPUComputePipelineCreateInfo ty
@@ -12625,6 +13251,9 @@
 
   offset# = \_ -> \_ -> 16
 
+-- | The format of the compute shader code.
+--
+--     [C declaration]: @format@, defined at @SDL3\/SDL_gpu.h 1975:25@
 instance
   (ty ~ SDL_GPUShaderFormat)
   => BG.CompatHasField.HasField "format" SDL_GPUComputePipelineCreateInfo ty
@@ -12664,6 +13293,9 @@
 
   offset# = \_ -> \_ -> 24
 
+-- | The number of samplers defined in the shader.
+--
+--     [C declaration]: @num_samplers@, defined at @SDL3\/SDL_gpu.h 1976:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "num_samplers" SDL_GPUComputePipelineCreateInfo ty
@@ -12704,6 +13336,9 @@
 
   offset# = \_ -> \_ -> 28
 
+-- | The number of readonly storage textures defined in the shader.
+--
+--     [C declaration]: @num_readonly_storage_textures@, defined at @SDL3\/SDL_gpu.h 1977:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "num_readonly_storage_textures" SDL_GPUComputePipelineCreateInfo ty
@@ -12744,6 +13379,9 @@
 
   offset# = \_ -> \_ -> 32
 
+-- | The number of readonly storage buffers defined in the shader.
+--
+--     [C declaration]: @num_readonly_storage_buffers@, defined at @SDL3\/SDL_gpu.h 1978:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "num_readonly_storage_buffers" SDL_GPUComputePipelineCreateInfo ty
@@ -12784,6 +13422,9 @@
 
   offset# = \_ -> \_ -> 36
 
+-- | The number of read-write storage textures defined in the shader.
+--
+--     [C declaration]: @num_readwrite_storage_textures@, defined at @SDL3\/SDL_gpu.h 1979:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "num_readwrite_storage_textures" SDL_GPUComputePipelineCreateInfo ty
@@ -12824,6 +13465,9 @@
 
   offset# = \_ -> \_ -> 40
 
+-- | The number of read-write storage buffers defined in the shader.
+--
+--     [C declaration]: @num_readwrite_storage_buffers@, defined at @SDL3\/SDL_gpu.h 1980:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "num_readwrite_storage_buffers" SDL_GPUComputePipelineCreateInfo ty
@@ -12864,6 +13508,9 @@
 
   offset# = \_ -> \_ -> 44
 
+-- | The number of uniform buffers defined in the shader.
+--
+--     [C declaration]: @num_uniform_buffers@, defined at @SDL3\/SDL_gpu.h 1981:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "num_uniform_buffers" SDL_GPUComputePipelineCreateInfo ty
@@ -12904,6 +13551,9 @@
 
   offset# = \_ -> \_ -> 48
 
+-- | The number of threads in the X dimension. This should match the value in the shader.
+--
+--     [C declaration]: @threadcount_x@, defined at @SDL3\/SDL_gpu.h 1982:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "threadcount_x" SDL_GPUComputePipelineCreateInfo ty
@@ -12944,6 +13594,9 @@
 
   offset# = \_ -> \_ -> 52
 
+-- | The number of threads in the Y dimension. This should match the value in the shader.
+--
+--     [C declaration]: @threadcount_y@, defined at @SDL3\/SDL_gpu.h 1983:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "threadcount_y" SDL_GPUComputePipelineCreateInfo ty
@@ -12984,6 +13637,9 @@
 
   offset# = \_ -> \_ -> 56
 
+-- | The number of threads in the Z dimension. This should match the value in the shader.
+--
+--     [C declaration]: @threadcount_z@, defined at @SDL3\/SDL_gpu.h 1984:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "threadcount_z" SDL_GPUComputePipelineCreateInfo ty
@@ -13024,6 +13680,9 @@
 
   offset# = \_ -> \_ -> 60
 
+-- | A properties ID for extensions. Should be 0 if no extensions are needed.
+--
+--     [C declaration]: @props@, defined at @SDL3\/SDL_gpu.h 1986:22@
 instance
   (ty ~ SDL3.Sys.Bindgen.Properties.SDL_PropertiesID)
   => BG.CompatHasField.HasField "props" SDL_GPUComputePipelineCreateInfo ty
@@ -13201,6 +13860,14 @@
   instance
     BG.Storable SDL_GPUColorTargetInfo
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GPUColorTargetInfo
+  instance
+    Struct.IsStruct SDL_GPUColorTargetInfo
+
+-- | The texture that will be used as a color target by a render pass.
+--
+--     [C declaration]: @texture@, defined at @SDL3\/SDL_gpu.h 2027:21@
 instance
   (ty ~ BG.Ptr SDL_GPUTexture)
   => BG.CompatHasField.HasField "texture" SDL_GPUColorTargetInfo ty
@@ -13239,6 +13906,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The mip level to use as a color target.
+--
+--     [C declaration]: @mip_level@, defined at @SDL3\/SDL_gpu.h 2028:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "mip_level" SDL_GPUColorTargetInfo ty
@@ -13277,6 +13947,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | The layer index or depth plane to use as a color target. This value is treated as a layer index on 2D array and cube textures, and as a depth plane on 3D textures.
+--
+--     [C declaration]: @layer_or_depth_plane@, defined at @SDL3\/SDL_gpu.h 2029:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "layer_or_depth_plane" SDL_GPUColorTargetInfo ty
@@ -13316,6 +13989,9 @@
 
   offset# = \_ -> \_ -> 12
 
+-- | The color to clear the color target to at the start of the render pass. Ignored if SDL_GPU_LOADOP_CLEAR is not used.
+--
+--     [C declaration]: @clear_color@, defined at @SDL3\/SDL_gpu.h 2030:16@
 instance
   (ty ~ SDL3.Sys.Bindgen.Pixels.SDL_FColor)
   => BG.CompatHasField.HasField "clear_color" SDL_GPUColorTargetInfo ty
@@ -13355,6 +14031,9 @@
 
   offset# = \_ -> \_ -> 16
 
+-- | What is done with the contents of the color target at the beginning of the render pass.
+--
+--     [C declaration]: @load_op@, defined at @SDL3\/SDL_gpu.h 2031:19@
 instance
   (ty ~ SDL_GPULoadOp)
   => BG.CompatHasField.HasField "load_op" SDL_GPUColorTargetInfo ty
@@ -13393,6 +14072,9 @@
 
   offset# = \_ -> \_ -> 32
 
+-- | What is done with the results of the render pass.
+--
+--     [C declaration]: @store_op@, defined at @SDL3\/SDL_gpu.h 2032:20@
 instance
   (ty ~ SDL_GPUStoreOp)
   => BG.CompatHasField.HasField "store_op" SDL_GPUColorTargetInfo ty
@@ -13431,6 +14113,9 @@
 
   offset# = \_ -> \_ -> 36
 
+-- | The texture that will receive the results of a multisample resolve operation. Ignored if a RESOLVE* store_op is not used.
+--
+--     [C declaration]: @resolve_texture@, defined at @SDL3\/SDL_gpu.h 2033:21@
 instance
   (ty ~ BG.Ptr SDL_GPUTexture)
   => BG.CompatHasField.HasField "resolve_texture" SDL_GPUColorTargetInfo ty
@@ -13470,6 +14155,9 @@
 
   offset# = \_ -> \_ -> 40
 
+-- | The mip level of the resolve texture to use for the resolve operation. Ignored if a RESOLVE* store_op is not used.
+--
+--     [C declaration]: @resolve_mip_level@, defined at @SDL3\/SDL_gpu.h 2034:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "resolve_mip_level" SDL_GPUColorTargetInfo ty
@@ -13509,6 +14197,9 @@
 
   offset# = \_ -> \_ -> 48
 
+-- | The layer index of the resolve texture to use for the resolve operation. Ignored if a RESOLVE* store_op is not used.
+--
+--     [C declaration]: @resolve_layer@, defined at @SDL3\/SDL_gpu.h 2035:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "resolve_layer" SDL_GPUColorTargetInfo ty
@@ -13548,6 +14239,9 @@
 
   offset# = \_ -> \_ -> 52
 
+-- | true cycles the texture if the texture is bound and load_op is not LOAD
+--
+--     [C declaration]: @cycle@, defined at @SDL3\/SDL_gpu.h 2036:10@
 instance
   (ty ~ BG.CBool)
   => BG.CompatHasField.HasField "cycle" SDL_GPUColorTargetInfo ty
@@ -13586,6 +14280,9 @@
 
   offset# = \_ -> \_ -> 56
 
+-- | true cycles the resolve texture if the resolve texture is bound. Ignored if a RESOLVE* store_op is not used.
+--
+--     [C declaration]: @cycle_resolve_texture@, defined at @SDL3\/SDL_gpu.h 2037:10@
 instance
   (ty ~ BG.CBool)
   => BG.CompatHasField.HasField "cycle_resolve_texture" SDL_GPUColorTargetInfo ty
@@ -13625,6 +14322,7 @@
 
   offset# = \_ -> \_ -> 57
 
+-- | [C declaration]: @padding1@, defined at @SDL3\/SDL_gpu.h 2038:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "padding1" SDL_GPUColorTargetInfo ty
@@ -13663,6 +14361,7 @@
 
   offset# = \_ -> \_ -> 58
 
+-- | [C declaration]: @padding2@, defined at @SDL3\/SDL_gpu.h 2039:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "padding2" SDL_GPUColorTargetInfo ty
@@ -13836,6 +14535,14 @@
   instance
     BG.Storable SDL_GPUDepthStencilTargetInfo
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GPUDepthStencilTargetInfo
+  instance
+    Struct.IsStruct SDL_GPUDepthStencilTargetInfo
+
+-- | The texture that will be used as the depth stencil target by the render pass.
+--
+--     [C declaration]: @texture@, defined at @SDL3\/SDL_gpu.h 2091:21@
 instance
   (ty ~ BG.Ptr SDL_GPUTexture)
   => BG.CompatHasField.HasField "texture" SDL_GPUDepthStencilTargetInfo ty
@@ -13871,6 +14578,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The value to clear the depth component to at the beginning of the render pass. Ignored if SDL_GPU_LOADOP_CLEAR is not used.
+--
+--     [C declaration]: @clear_depth@, defined at @SDL3\/SDL_gpu.h 2092:11@
 instance
   (ty ~ BG.CFloat)
   => BG.CompatHasField.HasField "clear_depth" SDL_GPUDepthStencilTargetInfo ty
@@ -13907,6 +14617,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | What is done with the depth contents at the beginning of the render pass.
+--
+--     [C declaration]: @load_op@, defined at @SDL3\/SDL_gpu.h 2093:19@
 instance
   (ty ~ SDL_GPULoadOp)
   => BG.CompatHasField.HasField "load_op" SDL_GPUDepthStencilTargetInfo ty
@@ -13942,6 +14655,9 @@
 
   offset# = \_ -> \_ -> 12
 
+-- | What is done with the depth results of the render pass.
+--
+--     [C declaration]: @store_op@, defined at @SDL3\/SDL_gpu.h 2094:20@
 instance
   (ty ~ SDL_GPUStoreOp)
   => BG.CompatHasField.HasField "store_op" SDL_GPUDepthStencilTargetInfo ty
@@ -13977,6 +14693,9 @@
 
   offset# = \_ -> \_ -> 16
 
+-- | What is done with the stencil contents at the beginning of the render pass.
+--
+--     [C declaration]: @stencil_load_op@, defined at @SDL3\/SDL_gpu.h 2095:19@
 instance
   (ty ~ SDL_GPULoadOp)
   => BG.CompatHasField.HasField "stencil_load_op" SDL_GPUDepthStencilTargetInfo ty
@@ -14013,6 +14732,9 @@
 
   offset# = \_ -> \_ -> 20
 
+-- | What is done with the stencil results of the render pass.
+--
+--     [C declaration]: @stencil_store_op@, defined at @SDL3\/SDL_gpu.h 2096:20@
 instance
   (ty ~ SDL_GPUStoreOp)
   => BG.CompatHasField.HasField "stencil_store_op" SDL_GPUDepthStencilTargetInfo ty
@@ -14049,6 +14771,9 @@
 
   offset# = \_ -> \_ -> 24
 
+-- | true cycles the texture if the texture is bound and any load ops are not LOAD
+--
+--     [C declaration]: @cycle@, defined at @SDL3\/SDL_gpu.h 2097:10@
 instance
   (ty ~ BG.CBool)
   => BG.CompatHasField.HasField "cycle" SDL_GPUDepthStencilTargetInfo ty
@@ -14084,6 +14809,9 @@
 
   offset# = \_ -> \_ -> 28
 
+-- | The value to clear the stencil component to at the beginning of the render pass. Ignored if SDL_GPU_LOADOP_CLEAR is not used.
+--
+--     [C declaration]: @clear_stencil@, defined at @SDL3\/SDL_gpu.h 2098:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "clear_stencil" SDL_GPUDepthStencilTargetInfo ty
@@ -14120,6 +14848,9 @@
 
   offset# = \_ -> \_ -> 29
 
+-- | The mip level to use as the depth stencil target.
+--
+--     [C declaration]: @mip_level@, defined at @SDL3\/SDL_gpu.h 2099:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "mip_level" SDL_GPUDepthStencilTargetInfo ty
@@ -14155,6 +14886,9 @@
 
   offset# = \_ -> \_ -> 30
 
+-- | The layer index to use as the depth stencil target.
+--
+--     [C declaration]: @layer@, defined at @SDL3\/SDL_gpu.h 2100:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "layer" SDL_GPUDepthStencilTargetInfo ty
@@ -14284,6 +15018,11 @@
 
 deriving via Marshal.EquivStorable SDL_GPUBlitInfo instance BG.Storable SDL_GPUBlitInfo
 
+deriving via Struct.IsStructViaReadRaw SDL_GPUBlitInfo instance Struct.IsStruct SDL_GPUBlitInfo
+
+-- | The source region for the blit.
+--
+--     [C declaration]: @source@, defined at @SDL3\/SDL_gpu.h 2116:23@
 instance
   (ty ~ SDL_GPUBlitRegion)
   => BG.CompatHasField.HasField "source" SDL_GPUBlitInfo ty
@@ -14319,6 +15058,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The destination region for the blit.
+--
+--     [C declaration]: @destination@, defined at @SDL3\/SDL_gpu.h 2117:23@
 instance
   (ty ~ SDL_GPUBlitRegion)
   => BG.CompatHasField.HasField "destination" SDL_GPUBlitInfo ty
@@ -14355,6 +15097,9 @@
 
   offset# = \_ -> \_ -> 32
 
+-- | What is done with the contents of the destination before the blit.
+--
+--     [C declaration]: @load_op@, defined at @SDL3\/SDL_gpu.h 2118:19@
 instance
   (ty ~ SDL_GPULoadOp)
   => BG.CompatHasField.HasField "load_op" SDL_GPUBlitInfo ty
@@ -14390,6 +15135,9 @@
 
   offset# = \_ -> \_ -> 64
 
+-- | The color to clear the destination region to before the blit. Ignored if load_op is not SDL_GPU_LOADOP_CLEAR.
+--
+--     [C declaration]: @clear_color@, defined at @SDL3\/SDL_gpu.h 2119:16@
 instance
   (ty ~ SDL3.Sys.Bindgen.Pixels.SDL_FColor)
   => BG.CompatHasField.HasField "clear_color" SDL_GPUBlitInfo ty
@@ -14426,6 +15174,9 @@
 
   offset# = \_ -> \_ -> 68
 
+-- | The flip mode for the source region.
+--
+--     [C declaration]: @flip_mode@, defined at @SDL3\/SDL_gpu.h 2120:18@
 instance
   (ty ~ SDL3.Sys.Bindgen.Surface.SDL_FlipMode)
   => BG.CompatHasField.HasField "flip_mode" SDL_GPUBlitInfo ty
@@ -14461,6 +15212,9 @@
 
   offset# = \_ -> \_ -> 84
 
+-- | The filter mode used when blitting.
+--
+--     [C declaration]: @filter@, defined at @SDL3\/SDL_gpu.h 2121:19@
 instance
   (ty ~ SDL_GPUFilter)
   => BG.CompatHasField.HasField "filter" SDL_GPUBlitInfo ty
@@ -14496,6 +15250,9 @@
 
   offset# = \_ -> \_ -> 88
 
+-- | true cycles the destination texture if it is already bound.
+--
+--     [C declaration]: @cycle@, defined at @SDL3\/SDL_gpu.h 2122:10@
 instance
   (ty ~ BG.CBool)
   => BG.CompatHasField.HasField "cycle" SDL_GPUBlitInfo ty
@@ -14529,6 +15286,7 @@
 
   offset# = \_ -> \_ -> 92
 
+-- | [C declaration]: @padding1@, defined at @SDL3\/SDL_gpu.h 2123:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "padding1" SDL_GPUBlitInfo ty
@@ -14564,6 +15322,7 @@
 
   offset# = \_ -> \_ -> 93
 
+-- | [C declaration]: @padding2@, defined at @SDL3\/SDL_gpu.h 2124:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "padding2" SDL_GPUBlitInfo ty
@@ -14599,6 +15358,7 @@
 
   offset# = \_ -> \_ -> 94
 
+-- | [C declaration]: @padding3@, defined at @SDL3\/SDL_gpu.h 2125:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "padding3" SDL_GPUBlitInfo ty
@@ -14676,6 +15436,14 @@
 
 deriving via Marshal.EquivStorable SDL_GPUBufferBinding instance BG.Storable SDL_GPUBufferBinding
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GPUBufferBinding
+  instance
+    Struct.IsStruct SDL_GPUBufferBinding
+
+-- | The buffer to bind. Must have been created with SDL_GPU_BUFFERUSAGE_VERTEX for SDL_BindGPUVertexBuffers, or SDL_GPU_BUFFERUSAGE_INDEX for SDL_BindGPUIndexBuffer.
+--
+--     [C declaration]: @buffer@, defined at @SDL3\/SDL_gpu.h 2140:20@
 instance
   (ty ~ BG.Ptr SDL_GPUBuffer)
   => BG.CompatHasField.HasField "buffer" SDL_GPUBufferBinding ty
@@ -14700,6 +15468,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The starting byte of the data to bind in the buffer.
+--
+--     [C declaration]: @offset@, defined at @SDL3\/SDL_gpu.h 2141:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "offset" SDL_GPUBufferBinding ty
@@ -14769,6 +15540,14 @@
   instance
     BG.Storable SDL_GPUTextureSamplerBinding
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GPUTextureSamplerBinding
+  instance
+    Struct.IsStruct SDL_GPUTextureSamplerBinding
+
+-- | The texture to bind. Must have been created with SDL_GPU_TEXTUREUSAGE_SAMPLER.
+--
+--     [C declaration]: @texture@, defined at @SDL3\/SDL_gpu.h 2156:21@
 instance
   (ty ~ BG.Ptr SDL_GPUTexture)
   => BG.CompatHasField.HasField "texture" SDL_GPUTextureSamplerBinding ty
@@ -14793,6 +15572,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The sampler to bind.
+--
+--     [C declaration]: @sampler@, defined at @SDL3\/SDL_gpu.h 2157:21@
 instance
   (ty ~ BG.Ptr SDL_GPUSampler)
   => BG.CompatHasField.HasField "sampler" SDL_GPUTextureSamplerBinding ty
@@ -14879,6 +15661,14 @@
   instance
     BG.Storable SDL_GPUStorageBufferReadWriteBinding
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GPUStorageBufferReadWriteBinding
+  instance
+    Struct.IsStruct SDL_GPUStorageBufferReadWriteBinding
+
+-- | The buffer to bind. Must have been created with SDL_GPU_BUFFERUSAGE_COMPUTE_STORAGE_WRITE.
+--
+--     [C declaration]: @buffer@, defined at @SDL3\/SDL_gpu.h 2170:20@
 instance
   (ty ~ BG.Ptr SDL_GPUBuffer)
   => BG.CompatHasField.HasField "buffer" SDL_GPUStorageBufferReadWriteBinding ty
@@ -14909,6 +15699,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | true cycles the buffer if it is already bound.
+--
+--     [C declaration]: @cycle@, defined at @SDL3\/SDL_gpu.h 2171:10@
 instance
   (ty ~ BG.CBool)
   => BG.CompatHasField.HasField "cycle" SDL_GPUStorageBufferReadWriteBinding ty
@@ -14939,6 +15732,7 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | [C declaration]: @padding1@, defined at @SDL3\/SDL_gpu.h 2172:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "padding1" SDL_GPUStorageBufferReadWriteBinding ty
@@ -14969,6 +15763,7 @@
 
   offset# = \_ -> \_ -> 9
 
+-- | [C declaration]: @padding2@, defined at @SDL3\/SDL_gpu.h 2173:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "padding2" SDL_GPUStorageBufferReadWriteBinding ty
@@ -14999,6 +15794,7 @@
 
   offset# = \_ -> \_ -> 10
 
+-- | [C declaration]: @padding3@, defined at @SDL3\/SDL_gpu.h 2174:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "padding3" SDL_GPUStorageBufferReadWriteBinding ty
@@ -15105,6 +15901,14 @@
   instance
     BG.Storable SDL_GPUStorageTextureReadWriteBinding
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GPUStorageTextureReadWriteBinding
+  instance
+    Struct.IsStruct SDL_GPUStorageTextureReadWriteBinding
+
+-- | The texture to bind. Must have been created with SDL_GPU_TEXTUREUSAGE_COMPUTE_STORAGE_WRITE or SDL_GPU_TEXTUREUSAGE_COMPUTE_STORAGE_SIMULTANEOUS_READ_WRITE.
+--
+--     [C declaration]: @texture@, defined at @SDL3\/SDL_gpu.h 2187:21@
 instance
   (ty ~ BG.Ptr SDL_GPUTexture)
   => BG.CompatHasField.HasField "texture" SDL_GPUStorageTextureReadWriteBinding ty
@@ -15137,6 +15941,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The mip level index to bind.
+--
+--     [C declaration]: @mip_level@, defined at @SDL3\/SDL_gpu.h 2188:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "mip_level" SDL_GPUStorageTextureReadWriteBinding ty
@@ -15169,6 +15976,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | The layer index to bind.
+--
+--     [C declaration]: @layer@, defined at @SDL3\/SDL_gpu.h 2189:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "layer" SDL_GPUStorageTextureReadWriteBinding ty
@@ -15201,6 +16011,9 @@
 
   offset# = \_ -> \_ -> 12
 
+-- | true cycles the texture if it is already bound.
+--
+--     [C declaration]: @cycle@, defined at @SDL3\/SDL_gpu.h 2190:10@
 instance
   (ty ~ BG.CBool)
   => BG.CompatHasField.HasField "cycle" SDL_GPUStorageTextureReadWriteBinding ty
@@ -15233,6 +16046,7 @@
 
   offset# = \_ -> \_ -> 16
 
+-- | [C declaration]: @padding1@, defined at @SDL3\/SDL_gpu.h 2191:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "padding1" SDL_GPUStorageTextureReadWriteBinding ty
@@ -15265,6 +16079,7 @@
 
   offset# = \_ -> \_ -> 17
 
+-- | [C declaration]: @padding2@, defined at @SDL3\/SDL_gpu.h 2192:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "padding2" SDL_GPUStorageTextureReadWriteBinding ty
@@ -15297,6 +16112,7 @@
 
   offset# = \_ -> \_ -> 18
 
+-- | [C declaration]: @padding3@, defined at @SDL3\/SDL_gpu.h 2193:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "padding3" SDL_GPUStorageTextureReadWriteBinding ty
@@ -16370,6 +17186,14 @@
 
 deriving via Marshal.EquivStorable SDL_GPUVulkanOptions instance BG.Storable SDL_GPUVulkanOptions
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GPUVulkanOptions
+  instance
+    Struct.IsStruct SDL_GPUVulkanOptions
+
+-- | The Vulkan API version to request for the instance. Use Vulkan\'s VK_MAKE_VERSION or VK_MAKE_API_VERSION.
+--
+--     [C declaration]: @vulkan_api_version@, defined at @SDL3\/SDL_gpu.h 2417:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "vulkan_api_version" SDL_GPUVulkanOptions ty
@@ -16403,6 +17227,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | Pointer to the first element of a chain of Vulkan feature structs. (Requires API version 1.1 or higher.)
+--
+--     [C declaration]: @feature_list@, defined at @SDL3\/SDL_gpu.h 2418:11@
 instance
   (ty ~ BG.Ptr BG.Void)
   => BG.CompatHasField.HasField "feature_list" SDL_GPUVulkanOptions ty
@@ -16436,6 +17263,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | Pointer to a VkPhysicalDeviceFeatures struct to enable additional Vulkan 1.0 features.
+--
+--     [C declaration]: @vulkan_10_physical_device_features@, defined at @SDL3\/SDL_gpu.h 2419:8@
 instance
   (ty ~ BG.Ptr BG.Void)
   => BG.CompatHasField.HasField "vulkan_10_physical_device_features" SDL_GPUVulkanOptions ty
@@ -16469,6 +17299,9 @@
 
   offset# = \_ -> \_ -> 16
 
+-- | Number of additional device extensions to require.
+--
+--     [C declaration]: @device_extension_count@, defined at @SDL3\/SDL_gpu.h 2420:9@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "device_extension_count" SDL_GPUVulkanOptions ty
@@ -16502,6 +17335,9 @@
 
   offset# = \_ -> \_ -> 24
 
+-- | Pointer to a list of additional device extensions to require.
+--
+--     [C declaration]: @device_extension_names@, defined at @SDL3\/SDL_gpu.h 2421:15@
 instance
   (ty ~ BG.Ptr (PtrConst.PtrConst BG.CChar))
   => BG.CompatHasField.HasField "device_extension_names" SDL_GPUVulkanOptions ty
@@ -16535,6 +17371,9 @@
 
   offset# = \_ -> \_ -> 32
 
+-- | Number of additional instance extensions to require.
+--
+--     [C declaration]: @instance_extension_count@, defined at @SDL3\/SDL_gpu.h 2422:9@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "instance_extension_count" SDL_GPUVulkanOptions ty
@@ -16568,6 +17407,9 @@
 
   offset# = \_ -> \_ -> 40
 
+-- | Pointer to a list of additional instance extensions to require.
+--
+--     [C declaration]: @instance_extension_names@, defined at @SDL3\/SDL_gpu.h 2423:15@
 instance
   (ty ~ BG.Ptr (PtrConst.PtrConst BG.CChar))
   => BG.CompatHasField.HasField "instance_extension_names" SDL_GPUVulkanOptions ty
diff --git a/src/SDL3/Sys/Bindgen/Gpu/FunPtr.hs b/src/SDL3/Sys/Bindgen/Gpu/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Gpu/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Gpu/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Gpu.FunPtr (
@@ -101,6 +103,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -113,7 +117,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_gpu.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_gpu.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_get_SDL_GPUSupportsShaderFormats */"
          , "__attribute__ ((const))"
          , "_Bool (*hs_bindgen_730746f3f6b80bd4 (void)) ("
@@ -1058,7 +1066,7 @@
 hs_bindgen_730746f3f6b80bd4
   :: IO (BG.FunPtr (SDL_GPUShaderFormat -> PtrConst.PtrConst BG.CChar -> IO BG.CBool))
 hs_bindgen_730746f3f6b80bd4 =
-  BG.fromFFIType hs_bindgen_730746f3f6b80bd4_base
+  fmap BG.fromFFIType hs_bindgen_730746f3f6b80bd4_base
 
 {-# NOINLINE sDL_GPUSupportsShaderFormats #-}
 
@@ -1089,7 +1097,7 @@
 hs_bindgen_df6bcb319e7313a0
   :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Properties.SDL_PropertiesID -> IO BG.CBool))
 hs_bindgen_df6bcb319e7313a0 =
-  BG.fromFFIType hs_bindgen_df6bcb319e7313a0_base
+  fmap BG.fromFFIType hs_bindgen_df6bcb319e7313a0_base
 
 {-# NOINLINE sDL_GPUSupportsProperties #-}
 
@@ -1120,7 +1128,7 @@
            (SDL_GPUShaderFormat -> BG.CBool -> PtrConst.PtrConst BG.CChar -> IO (BG.Ptr SDL_GPUDevice))
        )
 hs_bindgen_5a2c70cfbb51d0a5 =
-  BG.fromFFIType hs_bindgen_5a2c70cfbb51d0a5_base
+  fmap BG.fromFFIType hs_bindgen_5a2c70cfbb51d0a5_base
 
 {-# NOINLINE sDL_CreateGPUDevice #-}
 
@@ -1164,7 +1172,7 @@
 hs_bindgen_e9b4dabe0fdafe0a
   :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Properties.SDL_PropertiesID -> IO (BG.Ptr SDL_GPUDevice)))
 hs_bindgen_e9b4dabe0fdafe0a =
-  BG.fromFFIType hs_bindgen_e9b4dabe0fdafe0a_base
+  fmap BG.fromFFIType hs_bindgen_e9b4dabe0fdafe0a_base
 
 {-# NOINLINE sDL_CreateGPUDeviceWithProperties #-}
 
@@ -1242,7 +1250,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_get_SDL_DestroyGPUDevice@
 hs_bindgen_3d36d3936e535445 :: IO (BG.FunPtr (BG.Ptr SDL_GPUDevice -> IO ()))
 hs_bindgen_3d36d3936e535445 =
-  BG.fromFFIType hs_bindgen_3d36d3936e535445_base
+  fmap BG.fromFFIType hs_bindgen_3d36d3936e535445_base
 
 {-# NOINLINE sDL_DestroyGPUDevice #-}
 
@@ -1267,7 +1275,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_get_SDL_GetNumGPUDrivers@
 hs_bindgen_724c599cc9199701 :: IO (BG.FunPtr (IO BG.CInt))
 hs_bindgen_724c599cc9199701 =
-  BG.fromFFIType hs_bindgen_724c599cc9199701_base
+  fmap BG.fromFFIType hs_bindgen_724c599cc9199701_base
 
 {-# NOINLINE sDL_GetNumGPUDrivers #-}
 
@@ -1292,7 +1300,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_get_SDL_GetGPUDriver@
 hs_bindgen_878ed2fb40f693fc :: IO (BG.FunPtr (BG.CInt -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_878ed2fb40f693fc =
-  BG.fromFFIType hs_bindgen_878ed2fb40f693fc_base
+  fmap BG.fromFFIType hs_bindgen_878ed2fb40f693fc_base
 
 {-# NOINLINE sDL_GetGPUDriver #-}
 
@@ -1324,7 +1332,7 @@
 hs_bindgen_61e30ecd9dcd6a0d
   :: IO (BG.FunPtr (BG.Ptr SDL_GPUDevice -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_61e30ecd9dcd6a0d =
-  BG.fromFFIType hs_bindgen_61e30ecd9dcd6a0d_base
+  fmap BG.fromFFIType hs_bindgen_61e30ecd9dcd6a0d_base
 
 {-# NOINLINE sDL_GetGPUDeviceDriver #-}
 
@@ -1349,7 +1357,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_get_SDL_GetGPUShaderFormats@
 hs_bindgen_1588f64687b7a181 :: IO (BG.FunPtr (BG.Ptr SDL_GPUDevice -> IO SDL_GPUShaderFormat))
 hs_bindgen_1588f64687b7a181 =
-  BG.fromFFIType hs_bindgen_1588f64687b7a181_base
+  fmap BG.fromFFIType hs_bindgen_1588f64687b7a181_base
 
 {-# NOINLINE sDL_GetGPUShaderFormats #-}
 
@@ -1375,7 +1383,7 @@
 hs_bindgen_d9a18bd5c77f3076
   :: IO (BG.FunPtr (BG.Ptr SDL_GPUDevice -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID))
 hs_bindgen_d9a18bd5c77f3076 =
-  BG.fromFFIType hs_bindgen_d9a18bd5c77f3076_base
+  fmap BG.fromFFIType hs_bindgen_d9a18bd5c77f3076_base
 
 {-# NOINLINE sDL_GetGPUDeviceProperties #-}
 
@@ -1503,7 +1511,7 @@
            )
        )
 hs_bindgen_b4882831b991328b =
-  BG.fromFFIType hs_bindgen_b4882831b991328b_base
+  fmap BG.fromFFIType hs_bindgen_b4882831b991328b_base
 
 {-# NOINLINE sDL_CreateGPUComputePipeline #-}
 
@@ -1572,7 +1580,7 @@
            )
        )
 hs_bindgen_6b24737f0e188591 =
-  BG.fromFFIType hs_bindgen_6b24737f0e188591_base
+  fmap BG.fromFFIType hs_bindgen_6b24737f0e188591_base
 
 {-# NOINLINE sDL_CreateGPUGraphicsPipeline #-}
 
@@ -1614,7 +1622,7 @@
            (BG.Ptr SDL_GPUDevice -> PtrConst.PtrConst SDL_GPUSamplerCreateInfo -> IO (BG.Ptr SDL_GPUSampler))
        )
 hs_bindgen_d26b045cc9bb0074 =
-  BG.fromFFIType hs_bindgen_d26b045cc9bb0074_base
+  fmap BG.fromFFIType hs_bindgen_d26b045cc9bb0074_base
 
 {-# NOINLINE sDL_CreateGPUSampler #-}
 
@@ -1653,7 +1661,7 @@
            (BG.Ptr SDL_GPUDevice -> PtrConst.PtrConst SDL_GPUShaderCreateInfo -> IO (BG.Ptr SDL_GPUShader))
        )
 hs_bindgen_268ad47187462489 =
-  BG.fromFFIType hs_bindgen_268ad47187462489_base
+  fmap BG.fromFFIType hs_bindgen_268ad47187462489_base
 
 {-# NOINLINE sDL_CreateGPUShader #-}
 
@@ -1736,7 +1744,7 @@
            (BG.Ptr SDL_GPUDevice -> PtrConst.PtrConst SDL_GPUTextureCreateInfo -> IO (BG.Ptr SDL_GPUTexture))
        )
 hs_bindgen_8868d47614851449 =
-  BG.fromFFIType hs_bindgen_8868d47614851449_base
+  fmap BG.fromFFIType hs_bindgen_8868d47614851449_base
 
 {-# NOINLINE sDL_CreateGPUTexture #-}
 
@@ -1793,7 +1801,7 @@
            (BG.Ptr SDL_GPUDevice -> PtrConst.PtrConst SDL_GPUBufferCreateInfo -> IO (BG.Ptr SDL_GPUBuffer))
        )
 hs_bindgen_0e8ef224f7419576 =
-  BG.fromFFIType hs_bindgen_0e8ef224f7419576_base
+  fmap BG.fromFFIType hs_bindgen_0e8ef224f7419576_base
 
 {-# NOINLINE sDL_CreateGPUBuffer #-}
 
@@ -1841,7 +1849,7 @@
            )
        )
 hs_bindgen_d99ca9bfb892bc36 =
-  BG.fromFFIType hs_bindgen_d99ca9bfb892bc36_base
+  fmap BG.fromFFIType hs_bindgen_d99ca9bfb892bc36_base
 
 {-# NOINLINE sDL_CreateGPUTransferBuffer #-}
 
@@ -1882,7 +1890,7 @@
 hs_bindgen_ddb180594f35b8be
   :: IO (BG.FunPtr (BG.Ptr SDL_GPUDevice -> BG.Ptr SDL_GPUBuffer -> PtrConst.PtrConst BG.CChar -> IO ()))
 hs_bindgen_ddb180594f35b8be =
-  BG.fromFFIType hs_bindgen_ddb180594f35b8be_base
+  fmap BG.fromFFIType hs_bindgen_ddb180594f35b8be_base
 
 {-# NOINLINE sDL_SetGPUBufferName #-}
 
@@ -1918,7 +1926,7 @@
   :: IO
        (BG.FunPtr (BG.Ptr SDL_GPUDevice -> BG.Ptr SDL_GPUTexture -> PtrConst.PtrConst BG.CChar -> IO ()))
 hs_bindgen_8e9612fc267feeaa =
-  BG.fromFFIType hs_bindgen_8e9612fc267feeaa_base
+  fmap BG.fromFFIType hs_bindgen_8e9612fc267feeaa_base
 
 {-# NOINLINE sDL_SetGPUTextureName #-}
 
@@ -1953,7 +1961,7 @@
 hs_bindgen_53b6f5854610b06f
   :: IO (BG.FunPtr (BG.Ptr SDL_GPUCommandBuffer -> PtrConst.PtrConst BG.CChar -> IO ()))
 hs_bindgen_53b6f5854610b06f =
-  BG.fromFFIType hs_bindgen_53b6f5854610b06f_base
+  fmap BG.fromFFIType hs_bindgen_53b6f5854610b06f_base
 
 {-# NOINLINE sDL_InsertGPUDebugLabel #-}
 
@@ -1984,7 +1992,7 @@
 hs_bindgen_1ff675bf6c0d06d5
   :: IO (BG.FunPtr (BG.Ptr SDL_GPUCommandBuffer -> PtrConst.PtrConst BG.CChar -> IO ()))
 hs_bindgen_1ff675bf6c0d06d5 =
-  BG.fromFFIType hs_bindgen_1ff675bf6c0d06d5_base
+  fmap BG.fromFFIType hs_bindgen_1ff675bf6c0d06d5_base
 
 {-# NOINLINE sDL_PushGPUDebugGroup #-}
 
@@ -2020,7 +2028,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_get_SDL_PopGPUDebugGroup@
 hs_bindgen_a00c28c817c76943 :: IO (BG.FunPtr (BG.Ptr SDL_GPUCommandBuffer -> IO ()))
 hs_bindgen_a00c28c817c76943 =
-  BG.fromFFIType hs_bindgen_a00c28c817c76943_base
+  fmap BG.fromFFIType hs_bindgen_a00c28c817c76943_base
 
 {-# NOINLINE sDL_PopGPUDebugGroup #-}
 
@@ -2048,7 +2056,7 @@
 hs_bindgen_542853e6548e89bb
   :: IO (BG.FunPtr (BG.Ptr SDL_GPUDevice -> BG.Ptr SDL_GPUTexture -> IO ()))
 hs_bindgen_542853e6548e89bb =
-  BG.fromFFIType hs_bindgen_542853e6548e89bb_base
+  fmap BG.fromFFIType hs_bindgen_542853e6548e89bb_base
 
 {-# NOINLINE sDL_ReleaseGPUTexture #-}
 
@@ -2076,7 +2084,7 @@
 hs_bindgen_56055ccd136d71a1
   :: IO (BG.FunPtr (BG.Ptr SDL_GPUDevice -> BG.Ptr SDL_GPUSampler -> IO ()))
 hs_bindgen_56055ccd136d71a1 =
-  BG.fromFFIType hs_bindgen_56055ccd136d71a1_base
+  fmap BG.fromFFIType hs_bindgen_56055ccd136d71a1_base
 
 {-# NOINLINE sDL_ReleaseGPUSampler #-}
 
@@ -2104,7 +2112,7 @@
 hs_bindgen_f8bfa8ea14116360
   :: IO (BG.FunPtr (BG.Ptr SDL_GPUDevice -> BG.Ptr SDL_GPUBuffer -> IO ()))
 hs_bindgen_f8bfa8ea14116360 =
-  BG.fromFFIType hs_bindgen_f8bfa8ea14116360_base
+  fmap BG.fromFFIType hs_bindgen_f8bfa8ea14116360_base
 
 {-# NOINLINE sDL_ReleaseGPUBuffer #-}
 
@@ -2132,7 +2140,7 @@
 hs_bindgen_14c942c8fbf2f3dc
   :: IO (BG.FunPtr (BG.Ptr SDL_GPUDevice -> BG.Ptr SDL_GPUTransferBuffer -> IO ()))
 hs_bindgen_14c942c8fbf2f3dc =
-  BG.fromFFIType hs_bindgen_14c942c8fbf2f3dc_base
+  fmap BG.fromFFIType hs_bindgen_14c942c8fbf2f3dc_base
 
 {-# NOINLINE sDL_ReleaseGPUTransferBuffer #-}
 
@@ -2161,7 +2169,7 @@
 hs_bindgen_5f269731a3ef8faa
   :: IO (BG.FunPtr (BG.Ptr SDL_GPUDevice -> BG.Ptr SDL_GPUComputePipeline -> IO ()))
 hs_bindgen_5f269731a3ef8faa =
-  BG.fromFFIType hs_bindgen_5f269731a3ef8faa_base
+  fmap BG.fromFFIType hs_bindgen_5f269731a3ef8faa_base
 
 {-# NOINLINE sDL_ReleaseGPUComputePipeline #-}
 
@@ -2190,7 +2198,7 @@
 hs_bindgen_f3e9c0034d2a2db0
   :: IO (BG.FunPtr (BG.Ptr SDL_GPUDevice -> BG.Ptr SDL_GPUShader -> IO ()))
 hs_bindgen_f3e9c0034d2a2db0 =
-  BG.fromFFIType hs_bindgen_f3e9c0034d2a2db0_base
+  fmap BG.fromFFIType hs_bindgen_f3e9c0034d2a2db0_base
 
 {-# NOINLINE sDL_ReleaseGPUShader #-}
 
@@ -2218,7 +2226,7 @@
 hs_bindgen_29c94f86e013a8af
   :: IO (BG.FunPtr (BG.Ptr SDL_GPUDevice -> BG.Ptr SDL_GPUGraphicsPipeline -> IO ()))
 hs_bindgen_29c94f86e013a8af =
-  BG.fromFFIType hs_bindgen_29c94f86e013a8af_base
+  fmap BG.fromFFIType hs_bindgen_29c94f86e013a8af_base
 
 {-# NOINLINE sDL_ReleaseGPUGraphicsPipeline #-}
 
@@ -2247,7 +2255,7 @@
 hs_bindgen_d8255a52c3043feb
   :: IO (BG.FunPtr (BG.Ptr SDL_GPUDevice -> IO (BG.Ptr SDL_GPUCommandBuffer)))
 hs_bindgen_d8255a52c3043feb =
-  BG.fromFFIType hs_bindgen_d8255a52c3043feb_base
+  fmap BG.fromFFIType hs_bindgen_d8255a52c3043feb_base
 
 {-# NOINLINE sDL_AcquireGPUCommandBuffer #-}
 
@@ -2287,7 +2295,7 @@
            )
        )
 hs_bindgen_fd67ffdf6fb8985a =
-  BG.fromFFIType hs_bindgen_fd67ffdf6fb8985a_base
+  fmap BG.fromFFIType hs_bindgen_fd67ffdf6fb8985a_base
 
 {-# NOINLINE sDL_PushGPUVertexUniformData #-}
 
@@ -2338,7 +2346,7 @@
            )
        )
 hs_bindgen_fee6bedc8b88a7fb =
-  BG.fromFFIType hs_bindgen_fee6bedc8b88a7fb_base
+  fmap BG.fromFFIType hs_bindgen_fee6bedc8b88a7fb_base
 
 {-# NOINLINE sDL_PushGPUFragmentUniformData #-}
 
@@ -2387,7 +2395,7 @@
            )
        )
 hs_bindgen_f0981542878473d3 =
-  BG.fromFFIType hs_bindgen_f0981542878473d3_base
+  fmap BG.fromFFIType hs_bindgen_f0981542878473d3_base
 
 {-# NOINLINE sDL_PushGPUComputeUniformData #-}
 
@@ -2436,7 +2444,7 @@
            )
        )
 hs_bindgen_154c2af06893d306 =
-  BG.fromFFIType hs_bindgen_154c2af06893d306_base
+  fmap BG.fromFFIType hs_bindgen_154c2af06893d306_base
 
 {-# NOINLINE sDL_BeginGPURenderPass #-}
 
@@ -2481,7 +2489,7 @@
 hs_bindgen_f8d4e69cba96f49a
   :: IO (BG.FunPtr (BG.Ptr SDL_GPURenderPass -> BG.Ptr SDL_GPUGraphicsPipeline -> IO ()))
 hs_bindgen_f8d4e69cba96f49a =
-  BG.fromFFIType hs_bindgen_f8d4e69cba96f49a_base
+  fmap BG.fromFFIType hs_bindgen_f8d4e69cba96f49a_base
 
 {-# NOINLINE sDL_BindGPUGraphicsPipeline #-}
 
@@ -2510,7 +2518,7 @@
 hs_bindgen_ef13d72a5a37e0cd
   :: IO (BG.FunPtr (BG.Ptr SDL_GPURenderPass -> PtrConst.PtrConst SDL_GPUViewport -> IO ()))
 hs_bindgen_ef13d72a5a37e0cd =
-  BG.fromFFIType hs_bindgen_ef13d72a5a37e0cd_base
+  fmap BG.fromFFIType hs_bindgen_ef13d72a5a37e0cd_base
 
 {-# NOINLINE sDL_SetGPUViewport #-}
 
@@ -2538,7 +2546,7 @@
   :: IO
        (BG.FunPtr (BG.Ptr SDL_GPURenderPass -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect -> IO ()))
 hs_bindgen_15e571926b2f0a64 =
-  BG.fromFFIType hs_bindgen_15e571926b2f0a64_base
+  fmap BG.fromFFIType hs_bindgen_15e571926b2f0a64_base
 
 {-# NOINLINE sDL_SetGPUScissor #-}
 
@@ -2565,7 +2573,7 @@
 hs_bindgen_82c20e8c6db3156f
   :: IO (BG.FunPtr (BG.Ptr SDL_GPURenderPass -> SDL3.Sys.Bindgen.Pixels.SDL_FColor -> IO ()))
 hs_bindgen_82c20e8c6db3156f =
-  BG.fromFFIType hs_bindgen_82c20e8c6db3156f_base
+  fmap BG.fromFFIType hs_bindgen_82c20e8c6db3156f_base
 
 {-# NOINLINE sDL_SetGPUBlendConstants #-}
 
@@ -2594,7 +2602,7 @@
 hs_bindgen_80029d033dcd3cde
   :: IO (BG.FunPtr (BG.Ptr SDL_GPURenderPass -> SDL3.Sys.Bindgen.Stdinc.Uint8 -> IO ()))
 hs_bindgen_80029d033dcd3cde =
-  BG.fromFFIType hs_bindgen_80029d033dcd3cde_base
+  fmap BG.fromFFIType hs_bindgen_80029d033dcd3cde_base
 
 {-# NOINLINE sDL_SetGPUStencilReference #-}
 
@@ -2629,7 +2637,7 @@
            )
        )
 hs_bindgen_688e80f65b7efc4b =
-  BG.fromFFIType hs_bindgen_688e80f65b7efc4b_base
+  fmap BG.fromFFIType hs_bindgen_688e80f65b7efc4b_base
 
 {-# NOINLINE sDL_BindGPUVertexBuffers #-}
 
@@ -2673,7 +2681,7 @@
            )
        )
 hs_bindgen_bea706d6a8ba9b69 =
-  BG.fromFFIType hs_bindgen_bea706d6a8ba9b69_base
+  fmap BG.fromFFIType hs_bindgen_bea706d6a8ba9b69_base
 
 {-# NOINLINE sDL_BindGPUIndexBuffer #-}
 
@@ -2715,7 +2723,7 @@
            )
        )
 hs_bindgen_aaec001b714f4f20 =
-  BG.fromFFIType hs_bindgen_aaec001b714f4f20_base
+  fmap BG.fromFFIType hs_bindgen_aaec001b714f4f20_base
 
 {-# NOINLINE sDL_BindGPUVertexSamplers #-}
 
@@ -2723,6 +2731,8 @@
 --
 --     The textures must have been created with SDL_GPU_TEXTUREUSAGE_SAMPLER.
 --
+--     The textures being bound must have a matching type declared in the shader (2D, 3D, etc.). Multisample textures are not allowed.
+--
 --     Be sure your shader is set up according to the requirements documented in @SDL_CreateGPUShader()@.
 --
 --     [@render_pass@]: a render pass handle.
@@ -2737,7 +2747,7 @@
 --
 --     [See also]: 'sDL_CreateGPUShader'
 --
---     [C declaration]: @SDL_BindGPUVertexSamplers@, defined at @SDL3\/SDL_gpu.h 3408:34@
+--     [C declaration]: @SDL_BindGPUVertexSamplers@, defined at @SDL3\/SDL_gpu.h 3411:34@
 sDL_BindGPUVertexSamplers
   :: BG.FunPtr
        ( BG.Ptr SDL_GPURenderPass
@@ -2766,7 +2776,7 @@
            )
        )
 hs_bindgen_f3926e087d94d216 =
-  BG.fromFFIType hs_bindgen_f3926e087d94d216_base
+  fmap BG.fromFFIType hs_bindgen_f3926e087d94d216_base
 
 {-# NOINLINE sDL_BindGPUVertexStorageTextures #-}
 
@@ -2774,6 +2784,8 @@
 --
 --     These textures must have been created with SDL_GPU_TEXTUREUSAGE_GRAPHICS_STORAGE_READ.
 --
+--     The textures being bound must have a matching type declared in the shader (2D, 3D, 2DMS, etc.)
+--
 --     Be sure your shader is set up according to the requirements documented in @SDL_CreateGPUShader()@.
 --
 --     [@render_pass@]: a render pass handle.
@@ -2788,7 +2800,7 @@
 --
 --     [See also]: 'sDL_CreateGPUShader'
 --
---     [C declaration]: @SDL_BindGPUVertexStorageTextures@, defined at @SDL3\/SDL_gpu.h 3432:34@
+--     [C declaration]: @SDL_BindGPUVertexStorageTextures@, defined at @SDL3\/SDL_gpu.h 3438:34@
 sDL_BindGPUVertexStorageTextures
   :: BG.FunPtr
        ( BG.Ptr SDL_GPURenderPass
@@ -2817,7 +2829,7 @@
            )
        )
 hs_bindgen_0441f25c46dc0237 =
-  BG.fromFFIType hs_bindgen_0441f25c46dc0237_base
+  fmap BG.fromFFIType hs_bindgen_0441f25c46dc0237_base
 
 {-# NOINLINE sDL_BindGPUVertexStorageBuffers #-}
 
@@ -2839,7 +2851,7 @@
 --
 --     [See also]: 'sDL_CreateGPUShader'
 --
---     [C declaration]: @SDL_BindGPUVertexStorageBuffers@, defined at @SDL3\/SDL_gpu.h 3456:34@
+--     [C declaration]: @SDL_BindGPUVertexStorageBuffers@, defined at @SDL3\/SDL_gpu.h 3462:34@
 sDL_BindGPUVertexStorageBuffers
   :: BG.FunPtr
        ( BG.Ptr SDL_GPURenderPass
@@ -2868,7 +2880,7 @@
            )
        )
 hs_bindgen_31e74f680706f272 =
-  BG.fromFFIType hs_bindgen_31e74f680706f272_base
+  fmap BG.fromFFIType hs_bindgen_31e74f680706f272_base
 
 {-# NOINLINE sDL_BindGPUFragmentSamplers #-}
 
@@ -2876,6 +2888,8 @@
 --
 --     The textures must have been created with SDL_GPU_TEXTUREUSAGE_SAMPLER.
 --
+--     The textures being bound must have a matching type declared in the shader (2D, 3D, etc.). Multisample textures are not allowed.
+--
 --     Be sure your shader is set up according to the requirements documented in @SDL_CreateGPUShader()@.
 --
 --     [@render_pass@]: a render pass handle.
@@ -2890,7 +2904,7 @@
 --
 --     [See also]: 'sDL_CreateGPUShader'
 --
---     [C declaration]: @SDL_BindGPUFragmentSamplers@, defined at @SDL3\/SDL_gpu.h 3481:34@
+--     [C declaration]: @SDL_BindGPUFragmentSamplers@, defined at @SDL3\/SDL_gpu.h 3490:34@
 sDL_BindGPUFragmentSamplers
   :: BG.FunPtr
        ( BG.Ptr SDL_GPURenderPass
@@ -2919,7 +2933,7 @@
            )
        )
 hs_bindgen_891de4ebe4443cb5 =
-  BG.fromFFIType hs_bindgen_891de4ebe4443cb5_base
+  fmap BG.fromFFIType hs_bindgen_891de4ebe4443cb5_base
 
 {-# NOINLINE sDL_BindGPUFragmentStorageTextures #-}
 
@@ -2927,6 +2941,8 @@
 --
 --     These textures must have been created with SDL_GPU_TEXTUREUSAGE_GRAPHICS_STORAGE_READ.
 --
+--     The textures being bound must have a matching type declared in the shader (2D, 3D, 2DMS, etc.)
+--
 --     Be sure your shader is set up according to the requirements documented in @SDL_CreateGPUShader()@.
 --
 --     [@render_pass@]: a render pass handle.
@@ -2941,7 +2957,7 @@
 --
 --     [See also]: 'sDL_CreateGPUShader'
 --
---     [C declaration]: @SDL_BindGPUFragmentStorageTextures@, defined at @SDL3\/SDL_gpu.h 3505:34@
+--     [C declaration]: @SDL_BindGPUFragmentStorageTextures@, defined at @SDL3\/SDL_gpu.h 3517:34@
 sDL_BindGPUFragmentStorageTextures
   :: BG.FunPtr
        ( BG.Ptr SDL_GPURenderPass
@@ -2970,7 +2986,7 @@
            )
        )
 hs_bindgen_f0f46723815c3df1 =
-  BG.fromFFIType hs_bindgen_f0f46723815c3df1_base
+  fmap BG.fromFFIType hs_bindgen_f0f46723815c3df1_base
 
 {-# NOINLINE sDL_BindGPUFragmentStorageBuffers #-}
 
@@ -2992,7 +3008,7 @@
 --
 --     [See also]: 'sDL_CreateGPUShader'
 --
---     [C declaration]: @SDL_BindGPUFragmentStorageBuffers@, defined at @SDL3\/SDL_gpu.h 3529:34@
+--     [C declaration]: @SDL_BindGPUFragmentStorageBuffers@, defined at @SDL3\/SDL_gpu.h 3541:34@
 sDL_BindGPUFragmentStorageBuffers
   :: BG.FunPtr
        ( BG.Ptr SDL_GPURenderPass
@@ -3023,7 +3039,7 @@
            )
        )
 hs_bindgen_534a1c06f3f9ed05 =
-  BG.fromFFIType hs_bindgen_534a1c06f3f9ed05_base
+  fmap BG.fromFFIType hs_bindgen_534a1c06f3f9ed05_base
 
 {-# NOINLINE sDL_DrawGPUIndexedPrimitives #-}
 
@@ -3047,7 +3063,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_DrawGPUIndexedPrimitives@, defined at @SDL3\/SDL_gpu.h 3560:34@
+--     [C declaration]: @SDL_DrawGPUIndexedPrimitives@, defined at @SDL3\/SDL_gpu.h 3572:34@
 sDL_DrawGPUIndexedPrimitives
   :: BG.FunPtr
        ( BG.Ptr SDL_GPURenderPass
@@ -3079,7 +3095,7 @@
            )
        )
 hs_bindgen_b37844ed8f8b5582 =
-  BG.fromFFIType hs_bindgen_b37844ed8f8b5582_base
+  fmap BG.fromFFIType hs_bindgen_b37844ed8f8b5582_base
 
 {-# NOINLINE sDL_DrawGPUPrimitives #-}
 
@@ -3101,7 +3117,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_DrawGPUPrimitives@, defined at @SDL3\/SDL_gpu.h 3588:34@
+--     [C declaration]: @SDL_DrawGPUPrimitives@, defined at @SDL3\/SDL_gpu.h 3600:34@
 sDL_DrawGPUPrimitives
   :: BG.FunPtr
        ( BG.Ptr SDL_GPURenderPass
@@ -3131,7 +3147,7 @@
            )
        )
 hs_bindgen_420bc7bd5da8d431 =
-  BG.fromFFIType hs_bindgen_420bc7bd5da8d431_base
+  fmap BG.fromFFIType hs_bindgen_420bc7bd5da8d431_base
 
 {-# NOINLINE sDL_DrawGPUPrimitivesIndirect #-}
 
@@ -3149,7 +3165,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_DrawGPUPrimitivesIndirect@, defined at @SDL3\/SDL_gpu.h 3611:34@
+--     [C declaration]: @SDL_DrawGPUPrimitivesIndirect@, defined at @SDL3\/SDL_gpu.h 3623:34@
 sDL_DrawGPUPrimitivesIndirect
   :: BG.FunPtr
        ( BG.Ptr SDL_GPURenderPass
@@ -3178,7 +3194,7 @@
            )
        )
 hs_bindgen_8f8e2fe5f315620c =
-  BG.fromFFIType hs_bindgen_8f8e2fe5f315620c_base
+  fmap BG.fromFFIType hs_bindgen_8f8e2fe5f315620c_base
 
 {-# NOINLINE sDL_DrawGPUIndexedPrimitivesIndirect #-}
 
@@ -3196,7 +3212,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_DrawGPUIndexedPrimitivesIndirect@, defined at @SDL3\/SDL_gpu.h 3633:34@
+--     [C declaration]: @SDL_DrawGPUIndexedPrimitivesIndirect@, defined at @SDL3\/SDL_gpu.h 3645:34@
 sDL_DrawGPUIndexedPrimitivesIndirect
   :: BG.FunPtr
        ( BG.Ptr SDL_GPURenderPass
@@ -3216,7 +3232,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_get_SDL_EndGPURenderPass@
 hs_bindgen_d2969701500cfc55 :: IO (BG.FunPtr (BG.Ptr SDL_GPURenderPass -> IO ()))
 hs_bindgen_d2969701500cfc55 =
-  BG.fromFFIType hs_bindgen_d2969701500cfc55_base
+  fmap BG.fromFFIType hs_bindgen_d2969701500cfc55_base
 
 {-# NOINLINE sDL_EndGPURenderPass #-}
 
@@ -3228,7 +3244,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_EndGPURenderPass@, defined at @SDL3\/SDL_gpu.h 3649:34@
+--     [C declaration]: @SDL_EndGPURenderPass@, defined at @SDL3\/SDL_gpu.h 3661:34@
 sDL_EndGPURenderPass :: BG.FunPtr (BG.Ptr SDL_GPURenderPass -> IO ())
 sDL_EndGPURenderPass =
   BG.unsafePerformIO hs_bindgen_d2969701500cfc55
@@ -3251,7 +3267,7 @@
            )
        )
 hs_bindgen_774d008d25b51181 =
-  BG.fromFFIType hs_bindgen_774d008d25b51181_base
+  fmap BG.fromFFIType hs_bindgen_774d008d25b51181_base
 
 {-# NOINLINE sDL_BeginGPUComputePass #-}
 
@@ -3277,7 +3293,7 @@
 --
 --     [See also]: 'sDL_EndGPUComputePass'
 --
---     [C declaration]: @SDL_BeginGPUComputePass@, defined at @SDL3\/SDL_gpu.h 3691:50@
+--     [C declaration]: @SDL_BeginGPUComputePass@, defined at @SDL3\/SDL_gpu.h 3703:50@
 sDL_BeginGPUComputePass
   :: BG.FunPtr
        ( BG.Ptr SDL_GPUCommandBuffer
@@ -3299,7 +3315,7 @@
 hs_bindgen_4ad31c9180a8f4c7
   :: IO (BG.FunPtr (BG.Ptr SDL_GPUComputePass -> BG.Ptr SDL_GPUComputePipeline -> IO ()))
 hs_bindgen_4ad31c9180a8f4c7 =
-  BG.fromFFIType hs_bindgen_4ad31c9180a8f4c7_base
+  fmap BG.fromFFIType hs_bindgen_4ad31c9180a8f4c7_base
 
 {-# NOINLINE sDL_BindGPUComputePipeline #-}
 
@@ -3311,7 +3327,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_BindGPUComputePipeline@, defined at @SDL3\/SDL_gpu.h 3706:34@
+--     [C declaration]: @SDL_BindGPUComputePipeline@, defined at @SDL3\/SDL_gpu.h 3718:34@
 sDL_BindGPUComputePipeline
   :: BG.FunPtr (BG.Ptr SDL_GPUComputePass -> BG.Ptr SDL_GPUComputePipeline -> IO ())
 sDL_BindGPUComputePipeline =
@@ -3334,7 +3350,7 @@
            )
        )
 hs_bindgen_29656bc1e0885584 =
-  BG.fromFFIType hs_bindgen_29656bc1e0885584_base
+  fmap BG.fromFFIType hs_bindgen_29656bc1e0885584_base
 
 {-# NOINLINE sDL_BindGPUComputeSamplers #-}
 
@@ -3342,6 +3358,8 @@
 --
 --     The textures must have been created with SDL_GPU_TEXTUREUSAGE_SAMPLER.
 --
+--     The textures being bound must have a matching type declared in the shader (2D, 3D, etc.). Multisample textures are not allowed.
+--
 --     Be sure your shader is set up according to the requirements documented in @SDL_CreateGPUComputePipeline()@.
 --
 --     [@compute_pass@]: a compute pass handle.
@@ -3356,7 +3374,7 @@
 --
 --     [See also]: 'sDL_CreateGPUComputePipeline'
 --
---     [C declaration]: @SDL_BindGPUComputeSamplers@, defined at @SDL3\/SDL_gpu.h 3729:34@
+--     [C declaration]: @SDL_BindGPUComputeSamplers@, defined at @SDL3\/SDL_gpu.h 3744:34@
 sDL_BindGPUComputeSamplers
   :: BG.FunPtr
        ( BG.Ptr SDL_GPUComputePass
@@ -3385,7 +3403,7 @@
            )
        )
 hs_bindgen_01575e615d9f9179 =
-  BG.fromFFIType hs_bindgen_01575e615d9f9179_base
+  fmap BG.fromFFIType hs_bindgen_01575e615d9f9179_base
 
 {-# NOINLINE sDL_BindGPUComputeStorageTextures #-}
 
@@ -3393,6 +3411,8 @@
 --
 --     These textures must have been created with SDL_GPU_TEXTUREUSAGE_COMPUTE_STORAGE_READ.
 --
+--     The textures being bound must have a matching type declared in the shader (2D, 3D, 2DMS, etc.)
+--
 --     Be sure your shader is set up according to the requirements documented in @SDL_CreateGPUComputePipeline()@.
 --
 --     [@compute_pass@]: a compute pass handle.
@@ -3407,7 +3427,7 @@
 --
 --     [See also]: 'sDL_CreateGPUComputePipeline'
 --
---     [C declaration]: @SDL_BindGPUComputeStorageTextures@, defined at @SDL3\/SDL_gpu.h 3753:34@
+--     [C declaration]: @SDL_BindGPUComputeStorageTextures@, defined at @SDL3\/SDL_gpu.h 3771:34@
 sDL_BindGPUComputeStorageTextures
   :: BG.FunPtr
        ( BG.Ptr SDL_GPUComputePass
@@ -3436,7 +3456,7 @@
            )
        )
 hs_bindgen_589adbdedcb7e5de =
-  BG.fromFFIType hs_bindgen_589adbdedcb7e5de_base
+  fmap BG.fromFFIType hs_bindgen_589adbdedcb7e5de_base
 
 {-# NOINLINE sDL_BindGPUComputeStorageBuffers #-}
 
@@ -3458,7 +3478,7 @@
 --
 --     [See also]: 'sDL_CreateGPUComputePipeline'
 --
---     [C declaration]: @SDL_BindGPUComputeStorageBuffers@, defined at @SDL3\/SDL_gpu.h 3777:34@
+--     [C declaration]: @SDL_BindGPUComputeStorageBuffers@, defined at @SDL3\/SDL_gpu.h 3795:34@
 sDL_BindGPUComputeStorageBuffers
   :: BG.FunPtr
        ( BG.Ptr SDL_GPUComputePass
@@ -3487,7 +3507,7 @@
            )
        )
 hs_bindgen_050145c7c0eda2a0 =
-  BG.fromFFIType hs_bindgen_050145c7c0eda2a0_base
+  fmap BG.fromFFIType hs_bindgen_050145c7c0eda2a0_base
 
 {-# NOINLINE sDL_DispatchGPUCompute #-}
 
@@ -3507,7 +3527,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_DispatchGPUCompute@, defined at @SDL3\/SDL_gpu.h 3803:34@
+--     [C declaration]: @SDL_DispatchGPUCompute@, defined at @SDL3\/SDL_gpu.h 3821:34@
 sDL_DispatchGPUCompute
   :: BG.FunPtr
        ( BG.Ptr SDL_GPUComputePass
@@ -3531,7 +3551,7 @@
            (BG.Ptr SDL_GPUComputePass -> BG.Ptr SDL_GPUBuffer -> SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO ())
        )
 hs_bindgen_6eed39e21086610c =
-  BG.fromFFIType hs_bindgen_6eed39e21086610c_base
+  fmap BG.fromFFIType hs_bindgen_6eed39e21086610c_base
 
 {-# NOINLINE sDL_DispatchGPUComputeIndirect #-}
 
@@ -3549,7 +3569,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_DispatchGPUComputeIndirect@, defined at @SDL3\/SDL_gpu.h 3827:34@
+--     [C declaration]: @SDL_DispatchGPUComputeIndirect@, defined at @SDL3\/SDL_gpu.h 3845:34@
 sDL_DispatchGPUComputeIndirect
   :: BG.FunPtr
        (BG.Ptr SDL_GPUComputePass -> BG.Ptr SDL_GPUBuffer -> SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO ())
@@ -3564,7 +3584,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_get_SDL_EndGPUComputePass@
 hs_bindgen_3d69c010dbe2273d :: IO (BG.FunPtr (BG.Ptr SDL_GPUComputePass -> IO ()))
 hs_bindgen_3d69c010dbe2273d =
-  BG.fromFFIType hs_bindgen_3d69c010dbe2273d_base
+  fmap BG.fromFFIType hs_bindgen_3d69c010dbe2273d_base
 
 {-# NOINLINE sDL_EndGPUComputePass #-}
 
@@ -3576,7 +3596,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_EndGPUComputePass@, defined at @SDL3\/SDL_gpu.h 3842:34@
+--     [C declaration]: @SDL_EndGPUComputePass@, defined at @SDL3\/SDL_gpu.h 3860:34@
 sDL_EndGPUComputePass :: BG.FunPtr (BG.Ptr SDL_GPUComputePass -> IO ())
 sDL_EndGPUComputePass =
   BG.unsafePerformIO hs_bindgen_3d69c010dbe2273d
@@ -3591,7 +3611,7 @@
   :: IO
        (BG.FunPtr (BG.Ptr SDL_GPUDevice -> BG.Ptr SDL_GPUTransferBuffer -> BG.CBool -> IO (BG.Ptr BG.Void)))
 hs_bindgen_683b5935cd3f5940 =
-  BG.fromFFIType hs_bindgen_683b5935cd3f5940_base
+  fmap BG.fromFFIType hs_bindgen_683b5935cd3f5940_base
 
 {-# NOINLINE sDL_MapGPUTransferBuffer #-}
 
@@ -3609,7 +3629,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_MapGPUTransferBuffer@, defined at @SDL3\/SDL_gpu.h 3862:36@
+--     [C declaration]: @SDL_MapGPUTransferBuffer@, defined at @SDL3\/SDL_gpu.h 3880:36@
 sDL_MapGPUTransferBuffer
   :: BG.FunPtr (BG.Ptr SDL_GPUDevice -> BG.Ptr SDL_GPUTransferBuffer -> BG.CBool -> IO (BG.Ptr BG.Void))
 sDL_MapGPUTransferBuffer =
@@ -3624,7 +3644,7 @@
 hs_bindgen_e33fd3a1127b2473
   :: IO (BG.FunPtr (BG.Ptr SDL_GPUDevice -> BG.Ptr SDL_GPUTransferBuffer -> IO ()))
 hs_bindgen_e33fd3a1127b2473 =
-  BG.fromFFIType hs_bindgen_e33fd3a1127b2473_base
+  fmap BG.fromFFIType hs_bindgen_e33fd3a1127b2473_base
 
 {-# NOINLINE sDL_UnmapGPUTransferBuffer #-}
 
@@ -3636,7 +3656,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_UnmapGPUTransferBuffer@, defined at @SDL3\/SDL_gpu.h 3875:34@
+--     [C declaration]: @SDL_UnmapGPUTransferBuffer@, defined at @SDL3\/SDL_gpu.h 3893:34@
 sDL_UnmapGPUTransferBuffer
   :: BG.FunPtr (BG.Ptr SDL_GPUDevice -> BG.Ptr SDL_GPUTransferBuffer -> IO ())
 sDL_UnmapGPUTransferBuffer =
@@ -3651,7 +3671,7 @@
 hs_bindgen_26ebd2bad4c071ad
   :: IO (BG.FunPtr (BG.Ptr SDL_GPUCommandBuffer -> IO (BG.Ptr SDL_GPUCopyPass)))
 hs_bindgen_26ebd2bad4c071ad =
-  BG.fromFFIType hs_bindgen_26ebd2bad4c071ad_base
+  fmap BG.fromFFIType hs_bindgen_26ebd2bad4c071ad_base
 
 {-# NOINLINE sDL_BeginGPUCopyPass #-}
 
@@ -3667,7 +3687,7 @@
 --
 --     [See also]: 'sDL_EndGPUCopyPass'
 --
---     [C declaration]: @SDL_BeginGPUCopyPass@, defined at @SDL3\/SDL_gpu.h 3895:47@
+--     [C declaration]: @SDL_BeginGPUCopyPass@, defined at @SDL3\/SDL_gpu.h 3913:47@
 sDL_BeginGPUCopyPass :: BG.FunPtr (BG.Ptr SDL_GPUCommandBuffer -> IO (BG.Ptr SDL_GPUCopyPass))
 sDL_BeginGPUCopyPass =
   BG.unsafePerformIO hs_bindgen_26ebd2bad4c071ad
@@ -3689,7 +3709,7 @@
            )
        )
 hs_bindgen_ab0f032d9686e81d =
-  BG.fromFFIType hs_bindgen_ab0f032d9686e81d_base
+  fmap BG.fromFFIType hs_bindgen_ab0f032d9686e81d_base
 
 {-# NOINLINE sDL_UploadToGPUTexture #-}
 
@@ -3709,7 +3729,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_UploadToGPUTexture@, defined at @SDL3\/SDL_gpu.h 3915:34@
+--     [C declaration]: @SDL_UploadToGPUTexture@, defined at @SDL3\/SDL_gpu.h 3933:34@
 sDL_UploadToGPUTexture
   :: BG.FunPtr
        ( BG.Ptr SDL_GPUCopyPass
@@ -3738,7 +3758,7 @@
            )
        )
 hs_bindgen_d5ff839503d8766f =
-  BG.fromFFIType hs_bindgen_d5ff839503d8766f_base
+  fmap BG.fromFFIType hs_bindgen_d5ff839503d8766f_base
 
 {-# NOINLINE sDL_UploadToGPUBuffer #-}
 
@@ -3756,7 +3776,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_UploadToGPUBuffer@, defined at @SDL3\/SDL_gpu.h 3935:34@
+--     [C declaration]: @SDL_UploadToGPUBuffer@, defined at @SDL3\/SDL_gpu.h 3953:34@
 sDL_UploadToGPUBuffer
   :: BG.FunPtr
        ( BG.Ptr SDL_GPUCopyPass
@@ -3788,7 +3808,7 @@
            )
        )
 hs_bindgen_1cd400910067ddd5 =
-  BG.fromFFIType hs_bindgen_1cd400910067ddd5_base
+  fmap BG.fromFFIType hs_bindgen_1cd400910067ddd5_base
 
 {-# NOINLINE sDL_CopyGPUTextureToTexture #-}
 
@@ -3814,7 +3834,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_CopyGPUTextureToTexture@, defined at @SDL3\/SDL_gpu.h 3962:34@
+--     [C declaration]: @SDL_CopyGPUTextureToTexture@, defined at @SDL3\/SDL_gpu.h 3980:34@
 sDL_CopyGPUTextureToTexture
   :: BG.FunPtr
        ( BG.Ptr SDL_GPUCopyPass
@@ -3847,7 +3867,7 @@
            )
        )
 hs_bindgen_f1c8dff3576eacd7 =
-  BG.fromFFIType hs_bindgen_f1c8dff3576eacd7_base
+  fmap BG.fromFFIType hs_bindgen_f1c8dff3576eacd7_base
 
 {-# NOINLINE sDL_CopyGPUBufferToBuffer #-}
 
@@ -3867,7 +3887,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_CopyGPUBufferToBuffer@, defined at @SDL3\/SDL_gpu.h 3986:34@
+--     [C declaration]: @SDL_CopyGPUBufferToBuffer@, defined at @SDL3\/SDL_gpu.h 4004:34@
 sDL_CopyGPUBufferToBuffer
   :: BG.FunPtr
        ( BG.Ptr SDL_GPUCopyPass
@@ -3896,7 +3916,7 @@
            )
        )
 hs_bindgen_de2075aa3b528189 =
-  BG.fromFFIType hs_bindgen_de2075aa3b528189_base
+  fmap BG.fromFFIType hs_bindgen_de2075aa3b528189_base
 
 {-# NOINLINE sDL_DownloadFromGPUTexture #-}
 
@@ -3912,7 +3932,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_DownloadFromGPUTexture@, defined at @SDL3\/SDL_gpu.h 4006:34@
+--     [C declaration]: @SDL_DownloadFromGPUTexture@, defined at @SDL3\/SDL_gpu.h 4024:34@
 sDL_DownloadFromGPUTexture
   :: BG.FunPtr
        ( BG.Ptr SDL_GPUCopyPass
@@ -3939,7 +3959,7 @@
            )
        )
 hs_bindgen_ba4b40201f2134bd =
-  BG.fromFFIType hs_bindgen_ba4b40201f2134bd_base
+  fmap BG.fromFFIType hs_bindgen_ba4b40201f2134bd_base
 
 {-# NOINLINE sDL_DownloadFromGPUBuffer #-}
 
@@ -3955,7 +3975,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_DownloadFromGPUBuffer@, defined at @SDL3\/SDL_gpu.h 4023:34@
+--     [C declaration]: @SDL_DownloadFromGPUBuffer@, defined at @SDL3\/SDL_gpu.h 4041:34@
 sDL_DownloadFromGPUBuffer
   :: BG.FunPtr
        ( BG.Ptr SDL_GPUCopyPass
@@ -3974,7 +3994,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_get_SDL_EndGPUCopyPass@
 hs_bindgen_b4b5fc61adee338e :: IO (BG.FunPtr (BG.Ptr SDL_GPUCopyPass -> IO ()))
 hs_bindgen_b4b5fc61adee338e =
-  BG.fromFFIType hs_bindgen_b4b5fc61adee338e_base
+  fmap BG.fromFFIType hs_bindgen_b4b5fc61adee338e_base
 
 {-# NOINLINE sDL_EndGPUCopyPass #-}
 
@@ -3984,7 +4004,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_EndGPUCopyPass@, defined at @SDL3\/SDL_gpu.h 4035:34@
+--     [C declaration]: @SDL_EndGPUCopyPass@, defined at @SDL3\/SDL_gpu.h 4053:34@
 sDL_EndGPUCopyPass :: BG.FunPtr (BG.Ptr SDL_GPUCopyPass -> IO ())
 sDL_EndGPUCopyPass =
   BG.unsafePerformIO hs_bindgen_b4b5fc61adee338e
@@ -3998,7 +4018,7 @@
 hs_bindgen_9678149e861907fc
   :: IO (BG.FunPtr (BG.Ptr SDL_GPUCommandBuffer -> BG.Ptr SDL_GPUTexture -> IO ()))
 hs_bindgen_9678149e861907fc =
-  BG.fromFFIType hs_bindgen_9678149e861907fc_base
+  fmap BG.fromFFIType hs_bindgen_9678149e861907fc_base
 
 {-# NOINLINE sDL_GenerateMipmapsForGPUTexture #-}
 
@@ -4012,7 +4032,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GenerateMipmapsForGPUTexture@, defined at @SDL3\/SDL_gpu.h 4048:34@
+--     [C declaration]: @SDL_GenerateMipmapsForGPUTexture@, defined at @SDL3\/SDL_gpu.h 4066:34@
 sDL_GenerateMipmapsForGPUTexture
   :: BG.FunPtr (BG.Ptr SDL_GPUCommandBuffer -> BG.Ptr SDL_GPUTexture -> IO ())
 sDL_GenerateMipmapsForGPUTexture =
@@ -4027,7 +4047,7 @@
 hs_bindgen_7f45139e78bf4f56
   :: IO (BG.FunPtr (BG.Ptr SDL_GPUCommandBuffer -> PtrConst.PtrConst SDL_GPUBlitInfo -> IO ()))
 hs_bindgen_7f45139e78bf4f56 =
-  BG.fromFFIType hs_bindgen_7f45139e78bf4f56_base
+  fmap BG.fromFFIType hs_bindgen_7f45139e78bf4f56_base
 
 {-# NOINLINE sDL_BlitGPUTexture #-}
 
@@ -4041,7 +4061,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_BlitGPUTexture@, defined at @SDL3\/SDL_gpu.h 4062:34@
+--     [C declaration]: @SDL_BlitGPUTexture@, defined at @SDL3\/SDL_gpu.h 4080:34@
 sDL_BlitGPUTexture
   :: BG.FunPtr (BG.Ptr SDL_GPUCommandBuffer -> PtrConst.PtrConst SDL_GPUBlitInfo -> IO ())
 sDL_BlitGPUTexture =
@@ -4063,7 +4083,7 @@
            )
        )
 hs_bindgen_c59f48ad030d3274 =
-  BG.fromFFIType hs_bindgen_c59f48ad030d3274_base
+  fmap BG.fromFFIType hs_bindgen_c59f48ad030d3274_base
 
 {-# NOINLINE sDL_WindowSupportsGPUSwapchainComposition #-}
 
@@ -4083,7 +4103,7 @@
 --
 --     [See also]: 'sDL_ClaimWindowForGPUDevice'
 --
---     [C declaration]: @SDL_WindowSupportsGPUSwapchainComposition@, defined at @SDL3\/SDL_gpu.h 4082:34@
+--     [C declaration]: @SDL_WindowSupportsGPUSwapchainComposition@, defined at @SDL3\/SDL_gpu.h 4100:34@
 sDL_WindowSupportsGPUSwapchainComposition
   :: BG.FunPtr
        ( BG.Ptr SDL_GPUDevice
@@ -4110,7 +4130,7 @@
            )
        )
 hs_bindgen_bf576ab13c340f27 =
-  BG.fromFFIType hs_bindgen_bf576ab13c340f27_base
+  fmap BG.fromFFIType hs_bindgen_bf576ab13c340f27_base
 
 {-# NOINLINE sDL_WindowSupportsGPUPresentMode #-}
 
@@ -4130,7 +4150,7 @@
 --
 --     [See also]: 'sDL_ClaimWindowForGPUDevice'
 --
---     [C declaration]: @SDL_WindowSupportsGPUPresentMode@, defined at @SDL3\/SDL_gpu.h 4101:34@
+--     [C declaration]: @SDL_WindowSupportsGPUPresentMode@, defined at @SDL3\/SDL_gpu.h 4119:34@
 sDL_WindowSupportsGPUPresentMode
   :: BG.FunPtr
        ( BG.Ptr SDL_GPUDevice
@@ -4150,7 +4170,7 @@
 hs_bindgen_4ecaa5beccefec7a
   :: IO (BG.FunPtr (BG.Ptr SDL_GPUDevice -> BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window -> IO BG.CBool))
 hs_bindgen_4ecaa5beccefec7a =
-  BG.fromFFIType hs_bindgen_4ecaa5beccefec7a_base
+  fmap BG.fromFFIType hs_bindgen_4ecaa5beccefec7a_base
 
 {-# NOINLINE sDL_ClaimWindowForGPUDevice #-}
 
@@ -4172,7 +4192,7 @@
 --
 --     [See also]: 'sDL_WaitAndAcquireGPUSwapchainTexture', 'sDL_ReleaseWindowFromGPUDevice', 'sDL_WindowSupportsGPUPresentMode', 'sDL_WindowSupportsGPUSwapchainComposition'
 --
---     [C declaration]: @SDL_ClaimWindowForGPUDevice@, defined at @SDL3\/SDL_gpu.h 4133:34@
+--     [C declaration]: @SDL_ClaimWindowForGPUDevice@, defined at @SDL3\/SDL_gpu.h 4151:34@
 sDL_ClaimWindowForGPUDevice
   :: BG.FunPtr (BG.Ptr SDL_GPUDevice -> BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window -> IO BG.CBool)
 sDL_ClaimWindowForGPUDevice =
@@ -4187,7 +4207,7 @@
 hs_bindgen_196ff3ee33dc8751
   :: IO (BG.FunPtr (BG.Ptr SDL_GPUDevice -> BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window -> IO ()))
 hs_bindgen_196ff3ee33dc8751 =
-  BG.fromFFIType hs_bindgen_196ff3ee33dc8751_base
+  fmap BG.fromFFIType hs_bindgen_196ff3ee33dc8751_base
 
 {-# NOINLINE sDL_ReleaseWindowFromGPUDevice #-}
 
@@ -4201,7 +4221,7 @@
 --
 --     [See also]: 'sDL_ClaimWindowForGPUDevice'
 --
---     [C declaration]: @SDL_ReleaseWindowFromGPUDevice@, defined at @SDL3\/SDL_gpu.h 4147:34@
+--     [C declaration]: @SDL_ReleaseWindowFromGPUDevice@, defined at @SDL3\/SDL_gpu.h 4165:34@
 sDL_ReleaseWindowFromGPUDevice
   :: BG.FunPtr (BG.Ptr SDL_GPUDevice -> BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window -> IO ())
 sDL_ReleaseWindowFromGPUDevice =
@@ -4224,7 +4244,7 @@
            )
        )
 hs_bindgen_31ee67753f7ce365 =
-  BG.fromFFIType hs_bindgen_31ee67753f7ce365_base
+  fmap BG.fromFFIType hs_bindgen_31ee67753f7ce365_base
 
 {-# NOINLINE sDL_SetGPUSwapchainParameters #-}
 
@@ -4248,7 +4268,7 @@
 --
 --     [See also]: 'sDL_WindowSupportsGPUPresentMode', 'sDL_WindowSupportsGPUSwapchainComposition'
 --
---     [C declaration]: @SDL_SetGPUSwapchainParameters@, defined at @SDL3\/SDL_gpu.h 4174:34@
+--     [C declaration]: @SDL_SetGPUSwapchainParameters@, defined at @SDL3\/SDL_gpu.h 4192:34@
 sDL_SetGPUSwapchainParameters
   :: BG.FunPtr
        ( BG.Ptr SDL_GPUDevice
@@ -4269,7 +4289,7 @@
 hs_bindgen_cf8859de2d063dde
   :: IO (BG.FunPtr (BG.Ptr SDL_GPUDevice -> SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO BG.CBool))
 hs_bindgen_cf8859de2d063dde =
-  BG.fromFFIType hs_bindgen_cf8859de2d063dde_base
+  fmap BG.fromFFIType hs_bindgen_cf8859de2d063dde_base
 
 {-# NOINLINE sDL_SetGPUAllowedFramesInFlight #-}
 
@@ -4291,7 +4311,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_SetGPUAllowedFramesInFlight@, defined at @SDL3\/SDL_gpu.h 4205:34@
+--     [C declaration]: @SDL_SetGPUAllowedFramesInFlight@, defined at @SDL3\/SDL_gpu.h 4223:34@
 sDL_SetGPUAllowedFramesInFlight
   :: BG.FunPtr (BG.Ptr SDL_GPUDevice -> SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO BG.CBool)
 sDL_SetGPUAllowedFramesInFlight =
@@ -4309,7 +4329,7 @@
            (BG.Ptr SDL_GPUDevice -> BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window -> IO SDL_GPUTextureFormat)
        )
 hs_bindgen_2edc1414ddc93ec8 =
-  BG.fromFFIType hs_bindgen_2edc1414ddc93ec8_base
+  fmap BG.fromFFIType hs_bindgen_2edc1414ddc93ec8_base
 
 {-# NOINLINE sDL_GetGPUSwapchainTextureFormat #-}
 
@@ -4325,7 +4345,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGPUSwapchainTextureFormat@, defined at @SDL3\/SDL_gpu.h 4220:50@
+--     [C declaration]: @SDL_GetGPUSwapchainTextureFormat@, defined at @SDL3\/SDL_gpu.h 4238:50@
 sDL_GetGPUSwapchainTextureFormat
   :: BG.FunPtr
        (BG.Ptr SDL_GPUDevice -> BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window -> IO SDL_GPUTextureFormat)
@@ -4350,7 +4370,7 @@
            )
        )
 hs_bindgen_3683da9bdd7123ad =
-  BG.fromFFIType hs_bindgen_3683da9bdd7123ad_base
+  fmap BG.fromFFIType hs_bindgen_3683da9bdd7123ad_base
 
 {-# NOINLINE sDL_AcquireGPUSwapchainTexture #-}
 
@@ -4382,7 +4402,7 @@
 --
 --     [See also]: 'sDL_ClaimWindowForGPUDevice', 'sDL_SubmitGPUCommandBuffer', 'sDL_SubmitGPUCommandBufferAndAcquireFence', 'sDL_CancelGPUCommandBuffer', SDL_GetWindowSizeInPixels, 'sDL_WaitForGPUSwapchain', 'sDL_WaitAndAcquireGPUSwapchainTexture', 'sDL_SetGPUAllowedFramesInFlight'
 --
---     [C declaration]: @SDL_AcquireGPUSwapchainTexture@, defined at @SDL3\/SDL_gpu.h 4272:34@
+--     [C declaration]: @SDL_AcquireGPUSwapchainTexture@, defined at @SDL3\/SDL_gpu.h 4290:34@
 sDL_AcquireGPUSwapchainTexture
   :: BG.FunPtr
        ( BG.Ptr SDL_GPUCommandBuffer
@@ -4404,7 +4424,7 @@
 hs_bindgen_ea0675458d59e8d7
   :: IO (BG.FunPtr (BG.Ptr SDL_GPUDevice -> BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window -> IO BG.CBool))
 hs_bindgen_ea0675458d59e8d7 =
-  BG.fromFFIType hs_bindgen_ea0675458d59e8d7_base
+  fmap BG.fromFFIType hs_bindgen_ea0675458d59e8d7_base
 
 {-# NOINLINE sDL_WaitForGPUSwapchain #-}
 
@@ -4422,7 +4442,7 @@
 --
 --     [See also]: 'sDL_AcquireGPUSwapchainTexture', 'sDL_WaitAndAcquireGPUSwapchainTexture', 'sDL_SetGPUAllowedFramesInFlight'
 --
---     [C declaration]: @SDL_WaitForGPUSwapchain@, defined at @SDL3\/SDL_gpu.h 4296:34@
+--     [C declaration]: @SDL_WaitForGPUSwapchain@, defined at @SDL3\/SDL_gpu.h 4314:34@
 sDL_WaitForGPUSwapchain
   :: BG.FunPtr (BG.Ptr SDL_GPUDevice -> BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window -> IO BG.CBool)
 sDL_WaitForGPUSwapchain =
@@ -4446,7 +4466,7 @@
            )
        )
 hs_bindgen_bd7e7771ebd38df5 =
-  BG.fromFFIType hs_bindgen_bd7e7771ebd38df5_base
+  fmap BG.fromFFIType hs_bindgen_bd7e7771ebd38df5_base
 
 {-# NOINLINE sDL_WaitAndAcquireGPUSwapchainTexture #-}
 
@@ -4478,7 +4498,7 @@
 --
 --     [See also]: 'sDL_SubmitGPUCommandBuffer', 'sDL_SubmitGPUCommandBufferAndAcquireFence', 'sDL_AcquireGPUSwapchainTexture'
 --
---     [C declaration]: @SDL_WaitAndAcquireGPUSwapchainTexture@, defined at @SDL3\/SDL_gpu.h 4342:34@
+--     [C declaration]: @SDL_WaitAndAcquireGPUSwapchainTexture@, defined at @SDL3\/SDL_gpu.h 4360:34@
 sDL_WaitAndAcquireGPUSwapchainTexture
   :: BG.FunPtr
        ( BG.Ptr SDL_GPUCommandBuffer
@@ -4499,7 +4519,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_get_SDL_SubmitGPUCommandBuffer@
 hs_bindgen_8d4a9ce464622085 :: IO (BG.FunPtr (BG.Ptr SDL_GPUCommandBuffer -> IO BG.CBool))
 hs_bindgen_8d4a9ce464622085 =
-  BG.fromFFIType hs_bindgen_8d4a9ce464622085_base
+  fmap BG.fromFFIType hs_bindgen_8d4a9ce464622085_base
 
 {-# NOINLINE sDL_SubmitGPUCommandBuffer #-}
 
@@ -4519,7 +4539,7 @@
 --
 --     [See also]: 'sDL_AcquireGPUCommandBuffer', 'sDL_WaitAndAcquireGPUSwapchainTexture', 'sDL_AcquireGPUSwapchainTexture', 'sDL_SubmitGPUCommandBufferAndAcquireFence'
 --
---     [C declaration]: @SDL_SubmitGPUCommandBuffer@, defined at @SDL3\/SDL_gpu.h 4370:34@
+--     [C declaration]: @SDL_SubmitGPUCommandBuffer@, defined at @SDL3\/SDL_gpu.h 4388:34@
 sDL_SubmitGPUCommandBuffer :: BG.FunPtr (BG.Ptr SDL_GPUCommandBuffer -> IO BG.CBool)
 sDL_SubmitGPUCommandBuffer =
   BG.unsafePerformIO hs_bindgen_8d4a9ce464622085
@@ -4533,7 +4553,7 @@
 hs_bindgen_093495cd0f5ce3be
   :: IO (BG.FunPtr (BG.Ptr SDL_GPUCommandBuffer -> IO (BG.Ptr SDL_GPUFence)))
 hs_bindgen_093495cd0f5ce3be =
-  BG.fromFFIType hs_bindgen_093495cd0f5ce3be_base
+  fmap BG.fromFFIType hs_bindgen_093495cd0f5ce3be_base
 
 {-# NOINLINE sDL_SubmitGPUCommandBufferAndAcquireFence #-}
 
@@ -4553,7 +4573,7 @@
 --
 --     [See also]: 'sDL_AcquireGPUCommandBuffer', 'sDL_WaitAndAcquireGPUSwapchainTexture', 'sDL_AcquireGPUSwapchainTexture', 'sDL_SubmitGPUCommandBuffer', 'sDL_ReleaseGPUFence'
 --
---     [C declaration]: @SDL_SubmitGPUCommandBufferAndAcquireFence@, defined at @SDL3\/SDL_gpu.h 4397:44@
+--     [C declaration]: @SDL_SubmitGPUCommandBufferAndAcquireFence@, defined at @SDL3\/SDL_gpu.h 4415:44@
 sDL_SubmitGPUCommandBufferAndAcquireFence
   :: BG.FunPtr (BG.Ptr SDL_GPUCommandBuffer -> IO (BG.Ptr SDL_GPUFence))
 sDL_SubmitGPUCommandBufferAndAcquireFence =
@@ -4567,7 +4587,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_get_SDL_CancelGPUCommandBuffer@
 hs_bindgen_83b736c86816e554 :: IO (BG.FunPtr (BG.Ptr SDL_GPUCommandBuffer -> IO BG.CBool))
 hs_bindgen_83b736c86816e554 =
-  BG.fromFFIType hs_bindgen_83b736c86816e554_base
+  fmap BG.fromFFIType hs_bindgen_83b736c86816e554_base
 
 {-# NOINLINE sDL_CancelGPUCommandBuffer #-}
 
@@ -4589,7 +4609,7 @@
 --
 --     [See also]: 'sDL_WaitAndAcquireGPUSwapchainTexture', 'sDL_AcquireGPUCommandBuffer', 'sDL_AcquireGPUSwapchainTexture'
 --
---     [C declaration]: @SDL_CancelGPUCommandBuffer@, defined at @SDL3\/SDL_gpu.h 4422:34@
+--     [C declaration]: @SDL_CancelGPUCommandBuffer@, defined at @SDL3\/SDL_gpu.h 4440:34@
 sDL_CancelGPUCommandBuffer :: BG.FunPtr (BG.Ptr SDL_GPUCommandBuffer -> IO BG.CBool)
 sDL_CancelGPUCommandBuffer =
   BG.unsafePerformIO hs_bindgen_83b736c86816e554
@@ -4602,7 +4622,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_get_SDL_WaitForGPUIdle@
 hs_bindgen_34c07d40aff698e2 :: IO (BG.FunPtr (BG.Ptr SDL_GPUDevice -> IO BG.CBool))
 hs_bindgen_34c07d40aff698e2 =
-  BG.fromFFIType hs_bindgen_34c07d40aff698e2_base
+  fmap BG.fromFFIType hs_bindgen_34c07d40aff698e2_base
 
 {-# NOINLINE sDL_WaitForGPUIdle #-}
 
@@ -4616,7 +4636,7 @@
 --
 --     [See also]: 'sDL_WaitForGPUFences'
 --
---     [C declaration]: @SDL_WaitForGPUIdle@, defined at @SDL3\/SDL_gpu.h 4436:34@
+--     [C declaration]: @SDL_WaitForGPUIdle@, defined at @SDL3\/SDL_gpu.h 4454:34@
 sDL_WaitForGPUIdle :: BG.FunPtr (BG.Ptr SDL_GPUDevice -> IO BG.CBool)
 sDL_WaitForGPUIdle =
   BG.unsafePerformIO hs_bindgen_34c07d40aff698e2
@@ -4638,7 +4658,7 @@
            )
        )
 hs_bindgen_4cb9d239bc32f759 =
-  BG.fromFFIType hs_bindgen_4cb9d239bc32f759_base
+  fmap BG.fromFFIType hs_bindgen_4cb9d239bc32f759_base
 
 {-# NOINLINE sDL_WaitForGPUFences #-}
 
@@ -4658,7 +4678,7 @@
 --
 --     [See also]: 'sDL_SubmitGPUCommandBufferAndAcquireFence', 'sDL_WaitForGPUIdle'
 --
---     [C declaration]: @SDL_WaitForGPUFences@, defined at @SDL3\/SDL_gpu.h 4455:34@
+--     [C declaration]: @SDL_WaitForGPUFences@, defined at @SDL3\/SDL_gpu.h 4473:34@
 sDL_WaitForGPUFences
   :: BG.FunPtr
        ( BG.Ptr SDL_GPUDevice
@@ -4679,7 +4699,7 @@
 hs_bindgen_67c5db65f97a1de0
   :: IO (BG.FunPtr (BG.Ptr SDL_GPUDevice -> BG.Ptr SDL_GPUFence -> IO BG.CBool))
 hs_bindgen_67c5db65f97a1de0 =
-  BG.fromFFIType hs_bindgen_67c5db65f97a1de0_base
+  fmap BG.fromFFIType hs_bindgen_67c5db65f97a1de0_base
 
 {-# NOINLINE sDL_QueryGPUFence #-}
 
@@ -4695,7 +4715,7 @@
 --
 --     [See also]: 'sDL_SubmitGPUCommandBufferAndAcquireFence'
 --
---     [C declaration]: @SDL_QueryGPUFence@, defined at @SDL3\/SDL_gpu.h 4472:34@
+--     [C declaration]: @SDL_QueryGPUFence@, defined at @SDL3\/SDL_gpu.h 4490:34@
 sDL_QueryGPUFence :: BG.FunPtr (BG.Ptr SDL_GPUDevice -> BG.Ptr SDL_GPUFence -> IO BG.CBool)
 sDL_QueryGPUFence =
   BG.unsafePerformIO hs_bindgen_67c5db65f97a1de0
@@ -4708,7 +4728,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_get_SDL_ReleaseGPUFence@
 hs_bindgen_8f9e7c0ed3e519a2 :: IO (BG.FunPtr (BG.Ptr SDL_GPUDevice -> BG.Ptr SDL_GPUFence -> IO ()))
 hs_bindgen_8f9e7c0ed3e519a2 =
-  BG.fromFFIType hs_bindgen_8f9e7c0ed3e519a2_base
+  fmap BG.fromFFIType hs_bindgen_8f9e7c0ed3e519a2_base
 
 {-# NOINLINE sDL_ReleaseGPUFence #-}
 
@@ -4724,7 +4744,7 @@
 --
 --     [See also]: 'sDL_SubmitGPUCommandBufferAndAcquireFence'
 --
---     [C declaration]: @SDL_ReleaseGPUFence@, defined at @SDL3\/SDL_gpu.h 4488:34@
+--     [C declaration]: @SDL_ReleaseGPUFence@, defined at @SDL3\/SDL_gpu.h 4506:34@
 sDL_ReleaseGPUFence :: BG.FunPtr (BG.Ptr SDL_GPUDevice -> BG.Ptr SDL_GPUFence -> IO ())
 sDL_ReleaseGPUFence =
   BG.unsafePerformIO hs_bindgen_8f9e7c0ed3e519a2
@@ -4738,7 +4758,7 @@
 hs_bindgen_7020eb5f7daa1796
   :: IO (BG.FunPtr (SDL_GPUTextureFormat -> IO SDL3.Sys.Bindgen.Stdinc.Uint32))
 hs_bindgen_7020eb5f7daa1796 =
-  BG.fromFFIType hs_bindgen_7020eb5f7daa1796_base
+  fmap BG.fromFFIType hs_bindgen_7020eb5f7daa1796_base
 
 {-# NOINLINE sDL_GPUTextureFormatTexelBlockSize #-}
 
@@ -4752,7 +4772,7 @@
 --
 --     [See also]: 'sDL_UploadToGPUTexture'
 --
---     [C declaration]: @SDL_GPUTextureFormatTexelBlockSize@, defined at @SDL3\/SDL_gpu.h 4504:36@
+--     [C declaration]: @SDL_GPUTextureFormatTexelBlockSize@, defined at @SDL3\/SDL_gpu.h 4522:36@
 sDL_GPUTextureFormatTexelBlockSize
   :: BG.FunPtr (SDL_GPUTextureFormat -> IO SDL3.Sys.Bindgen.Stdinc.Uint32)
 sDL_GPUTextureFormatTexelBlockSize =
@@ -4775,7 +4795,7 @@
            )
        )
 hs_bindgen_3c6e764809d2a384 =
-  BG.fromFFIType hs_bindgen_3c6e764809d2a384_base
+  fmap BG.fromFFIType hs_bindgen_3c6e764809d2a384_base
 
 {-# NOINLINE sDL_GPUTextureSupportsFormat #-}
 
@@ -4793,7 +4813,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GPUTextureSupportsFormat@, defined at @SDL3\/SDL_gpu.h 4519:34@
+--     [C declaration]: @SDL_GPUTextureSupportsFormat@, defined at @SDL3\/SDL_gpu.h 4537:34@
 sDL_GPUTextureSupportsFormat
   :: BG.FunPtr
        ( BG.Ptr SDL_GPUDevice
@@ -4814,7 +4834,7 @@
 hs_bindgen_6b69a9c844393ce7
   :: IO (BG.FunPtr (BG.Ptr SDL_GPUDevice -> SDL_GPUTextureFormat -> SDL_GPUSampleCount -> IO BG.CBool))
 hs_bindgen_6b69a9c844393ce7 =
-  BG.fromFFIType hs_bindgen_6b69a9c844393ce7_base
+  fmap BG.fromFFIType hs_bindgen_6b69a9c844393ce7_base
 
 {-# NOINLINE sDL_GPUTextureSupportsSampleCount #-}
 
@@ -4830,7 +4850,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GPUTextureSupportsSampleCount@, defined at @SDL3\/SDL_gpu.h 4535:34@
+--     [C declaration]: @SDL_GPUTextureSupportsSampleCount@, defined at @SDL3\/SDL_gpu.h 4553:34@
 sDL_GPUTextureSupportsSampleCount
   :: BG.FunPtr (BG.Ptr SDL_GPUDevice -> SDL_GPUTextureFormat -> SDL_GPUSampleCount -> IO BG.CBool)
 sDL_GPUTextureSupportsSampleCount =
@@ -4853,7 +4873,7 @@
            )
        )
 hs_bindgen_fab34fd075b25f9a =
-  BG.fromFFIType hs_bindgen_fab34fd075b25f9a_base
+  fmap BG.fromFFIType hs_bindgen_fab34fd075b25f9a_base
 
 {-# NOINLINE sDL_CalculateGPUTextureFormatSize #-}
 
@@ -4871,7 +4891,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_CalculateGPUTextureFormatSize@, defined at @SDL3\/SDL_gpu.h 4551:36@
+--     [C declaration]: @SDL_CalculateGPUTextureFormatSize@, defined at @SDL3\/SDL_gpu.h 4569:36@
 sDL_CalculateGPUTextureFormatSize
   :: BG.FunPtr
        ( SDL_GPUTextureFormat
@@ -4892,7 +4912,7 @@
 hs_bindgen_8fe9348f3a2816f5
   :: IO (BG.FunPtr (SDL_GPUTextureFormat -> IO SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat))
 hs_bindgen_8fe9348f3a2816f5 =
-  BG.fromFFIType hs_bindgen_8fe9348f3a2816f5_base
+  fmap BG.fromFFIType hs_bindgen_8fe9348f3a2816f5_base
 
 {-# NOINLINE sDL_GetPixelFormatFromGPUTextureFormat #-}
 
@@ -4904,7 +4924,7 @@
 --
 --     @since 3.4.0
 --
---     [C declaration]: @SDL_GetPixelFormatFromGPUTextureFormat@, defined at @SDL3\/SDL_gpu.h 4566:45@
+--     [C declaration]: @SDL_GetPixelFormatFromGPUTextureFormat@, defined at @SDL3\/SDL_gpu.h 4584:45@
 sDL_GetPixelFormatFromGPUTextureFormat
   :: BG.FunPtr (SDL_GPUTextureFormat -> IO SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat)
 sDL_GetPixelFormatFromGPUTextureFormat =
@@ -4919,7 +4939,7 @@
 hs_bindgen_372069e59fc19080
   :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat -> IO SDL_GPUTextureFormat))
 hs_bindgen_372069e59fc19080 =
-  BG.fromFFIType hs_bindgen_372069e59fc19080_base
+  fmap BG.fromFFIType hs_bindgen_372069e59fc19080_base
 
 {-# NOINLINE sDL_GetGPUTextureFormatFromPixelFormat #-}
 
@@ -4931,7 +4951,7 @@
 --
 --     @since 3.4.0
 --
---     [C declaration]: @SDL_GetGPUTextureFormatFromPixelFormat@, defined at @SDL3\/SDL_gpu.h 4578:50@
+--     [C declaration]: @SDL_GetGPUTextureFormatFromPixelFormat@, defined at @SDL3\/SDL_gpu.h 4596:50@
 sDL_GetGPUTextureFormatFromPixelFormat
   :: BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat -> IO SDL_GPUTextureFormat)
 sDL_GetGPUTextureFormatFromPixelFormat =
diff --git a/src/SDL3/Sys/Bindgen/Gpu/Safe.hs b/src/SDL3/Sys/Bindgen/Gpu/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Gpu/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Gpu/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Gpu.Safe (
@@ -101,7 +103,11 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Gpu
@@ -113,7 +119,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_gpu.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_gpu.h>"
          , "_Bool hs_bindgen_aae5cc9f6839b5cc ("
          , "  SDL_GPUShaderFormat arg1,"
          , "  char const *arg2"
@@ -862,9 +872,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_GPUSupportsShaderFormats@
 foreign import ccall safe "hs_bindgen_aae5cc9f6839b5cc"
   hs_bindgen_aae5cc9f6839b5cc_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_GPUSupportsShaderFormats@
 hs_bindgen_aae5cc9f6839b5cc
@@ -872,7 +882,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_aae5cc9f6839b5cc =
-  BG.fromFFIType hs_bindgen_aae5cc9f6839b5cc_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_aae5cc9f6839b5cc_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Checks for GPU runtime support.
 --
@@ -899,15 +911,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_GPUSupportsProperties@
 foreign import ccall safe "hs_bindgen_eafef00f426d07de"
   hs_bindgen_eafef00f426d07de_base
-    :: BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_GPUSupportsProperties@
 hs_bindgen_eafef00f426d07de
   :: SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
   -> IO BG.CBool
 hs_bindgen_eafef00f426d07de =
-  BG.fromFFIType hs_bindgen_eafef00f426d07de_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_eafef00f426d07de_base (BG.toFFIType x0))
 
 -- | Checks for GPU runtime support.
 --
@@ -930,8 +943,8 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_CreateGPUDevice@
 foreign import ccall safe "hs_bindgen_e18d5500edbbd7b5"
   hs_bindgen_e18d5500edbbd7b5_base
-    :: BG.Word32
-    -> BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> BG.CBool
     -> BG.Ptr BG.Void
     -> IO (BG.Ptr BG.Void)
 
@@ -942,7 +955,12 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO (BG.Ptr SDL_GPUDevice)
 hs_bindgen_e18d5500edbbd7b5 =
-  BG.fromFFIType hs_bindgen_e18d5500edbbd7b5_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_e18d5500edbbd7b5_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Creates a GPU context.
 --
@@ -982,7 +1000,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_CreateGPUDeviceWithProperties@
 foreign import ccall safe "hs_bindgen_79aa6b683079a4aa"
   hs_bindgen_79aa6b683079a4aa_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_CreateGPUDeviceWithProperties@
@@ -990,7 +1008,8 @@
   :: SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
   -> IO (BG.Ptr SDL_GPUDevice)
 hs_bindgen_79aa6b683079a4aa =
-  BG.fromFFIType hs_bindgen_79aa6b683079a4aa_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_79aa6b683079a4aa_base (BG.toFFIType x0))
 
 -- | Creates a GPU context.
 --
@@ -1071,7 +1090,8 @@
   :: BG.Ptr SDL_GPUDevice
   -> IO ()
 hs_bindgen_8880394a1e594bb0 =
-  BG.fromFFIType hs_bindgen_8880394a1e594bb0_base
+  \x0 ->
+    hs_bindgen_8880394a1e594bb0_base (BG.toFFIType x0)
 
 -- | Destroys a GPU context previously returned by SDL_CreateGPUDevice.
 --
@@ -1091,12 +1111,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_GetNumGPUDrivers@
 foreign import ccall safe "hs_bindgen_53d9edb0d1616675"
   hs_bindgen_53d9edb0d1616675_base
-    :: IO BG.Int32
+    :: IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_GetNumGPUDrivers@
 hs_bindgen_53d9edb0d1616675 :: IO BG.CInt
 hs_bindgen_53d9edb0d1616675 =
-  BG.fromFFIType hs_bindgen_53d9edb0d1616675_base
+  fmap BG.fromFFIType hs_bindgen_53d9edb0d1616675_base
 
 -- | Get the number of GPU drivers compiled into SDL.
 --
@@ -1113,7 +1133,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_GetGPUDriver@
 foreign import ccall safe "hs_bindgen_bde1ec04c28e032c"
   hs_bindgen_bde1ec04c28e032c_base
-    :: BG.Int32
+    :: BG.CInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_GetGPUDriver@
@@ -1121,7 +1141,8 @@
   :: BG.CInt
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_bde1ec04c28e032c =
-  BG.fromFFIType hs_bindgen_bde1ec04c28e032c_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_bde1ec04c28e032c_base (BG.toFFIType x0))
 
 -- | Get the name of a built in GPU driver.
 --
@@ -1155,7 +1176,8 @@
   :: BG.Ptr SDL_GPUDevice
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_2e09f9d54b7e174c =
-  BG.fromFFIType hs_bindgen_2e09f9d54b7e174c_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_2e09f9d54b7e174c_base (BG.toFFIType x0))
 
 -- | Returns the name of the backend used to create this GPU context.
 --
@@ -1176,14 +1198,15 @@
 foreign import ccall safe "hs_bindgen_0ac23e15856207d2"
   hs_bindgen_0ac23e15856207d2_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_GetGPUShaderFormats@
 hs_bindgen_0ac23e15856207d2
   :: BG.Ptr SDL_GPUDevice
   -> IO SDL_GPUShaderFormat
 hs_bindgen_0ac23e15856207d2 =
-  BG.fromFFIType hs_bindgen_0ac23e15856207d2_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_0ac23e15856207d2_base (BG.toFFIType x0))
 
 -- | Returns the supported shader formats for this GPU context.
 --
@@ -1204,14 +1227,15 @@
 foreign import ccall safe "hs_bindgen_24ec481b90601a40"
   hs_bindgen_24ec481b90601a40_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_GetGPUDeviceProperties@
 hs_bindgen_24ec481b90601a40
   :: BG.Ptr SDL_GPUDevice
   -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
 hs_bindgen_24ec481b90601a40 =
-  BG.fromFFIType hs_bindgen_24ec481b90601a40_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_24ec481b90601a40_base (BG.toFFIType x0))
 
 -- | Get the properties associated with a GPU device.
 --
@@ -1337,7 +1361,9 @@
   -> PtrConst.PtrConst SDL_GPUComputePipelineCreateInfo
   -> IO (BG.Ptr SDL_GPUComputePipeline)
 hs_bindgen_be9942ef43a30dbb =
-  BG.fromFFIType hs_bindgen_be9942ef43a30dbb_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_be9942ef43a30dbb_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Creates a pipeline object to be used in a compute workflow.
 --
@@ -1402,7 +1428,9 @@
   -> PtrConst.PtrConst SDL_GPUGraphicsPipelineCreateInfo
   -> IO (BG.Ptr SDL_GPUGraphicsPipeline)
 hs_bindgen_3a818324fc7c3f58 =
-  BG.fromFFIType hs_bindgen_3a818324fc7c3f58_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_3a818324fc7c3f58_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Creates a pipeline object to be used in a graphics workflow.
 --
@@ -1443,7 +1471,9 @@
   -> PtrConst.PtrConst SDL_GPUSamplerCreateInfo
   -> IO (BG.Ptr SDL_GPUSampler)
 hs_bindgen_604bbac908c436aa =
-  BG.fromFFIType hs_bindgen_604bbac908c436aa_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_604bbac908c436aa_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Creates a sampler object to be used when binding textures in a graphics workflow.
 --
@@ -1483,7 +1513,9 @@
   -> PtrConst.PtrConst SDL_GPUShaderCreateInfo
   -> IO (BG.Ptr SDL_GPUShader)
 hs_bindgen_3b5c95e61238095a =
-  BG.fromFFIType hs_bindgen_3b5c95e61238095a_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_3b5c95e61238095a_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Creates a shader to be used when creating a graphics pipeline.
 --
@@ -1567,7 +1599,9 @@
   -> PtrConst.PtrConst SDL_GPUTextureCreateInfo
   -> IO (BG.Ptr SDL_GPUTexture)
 hs_bindgen_c6685129d00ec509 =
-  BG.fromFFIType hs_bindgen_c6685129d00ec509_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_c6685129d00ec509_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Creates a texture object to be used in graphics or compute workflows.
 --
@@ -1625,7 +1659,9 @@
   -> PtrConst.PtrConst SDL_GPUBufferCreateInfo
   -> IO (BG.Ptr SDL_GPUBuffer)
 hs_bindgen_5eca6d3125b183e7 =
-  BG.fromFFIType hs_bindgen_5eca6d3125b183e7_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_5eca6d3125b183e7_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Creates a buffer object to be used in graphics or compute workflows.
 --
@@ -1671,7 +1707,9 @@
   -> PtrConst.PtrConst SDL_GPUTransferBufferCreateInfo
   -> IO (BG.Ptr SDL_GPUTransferBuffer)
 hs_bindgen_646007cc8d60e8f1 =
-  BG.fromFFIType hs_bindgen_646007cc8d60e8f1_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_646007cc8d60e8f1_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Creates a transfer buffer to be used when uploading to or downloading from graphics resources.
 --
@@ -1716,7 +1754,10 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO ()
 hs_bindgen_35249b94fcee0ae6 =
-  BG.fromFFIType hs_bindgen_35249b94fcee0ae6_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        hs_bindgen_35249b94fcee0ae6_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2)
 
 -- | Sets an arbitrary string constant to label a buffer.
 --
@@ -1760,7 +1801,10 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO ()
 hs_bindgen_21f5dad8cd3caba0 =
-  BG.fromFFIType hs_bindgen_21f5dad8cd3caba0_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        hs_bindgen_21f5dad8cd3caba0_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2)
 
 -- | Sets an arbitrary string constant to label a texture.
 --
@@ -1802,7 +1846,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO ()
 hs_bindgen_e540ee9c7b74b716 =
-  BG.fromFFIType hs_bindgen_e540ee9c7b74b716_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_e540ee9c7b74b716_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Inserts an arbitrary string label into the command buffer callstream.
 --
@@ -1838,7 +1884,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO ()
 hs_bindgen_6cf1d5f7ad48ca4b =
-  BG.fromFFIType hs_bindgen_6cf1d5f7ad48ca4b_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_6cf1d5f7ad48ca4b_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Begins a debug group with an arbitrary name.
 --
@@ -1878,7 +1926,8 @@
   :: BG.Ptr SDL_GPUCommandBuffer
   -> IO ()
 hs_bindgen_c82fe0d95b63b068 =
-  BG.fromFFIType hs_bindgen_c82fe0d95b63b068_base
+  \x0 ->
+    hs_bindgen_c82fe0d95b63b068_base (BG.toFFIType x0)
 
 -- | Ends the most-recently pushed debug group.
 --
@@ -1910,7 +1959,9 @@
   -> BG.Ptr SDL_GPUTexture
   -> IO ()
 hs_bindgen_367c147bedca1380 =
-  BG.fromFFIType hs_bindgen_367c147bedca1380_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_367c147bedca1380_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Frees the given texture as soon as it is safe to do so.
 --
@@ -1944,7 +1995,9 @@
   -> BG.Ptr SDL_GPUSampler
   -> IO ()
 hs_bindgen_9d27e7a735191637 =
-  BG.fromFFIType hs_bindgen_9d27e7a735191637_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_9d27e7a735191637_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Frees the given sampler as soon as it is safe to do so.
 --
@@ -1978,7 +2031,9 @@
   -> BG.Ptr SDL_GPUBuffer
   -> IO ()
 hs_bindgen_bc73e63cd04b292b =
-  BG.fromFFIType hs_bindgen_bc73e63cd04b292b_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_bc73e63cd04b292b_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Frees the given buffer as soon as it is safe to do so.
 --
@@ -2012,7 +2067,9 @@
   -> BG.Ptr SDL_GPUTransferBuffer
   -> IO ()
 hs_bindgen_8e038ae5b291e93f =
-  BG.fromFFIType hs_bindgen_8e038ae5b291e93f_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_8e038ae5b291e93f_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Frees the given transfer buffer as soon as it is safe to do so.
 --
@@ -2047,7 +2104,9 @@
   -> BG.Ptr SDL_GPUComputePipeline
   -> IO ()
 hs_bindgen_2ebc397e9dad3697 =
-  BG.fromFFIType hs_bindgen_2ebc397e9dad3697_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_2ebc397e9dad3697_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Frees the given compute pipeline as soon as it is safe to do so.
 --
@@ -2082,7 +2141,9 @@
   -> BG.Ptr SDL_GPUShader
   -> IO ()
 hs_bindgen_be87d6210d892952 =
-  BG.fromFFIType hs_bindgen_be87d6210d892952_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_be87d6210d892952_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Frees the given shader as soon as it is safe to do so.
 --
@@ -2116,7 +2177,9 @@
   -> BG.Ptr SDL_GPUGraphicsPipeline
   -> IO ()
 hs_bindgen_c2a4e9cdd147b21b =
-  BG.fromFFIType hs_bindgen_c2a4e9cdd147b21b_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_c2a4e9cdd147b21b_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Frees the given graphics pipeline as soon as it is safe to do so.
 --
@@ -2149,7 +2212,8 @@
   :: BG.Ptr SDL_GPUDevice
   -> IO (BG.Ptr SDL_GPUCommandBuffer)
 hs_bindgen_92149d0718fb8464 =
-  BG.fromFFIType hs_bindgen_92149d0718fb8464_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_92149d0718fb8464_base (BG.toFFIType x0))
 
 -- | Acquire a command buffer.
 --
@@ -2177,9 +2241,9 @@
 foreign import ccall safe "hs_bindgen_af2096650fa2d8d0"
   hs_bindgen_af2096650fa2d8d0_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_PushGPUVertexUniformData@
@@ -2190,7 +2254,15 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_af2096650fa2d8d0 =
-  BG.fromFFIType hs_bindgen_af2096650fa2d8d0_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_af2096650fa2d8d0_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Pushes data to a vertex uniform slot on the command buffer.
 --
@@ -2228,9 +2300,9 @@
 foreign import ccall safe "hs_bindgen_d777c2d66931c0d7"
   hs_bindgen_d777c2d66931c0d7_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_PushGPUFragmentUniformData@
@@ -2241,7 +2313,15 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_d777c2d66931c0d7 =
-  BG.fromFFIType hs_bindgen_d777c2d66931c0d7_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_d777c2d66931c0d7_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Pushes data to a fragment uniform slot on the command buffer.
 --
@@ -2277,9 +2357,9 @@
 foreign import ccall safe "hs_bindgen_c40f02ecbf0d1f10"
   hs_bindgen_c40f02ecbf0d1f10_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_PushGPUComputeUniformData@
@@ -2290,7 +2370,15 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_c40f02ecbf0d1f10 =
-  BG.fromFFIType hs_bindgen_c40f02ecbf0d1f10_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_c40f02ecbf0d1f10_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Pushes data to a uniform slot on the command buffer.
 --
@@ -2327,7 +2415,7 @@
   hs_bindgen_5d064478a0820b2c_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> IO (BG.Ptr BG.Void)
 
@@ -2339,7 +2427,18 @@
   -> PtrConst.PtrConst SDL_GPUDepthStencilTargetInfo
   -> IO (BG.Ptr SDL_GPURenderPass)
 hs_bindgen_5d064478a0820b2c =
-  BG.fromFFIType hs_bindgen_5d064478a0820b2c_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_5d064478a0820b2c_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Begins a render pass on a command buffer.
 --
@@ -2387,7 +2486,9 @@
   -> BG.Ptr SDL_GPUGraphicsPipeline
   -> IO ()
 hs_bindgen_43b6f6578491ba7f =
-  BG.fromFFIType hs_bindgen_43b6f6578491ba7f_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_43b6f6578491ba7f_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Binds a graphics pipeline on a render pass to be used in rendering.
 --
@@ -2422,7 +2523,9 @@
   -> PtrConst.PtrConst SDL_GPUViewport
   -> IO ()
 hs_bindgen_710986e3fd99ba6a =
-  BG.fromFFIType hs_bindgen_710986e3fd99ba6a_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_710986e3fd99ba6a_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Sets the current viewport state on a command buffer.
 --
@@ -2454,7 +2557,9 @@
   -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
   -> IO ()
 hs_bindgen_8e81e30e4f1e1924 =
-  BG.fromFFIType hs_bindgen_8e81e30e4f1e1924_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_8e81e30e4f1e1924_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Sets the current scissor state on a command buffer.
 --
@@ -2486,7 +2591,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Pixels.SDL_FColor
   -> IO ()
 hs_bindgen_f727bad8e8b1ff3e =
-  BG.fromFFIType hs_bindgen_f727bad8e8b1ff3e_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_f727bad8e8b1ff3e_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Sets the current blend constants on a command buffer.
 --
@@ -2518,7 +2625,7 @@
 foreign import ccall safe "hs_bindgen_4a62370048ec360b"
   hs_bindgen_4a62370048ec360b_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
+    -> HsBindgen.Runtime.LibC.Word8
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_SetGPUStencilReference@
@@ -2527,7 +2634,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO ()
 hs_bindgen_4a62370048ec360b =
-  BG.fromFFIType hs_bindgen_4a62370048ec360b_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_4a62370048ec360b_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Sets the current stencil reference value on a command buffer.
 --
@@ -2551,9 +2660,9 @@
 foreign import ccall safe "hs_bindgen_6471bc849523bb14"
   hs_bindgen_6471bc849523bb14_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_BindGPUVertexBuffers@
@@ -2564,7 +2673,15 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_6471bc849523bb14 =
-  BG.fromFFIType hs_bindgen_6471bc849523bb14_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_6471bc849523bb14_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Binds vertex buffers on a command buffer for use with subsequent draw calls.
 --
@@ -2597,7 +2714,7 @@
   hs_bindgen_084b99eea9396d40_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> BG.CUInt
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_BindGPUIndexBuffer@
@@ -2607,7 +2724,10 @@
   -> SDL_GPUIndexElementSize
   -> IO ()
 hs_bindgen_084b99eea9396d40 =
-  BG.fromFFIType hs_bindgen_084b99eea9396d40_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        hs_bindgen_084b99eea9396d40_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2)
 
 -- | Binds an index buffer on a command buffer for use with subsequent draw calls.
 --
@@ -2634,9 +2754,9 @@
 foreign import ccall safe "hs_bindgen_d275601b49dec50a"
   hs_bindgen_d275601b49dec50a_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_BindGPUVertexSamplers@
@@ -2647,19 +2767,29 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_d275601b49dec50a =
-  BG.fromFFIType hs_bindgen_d275601b49dec50a_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_d275601b49dec50a_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Binds texture-sampler pairs for use on the vertex shader.
 --
 --     The textures must have been created with SDL_GPU_TEXTUREUSAGE_SAMPLER.
 --
+--     The textures being bound must have a matching type declared in the shader (2D, 3D, etc.). Multisample textures are not allowed.
+--
 --     Be sure your shader is set up according to the requirements documented in @SDL_CreateGPUShader()@.
 --
 --     @since 3.2.0
 --
 --     [See also]: 'sDL_CreateGPUShader'
 --
---     [C declaration]: @SDL_BindGPUVertexSamplers@, defined at @SDL3\/SDL_gpu.h 3408:34@
+--     [C declaration]: @SDL_BindGPUVertexSamplers@, defined at @SDL3\/SDL_gpu.h 3411:34@
 sDL_BindGPUVertexSamplers
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -2685,9 +2815,9 @@
 foreign import ccall safe "hs_bindgen_66cc372794c2ef55"
   hs_bindgen_66cc372794c2ef55_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_BindGPUVertexStorageTextures@
@@ -2698,19 +2828,29 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_66cc372794c2ef55 =
-  BG.fromFFIType hs_bindgen_66cc372794c2ef55_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_66cc372794c2ef55_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Binds storage textures for use on the vertex shader.
 --
 --     These textures must have been created with SDL_GPU_TEXTUREUSAGE_GRAPHICS_STORAGE_READ.
 --
+--     The textures being bound must have a matching type declared in the shader (2D, 3D, 2DMS, etc.)
+--
 --     Be sure your shader is set up according to the requirements documented in @SDL_CreateGPUShader()@.
 --
 --     @since 3.2.0
 --
 --     [See also]: 'sDL_CreateGPUShader'
 --
---     [C declaration]: @SDL_BindGPUVertexStorageTextures@, defined at @SDL3\/SDL_gpu.h 3432:34@
+--     [C declaration]: @SDL_BindGPUVertexStorageTextures@, defined at @SDL3\/SDL_gpu.h 3438:34@
 sDL_BindGPUVertexStorageTextures
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -2736,9 +2876,9 @@
 foreign import ccall safe "hs_bindgen_d7725fcd1492d52d"
   hs_bindgen_d7725fcd1492d52d_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_BindGPUVertexStorageBuffers@
@@ -2749,7 +2889,15 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_d7725fcd1492d52d =
-  BG.fromFFIType hs_bindgen_d7725fcd1492d52d_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_d7725fcd1492d52d_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Binds storage buffers for use on the vertex shader.
 --
@@ -2761,7 +2909,7 @@
 --
 --     [See also]: 'sDL_CreateGPUShader'
 --
---     [C declaration]: @SDL_BindGPUVertexStorageBuffers@, defined at @SDL3\/SDL_gpu.h 3456:34@
+--     [C declaration]: @SDL_BindGPUVertexStorageBuffers@, defined at @SDL3\/SDL_gpu.h 3462:34@
 sDL_BindGPUVertexStorageBuffers
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -2787,9 +2935,9 @@
 foreign import ccall safe "hs_bindgen_1a2c72585c211590"
   hs_bindgen_1a2c72585c211590_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_BindGPUFragmentSamplers@
@@ -2800,19 +2948,29 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_1a2c72585c211590 =
-  BG.fromFFIType hs_bindgen_1a2c72585c211590_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_1a2c72585c211590_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Binds texture-sampler pairs for use on the fragment shader.
 --
 --     The textures must have been created with SDL_GPU_TEXTUREUSAGE_SAMPLER.
 --
+--     The textures being bound must have a matching type declared in the shader (2D, 3D, etc.). Multisample textures are not allowed.
+--
 --     Be sure your shader is set up according to the requirements documented in @SDL_CreateGPUShader()@.
 --
 --     @since 3.2.0
 --
 --     [See also]: 'sDL_CreateGPUShader'
 --
---     [C declaration]: @SDL_BindGPUFragmentSamplers@, defined at @SDL3\/SDL_gpu.h 3481:34@
+--     [C declaration]: @SDL_BindGPUFragmentSamplers@, defined at @SDL3\/SDL_gpu.h 3490:34@
 sDL_BindGPUFragmentSamplers
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -2838,9 +2996,9 @@
 foreign import ccall safe "hs_bindgen_0714ec46b44519f0"
   hs_bindgen_0714ec46b44519f0_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_BindGPUFragmentStorageTextures@
@@ -2851,19 +3009,29 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_0714ec46b44519f0 =
-  BG.fromFFIType hs_bindgen_0714ec46b44519f0_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_0714ec46b44519f0_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Binds storage textures for use on the fragment shader.
 --
 --     These textures must have been created with SDL_GPU_TEXTUREUSAGE_GRAPHICS_STORAGE_READ.
 --
+--     The textures being bound must have a matching type declared in the shader (2D, 3D, 2DMS, etc.)
+--
 --     Be sure your shader is set up according to the requirements documented in @SDL_CreateGPUShader()@.
 --
 --     @since 3.2.0
 --
 --     [See also]: 'sDL_CreateGPUShader'
 --
---     [C declaration]: @SDL_BindGPUFragmentStorageTextures@, defined at @SDL3\/SDL_gpu.h 3505:34@
+--     [C declaration]: @SDL_BindGPUFragmentStorageTextures@, defined at @SDL3\/SDL_gpu.h 3517:34@
 sDL_BindGPUFragmentStorageTextures
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -2889,9 +3057,9 @@
 foreign import ccall safe "hs_bindgen_2afe5342dbcdb8ac"
   hs_bindgen_2afe5342dbcdb8ac_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_BindGPUFragmentStorageBuffers@
@@ -2902,7 +3070,15 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_2afe5342dbcdb8ac =
-  BG.fromFFIType hs_bindgen_2afe5342dbcdb8ac_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_2afe5342dbcdb8ac_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Binds storage buffers for use on the fragment shader.
 --
@@ -2914,7 +3090,7 @@
 --
 --     [See also]: 'sDL_CreateGPUShader'
 --
---     [C declaration]: @SDL_BindGPUFragmentStorageBuffers@, defined at @SDL3\/SDL_gpu.h 3529:34@
+--     [C declaration]: @SDL_BindGPUFragmentStorageBuffers@, defined at @SDL3\/SDL_gpu.h 3541:34@
 sDL_BindGPUFragmentStorageBuffers
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -2940,11 +3116,11 @@
 foreign import ccall safe "hs_bindgen_954941bccb6ac959"
   hs_bindgen_954941bccb6ac959_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Int32
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Int32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_DrawGPUIndexedPrimitives@
@@ -2957,7 +3133,19 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_954941bccb6ac959 =
-  BG.fromFFIType hs_bindgen_954941bccb6ac959_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              hs_bindgen_954941bccb6ac959_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+                (BG.toFFIType x4)
+                (BG.toFFIType x5)
 
 -- | Draws data using bound graphics state with an index buffer and instancing enabled.
 --
@@ -2967,7 +3155,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_DrawGPUIndexedPrimitives@, defined at @SDL3\/SDL_gpu.h 3560:34@
+--     [C declaration]: @SDL_DrawGPUIndexedPrimitives@, defined at @SDL3\/SDL_gpu.h 3572:34@
 sDL_DrawGPUIndexedPrimitives
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -3001,10 +3189,10 @@
 foreign import ccall safe "hs_bindgen_7e1d85570a924ed1"
   hs_bindgen_7e1d85570a924ed1_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_DrawGPUPrimitives@
@@ -3016,7 +3204,17 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_7e1d85570a924ed1 =
-  BG.fromFFIType hs_bindgen_7e1d85570a924ed1_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            hs_bindgen_7e1d85570a924ed1_base
+              (BG.toFFIType x0)
+              (BG.toFFIType x1)
+              (BG.toFFIType x2)
+              (BG.toFFIType x3)
+              (BG.toFFIType x4)
 
 -- | Draws data using bound graphics state.
 --
@@ -3026,7 +3224,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_DrawGPUPrimitives@, defined at @SDL3\/SDL_gpu.h 3588:34@
+--     [C declaration]: @SDL_DrawGPUPrimitives@, defined at @SDL3\/SDL_gpu.h 3600:34@
 sDL_DrawGPUPrimitives
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -3056,8 +3254,8 @@
   hs_bindgen_999f4bafc18ca643_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_DrawGPUPrimitivesIndirect@
@@ -3068,7 +3266,15 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_999f4bafc18ca643 =
-  BG.fromFFIType hs_bindgen_999f4bafc18ca643_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_999f4bafc18ca643_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Draws data using bound graphics state and with draw parameters set from a buffer.
 --
@@ -3076,7 +3282,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_DrawGPUPrimitivesIndirect@, defined at @SDL3\/SDL_gpu.h 3611:34@
+--     [C declaration]: @SDL_DrawGPUPrimitivesIndirect@, defined at @SDL3\/SDL_gpu.h 3623:34@
 sDL_DrawGPUPrimitivesIndirect
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -3103,8 +3309,8 @@
   hs_bindgen_2564f3889af73a8f_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_DrawGPUIndexedPrimitivesIndirect@
@@ -3115,7 +3321,15 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_2564f3889af73a8f =
-  BG.fromFFIType hs_bindgen_2564f3889af73a8f_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_2564f3889af73a8f_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Draws data using bound graphics state with an index buffer enabled and with draw parameters set from a buffer.
 --
@@ -3123,7 +3337,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_DrawGPUIndexedPrimitivesIndirect@, defined at @SDL3\/SDL_gpu.h 3633:34@
+--     [C declaration]: @SDL_DrawGPUIndexedPrimitivesIndirect@, defined at @SDL3\/SDL_gpu.h 3645:34@
 sDL_DrawGPUIndexedPrimitivesIndirect
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -3156,7 +3370,8 @@
   :: BG.Ptr SDL_GPURenderPass
   -> IO ()
 hs_bindgen_d2de9afaf4e7a298 =
-  BG.fromFFIType hs_bindgen_d2de9afaf4e7a298_base
+  \x0 ->
+    hs_bindgen_d2de9afaf4e7a298_base (BG.toFFIType x0)
 
 -- | Ends the given render pass.
 --
@@ -3164,7 +3379,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_EndGPURenderPass@, defined at @SDL3\/SDL_gpu.h 3649:34@
+--     [C declaration]: @SDL_EndGPURenderPass@, defined at @SDL3\/SDL_gpu.h 3661:34@
 sDL_EndGPURenderPass
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -3178,9 +3393,9 @@
   hs_bindgen_04814702f1c40b5f_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_BeginGPUComputePass@
@@ -3192,7 +3407,20 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO (BG.Ptr SDL_GPUComputePass)
 hs_bindgen_04814702f1c40b5f =
-  BG.fromFFIType hs_bindgen_04814702f1c40b5f_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_04814702f1c40b5f_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Begins a compute pass on a command buffer.
 --
@@ -3206,7 +3434,7 @@
 --
 --     [See also]: 'sDL_EndGPUComputePass'
 --
---     [C declaration]: @SDL_BeginGPUComputePass@, defined at @SDL3\/SDL_gpu.h 3691:50@
+--     [C declaration]: @SDL_BeginGPUComputePass@, defined at @SDL3\/SDL_gpu.h 3703:50@
 sDL_BeginGPUComputePass
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -3244,13 +3472,15 @@
   -> BG.Ptr SDL_GPUComputePipeline
   -> IO ()
 hs_bindgen_b04b2c08eaccdba1 =
-  BG.fromFFIType hs_bindgen_b04b2c08eaccdba1_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_b04b2c08eaccdba1_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Binds a compute pipeline on a command buffer for use in compute dispatch.
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_BindGPUComputePipeline@, defined at @SDL3\/SDL_gpu.h 3706:34@
+--     [C declaration]: @SDL_BindGPUComputePipeline@, defined at @SDL3\/SDL_gpu.h 3718:34@
 sDL_BindGPUComputePipeline
   :: BG.Ptr SDL_GPUComputePass
   -- ^
@@ -3268,9 +3498,9 @@
 foreign import ccall safe "hs_bindgen_94f4eed2a54840f8"
   hs_bindgen_94f4eed2a54840f8_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_BindGPUComputeSamplers@
@@ -3281,19 +3511,29 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_94f4eed2a54840f8 =
-  BG.fromFFIType hs_bindgen_94f4eed2a54840f8_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_94f4eed2a54840f8_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Binds texture-sampler pairs for use on the compute shader.
 --
 --     The textures must have been created with SDL_GPU_TEXTUREUSAGE_SAMPLER.
 --
+--     The textures being bound must have a matching type declared in the shader (2D, 3D, etc.). Multisample textures are not allowed.
+--
 --     Be sure your shader is set up according to the requirements documented in @SDL_CreateGPUComputePipeline()@.
 --
 --     @since 3.2.0
 --
 --     [See also]: 'sDL_CreateGPUComputePipeline'
 --
---     [C declaration]: @SDL_BindGPUComputeSamplers@, defined at @SDL3\/SDL_gpu.h 3729:34@
+--     [C declaration]: @SDL_BindGPUComputeSamplers@, defined at @SDL3\/SDL_gpu.h 3744:34@
 sDL_BindGPUComputeSamplers
   :: BG.Ptr SDL_GPUComputePass
   -- ^
@@ -3319,9 +3559,9 @@
 foreign import ccall safe "hs_bindgen_f7ee457bab9d199a"
   hs_bindgen_f7ee457bab9d199a_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_BindGPUComputeStorageTextures@
@@ -3332,19 +3572,29 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_f7ee457bab9d199a =
-  BG.fromFFIType hs_bindgen_f7ee457bab9d199a_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_f7ee457bab9d199a_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Binds storage textures as readonly for use on the compute pipeline.
 --
 --     These textures must have been created with SDL_GPU_TEXTUREUSAGE_COMPUTE_STORAGE_READ.
 --
+--     The textures being bound must have a matching type declared in the shader (2D, 3D, 2DMS, etc.)
+--
 --     Be sure your shader is set up according to the requirements documented in @SDL_CreateGPUComputePipeline()@.
 --
 --     @since 3.2.0
 --
 --     [See also]: 'sDL_CreateGPUComputePipeline'
 --
---     [C declaration]: @SDL_BindGPUComputeStorageTextures@, defined at @SDL3\/SDL_gpu.h 3753:34@
+--     [C declaration]: @SDL_BindGPUComputeStorageTextures@, defined at @SDL3\/SDL_gpu.h 3771:34@
 sDL_BindGPUComputeStorageTextures
   :: BG.Ptr SDL_GPUComputePass
   -- ^
@@ -3370,9 +3620,9 @@
 foreign import ccall safe "hs_bindgen_641e269a64317ba1"
   hs_bindgen_641e269a64317ba1_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_BindGPUComputeStorageBuffers@
@@ -3383,7 +3633,15 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_641e269a64317ba1 =
-  BG.fromFFIType hs_bindgen_641e269a64317ba1_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_641e269a64317ba1_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Binds storage buffers as readonly for use on the compute pipeline.
 --
@@ -3395,7 +3653,7 @@
 --
 --     [See also]: 'sDL_CreateGPUComputePipeline'
 --
---     [C declaration]: @SDL_BindGPUComputeStorageBuffers@, defined at @SDL3\/SDL_gpu.h 3777:34@
+--     [C declaration]: @SDL_BindGPUComputeStorageBuffers@, defined at @SDL3\/SDL_gpu.h 3795:34@
 sDL_BindGPUComputeStorageBuffers
   :: BG.Ptr SDL_GPUComputePass
   -- ^
@@ -3421,9 +3679,9 @@
 foreign import ccall safe "hs_bindgen_bf60fb94f2ea8730"
   hs_bindgen_bf60fb94f2ea8730_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_DispatchGPUCompute@
@@ -3434,7 +3692,15 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_bf60fb94f2ea8730 =
-  BG.fromFFIType hs_bindgen_bf60fb94f2ea8730_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_bf60fb94f2ea8730_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Dispatches compute work.
 --
@@ -3444,7 +3710,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_DispatchGPUCompute@, defined at @SDL3\/SDL_gpu.h 3803:34@
+--     [C declaration]: @SDL_DispatchGPUCompute@, defined at @SDL3\/SDL_gpu.h 3821:34@
 sDL_DispatchGPUCompute
   :: BG.Ptr SDL_GPUComputePass
   -- ^
@@ -3470,7 +3736,7 @@
   hs_bindgen_0f44002961b2beb1_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_DispatchGPUComputeIndirect@
@@ -3480,7 +3746,10 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_0f44002961b2beb1 =
-  BG.fromFFIType hs_bindgen_0f44002961b2beb1_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        hs_bindgen_0f44002961b2beb1_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2)
 
 -- | Dispatches compute work with parameters set from a buffer.
 --
@@ -3490,7 +3759,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_DispatchGPUComputeIndirect@, defined at @SDL3\/SDL_gpu.h 3827:34@
+--     [C declaration]: @SDL_DispatchGPUComputeIndirect@, defined at @SDL3\/SDL_gpu.h 3845:34@
 sDL_DispatchGPUComputeIndirect
   :: BG.Ptr SDL_GPUComputePass
   -- ^
@@ -3519,7 +3788,8 @@
   :: BG.Ptr SDL_GPUComputePass
   -> IO ()
 hs_bindgen_3dd5760089aac51a =
-  BG.fromFFIType hs_bindgen_3dd5760089aac51a_base
+  \x0 ->
+    hs_bindgen_3dd5760089aac51a_base (BG.toFFIType x0)
 
 -- | Ends the current compute pass.
 --
@@ -3527,7 +3797,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_EndGPUComputePass@, defined at @SDL3\/SDL_gpu.h 3842:34@
+--     [C declaration]: @SDL_EndGPUComputePass@, defined at @SDL3\/SDL_gpu.h 3860:34@
 sDL_EndGPUComputePass
   :: BG.Ptr SDL_GPUComputePass
   -- ^
@@ -3541,7 +3811,7 @@
   hs_bindgen_4482f6067e6e107e_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word8
+    -> BG.CBool
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_MapGPUTransferBuffer@
@@ -3551,7 +3821,12 @@
   -> BG.CBool
   -> IO (BG.Ptr BG.Void)
 hs_bindgen_4482f6067e6e107e =
-  BG.fromFFIType hs_bindgen_4482f6067e6e107e_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_4482f6067e6e107e_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Maps a transfer buffer into application address space.
 --
@@ -3561,7 +3836,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_MapGPUTransferBuffer@, defined at @SDL3\/SDL_gpu.h 3862:36@
+--     [C declaration]: @SDL_MapGPUTransferBuffer@, defined at @SDL3\/SDL_gpu.h 3880:36@
 sDL_MapGPUTransferBuffer
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -3592,13 +3867,15 @@
   -> BG.Ptr SDL_GPUTransferBuffer
   -> IO ()
 hs_bindgen_231a5479716b178e =
-  BG.fromFFIType hs_bindgen_231a5479716b178e_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_231a5479716b178e_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Unmaps a previously mapped transfer buffer.
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_UnmapGPUTransferBuffer@, defined at @SDL3\/SDL_gpu.h 3875:34@
+--     [C declaration]: @SDL_UnmapGPUTransferBuffer@, defined at @SDL3\/SDL_gpu.h 3893:34@
 sDL_UnmapGPUTransferBuffer
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -3623,7 +3900,8 @@
   :: BG.Ptr SDL_GPUCommandBuffer
   -> IO (BG.Ptr SDL_GPUCopyPass)
 hs_bindgen_e6f2bf9a9fc498cb =
-  BG.fromFFIType hs_bindgen_e6f2bf9a9fc498cb_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_e6f2bf9a9fc498cb_base (BG.toFFIType x0))
 
 -- | Begins a copy pass on a command buffer.
 --
@@ -3635,7 +3913,7 @@
 --
 --     [See also]: 'sDL_EndGPUCopyPass'
 --
---     [C declaration]: @SDL_BeginGPUCopyPass@, defined at @SDL3\/SDL_gpu.h 3895:47@
+--     [C declaration]: @SDL_BeginGPUCopyPass@, defined at @SDL3\/SDL_gpu.h 3913:47@
 sDL_BeginGPUCopyPass
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -3650,7 +3928,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word8
+    -> BG.CBool
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_UploadToGPUTexture@
@@ -3661,7 +3939,15 @@
   -> BG.CBool
   -> IO ()
 hs_bindgen_01d377001aa72f60 =
-  BG.fromFFIType hs_bindgen_01d377001aa72f60_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_01d377001aa72f60_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Uploads data from a transfer buffer to a texture.
 --
@@ -3671,7 +3957,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_UploadToGPUTexture@, defined at @SDL3\/SDL_gpu.h 3915:34@
+--     [C declaration]: @SDL_UploadToGPUTexture@, defined at @SDL3\/SDL_gpu.h 3933:34@
 sDL_UploadToGPUTexture
   :: BG.Ptr SDL_GPUCopyPass
   -- ^
@@ -3698,7 +3984,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word8
+    -> BG.CBool
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_UploadToGPUBuffer@
@@ -3709,7 +3995,15 @@
   -> BG.CBool
   -> IO ()
 hs_bindgen_6e1f7474e78322ce =
-  BG.fromFFIType hs_bindgen_6e1f7474e78322ce_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_6e1f7474e78322ce_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Uploads data from a transfer buffer to a buffer.
 --
@@ -3717,7 +4011,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_UploadToGPUBuffer@, defined at @SDL3\/SDL_gpu.h 3935:34@
+--     [C declaration]: @SDL_UploadToGPUBuffer@, defined at @SDL3\/SDL_gpu.h 3953:34@
 sDL_UploadToGPUBuffer
   :: BG.Ptr SDL_GPUCopyPass
   -- ^
@@ -3744,10 +4038,10 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Word8
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> BG.CBool
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_CopyGPUTextureToTexture@
@@ -3761,7 +4055,21 @@
   -> BG.CBool
   -> IO ()
 hs_bindgen_918f11a3023e9438 =
-  BG.fromFFIType hs_bindgen_918f11a3023e9438_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                hs_bindgen_918f11a3023e9438_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+                  (BG.toFFIType x5)
+                  (BG.toFFIType x6)
 
 -- | Performs a texture-to-texture copy.
 --
@@ -3771,7 +4079,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_CopyGPUTextureToTexture@, defined at @SDL3\/SDL_gpu.h 3962:34@
+--     [C declaration]: @SDL_CopyGPUTextureToTexture@, defined at @SDL3\/SDL_gpu.h 3980:34@
 sDL_CopyGPUTextureToTexture
   :: BG.Ptr SDL_GPUCopyPass
   -- ^
@@ -3811,8 +4119,8 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Word8
+    -> HsBindgen.Runtime.LibC.Word32
+    -> BG.CBool
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_CopyGPUBufferToBuffer@
@@ -3824,7 +4132,17 @@
   -> BG.CBool
   -> IO ()
 hs_bindgen_7075b4fcc48051e5 =
-  BG.fromFFIType hs_bindgen_7075b4fcc48051e5_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            hs_bindgen_7075b4fcc48051e5_base
+              (BG.toFFIType x0)
+              (BG.toFFIType x1)
+              (BG.toFFIType x2)
+              (BG.toFFIType x3)
+              (BG.toFFIType x4)
 
 -- | Performs a buffer-to-buffer copy.
 --
@@ -3832,7 +4150,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_CopyGPUBufferToBuffer@, defined at @SDL3\/SDL_gpu.h 3986:34@
+--     [C declaration]: @SDL_CopyGPUBufferToBuffer@, defined at @SDL3\/SDL_gpu.h 4004:34@
 sDL_CopyGPUBufferToBuffer
   :: BG.Ptr SDL_GPUCopyPass
   -- ^
@@ -3873,7 +4191,10 @@
   -> PtrConst.PtrConst SDL_GPUTextureTransferInfo
   -> IO ()
 hs_bindgen_26b4b49d8544fb8f =
-  BG.fromFFIType hs_bindgen_26b4b49d8544fb8f_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        hs_bindgen_26b4b49d8544fb8f_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2)
 
 -- | Copies data from a texture to a transfer buffer on the GPU timeline.
 --
@@ -3881,7 +4202,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_DownloadFromGPUTexture@, defined at @SDL3\/SDL_gpu.h 4006:34@
+--     [C declaration]: @SDL_DownloadFromGPUTexture@, defined at @SDL3\/SDL_gpu.h 4024:34@
 sDL_DownloadFromGPUTexture
   :: BG.Ptr SDL_GPUCopyPass
   -- ^
@@ -3914,7 +4235,10 @@
   -> PtrConst.PtrConst SDL_GPUTransferBufferLocation
   -> IO ()
 hs_bindgen_d9824eebc00631e9 =
-  BG.fromFFIType hs_bindgen_d9824eebc00631e9_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        hs_bindgen_d9824eebc00631e9_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2)
 
 -- | Copies data from a buffer to a transfer buffer on the GPU timeline.
 --
@@ -3922,7 +4246,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_DownloadFromGPUBuffer@, defined at @SDL3\/SDL_gpu.h 4023:34@
+--     [C declaration]: @SDL_DownloadFromGPUBuffer@, defined at @SDL3\/SDL_gpu.h 4041:34@
 sDL_DownloadFromGPUBuffer
   :: BG.Ptr SDL_GPUCopyPass
   -- ^
@@ -3951,13 +4275,14 @@
   :: BG.Ptr SDL_GPUCopyPass
   -> IO ()
 hs_bindgen_bf4e18ec8641dd60 =
-  BG.fromFFIType hs_bindgen_bf4e18ec8641dd60_base
+  \x0 ->
+    hs_bindgen_bf4e18ec8641dd60_base (BG.toFFIType x0)
 
 -- | Ends the current copy pass.
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_EndGPUCopyPass@, defined at @SDL3\/SDL_gpu.h 4035:34@
+--     [C declaration]: @SDL_EndGPUCopyPass@, defined at @SDL3\/SDL_gpu.h 4053:34@
 sDL_EndGPUCopyPass
   :: BG.Ptr SDL_GPUCopyPass
   -- ^
@@ -3979,7 +4304,9 @@
   -> BG.Ptr SDL_GPUTexture
   -> IO ()
 hs_bindgen_fa347415d8ba2bab =
-  BG.fromFFIType hs_bindgen_fa347415d8ba2bab_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_fa347415d8ba2bab_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Generates mipmaps for the given texture.
 --
@@ -3987,7 +4314,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GenerateMipmapsForGPUTexture@, defined at @SDL3\/SDL_gpu.h 4048:34@
+--     [C declaration]: @SDL_GenerateMipmapsForGPUTexture@, defined at @SDL3\/SDL_gpu.h 4066:34@
 sDL_GenerateMipmapsForGPUTexture
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -4014,7 +4341,9 @@
   -> PtrConst.PtrConst SDL_GPUBlitInfo
   -> IO ()
 hs_bindgen_2cf48971e4a0bb02 =
-  BG.fromFFIType hs_bindgen_2cf48971e4a0bb02_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_2cf48971e4a0bb02_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Blits from a source texture region to a destination texture region.
 --
@@ -4022,7 +4351,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_BlitGPUTexture@, defined at @SDL3\/SDL_gpu.h 4062:34@
+--     [C declaration]: @SDL_BlitGPUTexture@, defined at @SDL3\/SDL_gpu.h 4080:34@
 sDL_BlitGPUTexture
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -4040,8 +4369,8 @@
   hs_bindgen_7f2a5f493596626a_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
+    -> BG.CUInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_WindowSupportsGPUSwapchainComposition@
 hs_bindgen_7f2a5f493596626a
@@ -4050,7 +4379,12 @@
   -> SDL_GPUSwapchainComposition
   -> IO BG.CBool
 hs_bindgen_7f2a5f493596626a =
-  BG.fromFFIType hs_bindgen_7f2a5f493596626a_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_7f2a5f493596626a_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Determines whether a swapchain composition is supported by the window.
 --
@@ -4062,7 +4396,7 @@
 --
 --     [See also]: 'sDL_ClaimWindowForGPUDevice'
 --
---     [C declaration]: @SDL_WindowSupportsGPUSwapchainComposition@, defined at @SDL3\/SDL_gpu.h 4082:34@
+--     [C declaration]: @SDL_WindowSupportsGPUSwapchainComposition@, defined at @SDL3\/SDL_gpu.h 4100:34@
 sDL_WindowSupportsGPUSwapchainComposition
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -4085,8 +4419,8 @@
   hs_bindgen_832a19beda5bc034_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
+    -> BG.CUInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_WindowSupportsGPUPresentMode@
 hs_bindgen_832a19beda5bc034
@@ -4095,7 +4429,12 @@
   -> SDL_GPUPresentMode
   -> IO BG.CBool
 hs_bindgen_832a19beda5bc034 =
-  BG.fromFFIType hs_bindgen_832a19beda5bc034_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_832a19beda5bc034_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Determines whether a presentation mode is supported by the window.
 --
@@ -4107,7 +4446,7 @@
 --
 --     [See also]: 'sDL_ClaimWindowForGPUDevice'
 --
---     [C declaration]: @SDL_WindowSupportsGPUPresentMode@, defined at @SDL3\/SDL_gpu.h 4101:34@
+--     [C declaration]: @SDL_WindowSupportsGPUPresentMode@, defined at @SDL3\/SDL_gpu.h 4119:34@
 sDL_WindowSupportsGPUPresentMode
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -4130,7 +4469,7 @@
   hs_bindgen_5eeb91d45dc27764_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_ClaimWindowForGPUDevice@
 hs_bindgen_5eeb91d45dc27764
@@ -4138,7 +4477,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
   -> IO BG.CBool
 hs_bindgen_5eeb91d45dc27764 =
-  BG.fromFFIType hs_bindgen_5eeb91d45dc27764_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_5eeb91d45dc27764_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Claims a window, creating a swapchain structure for it.
 --
@@ -4154,7 +4495,7 @@
 --
 --     [See also]: 'sDL_WaitAndAcquireGPUSwapchainTexture', 'sDL_ReleaseWindowFromGPUDevice', 'sDL_WindowSupportsGPUPresentMode', 'sDL_WindowSupportsGPUSwapchainComposition'
 --
---     [C declaration]: @SDL_ClaimWindowForGPUDevice@, defined at @SDL3\/SDL_gpu.h 4133:34@
+--     [C declaration]: @SDL_ClaimWindowForGPUDevice@, defined at @SDL3\/SDL_gpu.h 4151:34@
 sDL_ClaimWindowForGPUDevice
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -4181,7 +4522,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
   -> IO ()
 hs_bindgen_00fb11a8b5935e0f =
-  BG.fromFFIType hs_bindgen_00fb11a8b5935e0f_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_00fb11a8b5935e0f_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Unclaims a window, destroying its swapchain structure.
 --
@@ -4189,7 +4532,7 @@
 --
 --     [See also]: 'sDL_ClaimWindowForGPUDevice'
 --
---     [C declaration]: @SDL_ReleaseWindowFromGPUDevice@, defined at @SDL3\/SDL_gpu.h 4147:34@
+--     [C declaration]: @SDL_ReleaseWindowFromGPUDevice@, defined at @SDL3\/SDL_gpu.h 4165:34@
 sDL_ReleaseWindowFromGPUDevice
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -4208,9 +4551,9 @@
   hs_bindgen_caf081d6c5e2aa14_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Word32
-    -> IO BG.Word8
+    -> BG.CUInt
+    -> BG.CUInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_SetGPUSwapchainParameters@
 hs_bindgen_caf081d6c5e2aa14
@@ -4220,7 +4563,18 @@
   -> SDL_GPUPresentMode
   -> IO BG.CBool
 hs_bindgen_caf081d6c5e2aa14 =
-  BG.fromFFIType hs_bindgen_caf081d6c5e2aa14_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_caf081d6c5e2aa14_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Changes the swapchain parameters for the given claimed window.
 --
@@ -4234,7 +4588,7 @@
 --
 --     [See also]: 'sDL_WindowSupportsGPUPresentMode', 'sDL_WindowSupportsGPUSwapchainComposition'
 --
---     [C declaration]: @SDL_SetGPUSwapchainParameters@, defined at @SDL3\/SDL_gpu.h 4174:34@
+--     [C declaration]: @SDL_SetGPUSwapchainParameters@, defined at @SDL3\/SDL_gpu.h 4192:34@
 sDL_SetGPUSwapchainParameters
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -4260,8 +4614,8 @@
 foreign import ccall safe "hs_bindgen_04ce0909a6c26d29"
   hs_bindgen_04ce0909a6c26d29_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_SetGPUAllowedFramesInFlight@
 hs_bindgen_04ce0909a6c26d29
@@ -4269,7 +4623,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_04ce0909a6c26d29 =
-  BG.fromFFIType hs_bindgen_04ce0909a6c26d29_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_04ce0909a6c26d29_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Configures the maximum allowed number of frames in flight.
 --
@@ -4285,7 +4641,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_SetGPUAllowedFramesInFlight@, defined at @SDL3\/SDL_gpu.h 4205:34@
+--     [C declaration]: @SDL_SetGPUAllowedFramesInFlight@, defined at @SDL3\/SDL_gpu.h 4223:34@
 sDL_SetGPUAllowedFramesInFlight
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -4304,7 +4660,7 @@
   hs_bindgen_6389b81fd8780e8b_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_GetGPUSwapchainTextureFormat@
 hs_bindgen_6389b81fd8780e8b
@@ -4312,7 +4668,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
   -> IO SDL_GPUTextureFormat
 hs_bindgen_6389b81fd8780e8b =
-  BG.fromFFIType hs_bindgen_6389b81fd8780e8b_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_6389b81fd8780e8b_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Obtains the texture format of the swapchain for the given window.
 --
@@ -4322,7 +4680,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGPUSwapchainTextureFormat@, defined at @SDL3\/SDL_gpu.h 4220:50@
+--     [C declaration]: @SDL_GetGPUSwapchainTextureFormat@, defined at @SDL3\/SDL_gpu.h 4238:50@
 sDL_GetGPUSwapchainTextureFormat
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -4344,7 +4702,7 @@
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_AcquireGPUSwapchainTexture@
 hs_bindgen_92ebdfd004d30834
@@ -4355,7 +4713,20 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_92ebdfd004d30834 =
-  BG.fromFFIType hs_bindgen_92ebdfd004d30834_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_92ebdfd004d30834_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Acquire a texture to use in presentation.
 --
@@ -4375,7 +4746,7 @@
 --
 --     [See also]: 'sDL_ClaimWindowForGPUDevice', 'sDL_SubmitGPUCommandBuffer', 'sDL_SubmitGPUCommandBufferAndAcquireFence', 'sDL_CancelGPUCommandBuffer', SDL_GetWindowSizeInPixels, 'sDL_WaitForGPUSwapchain', 'sDL_WaitAndAcquireGPUSwapchainTexture', 'sDL_SetGPUAllowedFramesInFlight'
 --
---     [C declaration]: @SDL_AcquireGPUSwapchainTexture@, defined at @SDL3\/SDL_gpu.h 4272:34@
+--     [C declaration]: @SDL_AcquireGPUSwapchainTexture@, defined at @SDL3\/SDL_gpu.h 4290:34@
 sDL_AcquireGPUSwapchainTexture
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -4406,7 +4777,7 @@
   hs_bindgen_819c0e296688c2c8_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_WaitForGPUSwapchain@
 hs_bindgen_819c0e296688c2c8
@@ -4414,7 +4785,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
   -> IO BG.CBool
 hs_bindgen_819c0e296688c2c8 =
-  BG.fromFFIType hs_bindgen_819c0e296688c2c8_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_819c0e296688c2c8_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Blocks the thread until a swapchain texture is available to be acquired.
 --
@@ -4426,7 +4799,7 @@
 --
 --     [See also]: 'sDL_AcquireGPUSwapchainTexture', 'sDL_WaitAndAcquireGPUSwapchainTexture', 'sDL_SetGPUAllowedFramesInFlight'
 --
---     [C declaration]: @SDL_WaitForGPUSwapchain@, defined at @SDL3\/SDL_gpu.h 4296:34@
+--     [C declaration]: @SDL_WaitForGPUSwapchain@, defined at @SDL3\/SDL_gpu.h 4314:34@
 sDL_WaitForGPUSwapchain
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -4447,7 +4820,7 @@
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_WaitAndAcquireGPUSwapchainTexture@
 hs_bindgen_b7be4df3492ace1e
@@ -4458,7 +4831,20 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_b7be4df3492ace1e =
-  BG.fromFFIType hs_bindgen_b7be4df3492ace1e_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_b7be4df3492ace1e_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Blocks the thread until a swapchain texture is available to be acquired, and then acquires it.
 --
@@ -4478,7 +4864,7 @@
 --
 --     [See also]: 'sDL_SubmitGPUCommandBuffer', 'sDL_SubmitGPUCommandBufferAndAcquireFence', 'sDL_AcquireGPUSwapchainTexture'
 --
---     [C declaration]: @SDL_WaitAndAcquireGPUSwapchainTexture@, defined at @SDL3\/SDL_gpu.h 4342:34@
+--     [C declaration]: @SDL_WaitAndAcquireGPUSwapchainTexture@, defined at @SDL3\/SDL_gpu.h 4360:34@
 sDL_WaitAndAcquireGPUSwapchainTexture
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -4508,14 +4894,15 @@
 foreign import ccall safe "hs_bindgen_6f98a07dd7e96530"
   hs_bindgen_6f98a07dd7e96530_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_SubmitGPUCommandBuffer@
 hs_bindgen_6f98a07dd7e96530
   :: BG.Ptr SDL_GPUCommandBuffer
   -> IO BG.CBool
 hs_bindgen_6f98a07dd7e96530 =
-  BG.fromFFIType hs_bindgen_6f98a07dd7e96530_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_6f98a07dd7e96530_base (BG.toFFIType x0))
 
 -- | Submits a command buffer so its commands can be processed on the GPU.
 --
@@ -4531,7 +4918,7 @@
 --
 --     [See also]: 'sDL_AcquireGPUCommandBuffer', 'sDL_WaitAndAcquireGPUSwapchainTexture', 'sDL_AcquireGPUSwapchainTexture', 'sDL_SubmitGPUCommandBufferAndAcquireFence'
 --
---     [C declaration]: @SDL_SubmitGPUCommandBuffer@, defined at @SDL3\/SDL_gpu.h 4370:34@
+--     [C declaration]: @SDL_SubmitGPUCommandBuffer@, defined at @SDL3\/SDL_gpu.h 4388:34@
 sDL_SubmitGPUCommandBuffer
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -4552,7 +4939,8 @@
   :: BG.Ptr SDL_GPUCommandBuffer
   -> IO (BG.Ptr SDL_GPUFence)
 hs_bindgen_897578b42f3c05e8 =
-  BG.fromFFIType hs_bindgen_897578b42f3c05e8_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_897578b42f3c05e8_base (BG.toFFIType x0))
 
 -- | Submits a command buffer so its commands can be processed on the GPU, and acquires a fence associated with the command buffer.
 --
@@ -4568,7 +4956,7 @@
 --
 --     [See also]: 'sDL_AcquireGPUCommandBuffer', 'sDL_WaitAndAcquireGPUSwapchainTexture', 'sDL_AcquireGPUSwapchainTexture', 'sDL_SubmitGPUCommandBuffer', 'sDL_ReleaseGPUFence'
 --
---     [C declaration]: @SDL_SubmitGPUCommandBufferAndAcquireFence@, defined at @SDL3\/SDL_gpu.h 4397:44@
+--     [C declaration]: @SDL_SubmitGPUCommandBufferAndAcquireFence@, defined at @SDL3\/SDL_gpu.h 4415:44@
 sDL_SubmitGPUCommandBufferAndAcquireFence
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -4582,14 +4970,15 @@
 foreign import ccall safe "hs_bindgen_e7e00ea7d024e9e9"
   hs_bindgen_e7e00ea7d024e9e9_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_CancelGPUCommandBuffer@
 hs_bindgen_e7e00ea7d024e9e9
   :: BG.Ptr SDL_GPUCommandBuffer
   -> IO BG.CBool
 hs_bindgen_e7e00ea7d024e9e9 =
-  BG.fromFFIType hs_bindgen_e7e00ea7d024e9e9_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_e7e00ea7d024e9e9_base (BG.toFFIType x0))
 
 -- | Cancels a command buffer.
 --
@@ -4607,7 +4996,7 @@
 --
 --     [See also]: 'sDL_WaitAndAcquireGPUSwapchainTexture', 'sDL_AcquireGPUCommandBuffer', 'sDL_AcquireGPUSwapchainTexture'
 --
---     [C declaration]: @SDL_CancelGPUCommandBuffer@, defined at @SDL3\/SDL_gpu.h 4422:34@
+--     [C declaration]: @SDL_CancelGPUCommandBuffer@, defined at @SDL3\/SDL_gpu.h 4440:34@
 sDL_CancelGPUCommandBuffer
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -4621,14 +5010,15 @@
 foreign import ccall safe "hs_bindgen_afeaba8d92329a17"
   hs_bindgen_afeaba8d92329a17_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_WaitForGPUIdle@
 hs_bindgen_afeaba8d92329a17
   :: BG.Ptr SDL_GPUDevice
   -> IO BG.CBool
 hs_bindgen_afeaba8d92329a17 =
-  BG.fromFFIType hs_bindgen_afeaba8d92329a17_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_afeaba8d92329a17_base (BG.toFFIType x0))
 
 -- | Blocks the thread until the GPU is completely idle.
 --
@@ -4638,7 +5028,7 @@
 --
 --     [See also]: 'sDL_WaitForGPUFences'
 --
---     [C declaration]: @SDL_WaitForGPUIdle@, defined at @SDL3\/SDL_gpu.h 4436:34@
+--     [C declaration]: @SDL_WaitForGPUIdle@, defined at @SDL3\/SDL_gpu.h 4454:34@
 sDL_WaitForGPUIdle
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -4651,10 +5041,10 @@
 foreign import ccall safe "hs_bindgen_c1152a4254c2282b"
   hs_bindgen_c1152a4254c2282b_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
+    -> BG.CBool
     -> BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_WaitForGPUFences@
 hs_bindgen_c1152a4254c2282b
@@ -4664,7 +5054,18 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_c1152a4254c2282b =
-  BG.fromFFIType hs_bindgen_c1152a4254c2282b_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_c1152a4254c2282b_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Blocks the thread until the given fences are signaled.
 --
@@ -4674,7 +5075,7 @@
 --
 --     [See also]: 'sDL_SubmitGPUCommandBufferAndAcquireFence', 'sDL_WaitForGPUIdle'
 --
---     [C declaration]: @SDL_WaitForGPUFences@, defined at @SDL3\/SDL_gpu.h 4455:34@
+--     [C declaration]: @SDL_WaitForGPUFences@, defined at @SDL3\/SDL_gpu.h 4473:34@
 sDL_WaitForGPUFences
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -4700,7 +5101,7 @@
   hs_bindgen_b6027b7729f79f17_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_QueryGPUFence@
 hs_bindgen_b6027b7729f79f17
@@ -4708,7 +5109,9 @@
   -> BG.Ptr SDL_GPUFence
   -> IO BG.CBool
 hs_bindgen_b6027b7729f79f17 =
-  BG.fromFFIType hs_bindgen_b6027b7729f79f17_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_b6027b7729f79f17_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Checks the status of a fence.
 --
@@ -4718,7 +5121,7 @@
 --
 --     [See also]: 'sDL_SubmitGPUCommandBufferAndAcquireFence'
 --
---     [C declaration]: @SDL_QueryGPUFence@, defined at @SDL3\/SDL_gpu.h 4472:34@
+--     [C declaration]: @SDL_QueryGPUFence@, defined at @SDL3\/SDL_gpu.h 4490:34@
 sDL_QueryGPUFence
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -4744,7 +5147,9 @@
   -> BG.Ptr SDL_GPUFence
   -> IO ()
 hs_bindgen_60db26ce4b928463 =
-  BG.fromFFIType hs_bindgen_60db26ce4b928463_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_60db26ce4b928463_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Releases a fence obtained from SDL_SubmitGPUCommandBufferAndAcquireFence.
 --
@@ -4754,7 +5159,7 @@
 --
 --     [See also]: 'sDL_SubmitGPUCommandBufferAndAcquireFence'
 --
---     [C declaration]: @SDL_ReleaseGPUFence@, defined at @SDL3\/SDL_gpu.h 4488:34@
+--     [C declaration]: @SDL_ReleaseGPUFence@, defined at @SDL3\/SDL_gpu.h 4506:34@
 sDL_ReleaseGPUFence
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -4770,15 +5175,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_GPUTextureFormatTexelBlockSize@
 foreign import ccall safe "hs_bindgen_10b178c2418e1b7a"
   hs_bindgen_10b178c2418e1b7a_base
-    :: BG.Word32
-    -> IO BG.Word32
+    :: BG.CUInt
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_GPUTextureFormatTexelBlockSize@
 hs_bindgen_10b178c2418e1b7a
   :: SDL_GPUTextureFormat
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
 hs_bindgen_10b178c2418e1b7a =
-  BG.fromFFIType hs_bindgen_10b178c2418e1b7a_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_10b178c2418e1b7a_base (BG.toFFIType x0))
 
 -- | Obtains the texel block size for a texture format.
 --
@@ -4788,7 +5194,7 @@
 --
 --     [See also]: 'sDL_UploadToGPUTexture'
 --
---     [C declaration]: @SDL_GPUTextureFormatTexelBlockSize@, defined at @SDL3\/SDL_gpu.h 4504:36@
+--     [C declaration]: @SDL_GPUTextureFormatTexelBlockSize@, defined at @SDL3\/SDL_gpu.h 4522:36@
 sDL_GPUTextureFormatTexelBlockSize
   :: SDL_GPUTextureFormat
   -- ^
@@ -4802,10 +5208,10 @@
 foreign import ccall safe "hs_bindgen_e7f998463fccba5a"
   hs_bindgen_e7f998463fccba5a_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Word32
-    -> IO BG.Word8
+    -> BG.CUInt
+    -> BG.CUInt
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_GPUTextureSupportsFormat@
 hs_bindgen_e7f998463fccba5a
@@ -4815,7 +5221,18 @@
   -> SDL_GPUTextureUsageFlags
   -> IO BG.CBool
 hs_bindgen_e7f998463fccba5a =
-  BG.fromFFIType hs_bindgen_e7f998463fccba5a_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_e7f998463fccba5a_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Determines whether a texture format is supported for a given type and usage.
 --
@@ -4823,7 +5240,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GPUTextureSupportsFormat@, defined at @SDL3\/SDL_gpu.h 4519:34@
+--     [C declaration]: @SDL_GPUTextureSupportsFormat@, defined at @SDL3\/SDL_gpu.h 4537:34@
 sDL_GPUTextureSupportsFormat
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -4849,9 +5266,9 @@
 foreign import ccall safe "hs_bindgen_de6deb1af3775431"
   hs_bindgen_de6deb1af3775431_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Word32
-    -> IO BG.Word8
+    -> BG.CUInt
+    -> BG.CUInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_GPUTextureSupportsSampleCount@
 hs_bindgen_de6deb1af3775431
@@ -4860,7 +5277,12 @@
   -> SDL_GPUSampleCount
   -> IO BG.CBool
 hs_bindgen_de6deb1af3775431 =
-  BG.fromFFIType hs_bindgen_de6deb1af3775431_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_de6deb1af3775431_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Determines if a sample count for a texture format is supported.
 --
@@ -4868,7 +5290,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GPUTextureSupportsSampleCount@, defined at @SDL3\/SDL_gpu.h 4535:34@
+--     [C declaration]: @SDL_GPUTextureSupportsSampleCount@, defined at @SDL3\/SDL_gpu.h 4553:34@
 sDL_GPUTextureSupportsSampleCount
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -4889,11 +5311,11 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_CalculateGPUTextureFormatSize@
 foreign import ccall safe "hs_bindgen_d9b37eb9aa5f44b5"
   hs_bindgen_d9b37eb9aa5f44b5_base
-    :: BG.Word32
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Word32
-    -> IO BG.Word32
+    :: BG.CUInt
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_CalculateGPUTextureFormatSize@
 hs_bindgen_d9b37eb9aa5f44b5
@@ -4903,7 +5325,18 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
 hs_bindgen_d9b37eb9aa5f44b5 =
-  BG.fromFFIType hs_bindgen_d9b37eb9aa5f44b5_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_d9b37eb9aa5f44b5_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Calculate the size in bytes of a texture format with dimensions.
 --
@@ -4911,7 +5344,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_CalculateGPUTextureFormatSize@, defined at @SDL3\/SDL_gpu.h 4551:36@
+--     [C declaration]: @SDL_CalculateGPUTextureFormatSize@, defined at @SDL3\/SDL_gpu.h 4569:36@
 sDL_CalculateGPUTextureFormatSize
   :: SDL_GPUTextureFormat
   -- ^
@@ -4936,15 +5369,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_GetPixelFormatFromGPUTextureFormat@
 foreign import ccall safe "hs_bindgen_128db189d446a117"
   hs_bindgen_128db189d446a117_base
-    :: BG.Word32
-    -> IO BG.Word32
+    :: BG.CUInt
+    -> IO HsBindgen.Runtime.Support.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_GetPixelFormatFromGPUTextureFormat@
 hs_bindgen_128db189d446a117
   :: SDL_GPUTextureFormat
   -> IO SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
 hs_bindgen_128db189d446a117 =
-  BG.fromFFIType hs_bindgen_128db189d446a117_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_128db189d446a117_base (BG.toFFIType x0))
 
 -- | Get the SDL pixel format corresponding to a GPU texture format.
 --
@@ -4952,7 +5386,7 @@
 --
 --     @since 3.4.0
 --
---     [C declaration]: @SDL_GetPixelFormatFromGPUTextureFormat@, defined at @SDL3\/SDL_gpu.h 4566:45@
+--     [C declaration]: @SDL_GetPixelFormatFromGPUTextureFormat@, defined at @SDL3\/SDL_gpu.h 4584:45@
 sDL_GetPixelFormatFromGPUTextureFormat
   :: SDL_GPUTextureFormat
   -- ^
@@ -4965,15 +5399,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_GetGPUTextureFormatFromPixelFormat@
 foreign import ccall safe "hs_bindgen_af0c7c8e2642605b"
   hs_bindgen_af0c7c8e2642605b_base
-    :: BG.Word32
-    -> IO BG.Word32
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Safe_SDL_GetGPUTextureFormatFromPixelFormat@
 hs_bindgen_af0c7c8e2642605b
   :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
   -> IO SDL_GPUTextureFormat
 hs_bindgen_af0c7c8e2642605b =
-  BG.fromFFIType hs_bindgen_af0c7c8e2642605b_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_af0c7c8e2642605b_base (BG.toFFIType x0))
 
 -- | Get the GPU texture format corresponding to an SDL pixel format.
 --
@@ -4981,7 +5416,7 @@
 --
 --     @since 3.4.0
 --
---     [C declaration]: @SDL_GetGPUTextureFormatFromPixelFormat@, defined at @SDL3\/SDL_gpu.h 4578:50@
+--     [C declaration]: @SDL_GetGPUTextureFormatFromPixelFormat@, defined at @SDL3\/SDL_gpu.h 4596:50@
 sDL_GetGPUTextureFormatFromPixelFormat
   :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
   -- ^
diff --git a/src/SDL3/Sys/Bindgen/Gpu/Unsafe.hs b/src/SDL3/Sys/Bindgen/Gpu/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Gpu/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Gpu/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Gpu.Unsafe (
@@ -101,7 +103,11 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Gpu
@@ -113,7 +119,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_gpu.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_gpu.h>"
          , "_Bool hs_bindgen_e2f3f6a8de0de73c ("
          , "  SDL_GPUShaderFormat arg1,"
          , "  char const *arg2"
@@ -862,9 +872,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_GPUSupportsShaderFormats@
 foreign import ccall unsafe "hs_bindgen_e2f3f6a8de0de73c"
   hs_bindgen_e2f3f6a8de0de73c_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_GPUSupportsShaderFormats@
 hs_bindgen_e2f3f6a8de0de73c
@@ -872,7 +882,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_e2f3f6a8de0de73c =
-  BG.fromFFIType hs_bindgen_e2f3f6a8de0de73c_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_e2f3f6a8de0de73c_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Checks for GPU runtime support.
 --
@@ -899,15 +911,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_GPUSupportsProperties@
 foreign import ccall unsafe "hs_bindgen_c9ca417a5f641e3f"
   hs_bindgen_c9ca417a5f641e3f_base
-    :: BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_GPUSupportsProperties@
 hs_bindgen_c9ca417a5f641e3f
   :: SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
   -> IO BG.CBool
 hs_bindgen_c9ca417a5f641e3f =
-  BG.fromFFIType hs_bindgen_c9ca417a5f641e3f_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c9ca417a5f641e3f_base (BG.toFFIType x0))
 
 -- | Checks for GPU runtime support.
 --
@@ -930,8 +943,8 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_CreateGPUDevice@
 foreign import ccall unsafe "hs_bindgen_b51ca46a4251feb8"
   hs_bindgen_b51ca46a4251feb8_base
-    :: BG.Word32
-    -> BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> BG.CBool
     -> BG.Ptr BG.Void
     -> IO (BG.Ptr BG.Void)
 
@@ -942,7 +955,12 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO (BG.Ptr SDL_GPUDevice)
 hs_bindgen_b51ca46a4251feb8 =
-  BG.fromFFIType hs_bindgen_b51ca46a4251feb8_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_b51ca46a4251feb8_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Creates a GPU context.
 --
@@ -982,7 +1000,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_CreateGPUDeviceWithProperties@
 foreign import ccall unsafe "hs_bindgen_376515fb91ec90e3"
   hs_bindgen_376515fb91ec90e3_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_CreateGPUDeviceWithProperties@
@@ -990,7 +1008,8 @@
   :: SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
   -> IO (BG.Ptr SDL_GPUDevice)
 hs_bindgen_376515fb91ec90e3 =
-  BG.fromFFIType hs_bindgen_376515fb91ec90e3_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_376515fb91ec90e3_base (BG.toFFIType x0))
 
 -- | Creates a GPU context.
 --
@@ -1071,7 +1090,8 @@
   :: BG.Ptr SDL_GPUDevice
   -> IO ()
 hs_bindgen_7ff5a8cdf38e3bf0 =
-  BG.fromFFIType hs_bindgen_7ff5a8cdf38e3bf0_base
+  \x0 ->
+    hs_bindgen_7ff5a8cdf38e3bf0_base (BG.toFFIType x0)
 
 -- | Destroys a GPU context previously returned by SDL_CreateGPUDevice.
 --
@@ -1091,12 +1111,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_GetNumGPUDrivers@
 foreign import ccall unsafe "hs_bindgen_6011a5df785dd689"
   hs_bindgen_6011a5df785dd689_base
-    :: IO BG.Int32
+    :: IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_GetNumGPUDrivers@
 hs_bindgen_6011a5df785dd689 :: IO BG.CInt
 hs_bindgen_6011a5df785dd689 =
-  BG.fromFFIType hs_bindgen_6011a5df785dd689_base
+  fmap BG.fromFFIType hs_bindgen_6011a5df785dd689_base
 
 -- | Get the number of GPU drivers compiled into SDL.
 --
@@ -1113,7 +1133,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_GetGPUDriver@
 foreign import ccall unsafe "hs_bindgen_5bd47cd4296c5cf8"
   hs_bindgen_5bd47cd4296c5cf8_base
-    :: BG.Int32
+    :: BG.CInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_GetGPUDriver@
@@ -1121,7 +1141,8 @@
   :: BG.CInt
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_5bd47cd4296c5cf8 =
-  BG.fromFFIType hs_bindgen_5bd47cd4296c5cf8_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_5bd47cd4296c5cf8_base (BG.toFFIType x0))
 
 -- | Get the name of a built in GPU driver.
 --
@@ -1155,7 +1176,8 @@
   :: BG.Ptr SDL_GPUDevice
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_bf49abcda2b24803 =
-  BG.fromFFIType hs_bindgen_bf49abcda2b24803_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_bf49abcda2b24803_base (BG.toFFIType x0))
 
 -- | Returns the name of the backend used to create this GPU context.
 --
@@ -1176,14 +1198,15 @@
 foreign import ccall unsafe "hs_bindgen_20513b344f1e3b64"
   hs_bindgen_20513b344f1e3b64_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_GetGPUShaderFormats@
 hs_bindgen_20513b344f1e3b64
   :: BG.Ptr SDL_GPUDevice
   -> IO SDL_GPUShaderFormat
 hs_bindgen_20513b344f1e3b64 =
-  BG.fromFFIType hs_bindgen_20513b344f1e3b64_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_20513b344f1e3b64_base (BG.toFFIType x0))
 
 -- | Returns the supported shader formats for this GPU context.
 --
@@ -1204,14 +1227,15 @@
 foreign import ccall unsafe "hs_bindgen_caf8299b42e53b94"
   hs_bindgen_caf8299b42e53b94_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_GetGPUDeviceProperties@
 hs_bindgen_caf8299b42e53b94
   :: BG.Ptr SDL_GPUDevice
   -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
 hs_bindgen_caf8299b42e53b94 =
-  BG.fromFFIType hs_bindgen_caf8299b42e53b94_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_caf8299b42e53b94_base (BG.toFFIType x0))
 
 -- | Get the properties associated with a GPU device.
 --
@@ -1337,7 +1361,9 @@
   -> PtrConst.PtrConst SDL_GPUComputePipelineCreateInfo
   -> IO (BG.Ptr SDL_GPUComputePipeline)
 hs_bindgen_47c9f4418564565f =
-  BG.fromFFIType hs_bindgen_47c9f4418564565f_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_47c9f4418564565f_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Creates a pipeline object to be used in a compute workflow.
 --
@@ -1402,7 +1428,9 @@
   -> PtrConst.PtrConst SDL_GPUGraphicsPipelineCreateInfo
   -> IO (BG.Ptr SDL_GPUGraphicsPipeline)
 hs_bindgen_18c5db2a0d02cde2 =
-  BG.fromFFIType hs_bindgen_18c5db2a0d02cde2_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_18c5db2a0d02cde2_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Creates a pipeline object to be used in a graphics workflow.
 --
@@ -1443,7 +1471,9 @@
   -> PtrConst.PtrConst SDL_GPUSamplerCreateInfo
   -> IO (BG.Ptr SDL_GPUSampler)
 hs_bindgen_a1a95a3f30be0f83 =
-  BG.fromFFIType hs_bindgen_a1a95a3f30be0f83_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_a1a95a3f30be0f83_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Creates a sampler object to be used when binding textures in a graphics workflow.
 --
@@ -1483,7 +1513,9 @@
   -> PtrConst.PtrConst SDL_GPUShaderCreateInfo
   -> IO (BG.Ptr SDL_GPUShader)
 hs_bindgen_9bba04f484907a46 =
-  BG.fromFFIType hs_bindgen_9bba04f484907a46_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_9bba04f484907a46_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Creates a shader to be used when creating a graphics pipeline.
 --
@@ -1567,7 +1599,9 @@
   -> PtrConst.PtrConst SDL_GPUTextureCreateInfo
   -> IO (BG.Ptr SDL_GPUTexture)
 hs_bindgen_e954a5b015dea03b =
-  BG.fromFFIType hs_bindgen_e954a5b015dea03b_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_e954a5b015dea03b_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Creates a texture object to be used in graphics or compute workflows.
 --
@@ -1625,7 +1659,9 @@
   -> PtrConst.PtrConst SDL_GPUBufferCreateInfo
   -> IO (BG.Ptr SDL_GPUBuffer)
 hs_bindgen_ed280f9c2dd5b278 =
-  BG.fromFFIType hs_bindgen_ed280f9c2dd5b278_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_ed280f9c2dd5b278_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Creates a buffer object to be used in graphics or compute workflows.
 --
@@ -1671,7 +1707,9 @@
   -> PtrConst.PtrConst SDL_GPUTransferBufferCreateInfo
   -> IO (BG.Ptr SDL_GPUTransferBuffer)
 hs_bindgen_848522e8bdb350b2 =
-  BG.fromFFIType hs_bindgen_848522e8bdb350b2_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_848522e8bdb350b2_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Creates a transfer buffer to be used when uploading to or downloading from graphics resources.
 --
@@ -1716,7 +1754,10 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO ()
 hs_bindgen_b8e2db9733a08cbe =
-  BG.fromFFIType hs_bindgen_b8e2db9733a08cbe_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        hs_bindgen_b8e2db9733a08cbe_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2)
 
 -- | Sets an arbitrary string constant to label a buffer.
 --
@@ -1760,7 +1801,10 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO ()
 hs_bindgen_6831ff7e87614fc1 =
-  BG.fromFFIType hs_bindgen_6831ff7e87614fc1_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        hs_bindgen_6831ff7e87614fc1_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2)
 
 -- | Sets an arbitrary string constant to label a texture.
 --
@@ -1802,7 +1846,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO ()
 hs_bindgen_56a7e36b3e8524dd =
-  BG.fromFFIType hs_bindgen_56a7e36b3e8524dd_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_56a7e36b3e8524dd_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Inserts an arbitrary string label into the command buffer callstream.
 --
@@ -1838,7 +1884,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO ()
 hs_bindgen_41af45d04529f84d =
-  BG.fromFFIType hs_bindgen_41af45d04529f84d_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_41af45d04529f84d_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Begins a debug group with an arbitrary name.
 --
@@ -1878,7 +1926,8 @@
   :: BG.Ptr SDL_GPUCommandBuffer
   -> IO ()
 hs_bindgen_5dae404b2ebaa08b =
-  BG.fromFFIType hs_bindgen_5dae404b2ebaa08b_base
+  \x0 ->
+    hs_bindgen_5dae404b2ebaa08b_base (BG.toFFIType x0)
 
 -- | Ends the most-recently pushed debug group.
 --
@@ -1910,7 +1959,9 @@
   -> BG.Ptr SDL_GPUTexture
   -> IO ()
 hs_bindgen_64db5410128eae2d =
-  BG.fromFFIType hs_bindgen_64db5410128eae2d_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_64db5410128eae2d_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Frees the given texture as soon as it is safe to do so.
 --
@@ -1944,7 +1995,9 @@
   -> BG.Ptr SDL_GPUSampler
   -> IO ()
 hs_bindgen_13cdb1700ceeed7f =
-  BG.fromFFIType hs_bindgen_13cdb1700ceeed7f_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_13cdb1700ceeed7f_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Frees the given sampler as soon as it is safe to do so.
 --
@@ -1978,7 +2031,9 @@
   -> BG.Ptr SDL_GPUBuffer
   -> IO ()
 hs_bindgen_fcdfc18ed875a278 =
-  BG.fromFFIType hs_bindgen_fcdfc18ed875a278_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_fcdfc18ed875a278_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Frees the given buffer as soon as it is safe to do so.
 --
@@ -2012,7 +2067,9 @@
   -> BG.Ptr SDL_GPUTransferBuffer
   -> IO ()
 hs_bindgen_e731b5deaeeee3c1 =
-  BG.fromFFIType hs_bindgen_e731b5deaeeee3c1_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_e731b5deaeeee3c1_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Frees the given transfer buffer as soon as it is safe to do so.
 --
@@ -2047,7 +2104,9 @@
   -> BG.Ptr SDL_GPUComputePipeline
   -> IO ()
 hs_bindgen_f9bd20900c9e4080 =
-  BG.fromFFIType hs_bindgen_f9bd20900c9e4080_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_f9bd20900c9e4080_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Frees the given compute pipeline as soon as it is safe to do so.
 --
@@ -2082,7 +2141,9 @@
   -> BG.Ptr SDL_GPUShader
   -> IO ()
 hs_bindgen_e516abeced8d372b =
-  BG.fromFFIType hs_bindgen_e516abeced8d372b_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_e516abeced8d372b_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Frees the given shader as soon as it is safe to do so.
 --
@@ -2116,7 +2177,9 @@
   -> BG.Ptr SDL_GPUGraphicsPipeline
   -> IO ()
 hs_bindgen_9c01a03b4ad6f8be =
-  BG.fromFFIType hs_bindgen_9c01a03b4ad6f8be_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_9c01a03b4ad6f8be_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Frees the given graphics pipeline as soon as it is safe to do so.
 --
@@ -2149,7 +2212,8 @@
   :: BG.Ptr SDL_GPUDevice
   -> IO (BG.Ptr SDL_GPUCommandBuffer)
 hs_bindgen_27337c63b7093b75 =
-  BG.fromFFIType hs_bindgen_27337c63b7093b75_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_27337c63b7093b75_base (BG.toFFIType x0))
 
 -- | Acquire a command buffer.
 --
@@ -2177,9 +2241,9 @@
 foreign import ccall unsafe "hs_bindgen_a5504d727b5181e0"
   hs_bindgen_a5504d727b5181e0_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_PushGPUVertexUniformData@
@@ -2190,7 +2254,15 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_a5504d727b5181e0 =
-  BG.fromFFIType hs_bindgen_a5504d727b5181e0_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_a5504d727b5181e0_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Pushes data to a vertex uniform slot on the command buffer.
 --
@@ -2228,9 +2300,9 @@
 foreign import ccall unsafe "hs_bindgen_c1b93561fe6f3eb8"
   hs_bindgen_c1b93561fe6f3eb8_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_PushGPUFragmentUniformData@
@@ -2241,7 +2313,15 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_c1b93561fe6f3eb8 =
-  BG.fromFFIType hs_bindgen_c1b93561fe6f3eb8_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_c1b93561fe6f3eb8_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Pushes data to a fragment uniform slot on the command buffer.
 --
@@ -2277,9 +2357,9 @@
 foreign import ccall unsafe "hs_bindgen_267be67577031d05"
   hs_bindgen_267be67577031d05_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_PushGPUComputeUniformData@
@@ -2290,7 +2370,15 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_267be67577031d05 =
-  BG.fromFFIType hs_bindgen_267be67577031d05_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_267be67577031d05_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Pushes data to a uniform slot on the command buffer.
 --
@@ -2327,7 +2415,7 @@
   hs_bindgen_b04297da6f821242_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> IO (BG.Ptr BG.Void)
 
@@ -2339,7 +2427,18 @@
   -> PtrConst.PtrConst SDL_GPUDepthStencilTargetInfo
   -> IO (BG.Ptr SDL_GPURenderPass)
 hs_bindgen_b04297da6f821242 =
-  BG.fromFFIType hs_bindgen_b04297da6f821242_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_b04297da6f821242_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Begins a render pass on a command buffer.
 --
@@ -2387,7 +2486,9 @@
   -> BG.Ptr SDL_GPUGraphicsPipeline
   -> IO ()
 hs_bindgen_a6ebeaec23a3eebc =
-  BG.fromFFIType hs_bindgen_a6ebeaec23a3eebc_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_a6ebeaec23a3eebc_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Binds a graphics pipeline on a render pass to be used in rendering.
 --
@@ -2422,7 +2523,9 @@
   -> PtrConst.PtrConst SDL_GPUViewport
   -> IO ()
 hs_bindgen_f53e27fd1f10bfea =
-  BG.fromFFIType hs_bindgen_f53e27fd1f10bfea_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_f53e27fd1f10bfea_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Sets the current viewport state on a command buffer.
 --
@@ -2454,7 +2557,9 @@
   -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
   -> IO ()
 hs_bindgen_bc8dd2f3086d94d5 =
-  BG.fromFFIType hs_bindgen_bc8dd2f3086d94d5_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_bc8dd2f3086d94d5_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Sets the current scissor state on a command buffer.
 --
@@ -2486,7 +2591,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Pixels.SDL_FColor
   -> IO ()
 hs_bindgen_85e648c31f1fcb70 =
-  BG.fromFFIType hs_bindgen_85e648c31f1fcb70_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_85e648c31f1fcb70_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Sets the current blend constants on a command buffer.
 --
@@ -2518,7 +2625,7 @@
 foreign import ccall unsafe "hs_bindgen_142400b7edd5f15e"
   hs_bindgen_142400b7edd5f15e_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
+    -> HsBindgen.Runtime.LibC.Word8
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_SetGPUStencilReference@
@@ -2527,7 +2634,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO ()
 hs_bindgen_142400b7edd5f15e =
-  BG.fromFFIType hs_bindgen_142400b7edd5f15e_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_142400b7edd5f15e_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Sets the current stencil reference value on a command buffer.
 --
@@ -2551,9 +2660,9 @@
 foreign import ccall unsafe "hs_bindgen_049713abad47ef65"
   hs_bindgen_049713abad47ef65_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_BindGPUVertexBuffers@
@@ -2564,7 +2673,15 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_049713abad47ef65 =
-  BG.fromFFIType hs_bindgen_049713abad47ef65_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_049713abad47ef65_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Binds vertex buffers on a command buffer for use with subsequent draw calls.
 --
@@ -2597,7 +2714,7 @@
   hs_bindgen_eebac58434b8d6c1_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> BG.CUInt
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_BindGPUIndexBuffer@
@@ -2607,7 +2724,10 @@
   -> SDL_GPUIndexElementSize
   -> IO ()
 hs_bindgen_eebac58434b8d6c1 =
-  BG.fromFFIType hs_bindgen_eebac58434b8d6c1_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        hs_bindgen_eebac58434b8d6c1_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2)
 
 -- | Binds an index buffer on a command buffer for use with subsequent draw calls.
 --
@@ -2634,9 +2754,9 @@
 foreign import ccall unsafe "hs_bindgen_466757558b7a4998"
   hs_bindgen_466757558b7a4998_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_BindGPUVertexSamplers@
@@ -2647,19 +2767,29 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_466757558b7a4998 =
-  BG.fromFFIType hs_bindgen_466757558b7a4998_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_466757558b7a4998_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Binds texture-sampler pairs for use on the vertex shader.
 --
 --     The textures must have been created with SDL_GPU_TEXTUREUSAGE_SAMPLER.
 --
+--     The textures being bound must have a matching type declared in the shader (2D, 3D, etc.). Multisample textures are not allowed.
+--
 --     Be sure your shader is set up according to the requirements documented in @SDL_CreateGPUShader()@.
 --
 --     @since 3.2.0
 --
 --     [See also]: 'sDL_CreateGPUShader'
 --
---     [C declaration]: @SDL_BindGPUVertexSamplers@, defined at @SDL3\/SDL_gpu.h 3408:34@
+--     [C declaration]: @SDL_BindGPUVertexSamplers@, defined at @SDL3\/SDL_gpu.h 3411:34@
 sDL_BindGPUVertexSamplers
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -2685,9 +2815,9 @@
 foreign import ccall unsafe "hs_bindgen_3099fb36563a23bf"
   hs_bindgen_3099fb36563a23bf_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_BindGPUVertexStorageTextures@
@@ -2698,19 +2828,29 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_3099fb36563a23bf =
-  BG.fromFFIType hs_bindgen_3099fb36563a23bf_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_3099fb36563a23bf_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Binds storage textures for use on the vertex shader.
 --
 --     These textures must have been created with SDL_GPU_TEXTUREUSAGE_GRAPHICS_STORAGE_READ.
 --
+--     The textures being bound must have a matching type declared in the shader (2D, 3D, 2DMS, etc.)
+--
 --     Be sure your shader is set up according to the requirements documented in @SDL_CreateGPUShader()@.
 --
 --     @since 3.2.0
 --
 --     [See also]: 'sDL_CreateGPUShader'
 --
---     [C declaration]: @SDL_BindGPUVertexStorageTextures@, defined at @SDL3\/SDL_gpu.h 3432:34@
+--     [C declaration]: @SDL_BindGPUVertexStorageTextures@, defined at @SDL3\/SDL_gpu.h 3438:34@
 sDL_BindGPUVertexStorageTextures
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -2736,9 +2876,9 @@
 foreign import ccall unsafe "hs_bindgen_114f1ec46d1c4ca1"
   hs_bindgen_114f1ec46d1c4ca1_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_BindGPUVertexStorageBuffers@
@@ -2749,7 +2889,15 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_114f1ec46d1c4ca1 =
-  BG.fromFFIType hs_bindgen_114f1ec46d1c4ca1_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_114f1ec46d1c4ca1_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Binds storage buffers for use on the vertex shader.
 --
@@ -2761,7 +2909,7 @@
 --
 --     [See also]: 'sDL_CreateGPUShader'
 --
---     [C declaration]: @SDL_BindGPUVertexStorageBuffers@, defined at @SDL3\/SDL_gpu.h 3456:34@
+--     [C declaration]: @SDL_BindGPUVertexStorageBuffers@, defined at @SDL3\/SDL_gpu.h 3462:34@
 sDL_BindGPUVertexStorageBuffers
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -2787,9 +2935,9 @@
 foreign import ccall unsafe "hs_bindgen_6120c617bd5f9a53"
   hs_bindgen_6120c617bd5f9a53_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_BindGPUFragmentSamplers@
@@ -2800,19 +2948,29 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_6120c617bd5f9a53 =
-  BG.fromFFIType hs_bindgen_6120c617bd5f9a53_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_6120c617bd5f9a53_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Binds texture-sampler pairs for use on the fragment shader.
 --
 --     The textures must have been created with SDL_GPU_TEXTUREUSAGE_SAMPLER.
 --
+--     The textures being bound must have a matching type declared in the shader (2D, 3D, etc.). Multisample textures are not allowed.
+--
 --     Be sure your shader is set up according to the requirements documented in @SDL_CreateGPUShader()@.
 --
 --     @since 3.2.0
 --
 --     [See also]: 'sDL_CreateGPUShader'
 --
---     [C declaration]: @SDL_BindGPUFragmentSamplers@, defined at @SDL3\/SDL_gpu.h 3481:34@
+--     [C declaration]: @SDL_BindGPUFragmentSamplers@, defined at @SDL3\/SDL_gpu.h 3490:34@
 sDL_BindGPUFragmentSamplers
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -2838,9 +2996,9 @@
 foreign import ccall unsafe "hs_bindgen_a5741f59885921f3"
   hs_bindgen_a5741f59885921f3_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_BindGPUFragmentStorageTextures@
@@ -2851,19 +3009,29 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_a5741f59885921f3 =
-  BG.fromFFIType hs_bindgen_a5741f59885921f3_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_a5741f59885921f3_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Binds storage textures for use on the fragment shader.
 --
 --     These textures must have been created with SDL_GPU_TEXTUREUSAGE_GRAPHICS_STORAGE_READ.
 --
+--     The textures being bound must have a matching type declared in the shader (2D, 3D, 2DMS, etc.)
+--
 --     Be sure your shader is set up according to the requirements documented in @SDL_CreateGPUShader()@.
 --
 --     @since 3.2.0
 --
 --     [See also]: 'sDL_CreateGPUShader'
 --
---     [C declaration]: @SDL_BindGPUFragmentStorageTextures@, defined at @SDL3\/SDL_gpu.h 3505:34@
+--     [C declaration]: @SDL_BindGPUFragmentStorageTextures@, defined at @SDL3\/SDL_gpu.h 3517:34@
 sDL_BindGPUFragmentStorageTextures
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -2889,9 +3057,9 @@
 foreign import ccall unsafe "hs_bindgen_2cc12141ee4494d6"
   hs_bindgen_2cc12141ee4494d6_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_BindGPUFragmentStorageBuffers@
@@ -2902,7 +3070,15 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_2cc12141ee4494d6 =
-  BG.fromFFIType hs_bindgen_2cc12141ee4494d6_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_2cc12141ee4494d6_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Binds storage buffers for use on the fragment shader.
 --
@@ -2914,7 +3090,7 @@
 --
 --     [See also]: 'sDL_CreateGPUShader'
 --
---     [C declaration]: @SDL_BindGPUFragmentStorageBuffers@, defined at @SDL3\/SDL_gpu.h 3529:34@
+--     [C declaration]: @SDL_BindGPUFragmentStorageBuffers@, defined at @SDL3\/SDL_gpu.h 3541:34@
 sDL_BindGPUFragmentStorageBuffers
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -2940,11 +3116,11 @@
 foreign import ccall unsafe "hs_bindgen_87e007a9ec36edc3"
   hs_bindgen_87e007a9ec36edc3_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Int32
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Int32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_DrawGPUIndexedPrimitives@
@@ -2957,7 +3133,19 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_87e007a9ec36edc3 =
-  BG.fromFFIType hs_bindgen_87e007a9ec36edc3_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              hs_bindgen_87e007a9ec36edc3_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+                (BG.toFFIType x4)
+                (BG.toFFIType x5)
 
 -- | Draws data using bound graphics state with an index buffer and instancing enabled.
 --
@@ -2967,7 +3155,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_DrawGPUIndexedPrimitives@, defined at @SDL3\/SDL_gpu.h 3560:34@
+--     [C declaration]: @SDL_DrawGPUIndexedPrimitives@, defined at @SDL3\/SDL_gpu.h 3572:34@
 sDL_DrawGPUIndexedPrimitives
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -3001,10 +3189,10 @@
 foreign import ccall unsafe "hs_bindgen_7b242b637f0074d8"
   hs_bindgen_7b242b637f0074d8_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_DrawGPUPrimitives@
@@ -3016,7 +3204,17 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_7b242b637f0074d8 =
-  BG.fromFFIType hs_bindgen_7b242b637f0074d8_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            hs_bindgen_7b242b637f0074d8_base
+              (BG.toFFIType x0)
+              (BG.toFFIType x1)
+              (BG.toFFIType x2)
+              (BG.toFFIType x3)
+              (BG.toFFIType x4)
 
 -- | Draws data using bound graphics state.
 --
@@ -3026,7 +3224,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_DrawGPUPrimitives@, defined at @SDL3\/SDL_gpu.h 3588:34@
+--     [C declaration]: @SDL_DrawGPUPrimitives@, defined at @SDL3\/SDL_gpu.h 3600:34@
 sDL_DrawGPUPrimitives
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -3056,8 +3254,8 @@
   hs_bindgen_38685ef53cdffb5f_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_DrawGPUPrimitivesIndirect@
@@ -3068,7 +3266,15 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_38685ef53cdffb5f =
-  BG.fromFFIType hs_bindgen_38685ef53cdffb5f_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_38685ef53cdffb5f_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Draws data using bound graphics state and with draw parameters set from a buffer.
 --
@@ -3076,7 +3282,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_DrawGPUPrimitivesIndirect@, defined at @SDL3\/SDL_gpu.h 3611:34@
+--     [C declaration]: @SDL_DrawGPUPrimitivesIndirect@, defined at @SDL3\/SDL_gpu.h 3623:34@
 sDL_DrawGPUPrimitivesIndirect
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -3103,8 +3309,8 @@
   hs_bindgen_04835577dd24b594_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_DrawGPUIndexedPrimitivesIndirect@
@@ -3115,7 +3321,15 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_04835577dd24b594 =
-  BG.fromFFIType hs_bindgen_04835577dd24b594_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_04835577dd24b594_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Draws data using bound graphics state with an index buffer enabled and with draw parameters set from a buffer.
 --
@@ -3123,7 +3337,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_DrawGPUIndexedPrimitivesIndirect@, defined at @SDL3\/SDL_gpu.h 3633:34@
+--     [C declaration]: @SDL_DrawGPUIndexedPrimitivesIndirect@, defined at @SDL3\/SDL_gpu.h 3645:34@
 sDL_DrawGPUIndexedPrimitivesIndirect
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -3156,7 +3370,8 @@
   :: BG.Ptr SDL_GPURenderPass
   -> IO ()
 hs_bindgen_cd298cdaadbf367d =
-  BG.fromFFIType hs_bindgen_cd298cdaadbf367d_base
+  \x0 ->
+    hs_bindgen_cd298cdaadbf367d_base (BG.toFFIType x0)
 
 -- | Ends the given render pass.
 --
@@ -3164,7 +3379,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_EndGPURenderPass@, defined at @SDL3\/SDL_gpu.h 3649:34@
+--     [C declaration]: @SDL_EndGPURenderPass@, defined at @SDL3\/SDL_gpu.h 3661:34@
 sDL_EndGPURenderPass
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -3178,9 +3393,9 @@
   hs_bindgen_7e4922a40e945137_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_BeginGPUComputePass@
@@ -3192,7 +3407,20 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO (BG.Ptr SDL_GPUComputePass)
 hs_bindgen_7e4922a40e945137 =
-  BG.fromFFIType hs_bindgen_7e4922a40e945137_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_7e4922a40e945137_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Begins a compute pass on a command buffer.
 --
@@ -3206,7 +3434,7 @@
 --
 --     [See also]: 'sDL_EndGPUComputePass'
 --
---     [C declaration]: @SDL_BeginGPUComputePass@, defined at @SDL3\/SDL_gpu.h 3691:50@
+--     [C declaration]: @SDL_BeginGPUComputePass@, defined at @SDL3\/SDL_gpu.h 3703:50@
 sDL_BeginGPUComputePass
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -3244,13 +3472,15 @@
   -> BG.Ptr SDL_GPUComputePipeline
   -> IO ()
 hs_bindgen_3d4216ca508a9022 =
-  BG.fromFFIType hs_bindgen_3d4216ca508a9022_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_3d4216ca508a9022_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Binds a compute pipeline on a command buffer for use in compute dispatch.
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_BindGPUComputePipeline@, defined at @SDL3\/SDL_gpu.h 3706:34@
+--     [C declaration]: @SDL_BindGPUComputePipeline@, defined at @SDL3\/SDL_gpu.h 3718:34@
 sDL_BindGPUComputePipeline
   :: BG.Ptr SDL_GPUComputePass
   -- ^
@@ -3268,9 +3498,9 @@
 foreign import ccall unsafe "hs_bindgen_2a02bb807885f88d"
   hs_bindgen_2a02bb807885f88d_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_BindGPUComputeSamplers@
@@ -3281,19 +3511,29 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_2a02bb807885f88d =
-  BG.fromFFIType hs_bindgen_2a02bb807885f88d_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_2a02bb807885f88d_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Binds texture-sampler pairs for use on the compute shader.
 --
 --     The textures must have been created with SDL_GPU_TEXTUREUSAGE_SAMPLER.
 --
+--     The textures being bound must have a matching type declared in the shader (2D, 3D, etc.). Multisample textures are not allowed.
+--
 --     Be sure your shader is set up according to the requirements documented in @SDL_CreateGPUComputePipeline()@.
 --
 --     @since 3.2.0
 --
 --     [See also]: 'sDL_CreateGPUComputePipeline'
 --
---     [C declaration]: @SDL_BindGPUComputeSamplers@, defined at @SDL3\/SDL_gpu.h 3729:34@
+--     [C declaration]: @SDL_BindGPUComputeSamplers@, defined at @SDL3\/SDL_gpu.h 3744:34@
 sDL_BindGPUComputeSamplers
   :: BG.Ptr SDL_GPUComputePass
   -- ^
@@ -3319,9 +3559,9 @@
 foreign import ccall unsafe "hs_bindgen_a743533e288c69f5"
   hs_bindgen_a743533e288c69f5_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_BindGPUComputeStorageTextures@
@@ -3332,19 +3572,29 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_a743533e288c69f5 =
-  BG.fromFFIType hs_bindgen_a743533e288c69f5_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_a743533e288c69f5_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Binds storage textures as readonly for use on the compute pipeline.
 --
 --     These textures must have been created with SDL_GPU_TEXTUREUSAGE_COMPUTE_STORAGE_READ.
 --
+--     The textures being bound must have a matching type declared in the shader (2D, 3D, 2DMS, etc.)
+--
 --     Be sure your shader is set up according to the requirements documented in @SDL_CreateGPUComputePipeline()@.
 --
 --     @since 3.2.0
 --
 --     [See also]: 'sDL_CreateGPUComputePipeline'
 --
---     [C declaration]: @SDL_BindGPUComputeStorageTextures@, defined at @SDL3\/SDL_gpu.h 3753:34@
+--     [C declaration]: @SDL_BindGPUComputeStorageTextures@, defined at @SDL3\/SDL_gpu.h 3771:34@
 sDL_BindGPUComputeStorageTextures
   :: BG.Ptr SDL_GPUComputePass
   -- ^
@@ -3370,9 +3620,9 @@
 foreign import ccall unsafe "hs_bindgen_1be365d38addb5cf"
   hs_bindgen_1be365d38addb5cf_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_BindGPUComputeStorageBuffers@
@@ -3383,7 +3633,15 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_1be365d38addb5cf =
-  BG.fromFFIType hs_bindgen_1be365d38addb5cf_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_1be365d38addb5cf_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Binds storage buffers as readonly for use on the compute pipeline.
 --
@@ -3395,7 +3653,7 @@
 --
 --     [See also]: 'sDL_CreateGPUComputePipeline'
 --
---     [C declaration]: @SDL_BindGPUComputeStorageBuffers@, defined at @SDL3\/SDL_gpu.h 3777:34@
+--     [C declaration]: @SDL_BindGPUComputeStorageBuffers@, defined at @SDL3\/SDL_gpu.h 3795:34@
 sDL_BindGPUComputeStorageBuffers
   :: BG.Ptr SDL_GPUComputePass
   -- ^
@@ -3421,9 +3679,9 @@
 foreign import ccall unsafe "hs_bindgen_08d7249b66bd0658"
   hs_bindgen_08d7249b66bd0658_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_DispatchGPUCompute@
@@ -3434,7 +3692,15 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_08d7249b66bd0658 =
-  BG.fromFFIType hs_bindgen_08d7249b66bd0658_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_08d7249b66bd0658_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Dispatches compute work.
 --
@@ -3444,7 +3710,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_DispatchGPUCompute@, defined at @SDL3\/SDL_gpu.h 3803:34@
+--     [C declaration]: @SDL_DispatchGPUCompute@, defined at @SDL3\/SDL_gpu.h 3821:34@
 sDL_DispatchGPUCompute
   :: BG.Ptr SDL_GPUComputePass
   -- ^
@@ -3470,7 +3736,7 @@
   hs_bindgen_9b425608a854a4f5_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_DispatchGPUComputeIndirect@
@@ -3480,7 +3746,10 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_9b425608a854a4f5 =
-  BG.fromFFIType hs_bindgen_9b425608a854a4f5_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        hs_bindgen_9b425608a854a4f5_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2)
 
 -- | Dispatches compute work with parameters set from a buffer.
 --
@@ -3490,7 +3759,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_DispatchGPUComputeIndirect@, defined at @SDL3\/SDL_gpu.h 3827:34@
+--     [C declaration]: @SDL_DispatchGPUComputeIndirect@, defined at @SDL3\/SDL_gpu.h 3845:34@
 sDL_DispatchGPUComputeIndirect
   :: BG.Ptr SDL_GPUComputePass
   -- ^
@@ -3519,7 +3788,8 @@
   :: BG.Ptr SDL_GPUComputePass
   -> IO ()
 hs_bindgen_bf20561443153c08 =
-  BG.fromFFIType hs_bindgen_bf20561443153c08_base
+  \x0 ->
+    hs_bindgen_bf20561443153c08_base (BG.toFFIType x0)
 
 -- | Ends the current compute pass.
 --
@@ -3527,7 +3797,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_EndGPUComputePass@, defined at @SDL3\/SDL_gpu.h 3842:34@
+--     [C declaration]: @SDL_EndGPUComputePass@, defined at @SDL3\/SDL_gpu.h 3860:34@
 sDL_EndGPUComputePass
   :: BG.Ptr SDL_GPUComputePass
   -- ^
@@ -3541,7 +3811,7 @@
   hs_bindgen_075892bcba4ad890_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word8
+    -> BG.CBool
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_MapGPUTransferBuffer@
@@ -3551,7 +3821,12 @@
   -> BG.CBool
   -> IO (BG.Ptr BG.Void)
 hs_bindgen_075892bcba4ad890 =
-  BG.fromFFIType hs_bindgen_075892bcba4ad890_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_075892bcba4ad890_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Maps a transfer buffer into application address space.
 --
@@ -3561,7 +3836,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_MapGPUTransferBuffer@, defined at @SDL3\/SDL_gpu.h 3862:36@
+--     [C declaration]: @SDL_MapGPUTransferBuffer@, defined at @SDL3\/SDL_gpu.h 3880:36@
 sDL_MapGPUTransferBuffer
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -3592,13 +3867,15 @@
   -> BG.Ptr SDL_GPUTransferBuffer
   -> IO ()
 hs_bindgen_8721518ac51d5884 =
-  BG.fromFFIType hs_bindgen_8721518ac51d5884_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_8721518ac51d5884_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Unmaps a previously mapped transfer buffer.
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_UnmapGPUTransferBuffer@, defined at @SDL3\/SDL_gpu.h 3875:34@
+--     [C declaration]: @SDL_UnmapGPUTransferBuffer@, defined at @SDL3\/SDL_gpu.h 3893:34@
 sDL_UnmapGPUTransferBuffer
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -3623,7 +3900,8 @@
   :: BG.Ptr SDL_GPUCommandBuffer
   -> IO (BG.Ptr SDL_GPUCopyPass)
 hs_bindgen_7990c88447a637d9 =
-  BG.fromFFIType hs_bindgen_7990c88447a637d9_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_7990c88447a637d9_base (BG.toFFIType x0))
 
 -- | Begins a copy pass on a command buffer.
 --
@@ -3635,7 +3913,7 @@
 --
 --     [See also]: 'sDL_EndGPUCopyPass'
 --
---     [C declaration]: @SDL_BeginGPUCopyPass@, defined at @SDL3\/SDL_gpu.h 3895:47@
+--     [C declaration]: @SDL_BeginGPUCopyPass@, defined at @SDL3\/SDL_gpu.h 3913:47@
 sDL_BeginGPUCopyPass
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -3650,7 +3928,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word8
+    -> BG.CBool
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_UploadToGPUTexture@
@@ -3661,7 +3939,15 @@
   -> BG.CBool
   -> IO ()
 hs_bindgen_7dc2e64aebecaf47 =
-  BG.fromFFIType hs_bindgen_7dc2e64aebecaf47_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_7dc2e64aebecaf47_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Uploads data from a transfer buffer to a texture.
 --
@@ -3671,7 +3957,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_UploadToGPUTexture@, defined at @SDL3\/SDL_gpu.h 3915:34@
+--     [C declaration]: @SDL_UploadToGPUTexture@, defined at @SDL3\/SDL_gpu.h 3933:34@
 sDL_UploadToGPUTexture
   :: BG.Ptr SDL_GPUCopyPass
   -- ^
@@ -3698,7 +3984,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word8
+    -> BG.CBool
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_UploadToGPUBuffer@
@@ -3709,7 +3995,15 @@
   -> BG.CBool
   -> IO ()
 hs_bindgen_c8311e817b0149e1 =
-  BG.fromFFIType hs_bindgen_c8311e817b0149e1_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_c8311e817b0149e1_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Uploads data from a transfer buffer to a buffer.
 --
@@ -3717,7 +4011,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_UploadToGPUBuffer@, defined at @SDL3\/SDL_gpu.h 3935:34@
+--     [C declaration]: @SDL_UploadToGPUBuffer@, defined at @SDL3\/SDL_gpu.h 3953:34@
 sDL_UploadToGPUBuffer
   :: BG.Ptr SDL_GPUCopyPass
   -- ^
@@ -3744,10 +4038,10 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Word8
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> BG.CBool
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_CopyGPUTextureToTexture@
@@ -3761,7 +4055,21 @@
   -> BG.CBool
   -> IO ()
 hs_bindgen_8d76c446224fa54a =
-  BG.fromFFIType hs_bindgen_8d76c446224fa54a_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                hs_bindgen_8d76c446224fa54a_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+                  (BG.toFFIType x5)
+                  (BG.toFFIType x6)
 
 -- | Performs a texture-to-texture copy.
 --
@@ -3771,7 +4079,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_CopyGPUTextureToTexture@, defined at @SDL3\/SDL_gpu.h 3962:34@
+--     [C declaration]: @SDL_CopyGPUTextureToTexture@, defined at @SDL3\/SDL_gpu.h 3980:34@
 sDL_CopyGPUTextureToTexture
   :: BG.Ptr SDL_GPUCopyPass
   -- ^
@@ -3811,8 +4119,8 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Word8
+    -> HsBindgen.Runtime.LibC.Word32
+    -> BG.CBool
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_CopyGPUBufferToBuffer@
@@ -3824,7 +4132,17 @@
   -> BG.CBool
   -> IO ()
 hs_bindgen_72560eca0be1bbd9 =
-  BG.fromFFIType hs_bindgen_72560eca0be1bbd9_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            hs_bindgen_72560eca0be1bbd9_base
+              (BG.toFFIType x0)
+              (BG.toFFIType x1)
+              (BG.toFFIType x2)
+              (BG.toFFIType x3)
+              (BG.toFFIType x4)
 
 -- | Performs a buffer-to-buffer copy.
 --
@@ -3832,7 +4150,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_CopyGPUBufferToBuffer@, defined at @SDL3\/SDL_gpu.h 3986:34@
+--     [C declaration]: @SDL_CopyGPUBufferToBuffer@, defined at @SDL3\/SDL_gpu.h 4004:34@
 sDL_CopyGPUBufferToBuffer
   :: BG.Ptr SDL_GPUCopyPass
   -- ^
@@ -3873,7 +4191,10 @@
   -> PtrConst.PtrConst SDL_GPUTextureTransferInfo
   -> IO ()
 hs_bindgen_f583e024c47915e6 =
-  BG.fromFFIType hs_bindgen_f583e024c47915e6_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        hs_bindgen_f583e024c47915e6_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2)
 
 -- | Copies data from a texture to a transfer buffer on the GPU timeline.
 --
@@ -3881,7 +4202,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_DownloadFromGPUTexture@, defined at @SDL3\/SDL_gpu.h 4006:34@
+--     [C declaration]: @SDL_DownloadFromGPUTexture@, defined at @SDL3\/SDL_gpu.h 4024:34@
 sDL_DownloadFromGPUTexture
   :: BG.Ptr SDL_GPUCopyPass
   -- ^
@@ -3914,7 +4235,10 @@
   -> PtrConst.PtrConst SDL_GPUTransferBufferLocation
   -> IO ()
 hs_bindgen_d1604453e77cbbd9 =
-  BG.fromFFIType hs_bindgen_d1604453e77cbbd9_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        hs_bindgen_d1604453e77cbbd9_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2)
 
 -- | Copies data from a buffer to a transfer buffer on the GPU timeline.
 --
@@ -3922,7 +4246,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_DownloadFromGPUBuffer@, defined at @SDL3\/SDL_gpu.h 4023:34@
+--     [C declaration]: @SDL_DownloadFromGPUBuffer@, defined at @SDL3\/SDL_gpu.h 4041:34@
 sDL_DownloadFromGPUBuffer
   :: BG.Ptr SDL_GPUCopyPass
   -- ^
@@ -3951,13 +4275,14 @@
   :: BG.Ptr SDL_GPUCopyPass
   -> IO ()
 hs_bindgen_37f1aba920cf70df =
-  BG.fromFFIType hs_bindgen_37f1aba920cf70df_base
+  \x0 ->
+    hs_bindgen_37f1aba920cf70df_base (BG.toFFIType x0)
 
 -- | Ends the current copy pass.
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_EndGPUCopyPass@, defined at @SDL3\/SDL_gpu.h 4035:34@
+--     [C declaration]: @SDL_EndGPUCopyPass@, defined at @SDL3\/SDL_gpu.h 4053:34@
 sDL_EndGPUCopyPass
   :: BG.Ptr SDL_GPUCopyPass
   -- ^
@@ -3979,7 +4304,9 @@
   -> BG.Ptr SDL_GPUTexture
   -> IO ()
 hs_bindgen_487b5d55898cb8c9 =
-  BG.fromFFIType hs_bindgen_487b5d55898cb8c9_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_487b5d55898cb8c9_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Generates mipmaps for the given texture.
 --
@@ -3987,7 +4314,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GenerateMipmapsForGPUTexture@, defined at @SDL3\/SDL_gpu.h 4048:34@
+--     [C declaration]: @SDL_GenerateMipmapsForGPUTexture@, defined at @SDL3\/SDL_gpu.h 4066:34@
 sDL_GenerateMipmapsForGPUTexture
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -4014,7 +4341,9 @@
   -> PtrConst.PtrConst SDL_GPUBlitInfo
   -> IO ()
 hs_bindgen_5ea32ac13985443b =
-  BG.fromFFIType hs_bindgen_5ea32ac13985443b_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_5ea32ac13985443b_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Blits from a source texture region to a destination texture region.
 --
@@ -4022,7 +4351,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_BlitGPUTexture@, defined at @SDL3\/SDL_gpu.h 4062:34@
+--     [C declaration]: @SDL_BlitGPUTexture@, defined at @SDL3\/SDL_gpu.h 4080:34@
 sDL_BlitGPUTexture
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -4040,8 +4369,8 @@
   hs_bindgen_7874a69b9fb7574a_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
+    -> BG.CUInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_WindowSupportsGPUSwapchainComposition@
 hs_bindgen_7874a69b9fb7574a
@@ -4050,7 +4379,12 @@
   -> SDL_GPUSwapchainComposition
   -> IO BG.CBool
 hs_bindgen_7874a69b9fb7574a =
-  BG.fromFFIType hs_bindgen_7874a69b9fb7574a_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_7874a69b9fb7574a_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Determines whether a swapchain composition is supported by the window.
 --
@@ -4062,7 +4396,7 @@
 --
 --     [See also]: 'sDL_ClaimWindowForGPUDevice'
 --
---     [C declaration]: @SDL_WindowSupportsGPUSwapchainComposition@, defined at @SDL3\/SDL_gpu.h 4082:34@
+--     [C declaration]: @SDL_WindowSupportsGPUSwapchainComposition@, defined at @SDL3\/SDL_gpu.h 4100:34@
 sDL_WindowSupportsGPUSwapchainComposition
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -4085,8 +4419,8 @@
   hs_bindgen_e7e69a1723f7ad13_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
+    -> BG.CUInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_WindowSupportsGPUPresentMode@
 hs_bindgen_e7e69a1723f7ad13
@@ -4095,7 +4429,12 @@
   -> SDL_GPUPresentMode
   -> IO BG.CBool
 hs_bindgen_e7e69a1723f7ad13 =
-  BG.fromFFIType hs_bindgen_e7e69a1723f7ad13_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_e7e69a1723f7ad13_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Determines whether a presentation mode is supported by the window.
 --
@@ -4107,7 +4446,7 @@
 --
 --     [See also]: 'sDL_ClaimWindowForGPUDevice'
 --
---     [C declaration]: @SDL_WindowSupportsGPUPresentMode@, defined at @SDL3\/SDL_gpu.h 4101:34@
+--     [C declaration]: @SDL_WindowSupportsGPUPresentMode@, defined at @SDL3\/SDL_gpu.h 4119:34@
 sDL_WindowSupportsGPUPresentMode
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -4130,7 +4469,7 @@
   hs_bindgen_709c34298cd845c0_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_ClaimWindowForGPUDevice@
 hs_bindgen_709c34298cd845c0
@@ -4138,7 +4477,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
   -> IO BG.CBool
 hs_bindgen_709c34298cd845c0 =
-  BG.fromFFIType hs_bindgen_709c34298cd845c0_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_709c34298cd845c0_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Claims a window, creating a swapchain structure for it.
 --
@@ -4154,7 +4495,7 @@
 --
 --     [See also]: 'sDL_WaitAndAcquireGPUSwapchainTexture', 'sDL_ReleaseWindowFromGPUDevice', 'sDL_WindowSupportsGPUPresentMode', 'sDL_WindowSupportsGPUSwapchainComposition'
 --
---     [C declaration]: @SDL_ClaimWindowForGPUDevice@, defined at @SDL3\/SDL_gpu.h 4133:34@
+--     [C declaration]: @SDL_ClaimWindowForGPUDevice@, defined at @SDL3\/SDL_gpu.h 4151:34@
 sDL_ClaimWindowForGPUDevice
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -4181,7 +4522,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
   -> IO ()
 hs_bindgen_5580ffa5115be31a =
-  BG.fromFFIType hs_bindgen_5580ffa5115be31a_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_5580ffa5115be31a_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Unclaims a window, destroying its swapchain structure.
 --
@@ -4189,7 +4532,7 @@
 --
 --     [See also]: 'sDL_ClaimWindowForGPUDevice'
 --
---     [C declaration]: @SDL_ReleaseWindowFromGPUDevice@, defined at @SDL3\/SDL_gpu.h 4147:34@
+--     [C declaration]: @SDL_ReleaseWindowFromGPUDevice@, defined at @SDL3\/SDL_gpu.h 4165:34@
 sDL_ReleaseWindowFromGPUDevice
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -4208,9 +4551,9 @@
   hs_bindgen_dd5044a4ed37551c_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Word32
-    -> IO BG.Word8
+    -> BG.CUInt
+    -> BG.CUInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_SetGPUSwapchainParameters@
 hs_bindgen_dd5044a4ed37551c
@@ -4220,7 +4563,18 @@
   -> SDL_GPUPresentMode
   -> IO BG.CBool
 hs_bindgen_dd5044a4ed37551c =
-  BG.fromFFIType hs_bindgen_dd5044a4ed37551c_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_dd5044a4ed37551c_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Changes the swapchain parameters for the given claimed window.
 --
@@ -4234,7 +4588,7 @@
 --
 --     [See also]: 'sDL_WindowSupportsGPUPresentMode', 'sDL_WindowSupportsGPUSwapchainComposition'
 --
---     [C declaration]: @SDL_SetGPUSwapchainParameters@, defined at @SDL3\/SDL_gpu.h 4174:34@
+--     [C declaration]: @SDL_SetGPUSwapchainParameters@, defined at @SDL3\/SDL_gpu.h 4192:34@
 sDL_SetGPUSwapchainParameters
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -4260,8 +4614,8 @@
 foreign import ccall unsafe "hs_bindgen_376c36f4c99e1f9a"
   hs_bindgen_376c36f4c99e1f9a_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_SetGPUAllowedFramesInFlight@
 hs_bindgen_376c36f4c99e1f9a
@@ -4269,7 +4623,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_376c36f4c99e1f9a =
-  BG.fromFFIType hs_bindgen_376c36f4c99e1f9a_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_376c36f4c99e1f9a_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Configures the maximum allowed number of frames in flight.
 --
@@ -4285,7 +4641,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_SetGPUAllowedFramesInFlight@, defined at @SDL3\/SDL_gpu.h 4205:34@
+--     [C declaration]: @SDL_SetGPUAllowedFramesInFlight@, defined at @SDL3\/SDL_gpu.h 4223:34@
 sDL_SetGPUAllowedFramesInFlight
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -4304,7 +4660,7 @@
   hs_bindgen_4dd16ea5d2d75e5c_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_GetGPUSwapchainTextureFormat@
 hs_bindgen_4dd16ea5d2d75e5c
@@ -4312,7 +4668,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
   -> IO SDL_GPUTextureFormat
 hs_bindgen_4dd16ea5d2d75e5c =
-  BG.fromFFIType hs_bindgen_4dd16ea5d2d75e5c_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_4dd16ea5d2d75e5c_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Obtains the texture format of the swapchain for the given window.
 --
@@ -4322,7 +4680,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GetGPUSwapchainTextureFormat@, defined at @SDL3\/SDL_gpu.h 4220:50@
+--     [C declaration]: @SDL_GetGPUSwapchainTextureFormat@, defined at @SDL3\/SDL_gpu.h 4238:50@
 sDL_GetGPUSwapchainTextureFormat
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -4344,7 +4702,7 @@
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_AcquireGPUSwapchainTexture@
 hs_bindgen_458d79c8728f00ab
@@ -4355,7 +4713,20 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_458d79c8728f00ab =
-  BG.fromFFIType hs_bindgen_458d79c8728f00ab_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_458d79c8728f00ab_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Acquire a texture to use in presentation.
 --
@@ -4375,7 +4746,7 @@
 --
 --     [See also]: 'sDL_ClaimWindowForGPUDevice', 'sDL_SubmitGPUCommandBuffer', 'sDL_SubmitGPUCommandBufferAndAcquireFence', 'sDL_CancelGPUCommandBuffer', SDL_GetWindowSizeInPixels, 'sDL_WaitForGPUSwapchain', 'sDL_WaitAndAcquireGPUSwapchainTexture', 'sDL_SetGPUAllowedFramesInFlight'
 --
---     [C declaration]: @SDL_AcquireGPUSwapchainTexture@, defined at @SDL3\/SDL_gpu.h 4272:34@
+--     [C declaration]: @SDL_AcquireGPUSwapchainTexture@, defined at @SDL3\/SDL_gpu.h 4290:34@
 sDL_AcquireGPUSwapchainTexture
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -4406,7 +4777,7 @@
   hs_bindgen_fb018ba3fc209740_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_WaitForGPUSwapchain@
 hs_bindgen_fb018ba3fc209740
@@ -4414,7 +4785,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
   -> IO BG.CBool
 hs_bindgen_fb018ba3fc209740 =
-  BG.fromFFIType hs_bindgen_fb018ba3fc209740_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_fb018ba3fc209740_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Blocks the thread until a swapchain texture is available to be acquired.
 --
@@ -4426,7 +4799,7 @@
 --
 --     [See also]: 'sDL_AcquireGPUSwapchainTexture', 'sDL_WaitAndAcquireGPUSwapchainTexture', 'sDL_SetGPUAllowedFramesInFlight'
 --
---     [C declaration]: @SDL_WaitForGPUSwapchain@, defined at @SDL3\/SDL_gpu.h 4296:34@
+--     [C declaration]: @SDL_WaitForGPUSwapchain@, defined at @SDL3\/SDL_gpu.h 4314:34@
 sDL_WaitForGPUSwapchain
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -4447,7 +4820,7 @@
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_WaitAndAcquireGPUSwapchainTexture@
 hs_bindgen_a454f9124adeea81
@@ -4458,7 +4831,20 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_a454f9124adeea81 =
-  BG.fromFFIType hs_bindgen_a454f9124adeea81_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_a454f9124adeea81_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Blocks the thread until a swapchain texture is available to be acquired, and then acquires it.
 --
@@ -4478,7 +4864,7 @@
 --
 --     [See also]: 'sDL_SubmitGPUCommandBuffer', 'sDL_SubmitGPUCommandBufferAndAcquireFence', 'sDL_AcquireGPUSwapchainTexture'
 --
---     [C declaration]: @SDL_WaitAndAcquireGPUSwapchainTexture@, defined at @SDL3\/SDL_gpu.h 4342:34@
+--     [C declaration]: @SDL_WaitAndAcquireGPUSwapchainTexture@, defined at @SDL3\/SDL_gpu.h 4360:34@
 sDL_WaitAndAcquireGPUSwapchainTexture
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -4508,14 +4894,15 @@
 foreign import ccall unsafe "hs_bindgen_82bac871c3cbe3e4"
   hs_bindgen_82bac871c3cbe3e4_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_SubmitGPUCommandBuffer@
 hs_bindgen_82bac871c3cbe3e4
   :: BG.Ptr SDL_GPUCommandBuffer
   -> IO BG.CBool
 hs_bindgen_82bac871c3cbe3e4 =
-  BG.fromFFIType hs_bindgen_82bac871c3cbe3e4_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_82bac871c3cbe3e4_base (BG.toFFIType x0))
 
 -- | Submits a command buffer so its commands can be processed on the GPU.
 --
@@ -4531,7 +4918,7 @@
 --
 --     [See also]: 'sDL_AcquireGPUCommandBuffer', 'sDL_WaitAndAcquireGPUSwapchainTexture', 'sDL_AcquireGPUSwapchainTexture', 'sDL_SubmitGPUCommandBufferAndAcquireFence'
 --
---     [C declaration]: @SDL_SubmitGPUCommandBuffer@, defined at @SDL3\/SDL_gpu.h 4370:34@
+--     [C declaration]: @SDL_SubmitGPUCommandBuffer@, defined at @SDL3\/SDL_gpu.h 4388:34@
 sDL_SubmitGPUCommandBuffer
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -4552,7 +4939,8 @@
   :: BG.Ptr SDL_GPUCommandBuffer
   -> IO (BG.Ptr SDL_GPUFence)
 hs_bindgen_34bbe24268d3620c =
-  BG.fromFFIType hs_bindgen_34bbe24268d3620c_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_34bbe24268d3620c_base (BG.toFFIType x0))
 
 -- | Submits a command buffer so its commands can be processed on the GPU, and acquires a fence associated with the command buffer.
 --
@@ -4568,7 +4956,7 @@
 --
 --     [See also]: 'sDL_AcquireGPUCommandBuffer', 'sDL_WaitAndAcquireGPUSwapchainTexture', 'sDL_AcquireGPUSwapchainTexture', 'sDL_SubmitGPUCommandBuffer', 'sDL_ReleaseGPUFence'
 --
---     [C declaration]: @SDL_SubmitGPUCommandBufferAndAcquireFence@, defined at @SDL3\/SDL_gpu.h 4397:44@
+--     [C declaration]: @SDL_SubmitGPUCommandBufferAndAcquireFence@, defined at @SDL3\/SDL_gpu.h 4415:44@
 sDL_SubmitGPUCommandBufferAndAcquireFence
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -4582,14 +4970,15 @@
 foreign import ccall unsafe "hs_bindgen_34c4d8861fe9ae5b"
   hs_bindgen_34c4d8861fe9ae5b_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_CancelGPUCommandBuffer@
 hs_bindgen_34c4d8861fe9ae5b
   :: BG.Ptr SDL_GPUCommandBuffer
   -> IO BG.CBool
 hs_bindgen_34c4d8861fe9ae5b =
-  BG.fromFFIType hs_bindgen_34c4d8861fe9ae5b_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_34c4d8861fe9ae5b_base (BG.toFFIType x0))
 
 -- | Cancels a command buffer.
 --
@@ -4607,7 +4996,7 @@
 --
 --     [See also]: 'sDL_WaitAndAcquireGPUSwapchainTexture', 'sDL_AcquireGPUCommandBuffer', 'sDL_AcquireGPUSwapchainTexture'
 --
---     [C declaration]: @SDL_CancelGPUCommandBuffer@, defined at @SDL3\/SDL_gpu.h 4422:34@
+--     [C declaration]: @SDL_CancelGPUCommandBuffer@, defined at @SDL3\/SDL_gpu.h 4440:34@
 sDL_CancelGPUCommandBuffer
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -4621,14 +5010,15 @@
 foreign import ccall unsafe "hs_bindgen_2cf574d324b28e44"
   hs_bindgen_2cf574d324b28e44_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_WaitForGPUIdle@
 hs_bindgen_2cf574d324b28e44
   :: BG.Ptr SDL_GPUDevice
   -> IO BG.CBool
 hs_bindgen_2cf574d324b28e44 =
-  BG.fromFFIType hs_bindgen_2cf574d324b28e44_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_2cf574d324b28e44_base (BG.toFFIType x0))
 
 -- | Blocks the thread until the GPU is completely idle.
 --
@@ -4638,7 +5028,7 @@
 --
 --     [See also]: 'sDL_WaitForGPUFences'
 --
---     [C declaration]: @SDL_WaitForGPUIdle@, defined at @SDL3\/SDL_gpu.h 4436:34@
+--     [C declaration]: @SDL_WaitForGPUIdle@, defined at @SDL3\/SDL_gpu.h 4454:34@
 sDL_WaitForGPUIdle
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -4651,10 +5041,10 @@
 foreign import ccall unsafe "hs_bindgen_90c7f8f4aae22e6a"
   hs_bindgen_90c7f8f4aae22e6a_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
+    -> BG.CBool
     -> BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_WaitForGPUFences@
 hs_bindgen_90c7f8f4aae22e6a
@@ -4664,7 +5054,18 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_90c7f8f4aae22e6a =
-  BG.fromFFIType hs_bindgen_90c7f8f4aae22e6a_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_90c7f8f4aae22e6a_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Blocks the thread until the given fences are signaled.
 --
@@ -4674,7 +5075,7 @@
 --
 --     [See also]: 'sDL_SubmitGPUCommandBufferAndAcquireFence', 'sDL_WaitForGPUIdle'
 --
---     [C declaration]: @SDL_WaitForGPUFences@, defined at @SDL3\/SDL_gpu.h 4455:34@
+--     [C declaration]: @SDL_WaitForGPUFences@, defined at @SDL3\/SDL_gpu.h 4473:34@
 sDL_WaitForGPUFences
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -4700,7 +5101,7 @@
   hs_bindgen_09f80c8e0b395d04_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_QueryGPUFence@
 hs_bindgen_09f80c8e0b395d04
@@ -4708,7 +5109,9 @@
   -> BG.Ptr SDL_GPUFence
   -> IO BG.CBool
 hs_bindgen_09f80c8e0b395d04 =
-  BG.fromFFIType hs_bindgen_09f80c8e0b395d04_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_09f80c8e0b395d04_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Checks the status of a fence.
 --
@@ -4718,7 +5121,7 @@
 --
 --     [See also]: 'sDL_SubmitGPUCommandBufferAndAcquireFence'
 --
---     [C declaration]: @SDL_QueryGPUFence@, defined at @SDL3\/SDL_gpu.h 4472:34@
+--     [C declaration]: @SDL_QueryGPUFence@, defined at @SDL3\/SDL_gpu.h 4490:34@
 sDL_QueryGPUFence
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -4744,7 +5147,9 @@
   -> BG.Ptr SDL_GPUFence
   -> IO ()
 hs_bindgen_97087dbb893b61af =
-  BG.fromFFIType hs_bindgen_97087dbb893b61af_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_97087dbb893b61af_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Releases a fence obtained from SDL_SubmitGPUCommandBufferAndAcquireFence.
 --
@@ -4754,7 +5159,7 @@
 --
 --     [See also]: 'sDL_SubmitGPUCommandBufferAndAcquireFence'
 --
---     [C declaration]: @SDL_ReleaseGPUFence@, defined at @SDL3\/SDL_gpu.h 4488:34@
+--     [C declaration]: @SDL_ReleaseGPUFence@, defined at @SDL3\/SDL_gpu.h 4506:34@
 sDL_ReleaseGPUFence
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -4770,15 +5175,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_GPUTextureFormatTexelBlockSize@
 foreign import ccall unsafe "hs_bindgen_121bf00d55a1a113"
   hs_bindgen_121bf00d55a1a113_base
-    :: BG.Word32
-    -> IO BG.Word32
+    :: BG.CUInt
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_GPUTextureFormatTexelBlockSize@
 hs_bindgen_121bf00d55a1a113
   :: SDL_GPUTextureFormat
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
 hs_bindgen_121bf00d55a1a113 =
-  BG.fromFFIType hs_bindgen_121bf00d55a1a113_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_121bf00d55a1a113_base (BG.toFFIType x0))
 
 -- | Obtains the texel block size for a texture format.
 --
@@ -4788,7 +5194,7 @@
 --
 --     [See also]: 'sDL_UploadToGPUTexture'
 --
---     [C declaration]: @SDL_GPUTextureFormatTexelBlockSize@, defined at @SDL3\/SDL_gpu.h 4504:36@
+--     [C declaration]: @SDL_GPUTextureFormatTexelBlockSize@, defined at @SDL3\/SDL_gpu.h 4522:36@
 sDL_GPUTextureFormatTexelBlockSize
   :: SDL_GPUTextureFormat
   -- ^
@@ -4802,10 +5208,10 @@
 foreign import ccall unsafe "hs_bindgen_0c3c275a5e945ebd"
   hs_bindgen_0c3c275a5e945ebd_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Word32
-    -> IO BG.Word8
+    -> BG.CUInt
+    -> BG.CUInt
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_GPUTextureSupportsFormat@
 hs_bindgen_0c3c275a5e945ebd
@@ -4815,7 +5221,18 @@
   -> SDL_GPUTextureUsageFlags
   -> IO BG.CBool
 hs_bindgen_0c3c275a5e945ebd =
-  BG.fromFFIType hs_bindgen_0c3c275a5e945ebd_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_0c3c275a5e945ebd_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Determines whether a texture format is supported for a given type and usage.
 --
@@ -4823,7 +5240,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GPUTextureSupportsFormat@, defined at @SDL3\/SDL_gpu.h 4519:34@
+--     [C declaration]: @SDL_GPUTextureSupportsFormat@, defined at @SDL3\/SDL_gpu.h 4537:34@
 sDL_GPUTextureSupportsFormat
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -4849,9 +5266,9 @@
 foreign import ccall unsafe "hs_bindgen_0870889673874577"
   hs_bindgen_0870889673874577_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Word32
-    -> IO BG.Word8
+    -> BG.CUInt
+    -> BG.CUInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_GPUTextureSupportsSampleCount@
 hs_bindgen_0870889673874577
@@ -4860,7 +5277,12 @@
   -> SDL_GPUSampleCount
   -> IO BG.CBool
 hs_bindgen_0870889673874577 =
-  BG.fromFFIType hs_bindgen_0870889673874577_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_0870889673874577_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Determines if a sample count for a texture format is supported.
 --
@@ -4868,7 +5290,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_GPUTextureSupportsSampleCount@, defined at @SDL3\/SDL_gpu.h 4535:34@
+--     [C declaration]: @SDL_GPUTextureSupportsSampleCount@, defined at @SDL3\/SDL_gpu.h 4553:34@
 sDL_GPUTextureSupportsSampleCount
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -4889,11 +5311,11 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_CalculateGPUTextureFormatSize@
 foreign import ccall unsafe "hs_bindgen_222b65bb58cce08e"
   hs_bindgen_222b65bb58cce08e_base
-    :: BG.Word32
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Word32
-    -> IO BG.Word32
+    :: BG.CUInt
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_CalculateGPUTextureFormatSize@
 hs_bindgen_222b65bb58cce08e
@@ -4903,7 +5325,18 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
 hs_bindgen_222b65bb58cce08e =
-  BG.fromFFIType hs_bindgen_222b65bb58cce08e_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_222b65bb58cce08e_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Calculate the size in bytes of a texture format with dimensions.
 --
@@ -4911,7 +5344,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_CalculateGPUTextureFormatSize@, defined at @SDL3\/SDL_gpu.h 4551:36@
+--     [C declaration]: @SDL_CalculateGPUTextureFormatSize@, defined at @SDL3\/SDL_gpu.h 4569:36@
 sDL_CalculateGPUTextureFormatSize
   :: SDL_GPUTextureFormat
   -- ^
@@ -4936,15 +5369,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_GetPixelFormatFromGPUTextureFormat@
 foreign import ccall unsafe "hs_bindgen_3a8763f112daa871"
   hs_bindgen_3a8763f112daa871_base
-    :: BG.Word32
-    -> IO BG.Word32
+    :: BG.CUInt
+    -> IO HsBindgen.Runtime.Support.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_GetPixelFormatFromGPUTextureFormat@
 hs_bindgen_3a8763f112daa871
   :: SDL_GPUTextureFormat
   -> IO SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
 hs_bindgen_3a8763f112daa871 =
-  BG.fromFFIType hs_bindgen_3a8763f112daa871_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3a8763f112daa871_base (BG.toFFIType x0))
 
 -- | Get the SDL pixel format corresponding to a GPU texture format.
 --
@@ -4952,7 +5386,7 @@
 --
 --     @since 3.4.0
 --
---     [C declaration]: @SDL_GetPixelFormatFromGPUTextureFormat@, defined at @SDL3\/SDL_gpu.h 4566:45@
+--     [C declaration]: @SDL_GetPixelFormatFromGPUTextureFormat@, defined at @SDL3\/SDL_gpu.h 4584:45@
 sDL_GetPixelFormatFromGPUTextureFormat
   :: SDL_GPUTextureFormat
   -- ^
@@ -4965,15 +5399,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_GetGPUTextureFormatFromPixelFormat@
 foreign import ccall unsafe "hs_bindgen_77c5ed2882b80ff3"
   hs_bindgen_77c5ed2882b80ff3_base
-    :: BG.Word32
-    -> IO BG.Word32
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Gpu_Unsafe_SDL_GetGPUTextureFormatFromPixelFormat@
 hs_bindgen_77c5ed2882b80ff3
   :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
   -> IO SDL_GPUTextureFormat
 hs_bindgen_77c5ed2882b80ff3 =
-  BG.fromFFIType hs_bindgen_77c5ed2882b80ff3_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_77c5ed2882b80ff3_base (BG.toFFIType x0))
 
 -- | Get the GPU texture format corresponding to an SDL pixel format.
 --
@@ -4981,7 +5416,7 @@
 --
 --     @since 3.4.0
 --
---     [C declaration]: @SDL_GetGPUTextureFormatFromPixelFormat@, defined at @SDL3\/SDL_gpu.h 4578:50@
+--     [C declaration]: @SDL_GetGPUTextureFormatFromPixelFormat@, defined at @SDL3\/SDL_gpu.h 4596:50@
 sDL_GetGPUTextureFormatFromPixelFormat
   :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
   -- ^
diff --git a/src/SDL3/Sys/Bindgen/Guid.hs b/src/SDL3/Sys/Bindgen/Guid.hs
--- a/src/SDL3/Sys/Bindgen/Guid.hs
+++ b/src/SDL3/Sys/Bindgen/Guid.hs
@@ -13,6 +13,7 @@
 {-# LANGUAGE TypeOperators #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | A GUID is a 128-bit value that represents something that is uniquely identifiable by this value: \"globally unique.\"
 --
@@ -30,9 +31,12 @@
 )
 where
 
+import Prelude (Eq, Int, Show, pure, (<*>), type (~))
+
 import HsBindgen.Runtime.ConstantArray qualified as CA
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.Marshal qualified as Marshal
+import HsBindgen.Runtime.Struct qualified as Struct
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField
 import SDL3.Sys.Bindgen.Stdinc qualified
@@ -65,6 +69,9 @@
 
 deriving via Marshal.EquivStorable SDL_GUID instance BG.Storable SDL_GUID
 
+deriving via Struct.IsStructViaReadRaw SDL_GUID instance Struct.IsStruct SDL_GUID
+
+-- | [C declaration]: @data@, defined at @SDL3\/SDL_guid.h 62:11@
 instance
   (ty ~ CA.ConstantArray 16 SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "data'" SDL_GUID ty
diff --git a/src/SDL3/Sys/Bindgen/Guid/FunPtr.hs b/src/SDL3/Sys/Bindgen/Guid/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Guid/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Guid/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Guid.FunPtr (
@@ -8,6 +10,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -15,7 +19,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_guid.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_guid.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Guid_get_SDL_GUIDToString */"
          , "__attribute__ ((const))"
          , "void (*hs_bindgen_b89f8bb369b8de4d (void)) ("
@@ -46,7 +54,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Guid_get_SDL_GUIDToString@
 hs_bindgen_b89f8bb369b8de4d :: IO (BG.FunPtr (SDL_GUID -> BG.Ptr BG.CChar -> BG.CInt -> IO ()))
 hs_bindgen_b89f8bb369b8de4d =
-  BG.fromFFIType hs_bindgen_b89f8bb369b8de4d_base
+  fmap BG.fromFFIType hs_bindgen_b89f8bb369b8de4d_base
 
 {-# NOINLINE sDL_GUIDToString #-}
 
@@ -77,7 +85,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Guid_get_SDL_StringToGUID@
 hs_bindgen_0ce736a26b941e7b :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO SDL_GUID))
 hs_bindgen_0ce736a26b941e7b =
-  BG.fromFFIType hs_bindgen_0ce736a26b941e7b_base
+  fmap BG.fromFFIType hs_bindgen_0ce736a26b941e7b_base
 
 {-# NOINLINE sDL_StringToGUID #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Guid/Safe.hs b/src/SDL3/Sys/Bindgen/Guid/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Guid/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Guid/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Guid.Safe (
@@ -8,6 +10,8 @@
 )
 where
 
+import Prelude (IO)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -15,7 +19,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_guid.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_guid.h>"
          , "void hs_bindgen_33e8afba591e5cdf ("
          , "  SDL_GUID *arg1,"
          , "  char *arg2,"
@@ -40,7 +48,7 @@
   hs_bindgen_33e8afba591e5cdf_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Guid_Safe_SDL_GUIDToString@
@@ -50,7 +58,10 @@
   -> BG.CInt
   -> IO ()
 hs_bindgen_33e8afba591e5cdf =
-  BG.fromFFIType hs_bindgen_33e8afba591e5cdf_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        hs_bindgen_33e8afba591e5cdf_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2)
 
 -- | Get an ASCII string representation for a given 'SDL_GUID'.
 --
@@ -98,7 +109,9 @@
   -> BG.Ptr SDL_GUID
   -> IO ()
 hs_bindgen_260d7fbde1a12e5d =
-  BG.fromFFIType hs_bindgen_260d7fbde1a12e5d_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_260d7fbde1a12e5d_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Convert a GUID string into a 'SDL_GUID' structure.
 --
diff --git a/src/SDL3/Sys/Bindgen/Guid/Unsafe.hs b/src/SDL3/Sys/Bindgen/Guid/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Guid/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Guid/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Guid.Unsafe (
@@ -8,6 +10,8 @@
 )
 where
 
+import Prelude (IO)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -15,7 +19,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_guid.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_guid.h>"
          , "void hs_bindgen_8df1ca830111b8be ("
          , "  SDL_GUID *arg1,"
          , "  char *arg2,"
@@ -40,7 +48,7 @@
   hs_bindgen_8df1ca830111b8be_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Guid_Unsafe_SDL_GUIDToString@
@@ -50,7 +58,10 @@
   -> BG.CInt
   -> IO ()
 hs_bindgen_8df1ca830111b8be =
-  BG.fromFFIType hs_bindgen_8df1ca830111b8be_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        hs_bindgen_8df1ca830111b8be_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2)
 
 -- | Get an ASCII string representation for a given 'SDL_GUID'.
 --
@@ -98,7 +109,9 @@
   -> BG.Ptr SDL_GUID
   -> IO ()
 hs_bindgen_5e01e589522eb138 =
-  BG.fromFFIType hs_bindgen_5e01e589522eb138_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_5e01e589522eb138_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Convert a GUID string into a 'SDL_GUID' structure.
 --
diff --git a/src/SDL3/Sys/Bindgen/Haptic.hs b/src/SDL3/Sys/Bindgen/Haptic.hs
--- a/src/SDL3/Sys/Bindgen/Haptic.hs
+++ b/src/SDL3/Sys/Bindgen/Haptic.hs
@@ -17,6 +17,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | The SDL haptic subsystem manages haptic (force feedback) devices.
 --
@@ -161,10 +162,28 @@
 )
 where
 
+import Prelude (
+  Bounded,
+  Enum,
+  Eq,
+  Int,
+  Integral,
+  Num,
+  Ord,
+  Read,
+  Real,
+  Show,
+  pure,
+  (<*>),
+  (>>),
+  type (~),
+ )
+
 import C.Expr.HostPlatform qualified
 import HsBindgen.Runtime.ConstantArray qualified as CA
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.Marshal qualified as Marshal
+import HsBindgen.Runtime.Struct qualified as Struct
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField
 import HsBindgen.Runtime.Union qualified as Union
@@ -751,6 +770,14 @@
 
 deriving via Marshal.EquivStorable SDL_HapticDirection instance BG.Storable SDL_HapticDirection
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_HapticDirection
+  instance
+    Struct.IsStruct SDL_HapticDirection
+
+-- | The type of encoding.
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_haptic.h 568:29@
 instance
   (ty ~ SDL_HapticDirectionType)
   => BG.CompatHasField.HasField "type'" SDL_HapticDirection ty
@@ -775,6 +802,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The encoded direction.
+--
+--     [C declaration]: @dir@, defined at @SDL3\/SDL_haptic.h 569:12@
 instance
   (ty ~ CA.ConstantArray 3 SDL3.Sys.Bindgen.Stdinc.Sint32)
   => BG.CompatHasField.HasField "dir" SDL_HapticDirection ty
@@ -910,6 +940,14 @@
 
 deriving via Marshal.EquivStorable SDL_HapticConstant instance BG.Storable SDL_HapticConstant
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_HapticConstant
+  instance
+    Struct.IsStruct SDL_HapticConstant
+
+-- | SDL_HAPTIC_CONSTANT
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_haptic.h 589:26@
 instance
   (ty ~ SDL_HapticEffectType)
   => BG.CompatHasField.HasField "type'" SDL_HapticConstant ty
@@ -946,6 +984,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | Direction of the effect.
+--
+--     [C declaration]: @direction@, defined at @SDL3\/SDL_haptic.h 590:25@
 instance
   (ty ~ SDL_HapticDirection)
   => BG.CompatHasField.HasField "direction" SDL_HapticConstant ty
@@ -982,6 +1023,9 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | Duration of the effect.
+--
+--     [C declaration]: @length@, defined at @SDL3\/SDL_haptic.h 593:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "length" SDL_HapticConstant ty
@@ -1018,6 +1062,9 @@
 
   offset# = \_ -> \_ -> 20
 
+-- | Delay before starting the effect.
+--
+--     [C declaration]: @delay@, defined at @SDL3\/SDL_haptic.h 594:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "delay" SDL_HapticConstant ty
@@ -1054,6 +1101,9 @@
 
   offset# = \_ -> \_ -> 24
 
+-- | Button that triggers the effect.
+--
+--     [C declaration]: @button@, defined at @SDL3\/SDL_haptic.h 597:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "button" SDL_HapticConstant ty
@@ -1090,6 +1140,9 @@
 
   offset# = \_ -> \_ -> 26
 
+-- | How soon it can be triggered again after button.
+--
+--     [C declaration]: @interval@, defined at @SDL3\/SDL_haptic.h 598:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "interval" SDL_HapticConstant ty
@@ -1126,6 +1179,9 @@
 
   offset# = \_ -> \_ -> 28
 
+-- | Strength of the constant effect.
+--
+--     [C declaration]: @level@, defined at @SDL3\/SDL_haptic.h 601:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint16)
   => BG.CompatHasField.HasField "level" SDL_HapticConstant ty
@@ -1162,6 +1218,9 @@
 
   offset# = \_ -> \_ -> 30
 
+-- | Duration of the attack.
+--
+--     [C declaration]: @attack_length@, defined at @SDL3\/SDL_haptic.h 604:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "attack_length" SDL_HapticConstant ty
@@ -1199,6 +1258,9 @@
 
   offset# = \_ -> \_ -> 32
 
+-- | Level at the start of the attack.
+--
+--     [C declaration]: @attack_level@, defined at @SDL3\/SDL_haptic.h 605:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "attack_level" SDL_HapticConstant ty
@@ -1236,6 +1298,9 @@
 
   offset# = \_ -> \_ -> 34
 
+-- | Duration of the fade.
+--
+--     [C declaration]: @fade_length@, defined at @SDL3\/SDL_haptic.h 606:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "fade_length" SDL_HapticConstant ty
@@ -1273,6 +1338,9 @@
 
   offset# = \_ -> \_ -> 36
 
+-- | Level at the end of the fade.
+--
+--     [C declaration]: @fade_level@, defined at @SDL3\/SDL_haptic.h 607:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "fade_level" SDL_HapticConstant ty
@@ -1492,6 +1560,14 @@
 
 deriving via Marshal.EquivStorable SDL_HapticPeriodic instance BG.Storable SDL_HapticPeriodic
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_HapticPeriodic
+  instance
+    Struct.IsStruct SDL_HapticPeriodic
+
+-- | SDL_HAPTIC_SINE, SDL_HAPTIC_SQUARE SDL_HAPTIC_TRIANGLE, SDL_HAPTIC_SAWTOOTHUP or SDL_HAPTIC_SAWTOOTHDOWN
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_haptic.h 675:26@
 instance
   (ty ~ SDL_HapticEffectType)
   => BG.CompatHasField.HasField "type'" SDL_HapticPeriodic ty
@@ -1531,6 +1607,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | Direction of the effect.
+--
+--     [C declaration]: @direction@, defined at @SDL3\/SDL_haptic.h 678:25@
 instance
   (ty ~ SDL_HapticDirection)
   => BG.CompatHasField.HasField "direction" SDL_HapticPeriodic ty
@@ -1570,6 +1649,9 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | Duration of the effect.
+--
+--     [C declaration]: @length@, defined at @SDL3\/SDL_haptic.h 681:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "length" SDL_HapticPeriodic ty
@@ -1609,6 +1691,9 @@
 
   offset# = \_ -> \_ -> 20
 
+-- | Delay before starting the effect.
+--
+--     [C declaration]: @delay@, defined at @SDL3\/SDL_haptic.h 682:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "delay" SDL_HapticPeriodic ty
@@ -1648,6 +1733,9 @@
 
   offset# = \_ -> \_ -> 24
 
+-- | Button that triggers the effect.
+--
+--     [C declaration]: @button@, defined at @SDL3\/SDL_haptic.h 685:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "button" SDL_HapticPeriodic ty
@@ -1687,6 +1775,9 @@
 
   offset# = \_ -> \_ -> 26
 
+-- | How soon it can be triggered again after button.
+--
+--     [C declaration]: @interval@, defined at @SDL3\/SDL_haptic.h 686:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "interval" SDL_HapticPeriodic ty
@@ -1726,6 +1817,9 @@
 
   offset# = \_ -> \_ -> 28
 
+-- | Period of the wave.
+--
+--     [C declaration]: @period@, defined at @SDL3\/SDL_haptic.h 689:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "period" SDL_HapticPeriodic ty
@@ -1765,6 +1859,9 @@
 
   offset# = \_ -> \_ -> 30
 
+-- | Peak value; if negative, equivalent to 180 degrees extra phase shift.
+--
+--     [C declaration]: @magnitude@, defined at @SDL3\/SDL_haptic.h 690:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint16)
   => BG.CompatHasField.HasField "magnitude" SDL_HapticPeriodic ty
@@ -1804,6 +1901,9 @@
 
   offset# = \_ -> \_ -> 32
 
+-- | Mean value of the wave.
+--
+--     [C declaration]: @offset@, defined at @SDL3\/SDL_haptic.h 691:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint16)
   => BG.CompatHasField.HasField "offset" SDL_HapticPeriodic ty
@@ -1843,6 +1943,9 @@
 
   offset# = \_ -> \_ -> 34
 
+-- | Positive phase shift given by hundredth of a degree.
+--
+--     [C declaration]: @phase@, defined at @SDL3\/SDL_haptic.h 692:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "phase" SDL_HapticPeriodic ty
@@ -1882,6 +1985,9 @@
 
   offset# = \_ -> \_ -> 36
 
+-- | Duration of the attack.
+--
+--     [C declaration]: @attack_length@, defined at @SDL3\/SDL_haptic.h 695:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "attack_length" SDL_HapticPeriodic ty
@@ -1922,6 +2028,9 @@
 
   offset# = \_ -> \_ -> 38
 
+-- | Level at the start of the attack.
+--
+--     [C declaration]: @attack_level@, defined at @SDL3\/SDL_haptic.h 696:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "attack_level" SDL_HapticPeriodic ty
@@ -1962,6 +2071,9 @@
 
   offset# = \_ -> \_ -> 40
 
+-- | Duration of the fade.
+--
+--     [C declaration]: @fade_length@, defined at @SDL3\/SDL_haptic.h 697:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "fade_length" SDL_HapticPeriodic ty
@@ -2002,6 +2114,9 @@
 
   offset# = \_ -> \_ -> 42
 
+-- | Level at the end of the fade.
+--
+--     [C declaration]: @fade_level@, defined at @SDL3\/SDL_haptic.h 698:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "fade_level" SDL_HapticPeriodic ty
@@ -2167,6 +2282,14 @@
 
 deriving via Marshal.EquivStorable SDL_HapticCondition instance BG.Storable SDL_HapticCondition
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_HapticCondition
+  instance
+    Struct.IsStruct SDL_HapticCondition
+
+-- | SDL_HAPTIC_SPRING, SDL_HAPTIC_DAMPER, SDL_HAPTIC_INERTIA or SDL_HAPTIC_FRICTION
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_haptic.h 731:26@
 instance
   (ty ~ SDL_HapticEffectType)
   => BG.CompatHasField.HasField "type'" SDL_HapticCondition ty
@@ -2204,6 +2327,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | Direction of the effect.
+--
+--     [C declaration]: @direction@, defined at @SDL3\/SDL_haptic.h 733:25@
 instance
   (ty ~ SDL_HapticDirection)
   => BG.CompatHasField.HasField "direction" SDL_HapticCondition ty
@@ -2241,6 +2367,9 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | Duration of the effect.
+--
+--     [C declaration]: @length@, defined at @SDL3\/SDL_haptic.h 736:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "length" SDL_HapticCondition ty
@@ -2278,6 +2407,9 @@
 
   offset# = \_ -> \_ -> 20
 
+-- | Delay before starting the effect.
+--
+--     [C declaration]: @delay@, defined at @SDL3\/SDL_haptic.h 737:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "delay" SDL_HapticCondition ty
@@ -2315,6 +2447,9 @@
 
   offset# = \_ -> \_ -> 24
 
+-- | Button that triggers the effect.
+--
+--     [C declaration]: @button@, defined at @SDL3\/SDL_haptic.h 740:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "button" SDL_HapticCondition ty
@@ -2352,6 +2487,9 @@
 
   offset# = \_ -> \_ -> 26
 
+-- | How soon it can be triggered again after button.
+--
+--     [C declaration]: @interval@, defined at @SDL3\/SDL_haptic.h 741:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "interval" SDL_HapticCondition ty
@@ -2389,6 +2527,9 @@
 
   offset# = \_ -> \_ -> 28
 
+-- | Level when joystick is to the positive side; max 0xFFFF.
+--
+--     [C declaration]: @right_sat@, defined at @SDL3\/SDL_haptic.h 744:12@
 instance
   (ty ~ CA.ConstantArray 3 SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "right_sat" SDL_HapticCondition ty
@@ -2426,6 +2567,9 @@
 
   offset# = \_ -> \_ -> 30
 
+-- | Level when joystick is to the negative side; max 0xFFFF.
+--
+--     [C declaration]: @left_sat@, defined at @SDL3\/SDL_haptic.h 745:12@
 instance
   (ty ~ CA.ConstantArray 3 SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "left_sat" SDL_HapticCondition ty
@@ -2463,6 +2607,9 @@
 
   offset# = \_ -> \_ -> 36
 
+-- | How fast to increase the force towards the positive side.
+--
+--     [C declaration]: @right_coeff@, defined at @SDL3\/SDL_haptic.h 746:12@
 instance
   (ty ~ CA.ConstantArray 3 SDL3.Sys.Bindgen.Stdinc.Sint16)
   => BG.CompatHasField.HasField "right_coeff" SDL_HapticCondition ty
@@ -2501,6 +2648,9 @@
 
   offset# = \_ -> \_ -> 42
 
+-- | How fast to increase the force towards the negative side.
+--
+--     [C declaration]: @left_coeff@, defined at @SDL3\/SDL_haptic.h 747:12@
 instance
   (ty ~ CA.ConstantArray 3 SDL3.Sys.Bindgen.Stdinc.Sint16)
   => BG.CompatHasField.HasField "left_coeff" SDL_HapticCondition ty
@@ -2538,6 +2688,9 @@
 
   offset# = \_ -> \_ -> 48
 
+-- | Size of the dead zone; max 0xFFFF: whole axis-range when 0-centered.
+--
+--     [C declaration]: @deadband@, defined at @SDL3\/SDL_haptic.h 748:12@
 instance
   (ty ~ CA.ConstantArray 3 SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "deadband" SDL_HapticCondition ty
@@ -2575,6 +2728,9 @@
 
   offset# = \_ -> \_ -> 54
 
+-- | Position of the dead zone.
+--
+--     [C declaration]: @center@, defined at @SDL3\/SDL_haptic.h 749:12@
 instance
   (ty ~ CA.ConstantArray 3 SDL3.Sys.Bindgen.Stdinc.Sint16)
   => BG.CompatHasField.HasField "center" SDL_HapticCondition ty
@@ -2730,6 +2886,11 @@
 
 deriving via Marshal.EquivStorable SDL_HapticRamp instance BG.Storable SDL_HapticRamp
 
+deriving via Struct.IsStructViaReadRaw SDL_HapticRamp instance Struct.IsStruct SDL_HapticRamp
+
+-- | SDL_HAPTIC_RAMP
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_haptic.h 770:26@
 instance
   (ty ~ SDL_HapticEffectType)
   => BG.CompatHasField.HasField "type'" SDL_HapticRamp ty
@@ -2767,6 +2928,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | Direction of the effect.
+--
+--     [C declaration]: @direction@, defined at @SDL3\/SDL_haptic.h 771:25@
 instance
   (ty ~ SDL_HapticDirection)
   => BG.CompatHasField.HasField "direction" SDL_HapticRamp ty
@@ -2804,6 +2968,9 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | Duration of the effect.
+--
+--     [C declaration]: @length@, defined at @SDL3\/SDL_haptic.h 774:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "length" SDL_HapticRamp ty
@@ -2841,6 +3008,9 @@
 
   offset# = \_ -> \_ -> 20
 
+-- | Delay before starting the effect.
+--
+--     [C declaration]: @delay@, defined at @SDL3\/SDL_haptic.h 775:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "delay" SDL_HapticRamp ty
@@ -2878,6 +3048,9 @@
 
   offset# = \_ -> \_ -> 24
 
+-- | Button that triggers the effect.
+--
+--     [C declaration]: @button@, defined at @SDL3\/SDL_haptic.h 778:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "button" SDL_HapticRamp ty
@@ -2915,6 +3088,9 @@
 
   offset# = \_ -> \_ -> 26
 
+-- | How soon it can be triggered again after button.
+--
+--     [C declaration]: @interval@, defined at @SDL3\/SDL_haptic.h 779:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "interval" SDL_HapticRamp ty
@@ -2952,6 +3128,9 @@
 
   offset# = \_ -> \_ -> 28
 
+-- | Beginning strength level.
+--
+--     [C declaration]: @start@, defined at @SDL3\/SDL_haptic.h 782:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint16)
   => BG.CompatHasField.HasField "start" SDL_HapticRamp ty
@@ -2989,6 +3168,9 @@
 
   offset# = \_ -> \_ -> 30
 
+-- | Ending strength level.
+--
+--     [C declaration]: @end@, defined at @SDL3\/SDL_haptic.h 783:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint16)
   => BG.CompatHasField.HasField "end" SDL_HapticRamp ty
@@ -3026,6 +3208,9 @@
 
   offset# = \_ -> \_ -> 32
 
+-- | Duration of the attack.
+--
+--     [C declaration]: @attack_length@, defined at @SDL3\/SDL_haptic.h 786:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "attack_length" SDL_HapticRamp ty
@@ -3064,6 +3249,9 @@
 
   offset# = \_ -> \_ -> 34
 
+-- | Level at the start of the attack.
+--
+--     [C declaration]: @attack_level@, defined at @SDL3\/SDL_haptic.h 787:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "attack_level" SDL_HapticRamp ty
@@ -3102,6 +3290,9 @@
 
   offset# = \_ -> \_ -> 36
 
+-- | Duration of the fade.
+--
+--     [C declaration]: @fade_length@, defined at @SDL3\/SDL_haptic.h 788:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "fade_length" SDL_HapticRamp ty
@@ -3140,6 +3331,9 @@
 
   offset# = \_ -> \_ -> 38
 
+-- | Level at the end of the fade.
+--
+--     [C declaration]: @fade_level@, defined at @SDL3\/SDL_haptic.h 789:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "fade_level" SDL_HapticRamp ty
@@ -3235,6 +3429,14 @@
 
 deriving via Marshal.EquivStorable SDL_HapticLeftRight instance BG.Storable SDL_HapticLeftRight
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_HapticLeftRight
+  instance
+    Struct.IsStruct SDL_HapticLeftRight
+
+-- | SDL_HAPTIC_LEFTRIGHT
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_haptic.h 809:26@
 instance
   (ty ~ SDL_HapticEffectType)
   => BG.CompatHasField.HasField "type'" SDL_HapticLeftRight ty
@@ -3264,6 +3466,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | Duration of the effect in milliseconds.
+--
+--     [C declaration]: @length@, defined at @SDL3\/SDL_haptic.h 812:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "length" SDL_HapticLeftRight ty
@@ -3293,6 +3498,9 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | Control of the large controller motor.
+--
+--     [C declaration]: @large_magnitude@, defined at @SDL3\/SDL_haptic.h 815:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "large_magnitude" SDL_HapticLeftRight ty
@@ -3323,6 +3531,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | Control of the small controller motor.
+--
+--     [C declaration]: @small_magnitude@, defined at @SDL3\/SDL_haptic.h 816:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "small_magnitude" SDL_HapticLeftRight ty
@@ -3487,6 +3698,11 @@
 
 deriving via Marshal.EquivStorable SDL_HapticCustom instance BG.Storable SDL_HapticCustom
 
+deriving via Struct.IsStructViaReadRaw SDL_HapticCustom instance Struct.IsStruct SDL_HapticCustom
+
+-- | SDL_HAPTIC_CUSTOM
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_haptic.h 839:26@
 instance
   (ty ~ SDL_HapticEffectType)
   => BG.CompatHasField.HasField "type'" SDL_HapticCustom ty
@@ -3526,6 +3742,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | Direction of the effect.
+--
+--     [C declaration]: @direction@, defined at @SDL3\/SDL_haptic.h 840:25@
 instance
   (ty ~ SDL_HapticDirection)
   => BG.CompatHasField.HasField "direction" SDL_HapticCustom ty
@@ -3565,6 +3784,9 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | Duration of the effect.
+--
+--     [C declaration]: @length@, defined at @SDL3\/SDL_haptic.h 843:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "length" SDL_HapticCustom ty
@@ -3604,6 +3826,9 @@
 
   offset# = \_ -> \_ -> 20
 
+-- | Delay before starting the effect.
+--
+--     [C declaration]: @delay@, defined at @SDL3\/SDL_haptic.h 844:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "delay" SDL_HapticCustom ty
@@ -3643,6 +3868,9 @@
 
   offset# = \_ -> \_ -> 24
 
+-- | Button that triggers the effect.
+--
+--     [C declaration]: @button@, defined at @SDL3\/SDL_haptic.h 847:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "button" SDL_HapticCustom ty
@@ -3682,6 +3910,9 @@
 
   offset# = \_ -> \_ -> 26
 
+-- | How soon it can be triggered again after button.
+--
+--     [C declaration]: @interval@, defined at @SDL3\/SDL_haptic.h 848:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "interval" SDL_HapticCustom ty
@@ -3721,6 +3952,9 @@
 
   offset# = \_ -> \_ -> 28
 
+-- | Axes to use, minimum of one.
+--
+--     [C declaration]: @channels@, defined at @SDL3\/SDL_haptic.h 851:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "channels" SDL_HapticCustom ty
@@ -3760,6 +3994,9 @@
 
   offset# = \_ -> \_ -> 30
 
+-- | Sample periods.
+--
+--     [C declaration]: @period@, defined at @SDL3\/SDL_haptic.h 852:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "period" SDL_HapticCustom ty
@@ -3799,6 +4036,9 @@
 
   offset# = \_ -> \_ -> 32
 
+-- | Amount of samples.
+--
+--     [C declaration]: @samples@, defined at @SDL3\/SDL_haptic.h 853:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "samples" SDL_HapticCustom ty
@@ -3838,6 +4078,9 @@
 
   offset# = \_ -> \_ -> 34
 
+-- | Should contain channels*samples items.
+--
+--     [C declaration]: @data@, defined at @SDL3\/SDL_haptic.h 854:13@
 instance
   (ty ~ BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "data'" SDL_HapticCustom ty
@@ -3877,6 +4120,9 @@
 
   offset# = \_ -> \_ -> 40
 
+-- | Duration of the attack.
+--
+--     [C declaration]: @attack_length@, defined at @SDL3\/SDL_haptic.h 857:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "attack_length" SDL_HapticCustom ty
@@ -3917,6 +4163,9 @@
 
   offset# = \_ -> \_ -> 48
 
+-- | Level at the start of the attack.
+--
+--     [C declaration]: @attack_level@, defined at @SDL3\/SDL_haptic.h 858:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "attack_level" SDL_HapticCustom ty
@@ -3957,6 +4206,9 @@
 
   offset# = \_ -> \_ -> 50
 
+-- | Duration of the fade.
+--
+--     [C declaration]: @fade_length@, defined at @SDL3\/SDL_haptic.h 859:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "fade_length" SDL_HapticCustom ty
@@ -3997,6 +4249,9 @@
 
   offset# = \_ -> \_ -> 52
 
+-- | Level at the end of the fade.
+--
+--     [C declaration]: @fade_level@, defined at @SDL3\/SDL_haptic.h 860:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "fade_level" SDL_HapticCustom ty
@@ -4127,7 +4382,11 @@
   => BG.CompatHasField.HasField "type'" SDL_HapticEffect ty
   where
   hasField =
-    \x0 -> (BG.setUnionPayload, BG.getField @"type'" x0)
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"type'" x0
+      )
 
 instance
   (ty ~ SDL_HapticEffectType)
@@ -4160,7 +4419,10 @@
   where
   hasField =
     \x0 ->
-      (BG.setUnionPayload, BG.getField @"constant" x0)
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"constant" x0
+      )
 
 instance
   (ty ~ SDL_HapticConstant)
@@ -4193,7 +4455,10 @@
   where
   hasField =
     \x0 ->
-      (BG.setUnionPayload, BG.getField @"periodic" x0)
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"periodic" x0
+      )
 
 instance
   (ty ~ SDL_HapticPeriodic)
@@ -4226,7 +4491,10 @@
   where
   hasField =
     \x0 ->
-      (BG.setUnionPayload, BG.getField @"condition" x0)
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"condition" x0
+      )
 
 instance
   (ty ~ SDL_HapticCondition)
@@ -4255,7 +4523,11 @@
   => BG.CompatHasField.HasField "ramp" SDL_HapticEffect ty
   where
   hasField =
-    \x0 -> (BG.setUnionPayload, BG.getField @"ramp" x0)
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"ramp" x0
+      )
 
 instance
   (ty ~ SDL_HapticRamp)
@@ -4288,7 +4560,10 @@
   where
   hasField =
     \x0 ->
-      (BG.setUnionPayload, BG.getField @"leftright" x0)
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"leftright" x0
+      )
 
 instance
   (ty ~ SDL_HapticLeftRight)
@@ -4320,7 +4595,11 @@
   => BG.CompatHasField.HasField "custom" SDL_HapticEffect ty
   where
   hasField =
-    \x0 -> (BG.setUnionPayload, BG.getField @"custom" x0)
+    \x0 ->
+      ( \y1 ->
+          BG.setUnionPayload y1 x0
+      , BG.getField @"custom" x0
+      )
 
 instance
   (ty ~ SDL_HapticCustom)
diff --git a/src/SDL3/Sys/Bindgen/Haptic/FunPtr.hs b/src/SDL3/Sys/Bindgen/Haptic/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Haptic/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Haptic/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Haptic.FunPtr (
@@ -37,6 +39,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -46,7 +50,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_haptic.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_haptic.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_get_SDL_GetHaptics */"
          , "__attribute__ ((const))"
          , "SDL_HapticID *(*hs_bindgen_d1b059ba233bbd57 (void)) ("
@@ -340,7 +348,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_get_SDL_GetHaptics@
 hs_bindgen_d1b059ba233bbd57 :: IO (BG.FunPtr (BG.Ptr BG.CInt -> IO (BG.Ptr SDL_HapticID)))
 hs_bindgen_d1b059ba233bbd57 =
-  BG.fromFFIType hs_bindgen_d1b059ba233bbd57_base
+  fmap BG.fromFFIType hs_bindgen_d1b059ba233bbd57_base
 
 {-# NOINLINE sDL_GetHaptics #-}
 
@@ -367,7 +375,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_get_SDL_GetHapticNameForID@
 hs_bindgen_001c4531a8b9b26b :: IO (BG.FunPtr (SDL_HapticID -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_001c4531a8b9b26b =
-  BG.fromFFIType hs_bindgen_001c4531a8b9b26b_base
+  fmap BG.fromFFIType hs_bindgen_001c4531a8b9b26b_base
 
 {-# NOINLINE sDL_GetHapticNameForID #-}
 
@@ -396,7 +404,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_get_SDL_OpenHaptic@
 hs_bindgen_90101d520a764d47 :: IO (BG.FunPtr (SDL_HapticID -> IO (BG.Ptr SDL_Haptic)))
 hs_bindgen_90101d520a764d47 =
-  BG.fromFFIType hs_bindgen_90101d520a764d47_base
+  fmap BG.fromFFIType hs_bindgen_90101d520a764d47_base
 
 {-# NOINLINE sDL_OpenHaptic #-}
 
@@ -427,7 +435,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_get_SDL_GetHapticFromID@
 hs_bindgen_3a7e21ae2b159d8e :: IO (BG.FunPtr (SDL_HapticID -> IO (BG.Ptr SDL_Haptic)))
 hs_bindgen_3a7e21ae2b159d8e =
-  BG.fromFFIType hs_bindgen_3a7e21ae2b159d8e_base
+  fmap BG.fromFFIType hs_bindgen_3a7e21ae2b159d8e_base
 
 {-# NOINLINE sDL_GetHapticFromID #-}
 
@@ -452,7 +460,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_get_SDL_GetHapticID@
 hs_bindgen_13f07892e26e3cf7 :: IO (BG.FunPtr (BG.Ptr SDL_Haptic -> IO SDL_HapticID))
 hs_bindgen_13f07892e26e3cf7 =
-  BG.fromFFIType hs_bindgen_13f07892e26e3cf7_base
+  fmap BG.fromFFIType hs_bindgen_13f07892e26e3cf7_base
 
 {-# NOINLINE sDL_GetHapticID #-}
 
@@ -477,7 +485,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_get_SDL_GetHapticName@
 hs_bindgen_85514e3e9f32e1c1 :: IO (BG.FunPtr (BG.Ptr SDL_Haptic -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_85514e3e9f32e1c1 =
-  BG.fromFFIType hs_bindgen_85514e3e9f32e1c1_base
+  fmap BG.fromFFIType hs_bindgen_85514e3e9f32e1c1_base
 
 {-# NOINLINE sDL_GetHapticName #-}
 
@@ -504,7 +512,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_get_SDL_IsMouseHaptic@
 hs_bindgen_65b6f3b19cf6ac88 :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_65b6f3b19cf6ac88 =
-  BG.fromFFIType hs_bindgen_65b6f3b19cf6ac88_base
+  fmap BG.fromFFIType hs_bindgen_65b6f3b19cf6ac88_base
 
 {-# NOINLINE sDL_IsMouseHaptic #-}
 
@@ -529,7 +537,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_get_SDL_OpenHapticFromMouse@
 hs_bindgen_b758521fa797c2c0 :: IO (BG.FunPtr (IO (BG.Ptr SDL_Haptic)))
 hs_bindgen_b758521fa797c2c0 =
-  BG.fromFFIType hs_bindgen_b758521fa797c2c0_base
+  fmap BG.fromFFIType hs_bindgen_b758521fa797c2c0_base
 
 {-# NOINLINE sDL_OpenHapticFromMouse #-}
 
@@ -555,7 +563,7 @@
 hs_bindgen_67654cd95ff86143
   :: IO (BG.FunPtr (BG.Ptr SDL3.Sys.Bindgen.Joystick.SDL_Joystick -> IO BG.CBool))
 hs_bindgen_67654cd95ff86143 =
-  BG.fromFFIType hs_bindgen_67654cd95ff86143_base
+  fmap BG.fromFFIType hs_bindgen_67654cd95ff86143_base
 
 {-# NOINLINE sDL_IsJoystickHaptic #-}
 
@@ -583,7 +591,7 @@
 hs_bindgen_fc6652b37d40c658
   :: IO (BG.FunPtr (BG.Ptr SDL3.Sys.Bindgen.Joystick.SDL_Joystick -> IO (BG.Ptr SDL_Haptic)))
 hs_bindgen_fc6652b37d40c658 =
-  BG.fromFFIType hs_bindgen_fc6652b37d40c658_base
+  fmap BG.fromFFIType hs_bindgen_fc6652b37d40c658_base
 
 {-# NOINLINE sDL_OpenHapticFromJoystick #-}
 
@@ -615,7 +623,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_get_SDL_CloseHaptic@
 hs_bindgen_6b737e2ed08a147c :: IO (BG.FunPtr (BG.Ptr SDL_Haptic -> IO ()))
 hs_bindgen_6b737e2ed08a147c =
-  BG.fromFFIType hs_bindgen_6b737e2ed08a147c_base
+  fmap BG.fromFFIType hs_bindgen_6b737e2ed08a147c_base
 
 {-# NOINLINE sDL_CloseHaptic #-}
 
@@ -640,7 +648,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_get_SDL_GetMaxHapticEffects@
 hs_bindgen_31a97143613121ea :: IO (BG.FunPtr (BG.Ptr SDL_Haptic -> IO BG.CInt))
 hs_bindgen_31a97143613121ea =
-  BG.fromFFIType hs_bindgen_31a97143613121ea_base
+  fmap BG.fromFFIType hs_bindgen_31a97143613121ea_base
 
 {-# NOINLINE sDL_GetMaxHapticEffects #-}
 
@@ -669,7 +677,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_get_SDL_GetMaxHapticEffectsPlaying@
 hs_bindgen_f659a245012233bf :: IO (BG.FunPtr (BG.Ptr SDL_Haptic -> IO BG.CInt))
 hs_bindgen_f659a245012233bf =
-  BG.fromFFIType hs_bindgen_f659a245012233bf_base
+  fmap BG.fromFFIType hs_bindgen_f659a245012233bf_base
 
 {-# NOINLINE sDL_GetMaxHapticEffectsPlaying #-}
 
@@ -699,7 +707,7 @@
 hs_bindgen_dbbb380d4518b29f
   :: IO (BG.FunPtr (BG.Ptr SDL_Haptic -> IO SDL3.Sys.Bindgen.Stdinc.Uint32))
 hs_bindgen_dbbb380d4518b29f =
-  BG.fromFFIType hs_bindgen_dbbb380d4518b29f_base
+  fmap BG.fromFFIType hs_bindgen_dbbb380d4518b29f_base
 
 {-# NOINLINE sDL_GetHapticFeatures #-}
 
@@ -726,7 +734,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_get_SDL_GetNumHapticAxes@
 hs_bindgen_da903e5d3b66ca38 :: IO (BG.FunPtr (BG.Ptr SDL_Haptic -> IO BG.CInt))
 hs_bindgen_da903e5d3b66ca38 =
-  BG.fromFFIType hs_bindgen_da903e5d3b66ca38_base
+  fmap BG.fromFFIType hs_bindgen_da903e5d3b66ca38_base
 
 {-# NOINLINE sDL_GetNumHapticAxes #-}
 
@@ -754,7 +762,7 @@
 hs_bindgen_e66937f5ebbed3b2
   :: IO (BG.FunPtr (BG.Ptr SDL_Haptic -> PtrConst.PtrConst SDL_HapticEffect -> IO BG.CBool))
 hs_bindgen_e66937f5ebbed3b2 =
-  BG.fromFFIType hs_bindgen_e66937f5ebbed3b2_base
+  fmap BG.fromFFIType hs_bindgen_e66937f5ebbed3b2_base
 
 {-# NOINLINE sDL_HapticEffectSupported #-}
 
@@ -785,7 +793,7 @@
 hs_bindgen_4f599110559e7af3
   :: IO (BG.FunPtr (BG.Ptr SDL_Haptic -> PtrConst.PtrConst SDL_HapticEffect -> IO SDL_HapticEffectID))
 hs_bindgen_4f599110559e7af3 =
-  BG.fromFFIType hs_bindgen_4f599110559e7af3_base
+  fmap BG.fromFFIType hs_bindgen_4f599110559e7af3_base
 
 {-# NOINLINE sDL_CreateHapticEffect #-}
 
@@ -819,7 +827,7 @@
            (BG.Ptr SDL_Haptic -> SDL_HapticEffectID -> PtrConst.PtrConst SDL_HapticEffect -> IO BG.CBool)
        )
 hs_bindgen_6d9817b120393c0f =
-  BG.fromFFIType hs_bindgen_6d9817b120393c0f_base
+  fmap BG.fromFFIType hs_bindgen_6d9817b120393c0f_base
 
 {-# NOINLINE sDL_UpdateHapticEffect #-}
 
@@ -856,7 +864,7 @@
   :: IO
        (BG.FunPtr (BG.Ptr SDL_Haptic -> SDL_HapticEffectID -> SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO BG.CBool))
 hs_bindgen_a02a57984673b21e =
-  BG.fromFFIType hs_bindgen_a02a57984673b21e_base
+  fmap BG.fromFFIType hs_bindgen_a02a57984673b21e_base
 
 {-# NOINLINE sDL_RunHapticEffect #-}
 
@@ -891,7 +899,7 @@
 hs_bindgen_30eca5319f79857b
   :: IO (BG.FunPtr (BG.Ptr SDL_Haptic -> SDL_HapticEffectID -> IO BG.CBool))
 hs_bindgen_30eca5319f79857b =
-  BG.fromFFIType hs_bindgen_30eca5319f79857b_base
+  fmap BG.fromFFIType hs_bindgen_30eca5319f79857b_base
 
 {-# NOINLINE sDL_StopHapticEffect #-}
 
@@ -920,7 +928,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_get_SDL_DestroyHapticEffect@
 hs_bindgen_ac32175b5d132b5c :: IO (BG.FunPtr (BG.Ptr SDL_Haptic -> SDL_HapticEffectID -> IO ()))
 hs_bindgen_ac32175b5d132b5c =
-  BG.fromFFIType hs_bindgen_ac32175b5d132b5c_base
+  fmap BG.fromFFIType hs_bindgen_ac32175b5d132b5c_base
 
 {-# NOINLINE sDL_DestroyHapticEffect #-}
 
@@ -950,7 +958,7 @@
 hs_bindgen_c5abea2492dab75a
   :: IO (BG.FunPtr (BG.Ptr SDL_Haptic -> SDL_HapticEffectID -> IO BG.CBool))
 hs_bindgen_c5abea2492dab75a =
-  BG.fromFFIType hs_bindgen_c5abea2492dab75a_base
+  fmap BG.fromFFIType hs_bindgen_c5abea2492dab75a_base
 
 {-# NOINLINE sDL_GetHapticEffectStatus #-}
 
@@ -981,7 +989,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_get_SDL_SetHapticGain@
 hs_bindgen_2c6528b48cffc964 :: IO (BG.FunPtr (BG.Ptr SDL_Haptic -> BG.CInt -> IO BG.CBool))
 hs_bindgen_2c6528b48cffc964 =
-  BG.fromFFIType hs_bindgen_2c6528b48cffc964_base
+  fmap BG.fromFFIType hs_bindgen_2c6528b48cffc964_base
 
 {-# NOINLINE sDL_SetHapticGain #-}
 
@@ -1014,7 +1022,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_get_SDL_SetHapticAutocenter@
 hs_bindgen_568d338611d0f80d :: IO (BG.FunPtr (BG.Ptr SDL_Haptic -> BG.CInt -> IO BG.CBool))
 hs_bindgen_568d338611d0f80d =
-  BG.fromFFIType hs_bindgen_568d338611d0f80d_base
+  fmap BG.fromFFIType hs_bindgen_568d338611d0f80d_base
 
 {-# NOINLINE sDL_SetHapticAutocenter #-}
 
@@ -1047,7 +1055,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_get_SDL_PauseHaptic@
 hs_bindgen_2300eaaf5179d227 :: IO (BG.FunPtr (BG.Ptr SDL_Haptic -> IO BG.CBool))
 hs_bindgen_2300eaaf5179d227 =
-  BG.fromFFIType hs_bindgen_2300eaaf5179d227_base
+  fmap BG.fromFFIType hs_bindgen_2300eaaf5179d227_base
 
 {-# NOINLINE sDL_PauseHaptic #-}
 
@@ -1078,7 +1086,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_get_SDL_ResumeHaptic@
 hs_bindgen_d1b63d6dd09df218 :: IO (BG.FunPtr (BG.Ptr SDL_Haptic -> IO BG.CBool))
 hs_bindgen_d1b63d6dd09df218 =
-  BG.fromFFIType hs_bindgen_d1b63d6dd09df218_base
+  fmap BG.fromFFIType hs_bindgen_d1b63d6dd09df218_base
 
 {-# NOINLINE sDL_ResumeHaptic #-}
 
@@ -1107,7 +1115,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_get_SDL_StopHapticEffects@
 hs_bindgen_5cc314419a9f2703 :: IO (BG.FunPtr (BG.Ptr SDL_Haptic -> IO BG.CBool))
 hs_bindgen_5cc314419a9f2703 =
-  BG.fromFFIType hs_bindgen_5cc314419a9f2703_base
+  fmap BG.fromFFIType hs_bindgen_5cc314419a9f2703_base
 
 {-# NOINLINE sDL_StopHapticEffects #-}
 
@@ -1134,7 +1142,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_get_SDL_HapticRumbleSupported@
 hs_bindgen_62fc953aa6c9d61a :: IO (BG.FunPtr (BG.Ptr SDL_Haptic -> IO BG.CBool))
 hs_bindgen_62fc953aa6c9d61a =
-  BG.fromFFIType hs_bindgen_62fc953aa6c9d61a_base
+  fmap BG.fromFFIType hs_bindgen_62fc953aa6c9d61a_base
 
 {-# NOINLINE sDL_HapticRumbleSupported #-}
 
@@ -1161,7 +1169,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_get_SDL_InitHapticRumble@
 hs_bindgen_7d0705a7e6ebb724 :: IO (BG.FunPtr (BG.Ptr SDL_Haptic -> IO BG.CBool))
 hs_bindgen_7d0705a7e6ebb724 =
-  BG.fromFFIType hs_bindgen_7d0705a7e6ebb724_base
+  fmap BG.fromFFIType hs_bindgen_7d0705a7e6ebb724_base
 
 {-# NOINLINE sDL_InitHapticRumble #-}
 
@@ -1189,7 +1197,7 @@
 hs_bindgen_41c52ad08dc2e874
   :: IO (BG.FunPtr (BG.Ptr SDL_Haptic -> BG.CFloat -> SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO BG.CBool))
 hs_bindgen_41c52ad08dc2e874 =
-  BG.fromFFIType hs_bindgen_41c52ad08dc2e874_base
+  fmap BG.fromFFIType hs_bindgen_41c52ad08dc2e874_base
 
 {-# NOINLINE sDL_PlayHapticRumble #-}
 
@@ -1221,7 +1229,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_get_SDL_StopHapticRumble@
 hs_bindgen_e3ee0b83eaad3e1f :: IO (BG.FunPtr (BG.Ptr SDL_Haptic -> IO BG.CBool))
 hs_bindgen_e3ee0b83eaad3e1f =
-  BG.fromFFIType hs_bindgen_e3ee0b83eaad3e1f_base
+  fmap BG.fromFFIType hs_bindgen_e3ee0b83eaad3e1f_base
 
 {-# NOINLINE sDL_StopHapticRumble #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Haptic/Safe.hs b/src/SDL3/Sys/Bindgen/Haptic/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Haptic/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Haptic/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Haptic.Safe (
@@ -37,6 +39,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -46,7 +51,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_haptic.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_haptic.h>"
          , "SDL_HapticID *hs_bindgen_0fa1139acd663b7b ("
          , "  signed int *arg1"
          , ")"
@@ -281,7 +290,8 @@
   :: BG.Ptr BG.CInt
   -> IO (BG.Ptr SDL_HapticID)
 hs_bindgen_0fa1139acd663b7b =
-  BG.fromFFIType hs_bindgen_0fa1139acd663b7b_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_0fa1139acd663b7b_base (BG.toFFIType x0))
 
 -- | Get a list of currently connected haptic devices.
 --
@@ -303,7 +313,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Safe_SDL_GetHapticNameForID@
 foreign import ccall safe "hs_bindgen_9314d546163bea9b"
   hs_bindgen_9314d546163bea9b_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Safe_SDL_GetHapticNameForID@
@@ -311,7 +321,8 @@
   :: SDL_HapticID
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_9314d546163bea9b =
-  BG.fromFFIType hs_bindgen_9314d546163bea9b_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_9314d546163bea9b_base (BG.toFFIType x0))
 
 -- | Get the implementation dependent name of a haptic device.
 --
@@ -335,7 +346,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Safe_SDL_OpenHaptic@
 foreign import ccall safe "hs_bindgen_dbff4b31baeb7b51"
   hs_bindgen_dbff4b31baeb7b51_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Safe_SDL_OpenHaptic@
@@ -343,7 +354,8 @@
   :: SDL_HapticID
   -> IO (BG.Ptr SDL_Haptic)
 hs_bindgen_dbff4b31baeb7b51 =
-  BG.fromFFIType hs_bindgen_dbff4b31baeb7b51_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_dbff4b31baeb7b51_base (BG.toFFIType x0))
 
 -- | Open a haptic device for use.
 --
@@ -369,7 +381,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Safe_SDL_GetHapticFromID@
 foreign import ccall safe "hs_bindgen_1785e32cd90d0d06"
   hs_bindgen_1785e32cd90d0d06_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Safe_SDL_GetHapticFromID@
@@ -377,7 +389,8 @@
   :: SDL_HapticID
   -> IO (BG.Ptr SDL_Haptic)
 hs_bindgen_1785e32cd90d0d06 =
-  BG.fromFFIType hs_bindgen_1785e32cd90d0d06_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_1785e32cd90d0d06_base (BG.toFFIType x0))
 
 -- | Get the 'SDL_Haptic' associated with an instance ID, if it has been opened.
 --
@@ -398,14 +411,15 @@
 foreign import ccall safe "hs_bindgen_de8498981e0f6223"
   hs_bindgen_de8498981e0f6223_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Safe_SDL_GetHapticID@
 hs_bindgen_de8498981e0f6223
   :: BG.Ptr SDL_Haptic
   -> IO SDL_HapticID
 hs_bindgen_de8498981e0f6223 =
-  BG.fromFFIType hs_bindgen_de8498981e0f6223_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_de8498981e0f6223_base (BG.toFFIType x0))
 
 -- | Get the instance ID of an opened haptic device.
 --
@@ -433,7 +447,8 @@
   :: BG.Ptr SDL_Haptic
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_360c0a89e793b7ad =
-  BG.fromFFIType hs_bindgen_360c0a89e793b7ad_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_360c0a89e793b7ad_base (BG.toFFIType x0))
 
 -- | Get the implementation dependent name of a haptic device.
 --
@@ -455,12 +470,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Safe_SDL_IsMouseHaptic@
 foreign import ccall safe "hs_bindgen_4c4f92c17cae6f18"
   hs_bindgen_4c4f92c17cae6f18_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Safe_SDL_IsMouseHaptic@
 hs_bindgen_4c4f92c17cae6f18 :: IO BG.CBool
 hs_bindgen_4c4f92c17cae6f18 =
-  BG.fromFFIType hs_bindgen_4c4f92c17cae6f18_base
+  fmap BG.fromFFIType hs_bindgen_4c4f92c17cae6f18_base
 
 -- | Query whether or not the current mouse has haptic capabilities.
 --
@@ -482,7 +497,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Safe_SDL_OpenHapticFromMouse@
 hs_bindgen_8e6b94caa3e52d98 :: IO (BG.Ptr SDL_Haptic)
 hs_bindgen_8e6b94caa3e52d98 =
-  BG.fromFFIType hs_bindgen_8e6b94caa3e52d98_base
+  fmap BG.fromFFIType hs_bindgen_8e6b94caa3e52d98_base
 
 -- | Try to open a haptic device from the current mouse.
 --
@@ -500,14 +515,15 @@
 foreign import ccall safe "hs_bindgen_c5f4f376b01c2e4f"
   hs_bindgen_c5f4f376b01c2e4f_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Safe_SDL_IsJoystickHaptic@
 hs_bindgen_c5f4f376b01c2e4f
   :: BG.Ptr SDL3.Sys.Bindgen.Joystick.SDL_Joystick
   -> IO BG.CBool
 hs_bindgen_c5f4f376b01c2e4f =
-  BG.fromFFIType hs_bindgen_c5f4f376b01c2e4f_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c5f4f376b01c2e4f_base (BG.toFFIType x0))
 
 -- | Query if a joystick has haptic features.
 --
@@ -537,7 +553,8 @@
   :: BG.Ptr SDL3.Sys.Bindgen.Joystick.SDL_Joystick
   -> IO (BG.Ptr SDL_Haptic)
 hs_bindgen_01eda3f2b59f9aab =
-  BG.fromFFIType hs_bindgen_01eda3f2b59f9aab_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_01eda3f2b59f9aab_base (BG.toFFIType x0))
 
 -- | Open a haptic device for use from a joystick device.
 --
@@ -572,7 +589,8 @@
   :: BG.Ptr SDL_Haptic
   -> IO ()
 hs_bindgen_f6f5492f48ba2e5b =
-  BG.fromFFIType hs_bindgen_f6f5492f48ba2e5b_base
+  \x0 ->
+    hs_bindgen_f6f5492f48ba2e5b_base (BG.toFFIType x0)
 
 -- | Close a haptic device previously opened with @SDL_OpenHaptic()@.
 --
@@ -593,14 +611,15 @@
 foreign import ccall safe "hs_bindgen_366d199432bdd8e0"
   hs_bindgen_366d199432bdd8e0_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Safe_SDL_GetMaxHapticEffects@
 hs_bindgen_366d199432bdd8e0
   :: BG.Ptr SDL_Haptic
   -> IO BG.CInt
 hs_bindgen_366d199432bdd8e0 =
-  BG.fromFFIType hs_bindgen_366d199432bdd8e0_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_366d199432bdd8e0_base (BG.toFFIType x0))
 
 -- | Get the number of effects a haptic device can store.
 --
@@ -625,14 +644,15 @@
 foreign import ccall safe "hs_bindgen_5bf116c6af24ad82"
   hs_bindgen_5bf116c6af24ad82_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Safe_SDL_GetMaxHapticEffectsPlaying@
 hs_bindgen_5bf116c6af24ad82
   :: BG.Ptr SDL_Haptic
   -> IO BG.CInt
 hs_bindgen_5bf116c6af24ad82 =
-  BG.fromFFIType hs_bindgen_5bf116c6af24ad82_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_5bf116c6af24ad82_base (BG.toFFIType x0))
 
 -- | Get the number of effects a haptic device can play at the same time.
 --
@@ -658,14 +678,15 @@
 foreign import ccall safe "hs_bindgen_13fda9a87e4ece91"
   hs_bindgen_13fda9a87e4ece91_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Safe_SDL_GetHapticFeatures@
 hs_bindgen_13fda9a87e4ece91
   :: BG.Ptr SDL_Haptic
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
 hs_bindgen_13fda9a87e4ece91 =
-  BG.fromFFIType hs_bindgen_13fda9a87e4ece91_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_13fda9a87e4ece91_base (BG.toFFIType x0))
 
 -- | Get the haptic device\'s supported features in bitwise manner.
 --
@@ -688,14 +709,15 @@
 foreign import ccall safe "hs_bindgen_7ed42e0a43315641"
   hs_bindgen_7ed42e0a43315641_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Safe_SDL_GetNumHapticAxes@
 hs_bindgen_7ed42e0a43315641
   :: BG.Ptr SDL_Haptic
   -> IO BG.CInt
 hs_bindgen_7ed42e0a43315641 =
-  BG.fromFFIType hs_bindgen_7ed42e0a43315641_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_7ed42e0a43315641_base (BG.toFFIType x0))
 
 -- | Get the number of haptic axes the device has.
 --
@@ -719,7 +741,7 @@
   hs_bindgen_5f13cffbd392579e_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Safe_SDL_HapticEffectSupported@
 hs_bindgen_5f13cffbd392579e
@@ -727,7 +749,9 @@
   -> PtrConst.PtrConst SDL_HapticEffect
   -> IO BG.CBool
 hs_bindgen_5f13cffbd392579e =
-  BG.fromFFIType hs_bindgen_5f13cffbd392579e_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_5f13cffbd392579e_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Check to see if an effect is supported by a haptic device.
 --
@@ -756,7 +780,7 @@
   hs_bindgen_15baa0f4a78836ae_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Safe_SDL_CreateHapticEffect@
 hs_bindgen_15baa0f4a78836ae
@@ -764,7 +788,9 @@
   -> PtrConst.PtrConst SDL_HapticEffect
   -> IO SDL_HapticEffectID
 hs_bindgen_15baa0f4a78836ae =
-  BG.fromFFIType hs_bindgen_15baa0f4a78836ae_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_15baa0f4a78836ae_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Create a new haptic effect on a specified device.
 --
@@ -791,9 +817,9 @@
 foreign import ccall safe "hs_bindgen_0492468c6fb17ac5"
   hs_bindgen_0492468c6fb17ac5_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Safe_SDL_UpdateHapticEffect@
 hs_bindgen_0492468c6fb17ac5
@@ -802,7 +828,12 @@
   -> PtrConst.PtrConst SDL_HapticEffect
   -> IO BG.CBool
 hs_bindgen_0492468c6fb17ac5 =
-  BG.fromFFIType hs_bindgen_0492468c6fb17ac5_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_0492468c6fb17ac5_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Update the properties of an effect.
 --
@@ -835,9 +866,9 @@
 foreign import ccall safe "hs_bindgen_a614a05d61f4001a"
   hs_bindgen_a614a05d61f4001a_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Word32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Safe_SDL_RunHapticEffect@
 hs_bindgen_a614a05d61f4001a
@@ -846,7 +877,12 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_a614a05d61f4001a =
-  BG.fromFFIType hs_bindgen_a614a05d61f4001a_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_a614a05d61f4001a_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Run the haptic effect on its associated haptic device.
 --
@@ -879,8 +915,8 @@
 foreign import ccall safe "hs_bindgen_62c7aa3038b74c27"
   hs_bindgen_62c7aa3038b74c27_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Safe_SDL_StopHapticEffect@
 hs_bindgen_62c7aa3038b74c27
@@ -888,7 +924,9 @@
   -> SDL_HapticEffectID
   -> IO BG.CBool
 hs_bindgen_62c7aa3038b74c27 =
-  BG.fromFFIType hs_bindgen_62c7aa3038b74c27_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_62c7aa3038b74c27_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Stop the haptic effect on its associated haptic device.
 --
@@ -915,7 +953,7 @@
 foreign import ccall safe "hs_bindgen_6ebf1b15d73c024c"
   hs_bindgen_6ebf1b15d73c024c_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Safe_SDL_DestroyHapticEffect@
@@ -924,7 +962,9 @@
   -> SDL_HapticEffectID
   -> IO ()
 hs_bindgen_6ebf1b15d73c024c =
-  BG.fromFFIType hs_bindgen_6ebf1b15d73c024c_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_6ebf1b15d73c024c_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Destroy a haptic effect on the device.
 --
@@ -951,8 +991,8 @@
 foreign import ccall safe "hs_bindgen_8953e9e35530a132"
   hs_bindgen_8953e9e35530a132_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Safe_SDL_GetHapticEffectStatus@
 hs_bindgen_8953e9e35530a132
@@ -960,7 +1000,9 @@
   -> SDL_HapticEffectID
   -> IO BG.CBool
 hs_bindgen_8953e9e35530a132 =
-  BG.fromFFIType hs_bindgen_8953e9e35530a132_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_8953e9e35530a132_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the status of the current effect on the specified haptic device.
 --
@@ -990,8 +1032,8 @@
 foreign import ccall safe "hs_bindgen_33d36e11c46c206d"
   hs_bindgen_33d36e11c46c206d_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Safe_SDL_SetHapticGain@
 hs_bindgen_33d36e11c46c206d
@@ -999,7 +1041,9 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_33d36e11c46c206d =
-  BG.fromFFIType hs_bindgen_33d36e11c46c206d_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_33d36e11c46c206d_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the global gain of the specified haptic device.
 --
@@ -1030,8 +1074,8 @@
 foreign import ccall safe "hs_bindgen_713374147201159e"
   hs_bindgen_713374147201159e_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Safe_SDL_SetHapticAutocenter@
 hs_bindgen_713374147201159e
@@ -1039,7 +1083,9 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_713374147201159e =
-  BG.fromFFIType hs_bindgen_713374147201159e_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_713374147201159e_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the global autocenter of the device.
 --
@@ -1070,14 +1116,15 @@
 foreign import ccall safe "hs_bindgen_d4344f317b2d7325"
   hs_bindgen_d4344f317b2d7325_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Safe_SDL_PauseHaptic@
 hs_bindgen_d4344f317b2d7325
   :: BG.Ptr SDL_Haptic
   -> IO BG.CBool
 hs_bindgen_d4344f317b2d7325 =
-  BG.fromFFIType hs_bindgen_d4344f317b2d7325_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d4344f317b2d7325_base (BG.toFFIType x0))
 
 -- | Pause a haptic device.
 --
@@ -1104,14 +1151,15 @@
 foreign import ccall safe "hs_bindgen_79c16f8418a90f86"
   hs_bindgen_79c16f8418a90f86_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Safe_SDL_ResumeHaptic@
 hs_bindgen_79c16f8418a90f86
   :: BG.Ptr SDL_Haptic
   -> IO BG.CBool
 hs_bindgen_79c16f8418a90f86 =
-  BG.fromFFIType hs_bindgen_79c16f8418a90f86_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_79c16f8418a90f86_base (BG.toFFIType x0))
 
 -- | Resume a haptic device.
 --
@@ -1136,14 +1184,15 @@
 foreign import ccall safe "hs_bindgen_f452836b38dc6590"
   hs_bindgen_f452836b38dc6590_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Safe_SDL_StopHapticEffects@
 hs_bindgen_f452836b38dc6590
   :: BG.Ptr SDL_Haptic
   -> IO BG.CBool
 hs_bindgen_f452836b38dc6590 =
-  BG.fromFFIType hs_bindgen_f452836b38dc6590_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_f452836b38dc6590_base (BG.toFFIType x0))
 
 -- | Stop all the currently playing effects on a haptic device.
 --
@@ -1166,14 +1215,15 @@
 foreign import ccall safe "hs_bindgen_113ac21fbd9de22e"
   hs_bindgen_113ac21fbd9de22e_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Safe_SDL_HapticRumbleSupported@
 hs_bindgen_113ac21fbd9de22e
   :: BG.Ptr SDL_Haptic
   -> IO BG.CBool
 hs_bindgen_113ac21fbd9de22e =
-  BG.fromFFIType hs_bindgen_113ac21fbd9de22e_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_113ac21fbd9de22e_base (BG.toFFIType x0))
 
 -- | Check whether rumble is supported on a haptic device.
 --
@@ -1197,14 +1247,15 @@
 foreign import ccall safe "hs_bindgen_ae32c683da240a6e"
   hs_bindgen_ae32c683da240a6e_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Safe_SDL_InitHapticRumble@
 hs_bindgen_ae32c683da240a6e
   :: BG.Ptr SDL_Haptic
   -> IO BG.CBool
 hs_bindgen_ae32c683da240a6e =
-  BG.fromFFIType hs_bindgen_ae32c683da240a6e_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_ae32c683da240a6e_base (BG.toFFIType x0))
 
 -- | Initialize a haptic device for simple rumble playback.
 --
@@ -1227,9 +1278,9 @@
 foreign import ccall safe "hs_bindgen_10fe16fce6a60bfe"
   hs_bindgen_10fe16fce6a60bfe_base
     :: BG.Ptr BG.Void
-    -> Float
-    -> BG.Word32
-    -> IO BG.Word8
+    -> BG.CFloat
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Safe_SDL_PlayHapticRumble@
 hs_bindgen_10fe16fce6a60bfe
@@ -1238,7 +1289,12 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_10fe16fce6a60bfe =
-  BG.fromFFIType hs_bindgen_10fe16fce6a60bfe_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_10fe16fce6a60bfe_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Run a simple rumble effect on a haptic device.
 --
@@ -1269,14 +1325,15 @@
 foreign import ccall safe "hs_bindgen_2b55fdb7a5a8262a"
   hs_bindgen_2b55fdb7a5a8262a_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Safe_SDL_StopHapticRumble@
 hs_bindgen_2b55fdb7a5a8262a
   :: BG.Ptr SDL_Haptic
   -> IO BG.CBool
 hs_bindgen_2b55fdb7a5a8262a =
-  BG.fromFFIType hs_bindgen_2b55fdb7a5a8262a_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_2b55fdb7a5a8262a_base (BG.toFFIType x0))
 
 -- | Stop the simple rumble on a haptic device.
 --
diff --git a/src/SDL3/Sys/Bindgen/Haptic/Unsafe.hs b/src/SDL3/Sys/Bindgen/Haptic/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Haptic/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Haptic/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Haptic.Unsafe (
@@ -37,6 +39,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -46,7 +51,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_haptic.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_haptic.h>"
          , "SDL_HapticID *hs_bindgen_9144fd217aed3644 ("
          , "  signed int *arg1"
          , ")"
@@ -281,7 +290,8 @@
   :: BG.Ptr BG.CInt
   -> IO (BG.Ptr SDL_HapticID)
 hs_bindgen_9144fd217aed3644 =
-  BG.fromFFIType hs_bindgen_9144fd217aed3644_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_9144fd217aed3644_base (BG.toFFIType x0))
 
 -- | Get a list of currently connected haptic devices.
 --
@@ -303,7 +313,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Unsafe_SDL_GetHapticNameForID@
 foreign import ccall unsafe "hs_bindgen_0bc6c8aa0c9268ef"
   hs_bindgen_0bc6c8aa0c9268ef_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Unsafe_SDL_GetHapticNameForID@
@@ -311,7 +321,8 @@
   :: SDL_HapticID
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_0bc6c8aa0c9268ef =
-  BG.fromFFIType hs_bindgen_0bc6c8aa0c9268ef_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_0bc6c8aa0c9268ef_base (BG.toFFIType x0))
 
 -- | Get the implementation dependent name of a haptic device.
 --
@@ -335,7 +346,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Unsafe_SDL_OpenHaptic@
 foreign import ccall unsafe "hs_bindgen_e145a39ad8de4588"
   hs_bindgen_e145a39ad8de4588_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Unsafe_SDL_OpenHaptic@
@@ -343,7 +354,8 @@
   :: SDL_HapticID
   -> IO (BG.Ptr SDL_Haptic)
 hs_bindgen_e145a39ad8de4588 =
-  BG.fromFFIType hs_bindgen_e145a39ad8de4588_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_e145a39ad8de4588_base (BG.toFFIType x0))
 
 -- | Open a haptic device for use.
 --
@@ -369,7 +381,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Unsafe_SDL_GetHapticFromID@
 foreign import ccall unsafe "hs_bindgen_3eb0e70beaf705a6"
   hs_bindgen_3eb0e70beaf705a6_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Unsafe_SDL_GetHapticFromID@
@@ -377,7 +389,8 @@
   :: SDL_HapticID
   -> IO (BG.Ptr SDL_Haptic)
 hs_bindgen_3eb0e70beaf705a6 =
-  BG.fromFFIType hs_bindgen_3eb0e70beaf705a6_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3eb0e70beaf705a6_base (BG.toFFIType x0))
 
 -- | Get the 'SDL_Haptic' associated with an instance ID, if it has been opened.
 --
@@ -398,14 +411,15 @@
 foreign import ccall unsafe "hs_bindgen_733c1ac4379b685f"
   hs_bindgen_733c1ac4379b685f_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Unsafe_SDL_GetHapticID@
 hs_bindgen_733c1ac4379b685f
   :: BG.Ptr SDL_Haptic
   -> IO SDL_HapticID
 hs_bindgen_733c1ac4379b685f =
-  BG.fromFFIType hs_bindgen_733c1ac4379b685f_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_733c1ac4379b685f_base (BG.toFFIType x0))
 
 -- | Get the instance ID of an opened haptic device.
 --
@@ -433,7 +447,8 @@
   :: BG.Ptr SDL_Haptic
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_65ea37324067e4e8 =
-  BG.fromFFIType hs_bindgen_65ea37324067e4e8_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_65ea37324067e4e8_base (BG.toFFIType x0))
 
 -- | Get the implementation dependent name of a haptic device.
 --
@@ -455,12 +470,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Unsafe_SDL_IsMouseHaptic@
 foreign import ccall unsafe "hs_bindgen_7f6b487ecec1bdc7"
   hs_bindgen_7f6b487ecec1bdc7_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Unsafe_SDL_IsMouseHaptic@
 hs_bindgen_7f6b487ecec1bdc7 :: IO BG.CBool
 hs_bindgen_7f6b487ecec1bdc7 =
-  BG.fromFFIType hs_bindgen_7f6b487ecec1bdc7_base
+  fmap BG.fromFFIType hs_bindgen_7f6b487ecec1bdc7_base
 
 -- | Query whether or not the current mouse has haptic capabilities.
 --
@@ -482,7 +497,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Unsafe_SDL_OpenHapticFromMouse@
 hs_bindgen_fdfe5c61a81c94fd :: IO (BG.Ptr SDL_Haptic)
 hs_bindgen_fdfe5c61a81c94fd =
-  BG.fromFFIType hs_bindgen_fdfe5c61a81c94fd_base
+  fmap BG.fromFFIType hs_bindgen_fdfe5c61a81c94fd_base
 
 -- | Try to open a haptic device from the current mouse.
 --
@@ -500,14 +515,15 @@
 foreign import ccall unsafe "hs_bindgen_136048137b058f4b"
   hs_bindgen_136048137b058f4b_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Unsafe_SDL_IsJoystickHaptic@
 hs_bindgen_136048137b058f4b
   :: BG.Ptr SDL3.Sys.Bindgen.Joystick.SDL_Joystick
   -> IO BG.CBool
 hs_bindgen_136048137b058f4b =
-  BG.fromFFIType hs_bindgen_136048137b058f4b_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_136048137b058f4b_base (BG.toFFIType x0))
 
 -- | Query if a joystick has haptic features.
 --
@@ -537,7 +553,8 @@
   :: BG.Ptr SDL3.Sys.Bindgen.Joystick.SDL_Joystick
   -> IO (BG.Ptr SDL_Haptic)
 hs_bindgen_1ee4f9bee2fcd4f3 =
-  BG.fromFFIType hs_bindgen_1ee4f9bee2fcd4f3_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_1ee4f9bee2fcd4f3_base (BG.toFFIType x0))
 
 -- | Open a haptic device for use from a joystick device.
 --
@@ -572,7 +589,8 @@
   :: BG.Ptr SDL_Haptic
   -> IO ()
 hs_bindgen_5dc34bbc05254c40 =
-  BG.fromFFIType hs_bindgen_5dc34bbc05254c40_base
+  \x0 ->
+    hs_bindgen_5dc34bbc05254c40_base (BG.toFFIType x0)
 
 -- | Close a haptic device previously opened with @SDL_OpenHaptic()@.
 --
@@ -593,14 +611,15 @@
 foreign import ccall unsafe "hs_bindgen_5cd0622005566196"
   hs_bindgen_5cd0622005566196_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Unsafe_SDL_GetMaxHapticEffects@
 hs_bindgen_5cd0622005566196
   :: BG.Ptr SDL_Haptic
   -> IO BG.CInt
 hs_bindgen_5cd0622005566196 =
-  BG.fromFFIType hs_bindgen_5cd0622005566196_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_5cd0622005566196_base (BG.toFFIType x0))
 
 -- | Get the number of effects a haptic device can store.
 --
@@ -625,14 +644,15 @@
 foreign import ccall unsafe "hs_bindgen_ed10e8124384dcc6"
   hs_bindgen_ed10e8124384dcc6_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Unsafe_SDL_GetMaxHapticEffectsPlaying@
 hs_bindgen_ed10e8124384dcc6
   :: BG.Ptr SDL_Haptic
   -> IO BG.CInt
 hs_bindgen_ed10e8124384dcc6 =
-  BG.fromFFIType hs_bindgen_ed10e8124384dcc6_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_ed10e8124384dcc6_base (BG.toFFIType x0))
 
 -- | Get the number of effects a haptic device can play at the same time.
 --
@@ -658,14 +678,15 @@
 foreign import ccall unsafe "hs_bindgen_53effd9f65bf5118"
   hs_bindgen_53effd9f65bf5118_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Unsafe_SDL_GetHapticFeatures@
 hs_bindgen_53effd9f65bf5118
   :: BG.Ptr SDL_Haptic
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
 hs_bindgen_53effd9f65bf5118 =
-  BG.fromFFIType hs_bindgen_53effd9f65bf5118_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_53effd9f65bf5118_base (BG.toFFIType x0))
 
 -- | Get the haptic device\'s supported features in bitwise manner.
 --
@@ -688,14 +709,15 @@
 foreign import ccall unsafe "hs_bindgen_fc1fa543654842e5"
   hs_bindgen_fc1fa543654842e5_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Unsafe_SDL_GetNumHapticAxes@
 hs_bindgen_fc1fa543654842e5
   :: BG.Ptr SDL_Haptic
   -> IO BG.CInt
 hs_bindgen_fc1fa543654842e5 =
-  BG.fromFFIType hs_bindgen_fc1fa543654842e5_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_fc1fa543654842e5_base (BG.toFFIType x0))
 
 -- | Get the number of haptic axes the device has.
 --
@@ -719,7 +741,7 @@
   hs_bindgen_ddf7667b0951f535_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Unsafe_SDL_HapticEffectSupported@
 hs_bindgen_ddf7667b0951f535
@@ -727,7 +749,9 @@
   -> PtrConst.PtrConst SDL_HapticEffect
   -> IO BG.CBool
 hs_bindgen_ddf7667b0951f535 =
-  BG.fromFFIType hs_bindgen_ddf7667b0951f535_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_ddf7667b0951f535_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Check to see if an effect is supported by a haptic device.
 --
@@ -756,7 +780,7 @@
   hs_bindgen_8b8594cfaa325bcf_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Unsafe_SDL_CreateHapticEffect@
 hs_bindgen_8b8594cfaa325bcf
@@ -764,7 +788,9 @@
   -> PtrConst.PtrConst SDL_HapticEffect
   -> IO SDL_HapticEffectID
 hs_bindgen_8b8594cfaa325bcf =
-  BG.fromFFIType hs_bindgen_8b8594cfaa325bcf_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_8b8594cfaa325bcf_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Create a new haptic effect on a specified device.
 --
@@ -791,9 +817,9 @@
 foreign import ccall unsafe "hs_bindgen_9a5d65efc573a34d"
   hs_bindgen_9a5d65efc573a34d_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Unsafe_SDL_UpdateHapticEffect@
 hs_bindgen_9a5d65efc573a34d
@@ -802,7 +828,12 @@
   -> PtrConst.PtrConst SDL_HapticEffect
   -> IO BG.CBool
 hs_bindgen_9a5d65efc573a34d =
-  BG.fromFFIType hs_bindgen_9a5d65efc573a34d_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_9a5d65efc573a34d_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Update the properties of an effect.
 --
@@ -835,9 +866,9 @@
 foreign import ccall unsafe "hs_bindgen_a491b2976f3c0e2a"
   hs_bindgen_a491b2976f3c0e2a_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Word32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Unsafe_SDL_RunHapticEffect@
 hs_bindgen_a491b2976f3c0e2a
@@ -846,7 +877,12 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_a491b2976f3c0e2a =
-  BG.fromFFIType hs_bindgen_a491b2976f3c0e2a_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_a491b2976f3c0e2a_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Run the haptic effect on its associated haptic device.
 --
@@ -879,8 +915,8 @@
 foreign import ccall unsafe "hs_bindgen_a1ba32f8ccf55d38"
   hs_bindgen_a1ba32f8ccf55d38_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Unsafe_SDL_StopHapticEffect@
 hs_bindgen_a1ba32f8ccf55d38
@@ -888,7 +924,9 @@
   -> SDL_HapticEffectID
   -> IO BG.CBool
 hs_bindgen_a1ba32f8ccf55d38 =
-  BG.fromFFIType hs_bindgen_a1ba32f8ccf55d38_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_a1ba32f8ccf55d38_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Stop the haptic effect on its associated haptic device.
 --
@@ -915,7 +953,7 @@
 foreign import ccall unsafe "hs_bindgen_2cf548acecd92e79"
   hs_bindgen_2cf548acecd92e79_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Unsafe_SDL_DestroyHapticEffect@
@@ -924,7 +962,9 @@
   -> SDL_HapticEffectID
   -> IO ()
 hs_bindgen_2cf548acecd92e79 =
-  BG.fromFFIType hs_bindgen_2cf548acecd92e79_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_2cf548acecd92e79_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Destroy a haptic effect on the device.
 --
@@ -951,8 +991,8 @@
 foreign import ccall unsafe "hs_bindgen_a77bda94890e1c73"
   hs_bindgen_a77bda94890e1c73_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Unsafe_SDL_GetHapticEffectStatus@
 hs_bindgen_a77bda94890e1c73
@@ -960,7 +1000,9 @@
   -> SDL_HapticEffectID
   -> IO BG.CBool
 hs_bindgen_a77bda94890e1c73 =
-  BG.fromFFIType hs_bindgen_a77bda94890e1c73_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_a77bda94890e1c73_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the status of the current effect on the specified haptic device.
 --
@@ -990,8 +1032,8 @@
 foreign import ccall unsafe "hs_bindgen_206db73edc8fadd4"
   hs_bindgen_206db73edc8fadd4_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Unsafe_SDL_SetHapticGain@
 hs_bindgen_206db73edc8fadd4
@@ -999,7 +1041,9 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_206db73edc8fadd4 =
-  BG.fromFFIType hs_bindgen_206db73edc8fadd4_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_206db73edc8fadd4_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the global gain of the specified haptic device.
 --
@@ -1030,8 +1074,8 @@
 foreign import ccall unsafe "hs_bindgen_f0b69ddce282f135"
   hs_bindgen_f0b69ddce282f135_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Unsafe_SDL_SetHapticAutocenter@
 hs_bindgen_f0b69ddce282f135
@@ -1039,7 +1083,9 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_f0b69ddce282f135 =
-  BG.fromFFIType hs_bindgen_f0b69ddce282f135_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_f0b69ddce282f135_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the global autocenter of the device.
 --
@@ -1070,14 +1116,15 @@
 foreign import ccall unsafe "hs_bindgen_98b65e257f12670a"
   hs_bindgen_98b65e257f12670a_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Unsafe_SDL_PauseHaptic@
 hs_bindgen_98b65e257f12670a
   :: BG.Ptr SDL_Haptic
   -> IO BG.CBool
 hs_bindgen_98b65e257f12670a =
-  BG.fromFFIType hs_bindgen_98b65e257f12670a_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_98b65e257f12670a_base (BG.toFFIType x0))
 
 -- | Pause a haptic device.
 --
@@ -1104,14 +1151,15 @@
 foreign import ccall unsafe "hs_bindgen_d54e536e172fdf2a"
   hs_bindgen_d54e536e172fdf2a_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Unsafe_SDL_ResumeHaptic@
 hs_bindgen_d54e536e172fdf2a
   :: BG.Ptr SDL_Haptic
   -> IO BG.CBool
 hs_bindgen_d54e536e172fdf2a =
-  BG.fromFFIType hs_bindgen_d54e536e172fdf2a_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d54e536e172fdf2a_base (BG.toFFIType x0))
 
 -- | Resume a haptic device.
 --
@@ -1136,14 +1184,15 @@
 foreign import ccall unsafe "hs_bindgen_10f2c8457cada0f1"
   hs_bindgen_10f2c8457cada0f1_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Unsafe_SDL_StopHapticEffects@
 hs_bindgen_10f2c8457cada0f1
   :: BG.Ptr SDL_Haptic
   -> IO BG.CBool
 hs_bindgen_10f2c8457cada0f1 =
-  BG.fromFFIType hs_bindgen_10f2c8457cada0f1_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_10f2c8457cada0f1_base (BG.toFFIType x0))
 
 -- | Stop all the currently playing effects on a haptic device.
 --
@@ -1166,14 +1215,15 @@
 foreign import ccall unsafe "hs_bindgen_0b0f01d261871ca4"
   hs_bindgen_0b0f01d261871ca4_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Unsafe_SDL_HapticRumbleSupported@
 hs_bindgen_0b0f01d261871ca4
   :: BG.Ptr SDL_Haptic
   -> IO BG.CBool
 hs_bindgen_0b0f01d261871ca4 =
-  BG.fromFFIType hs_bindgen_0b0f01d261871ca4_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_0b0f01d261871ca4_base (BG.toFFIType x0))
 
 -- | Check whether rumble is supported on a haptic device.
 --
@@ -1197,14 +1247,15 @@
 foreign import ccall unsafe "hs_bindgen_1d3609585fc8a6db"
   hs_bindgen_1d3609585fc8a6db_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Unsafe_SDL_InitHapticRumble@
 hs_bindgen_1d3609585fc8a6db
   :: BG.Ptr SDL_Haptic
   -> IO BG.CBool
 hs_bindgen_1d3609585fc8a6db =
-  BG.fromFFIType hs_bindgen_1d3609585fc8a6db_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_1d3609585fc8a6db_base (BG.toFFIType x0))
 
 -- | Initialize a haptic device for simple rumble playback.
 --
@@ -1227,9 +1278,9 @@
 foreign import ccall unsafe "hs_bindgen_9a900e80b5933810"
   hs_bindgen_9a900e80b5933810_base
     :: BG.Ptr BG.Void
-    -> Float
-    -> BG.Word32
-    -> IO BG.Word8
+    -> BG.CFloat
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Unsafe_SDL_PlayHapticRumble@
 hs_bindgen_9a900e80b5933810
@@ -1238,7 +1289,12 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_9a900e80b5933810 =
-  BG.fromFFIType hs_bindgen_9a900e80b5933810_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_9a900e80b5933810_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Run a simple rumble effect on a haptic device.
 --
@@ -1269,14 +1325,15 @@
 foreign import ccall unsafe "hs_bindgen_8eb60197e5125e42"
   hs_bindgen_8eb60197e5125e42_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Haptic_Unsafe_SDL_StopHapticRumble@
 hs_bindgen_8eb60197e5125e42
   :: BG.Ptr SDL_Haptic
   -> IO BG.CBool
 hs_bindgen_8eb60197e5125e42 =
-  BG.fromFFIType hs_bindgen_8eb60197e5125e42_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_8eb60197e5125e42_base (BG.toFFIType x0))
 
 -- | Stop the simple rumble on a haptic device.
 --
diff --git a/src/SDL3/Sys/Bindgen/Hidapi.hs b/src/SDL3/Sys/Bindgen/Hidapi.hs
--- a/src/SDL3/Sys/Bindgen/Hidapi.hs
+++ b/src/SDL3/Sys/Bindgen/Hidapi.hs
@@ -18,6 +18,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | Header file for SDL HIDAPI functions.
 --
@@ -53,10 +54,13 @@
 )
 where
 
+import Prelude (Eq, Int, Ord, Read, Show, pure, (<*>), (>>), type (~))
+
 import HsBindgen.Runtime.CEnum qualified as CEnum
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.Marshal qualified as Marshal
+import HsBindgen.Runtime.Struct qualified as Struct
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField
 
@@ -322,6 +326,14 @@
 
 deriving via Marshal.EquivStorable SDL_hid_device_info instance BG.Storable SDL_hid_device_info
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_hid_device_info
+  instance
+    Struct.IsStruct SDL_hid_device_info
+
+-- | Platform-specific device path
+--
+--     [C declaration]: @path@, defined at @SDL3\/SDL_hidapi.h 116:11@
 instance
   (ty ~ BG.Ptr BG.CChar)
   => BG.CompatHasField.HasField "path" SDL_hid_device_info ty
@@ -362,6 +374,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | Device Vendor ID
+--
+--     [C declaration]: @vendor_id@, defined at @SDL3\/SDL_hidapi.h 118:20@
 instance
   (ty ~ BG.CUShort)
   => BG.CompatHasField.HasField "vendor_id" SDL_hid_device_info ty
@@ -402,6 +417,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | Device Product ID
+--
+--     [C declaration]: @product_id@, defined at @SDL3\/SDL_hidapi.h 120:20@
 instance
   (ty ~ BG.CUShort)
   => BG.CompatHasField.HasField "product_id" SDL_hid_device_info ty
@@ -442,6 +460,9 @@
 
   offset# = \_ -> \_ -> 10
 
+-- | Serial Number
+--
+--     [C declaration]: @serial_number@, defined at @SDL3\/SDL_hidapi.h 122:14@
 instance
   (ty ~ BG.Ptr HsBindgen.Runtime.LibC.CWchar)
   => BG.CompatHasField.HasField "serial_number" SDL_hid_device_info ty
@@ -483,6 +504,9 @@
 
   offset# = \_ -> \_ -> 16
 
+-- | Device Release Number in binary-coded decimal, also known as Device Version Number
+--
+--     [C declaration]: @release_number@, defined at @SDL3\/SDL_hidapi.h 125:20@
 instance
   (ty ~ BG.CUShort)
   => BG.CompatHasField.HasField "release_number" SDL_hid_device_info ty
@@ -524,6 +548,9 @@
 
   offset# = \_ -> \_ -> 24
 
+-- | Manufacturer String
+--
+--     [C declaration]: @manufacturer_string@, defined at @SDL3\/SDL_hidapi.h 127:14@
 instance
   (ty ~ BG.Ptr HsBindgen.Runtime.LibC.CWchar)
   => BG.CompatHasField.HasField "manufacturer_string" SDL_hid_device_info ty
@@ -565,6 +592,9 @@
 
   offset# = \_ -> \_ -> 32
 
+-- | Product string
+--
+--     [C declaration]: @product_string@, defined at @SDL3\/SDL_hidapi.h 129:14@
 instance
   (ty ~ BG.Ptr HsBindgen.Runtime.LibC.CWchar)
   => BG.CompatHasField.HasField "product_string" SDL_hid_device_info ty
@@ -606,6 +636,9 @@
 
   offset# = \_ -> \_ -> 40
 
+-- | Usage Page for this Device\/Interface (Windows\/Mac\/hidraw only)
+--
+--     [C declaration]: @usage_page@, defined at @SDL3\/SDL_hidapi.h 132:20@
 instance
   (ty ~ BG.CUShort)
   => BG.CompatHasField.HasField "usage_page" SDL_hid_device_info ty
@@ -646,6 +679,9 @@
 
   offset# = \_ -> \_ -> 48
 
+-- | Usage for this Device\/Interface (Windows\/Mac\/hidraw only)
+--
+--     [C declaration]: @usage@, defined at @SDL3\/SDL_hidapi.h 135:20@
 instance
   (ty ~ BG.CUShort)
   => BG.CompatHasField.HasField "usage" SDL_hid_device_info ty
@@ -686,6 +722,11 @@
 
   offset# = \_ -> \_ -> 50
 
+-- | The USB interface which this logical device represents.
+--
+--     Valid only if the device is a USB HID device. Set to -1 in all other cases.
+--
+--     [C declaration]: @interface_number@, defined at @SDL3\/SDL_hidapi.h 142:9@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "interface_number" SDL_hid_device_info ty
@@ -727,6 +768,9 @@
 
   offset# = \_ -> \_ -> 52
 
+-- | Additional information about the USB interface. Valid on libusb and Android implementations.
+--
+--     [C declaration]: @interface_class@, defined at @SDL3\/SDL_hidapi.h 146:9@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "interface_class" SDL_hid_device_info ty
@@ -768,6 +812,7 @@
 
   offset# = \_ -> \_ -> 56
 
+-- | [C declaration]: @interface_subclass@, defined at @SDL3\/SDL_hidapi.h 147:9@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "interface_subclass" SDL_hid_device_info ty
@@ -809,6 +854,7 @@
 
   offset# = \_ -> \_ -> 60
 
+-- | [C declaration]: @interface_protocol@, defined at @SDL3\/SDL_hidapi.h 148:9@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "interface_protocol" SDL_hid_device_info ty
@@ -850,6 +896,9 @@
 
   offset# = \_ -> \_ -> 64
 
+-- | Underlying bus type
+--
+--     [C declaration]: @bus_type@, defined at @SDL3\/SDL_hidapi.h 151:22@
 instance
   (ty ~ SDL_hid_bus_type)
   => BG.CompatHasField.HasField "bus_type" SDL_hid_device_info ty
@@ -890,6 +939,9 @@
 
   offset# = \_ -> \_ -> 68
 
+-- | Pointer to the next device
+--
+--     [C declaration]: @next@, defined at @SDL3\/SDL_hidapi.h 154:33@
 instance
   (ty ~ BG.Ptr SDL_hid_device_info)
   => BG.CompatHasField.HasField "next" SDL_hid_device_info ty
diff --git a/src/SDL3/Sys/Bindgen/Hidapi/FunPtr.hs b/src/SDL3/Sys/Bindgen/Hidapi/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Hidapi/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Hidapi/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Hidapi.FunPtr (
@@ -29,6 +31,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
@@ -39,7 +43,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_hidapi.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_hidapi.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_get_SDL_hid_init */"
          , "__attribute__ ((const))"
          , "signed int (*hs_bindgen_32091c4e86355dc7 (void)) (void)"
@@ -268,7 +276,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_get_SDL_hid_init@
 hs_bindgen_32091c4e86355dc7 :: IO (BG.FunPtr (IO BG.CInt))
 hs_bindgen_32091c4e86355dc7 =
-  BG.fromFFIType hs_bindgen_32091c4e86355dc7_base
+  fmap BG.fromFFIType hs_bindgen_32091c4e86355dc7_base
 
 {-# NOINLINE sDL_hid_init #-}
 
@@ -297,7 +305,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_get_SDL_hid_exit@
 hs_bindgen_26665e772cf695e7 :: IO (BG.FunPtr (IO BG.CInt))
 hs_bindgen_26665e772cf695e7 =
-  BG.fromFFIType hs_bindgen_26665e772cf695e7_base
+  fmap BG.fromFFIType hs_bindgen_26665e772cf695e7_base
 
 {-# NOINLINE sDL_hid_exit #-}
 
@@ -324,7 +332,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_get_SDL_hid_device_change_count@
 hs_bindgen_1ed9703a6ccb5ef9 :: IO (BG.FunPtr (IO SDL3.Sys.Bindgen.Stdinc.Uint32))
 hs_bindgen_1ed9703a6ccb5ef9 =
-  BG.fromFFIType hs_bindgen_1ed9703a6ccb5ef9_base
+  fmap BG.fromFFIType hs_bindgen_1ed9703a6ccb5ef9_base
 
 {-# NOINLINE sDL_hid_device_change_count #-}
 
@@ -354,7 +362,7 @@
 hs_bindgen_4922fe8bf9d9ed1b
   :: IO (BG.FunPtr (BG.CUShort -> BG.CUShort -> IO (BG.Ptr SDL_hid_device_info)))
 hs_bindgen_4922fe8bf9d9ed1b =
-  BG.fromFFIType hs_bindgen_4922fe8bf9d9ed1b_base
+  fmap BG.fromFFIType hs_bindgen_4922fe8bf9d9ed1b_base
 
 {-# NOINLINE sDL_hid_enumerate #-}
 
@@ -387,7 +395,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_get_SDL_hid_free_enumeration@
 hs_bindgen_3b866ca94af10a38 :: IO (BG.FunPtr (BG.Ptr SDL_hid_device_info -> IO ()))
 hs_bindgen_3b866ca94af10a38 =
-  BG.fromFFIType hs_bindgen_3b866ca94af10a38_base
+  fmap BG.fromFFIType hs_bindgen_3b866ca94af10a38_base
 
 {-# NOINLINE sDL_hid_free_enumeration #-}
 
@@ -420,7 +428,7 @@
            )
        )
 hs_bindgen_8d0a3f3bb4b21256 =
-  BG.fromFFIType hs_bindgen_8d0a3f3bb4b21256_base
+  fmap BG.fromFFIType hs_bindgen_8d0a3f3bb4b21256_base
 
 {-# NOINLINE sDL_hid_open #-}
 
@@ -458,7 +466,7 @@
 hs_bindgen_39c4427d9dd0caf0
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO (BG.Ptr SDL_hid_device)))
 hs_bindgen_39c4427d9dd0caf0 =
-  BG.fromFFIType hs_bindgen_39c4427d9dd0caf0_base
+  fmap BG.fromFFIType hs_bindgen_39c4427d9dd0caf0_base
 
 {-# NOINLINE sDL_hid_open_path #-}
 
@@ -486,7 +494,7 @@
 hs_bindgen_4b11bd7f6e7541a7
   :: IO (BG.FunPtr (BG.Ptr SDL_hid_device -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID))
 hs_bindgen_4b11bd7f6e7541a7 =
-  BG.fromFFIType hs_bindgen_4b11bd7f6e7541a7_base
+  fmap BG.fromFFIType hs_bindgen_4b11bd7f6e7541a7_base
 
 {-# NOINLINE sDL_hid_get_properties #-}
 
@@ -520,7 +528,7 @@
            (BG.Ptr SDL_hid_device -> PtrConst.PtrConst BG.CUChar -> HsBindgen.Runtime.LibC.CSize -> IO BG.CInt)
        )
 hs_bindgen_1bf3f0f5190069e0 =
-  BG.fromFFIType hs_bindgen_1bf3f0f5190069e0_base
+  fmap BG.fromFFIType hs_bindgen_1bf3f0f5190069e0_base
 
 {-# NOINLINE sDL_hid_write #-}
 
@@ -559,7 +567,7 @@
            (BG.Ptr SDL_hid_device -> BG.Ptr BG.CUChar -> HsBindgen.Runtime.LibC.CSize -> BG.CInt -> IO BG.CInt)
        )
 hs_bindgen_5383d32d2b5eeb41 =
-  BG.fromFFIType hs_bindgen_5383d32d2b5eeb41_base
+  fmap BG.fromFFIType hs_bindgen_5383d32d2b5eeb41_base
 
 {-# NOINLINE sDL_hid_read_timeout #-}
 
@@ -596,7 +604,7 @@
   :: IO
        (BG.FunPtr (BG.Ptr SDL_hid_device -> BG.Ptr BG.CUChar -> HsBindgen.Runtime.LibC.CSize -> IO BG.CInt))
 hs_bindgen_7c7263baa49b4db7 =
-  BG.fromFFIType hs_bindgen_7c7263baa49b4db7_base
+  fmap BG.fromFFIType hs_bindgen_7c7263baa49b4db7_base
 
 {-# NOINLINE sDL_hid_read #-}
 
@@ -628,7 +636,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_get_SDL_hid_set_nonblocking@
 hs_bindgen_bc3545d8ad76b094 :: IO (BG.FunPtr (BG.Ptr SDL_hid_device -> BG.CInt -> IO BG.CInt))
 hs_bindgen_bc3545d8ad76b094 =
-  BG.fromFFIType hs_bindgen_bc3545d8ad76b094_base
+  fmap BG.fromFFIType hs_bindgen_bc3545d8ad76b094_base
 
 {-# NOINLINE sDL_hid_set_nonblocking #-}
 
@@ -663,7 +671,7 @@
            (BG.Ptr SDL_hid_device -> PtrConst.PtrConst BG.CUChar -> HsBindgen.Runtime.LibC.CSize -> IO BG.CInt)
        )
 hs_bindgen_4dc350ff8dbbd851 =
-  BG.fromFFIType hs_bindgen_4dc350ff8dbbd851_base
+  fmap BG.fromFFIType hs_bindgen_4dc350ff8dbbd851_base
 
 {-# NOINLINE sDL_hid_send_feature_report #-}
 
@@ -698,7 +706,7 @@
   :: IO
        (BG.FunPtr (BG.Ptr SDL_hid_device -> BG.Ptr BG.CUChar -> HsBindgen.Runtime.LibC.CSize -> IO BG.CInt))
 hs_bindgen_d11cee38ea38b8b0 =
-  BG.fromFFIType hs_bindgen_d11cee38ea38b8b0_base
+  fmap BG.fromFFIType hs_bindgen_d11cee38ea38b8b0_base
 
 {-# NOINLINE sDL_hid_get_feature_report #-}
 
@@ -732,7 +740,7 @@
   :: IO
        (BG.FunPtr (BG.Ptr SDL_hid_device -> BG.Ptr BG.CUChar -> HsBindgen.Runtime.LibC.CSize -> IO BG.CInt))
 hs_bindgen_f7e6c98c847d43b6 =
-  BG.fromFFIType hs_bindgen_f7e6c98c847d43b6_base
+  fmap BG.fromFFIType hs_bindgen_f7e6c98c847d43b6_base
 
 {-# NOINLINE sDL_hid_get_input_report #-}
 
@@ -764,7 +772,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_get_SDL_hid_close@
 hs_bindgen_a3778a783d0b375c :: IO (BG.FunPtr (BG.Ptr SDL_hid_device -> IO BG.CInt))
 hs_bindgen_a3778a783d0b375c =
-  BG.fromFFIType hs_bindgen_a3778a783d0b375c_base
+  fmap BG.fromFFIType hs_bindgen_a3778a783d0b375c_base
 
 {-# NOINLINE sDL_hid_close #-}
 
@@ -797,7 +805,7 @@
            )
        )
 hs_bindgen_2886098b9152b5a2 =
-  BG.fromFFIType hs_bindgen_2886098b9152b5a2_base
+  fmap BG.fromFFIType hs_bindgen_2886098b9152b5a2_base
 
 {-# NOINLINE sDL_hid_get_manufacturer_string #-}
 
@@ -840,7 +848,7 @@
            )
        )
 hs_bindgen_e9dcf914acc87392 =
-  BG.fromFFIType hs_bindgen_e9dcf914acc87392_base
+  fmap BG.fromFFIType hs_bindgen_e9dcf914acc87392_base
 
 {-# NOINLINE sDL_hid_get_product_string #-}
 
@@ -883,7 +891,7 @@
            )
        )
 hs_bindgen_6d6557d49ee90dad =
-  BG.fromFFIType hs_bindgen_6d6557d49ee90dad_base
+  fmap BG.fromFFIType hs_bindgen_6d6557d49ee90dad_base
 
 {-# NOINLINE sDL_hid_get_serial_number_string #-}
 
@@ -927,7 +935,7 @@
            )
        )
 hs_bindgen_5cef67d9ce2e1563 =
-  BG.fromFFIType hs_bindgen_5cef67d9ce2e1563_base
+  fmap BG.fromFFIType hs_bindgen_5cef67d9ce2e1563_base
 
 {-# NOINLINE sDL_hid_get_indexed_string #-}
 
@@ -966,7 +974,7 @@
 hs_bindgen_9b2d929812d327f4
   :: IO (BG.FunPtr (BG.Ptr SDL_hid_device -> IO (BG.Ptr SDL_hid_device_info)))
 hs_bindgen_9b2d929812d327f4 =
-  BG.fromFFIType hs_bindgen_9b2d929812d327f4_base
+  fmap BG.fromFFIType hs_bindgen_9b2d929812d327f4_base
 
 {-# NOINLINE sDL_hid_get_device_info #-}
 
@@ -993,7 +1001,7 @@
   :: IO
        (BG.FunPtr (BG.Ptr SDL_hid_device -> BG.Ptr BG.CUChar -> HsBindgen.Runtime.LibC.CSize -> IO BG.CInt))
 hs_bindgen_056ff18230bbb5e2 =
-  BG.fromFFIType hs_bindgen_056ff18230bbb5e2_base
+  fmap BG.fromFFIType hs_bindgen_056ff18230bbb5e2_base
 
 {-# NOINLINE sDL_hid_get_report_descriptor #-}
 
@@ -1025,7 +1033,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_get_SDL_hid_ble_scan@
 hs_bindgen_7634f6f83062373e :: IO (BG.FunPtr (BG.CBool -> IO ()))
 hs_bindgen_7634f6f83062373e =
-  BG.fromFFIType hs_bindgen_7634f6f83062373e_base
+  fmap BG.fromFFIType hs_bindgen_7634f6f83062373e_base
 
 {-# NOINLINE sDL_hid_ble_scan #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Hidapi/Safe.hs b/src/SDL3/Sys/Bindgen/Hidapi/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Hidapi/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Hidapi/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Hidapi.Safe (
@@ -29,6 +31,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
@@ -39,7 +43,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_hidapi.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_hidapi.h>"
          , "signed int hs_bindgen_e23ad4638e4651c5 (void)"
          , "{"
          , "  return (SDL_hid_init)();"
@@ -217,12 +225,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Safe_SDL_hid_init@
 foreign import ccall safe "hs_bindgen_e23ad4638e4651c5"
   hs_bindgen_e23ad4638e4651c5_base
-    :: IO BG.Int32
+    :: IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Safe_SDL_hid_init@
 hs_bindgen_e23ad4638e4651c5 :: IO BG.CInt
 hs_bindgen_e23ad4638e4651c5 =
-  BG.fromFFIType hs_bindgen_e23ad4638e4651c5_base
+  fmap BG.fromFFIType hs_bindgen_e23ad4638e4651c5_base
 
 -- | Initialize the HIDAPI library.
 --
@@ -243,12 +251,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Safe_SDL_hid_exit@
 foreign import ccall safe "hs_bindgen_7eaeed138e676c34"
   hs_bindgen_7eaeed138e676c34_base
-    :: IO BG.Int32
+    :: IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Safe_SDL_hid_exit@
 hs_bindgen_7eaeed138e676c34 :: IO BG.CInt
 hs_bindgen_7eaeed138e676c34 =
-  BG.fromFFIType hs_bindgen_7eaeed138e676c34_base
+  fmap BG.fromFFIType hs_bindgen_7eaeed138e676c34_base
 
 -- | Finalize the HIDAPI library.
 --
@@ -267,12 +275,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Safe_SDL_hid_device_change_count@
 foreign import ccall safe "hs_bindgen_68b6879ddc50fc82"
   hs_bindgen_68b6879ddc50fc82_base
-    :: IO BG.Word32
+    :: IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Safe_SDL_hid_device_change_count@
 hs_bindgen_68b6879ddc50fc82 :: IO SDL3.Sys.Bindgen.Stdinc.Uint32
 hs_bindgen_68b6879ddc50fc82 =
-  BG.fromFFIType hs_bindgen_68b6879ddc50fc82_base
+  fmap BG.fromFFIType hs_bindgen_68b6879ddc50fc82_base
 
 -- | Check to see if devices may have been added or removed.
 --
@@ -294,8 +302,8 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Safe_SDL_hid_enumerate@
 foreign import ccall safe "hs_bindgen_eb498439d31d5942"
   hs_bindgen_eb498439d31d5942_base
-    :: BG.Word16
-    -> BG.Word16
+    :: BG.CUShort
+    -> BG.CUShort
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Safe_SDL_hid_enumerate@
@@ -304,7 +312,9 @@
   -> BG.CUShort
   -> IO (BG.Ptr SDL_hid_device_info)
 hs_bindgen_eb498439d31d5942 =
-  BG.fromFFIType hs_bindgen_eb498439d31d5942_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_eb498439d31d5942_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Enumerate the HID Devices.
 --
@@ -342,7 +352,8 @@
   :: BG.Ptr SDL_hid_device_info
   -> IO ()
 hs_bindgen_1de5e5c103bbeb76 =
-  BG.fromFFIType hs_bindgen_1de5e5c103bbeb76_base
+  \x0 ->
+    hs_bindgen_1de5e5c103bbeb76_base (BG.toFFIType x0)
 
 -- | Free an enumeration linked list.
 --
@@ -363,8 +374,8 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Safe_SDL_hid_open@
 foreign import ccall safe "hs_bindgen_4dc258d14565e3b1"
   hs_bindgen_4dc258d14565e3b1_base
-    :: BG.Word16
-    -> BG.Word16
+    :: BG.CUShort
+    -> BG.CUShort
     -> BG.Ptr BG.Void
     -> IO (BG.Ptr BG.Void)
 
@@ -375,7 +386,12 @@
   -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
   -> IO (BG.Ptr SDL_hid_device)
 hs_bindgen_4dc258d14565e3b1 =
-  BG.fromFFIType hs_bindgen_4dc258d14565e3b1_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_4dc258d14565e3b1_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Open a HID device using a Vendor ID (VID), Product ID (PID) and optionally a serial number.
 --
@@ -413,7 +429,8 @@
   :: PtrConst.PtrConst BG.CChar
   -> IO (BG.Ptr SDL_hid_device)
 hs_bindgen_c079ea49eff1706e =
-  BG.fromFFIType hs_bindgen_c079ea49eff1706e_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c079ea49eff1706e_base (BG.toFFIType x0))
 
 -- | Open a HID device by its path name.
 --
@@ -436,14 +453,15 @@
 foreign import ccall safe "hs_bindgen_18716020d09fa299"
   hs_bindgen_18716020d09fa299_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Safe_SDL_hid_get_properties@
 hs_bindgen_18716020d09fa299
   :: BG.Ptr SDL_hid_device
   -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
 hs_bindgen_18716020d09fa299 =
-  BG.fromFFIType hs_bindgen_18716020d09fa299_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_18716020d09fa299_base (BG.toFFIType x0))
 
 -- | Get the properties associated with an 'SDL_hid_device'.
 --
@@ -469,8 +487,8 @@
   hs_bindgen_7ffa302bd453f29d_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Int32
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Safe_SDL_hid_write@
 hs_bindgen_7ffa302bd453f29d
@@ -479,7 +497,12 @@
   -> HsBindgen.Runtime.LibC.CSize
   -> IO BG.CInt
 hs_bindgen_7ffa302bd453f29d =
-  BG.fromFFIType hs_bindgen_7ffa302bd453f29d_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_7ffa302bd453f29d_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Write an Output report to a HID device.
 --
@@ -513,9 +536,9 @@
   hs_bindgen_a9bb09f6978bf010_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> BG.Int32
-    -> IO BG.Int32
+    -> HsBindgen.Runtime.LibC.CSize
+    -> BG.CInt
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Safe_SDL_hid_read_timeout@
 hs_bindgen_a9bb09f6978bf010
@@ -525,7 +548,18 @@
   -> BG.CInt
   -> IO BG.CInt
 hs_bindgen_a9bb09f6978bf010 =
-  BG.fromFFIType hs_bindgen_a9bb09f6978bf010_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_a9bb09f6978bf010_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Read an Input report from a HID device with timeout.
 --
@@ -561,8 +595,8 @@
   hs_bindgen_71bc97f6f0149b6b_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Int32
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Safe_SDL_hid_read@
 hs_bindgen_71bc97f6f0149b6b
@@ -571,7 +605,12 @@
   -> HsBindgen.Runtime.LibC.CSize
   -> IO BG.CInt
 hs_bindgen_71bc97f6f0149b6b =
-  BG.fromFFIType hs_bindgen_71bc97f6f0149b6b_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_71bc97f6f0149b6b_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Read an Input report from a HID device.
 --
@@ -602,8 +641,8 @@
 foreign import ccall safe "hs_bindgen_a4718c506d2c7f0f"
   hs_bindgen_a4718c506d2c7f0f_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Int32
+    -> BG.CInt
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Safe_SDL_hid_set_nonblocking@
 hs_bindgen_a4718c506d2c7f0f
@@ -611,7 +650,9 @@
   -> BG.CInt
   -> IO BG.CInt
 hs_bindgen_a4718c506d2c7f0f =
-  BG.fromFFIType hs_bindgen_a4718c506d2c7f0f_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_a4718c506d2c7f0f_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the device handle to be non-blocking.
 --
@@ -641,8 +682,8 @@
   hs_bindgen_3f1829d40ff45783_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Int32
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Safe_SDL_hid_send_feature_report@
 hs_bindgen_3f1829d40ff45783
@@ -651,7 +692,12 @@
   -> HsBindgen.Runtime.LibC.CSize
   -> IO BG.CInt
 hs_bindgen_3f1829d40ff45783 =
-  BG.fromFFIType hs_bindgen_3f1829d40ff45783_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_3f1829d40ff45783_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Send a Feature report to the device.
 --
@@ -684,8 +730,8 @@
   hs_bindgen_9bc7b92776c7a78c_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Int32
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Safe_SDL_hid_get_feature_report@
 hs_bindgen_9bc7b92776c7a78c
@@ -694,7 +740,12 @@
   -> HsBindgen.Runtime.LibC.CSize
   -> IO BG.CInt
 hs_bindgen_9bc7b92776c7a78c =
-  BG.fromFFIType hs_bindgen_9bc7b92776c7a78c_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_9bc7b92776c7a78c_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get a feature report from a HID device.
 --
@@ -727,8 +778,8 @@
   hs_bindgen_71a9fd2459b81356_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Int32
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Safe_SDL_hid_get_input_report@
 hs_bindgen_71a9fd2459b81356
@@ -737,7 +788,12 @@
   -> HsBindgen.Runtime.LibC.CSize
   -> IO BG.CInt
 hs_bindgen_71a9fd2459b81356 =
-  BG.fromFFIType hs_bindgen_71a9fd2459b81356_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_71a9fd2459b81356_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get an input report from a HID device.
 --
@@ -769,14 +825,15 @@
 foreign import ccall safe "hs_bindgen_ac431d883efee041"
   hs_bindgen_ac431d883efee041_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Safe_SDL_hid_close@
 hs_bindgen_ac431d883efee041
   :: BG.Ptr SDL_hid_device
   -> IO BG.CInt
 hs_bindgen_ac431d883efee041 =
-  BG.fromFFIType hs_bindgen_ac431d883efee041_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_ac431d883efee041_base (BG.toFFIType x0))
 
 -- | Close a HID device.
 --
@@ -798,8 +855,8 @@
   hs_bindgen_d928c5175963fa2b_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Int32
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Safe_SDL_hid_get_manufacturer_string@
 hs_bindgen_d928c5175963fa2b
@@ -808,7 +865,12 @@
   -> HsBindgen.Runtime.LibC.CSize
   -> IO BG.CInt
 hs_bindgen_d928c5175963fa2b =
-  BG.fromFFIType hs_bindgen_d928c5175963fa2b_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_d928c5175963fa2b_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get The Manufacturer String from a HID device.
 --
@@ -839,8 +901,8 @@
   hs_bindgen_6efd06cbd0be2ac4_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Int32
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Safe_SDL_hid_get_product_string@
 hs_bindgen_6efd06cbd0be2ac4
@@ -849,7 +911,12 @@
   -> HsBindgen.Runtime.LibC.CSize
   -> IO BG.CInt
 hs_bindgen_6efd06cbd0be2ac4 =
-  BG.fromFFIType hs_bindgen_6efd06cbd0be2ac4_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_6efd06cbd0be2ac4_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get The Product String from a HID device.
 --
@@ -880,8 +947,8 @@
   hs_bindgen_d39732d6a3cf4069_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Int32
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Safe_SDL_hid_get_serial_number_string@
 hs_bindgen_d39732d6a3cf4069
@@ -890,7 +957,12 @@
   -> HsBindgen.Runtime.LibC.CSize
   -> IO BG.CInt
 hs_bindgen_d39732d6a3cf4069 =
-  BG.fromFFIType hs_bindgen_d39732d6a3cf4069_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_d39732d6a3cf4069_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get The Serial Number String from a HID device.
 --
@@ -920,10 +992,10 @@
 foreign import ccall safe "hs_bindgen_b1f4db11ff770839"
   hs_bindgen_b1f4db11ff770839_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Int32
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Safe_SDL_hid_get_indexed_string@
 hs_bindgen_b1f4db11ff770839
@@ -933,7 +1005,18 @@
   -> HsBindgen.Runtime.LibC.CSize
   -> IO BG.CInt
 hs_bindgen_b1f4db11ff770839 =
-  BG.fromFFIType hs_bindgen_b1f4db11ff770839_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_b1f4db11ff770839_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Get a string from a HID device, based on its string index.
 --
@@ -974,7 +1057,8 @@
   :: BG.Ptr SDL_hid_device
   -> IO (BG.Ptr SDL_hid_device_info)
 hs_bindgen_16acf6e683b8f908 =
-  BG.fromFFIType hs_bindgen_16acf6e683b8f908_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_16acf6e683b8f908_base (BG.toFFIType x0))
 
 -- | Get the device info from a HID device.
 --
@@ -996,8 +1080,8 @@
   hs_bindgen_a73f2ef51699b1a7_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Int32
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Safe_SDL_hid_get_report_descriptor@
 hs_bindgen_a73f2ef51699b1a7
@@ -1006,7 +1090,12 @@
   -> HsBindgen.Runtime.LibC.CSize
   -> IO BG.CInt
 hs_bindgen_a73f2ef51699b1a7 =
-  BG.fromFFIType hs_bindgen_a73f2ef51699b1a7_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_a73f2ef51699b1a7_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get a report descriptor from a HID device.
 --
@@ -1037,7 +1126,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Safe_SDL_hid_ble_scan@
 foreign import ccall safe "hs_bindgen_5f872b3d74ffb765"
   hs_bindgen_5f872b3d74ffb765_base
-    :: BG.Word8
+    :: BG.CBool
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Safe_SDL_hid_ble_scan@
@@ -1045,7 +1134,8 @@
   :: BG.CBool
   -> IO ()
 hs_bindgen_5f872b3d74ffb765 =
-  BG.fromFFIType hs_bindgen_5f872b3d74ffb765_base
+  \x0 ->
+    hs_bindgen_5f872b3d74ffb765_base (BG.toFFIType x0)
 
 -- | Start or stop a BLE scan on iOS and tvOS to pair Steam Controllers.
 --
diff --git a/src/SDL3/Sys/Bindgen/Hidapi/Unsafe.hs b/src/SDL3/Sys/Bindgen/Hidapi/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Hidapi/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Hidapi/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Hidapi.Unsafe (
@@ -29,6 +31,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
@@ -39,7 +43,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_hidapi.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_hidapi.h>"
          , "signed int hs_bindgen_dcb8375e747bb624 (void)"
          , "{"
          , "  return (SDL_hid_init)();"
@@ -217,12 +225,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Unsafe_SDL_hid_init@
 foreign import ccall unsafe "hs_bindgen_dcb8375e747bb624"
   hs_bindgen_dcb8375e747bb624_base
-    :: IO BG.Int32
+    :: IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Unsafe_SDL_hid_init@
 hs_bindgen_dcb8375e747bb624 :: IO BG.CInt
 hs_bindgen_dcb8375e747bb624 =
-  BG.fromFFIType hs_bindgen_dcb8375e747bb624_base
+  fmap BG.fromFFIType hs_bindgen_dcb8375e747bb624_base
 
 -- | Initialize the HIDAPI library.
 --
@@ -243,12 +251,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Unsafe_SDL_hid_exit@
 foreign import ccall unsafe "hs_bindgen_e6649bca54c7158a"
   hs_bindgen_e6649bca54c7158a_base
-    :: IO BG.Int32
+    :: IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Unsafe_SDL_hid_exit@
 hs_bindgen_e6649bca54c7158a :: IO BG.CInt
 hs_bindgen_e6649bca54c7158a =
-  BG.fromFFIType hs_bindgen_e6649bca54c7158a_base
+  fmap BG.fromFFIType hs_bindgen_e6649bca54c7158a_base
 
 -- | Finalize the HIDAPI library.
 --
@@ -267,12 +275,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Unsafe_SDL_hid_device_change_count@
 foreign import ccall unsafe "hs_bindgen_8428495b7bd2b7e5"
   hs_bindgen_8428495b7bd2b7e5_base
-    :: IO BG.Word32
+    :: IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Unsafe_SDL_hid_device_change_count@
 hs_bindgen_8428495b7bd2b7e5 :: IO SDL3.Sys.Bindgen.Stdinc.Uint32
 hs_bindgen_8428495b7bd2b7e5 =
-  BG.fromFFIType hs_bindgen_8428495b7bd2b7e5_base
+  fmap BG.fromFFIType hs_bindgen_8428495b7bd2b7e5_base
 
 -- | Check to see if devices may have been added or removed.
 --
@@ -294,8 +302,8 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Unsafe_SDL_hid_enumerate@
 foreign import ccall unsafe "hs_bindgen_c80fee489024b2f6"
   hs_bindgen_c80fee489024b2f6_base
-    :: BG.Word16
-    -> BG.Word16
+    :: BG.CUShort
+    -> BG.CUShort
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Unsafe_SDL_hid_enumerate@
@@ -304,7 +312,9 @@
   -> BG.CUShort
   -> IO (BG.Ptr SDL_hid_device_info)
 hs_bindgen_c80fee489024b2f6 =
-  BG.fromFFIType hs_bindgen_c80fee489024b2f6_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_c80fee489024b2f6_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Enumerate the HID Devices.
 --
@@ -342,7 +352,8 @@
   :: BG.Ptr SDL_hid_device_info
   -> IO ()
 hs_bindgen_576ebef2d717239d =
-  BG.fromFFIType hs_bindgen_576ebef2d717239d_base
+  \x0 ->
+    hs_bindgen_576ebef2d717239d_base (BG.toFFIType x0)
 
 -- | Free an enumeration linked list.
 --
@@ -363,8 +374,8 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Unsafe_SDL_hid_open@
 foreign import ccall unsafe "hs_bindgen_1acfa083bac0fefe"
   hs_bindgen_1acfa083bac0fefe_base
-    :: BG.Word16
-    -> BG.Word16
+    :: BG.CUShort
+    -> BG.CUShort
     -> BG.Ptr BG.Void
     -> IO (BG.Ptr BG.Void)
 
@@ -375,7 +386,12 @@
   -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
   -> IO (BG.Ptr SDL_hid_device)
 hs_bindgen_1acfa083bac0fefe =
-  BG.fromFFIType hs_bindgen_1acfa083bac0fefe_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_1acfa083bac0fefe_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Open a HID device using a Vendor ID (VID), Product ID (PID) and optionally a serial number.
 --
@@ -413,7 +429,8 @@
   :: PtrConst.PtrConst BG.CChar
   -> IO (BG.Ptr SDL_hid_device)
 hs_bindgen_3c5436d1ddca078c =
-  BG.fromFFIType hs_bindgen_3c5436d1ddca078c_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3c5436d1ddca078c_base (BG.toFFIType x0))
 
 -- | Open a HID device by its path name.
 --
@@ -436,14 +453,15 @@
 foreign import ccall unsafe "hs_bindgen_e9b48243d3f24ba7"
   hs_bindgen_e9b48243d3f24ba7_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Unsafe_SDL_hid_get_properties@
 hs_bindgen_e9b48243d3f24ba7
   :: BG.Ptr SDL_hid_device
   -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
 hs_bindgen_e9b48243d3f24ba7 =
-  BG.fromFFIType hs_bindgen_e9b48243d3f24ba7_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_e9b48243d3f24ba7_base (BG.toFFIType x0))
 
 -- | Get the properties associated with an 'SDL_hid_device'.
 --
@@ -469,8 +487,8 @@
   hs_bindgen_224530f741f7e012_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Int32
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Unsafe_SDL_hid_write@
 hs_bindgen_224530f741f7e012
@@ -479,7 +497,12 @@
   -> HsBindgen.Runtime.LibC.CSize
   -> IO BG.CInt
 hs_bindgen_224530f741f7e012 =
-  BG.fromFFIType hs_bindgen_224530f741f7e012_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_224530f741f7e012_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Write an Output report to a HID device.
 --
@@ -513,9 +536,9 @@
   hs_bindgen_7989f96f3123402c_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> BG.Int32
-    -> IO BG.Int32
+    -> HsBindgen.Runtime.LibC.CSize
+    -> BG.CInt
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Unsafe_SDL_hid_read_timeout@
 hs_bindgen_7989f96f3123402c
@@ -525,7 +548,18 @@
   -> BG.CInt
   -> IO BG.CInt
 hs_bindgen_7989f96f3123402c =
-  BG.fromFFIType hs_bindgen_7989f96f3123402c_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_7989f96f3123402c_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Read an Input report from a HID device with timeout.
 --
@@ -561,8 +595,8 @@
   hs_bindgen_67f9e2c762f1f561_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Int32
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Unsafe_SDL_hid_read@
 hs_bindgen_67f9e2c762f1f561
@@ -571,7 +605,12 @@
   -> HsBindgen.Runtime.LibC.CSize
   -> IO BG.CInt
 hs_bindgen_67f9e2c762f1f561 =
-  BG.fromFFIType hs_bindgen_67f9e2c762f1f561_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_67f9e2c762f1f561_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Read an Input report from a HID device.
 --
@@ -602,8 +641,8 @@
 foreign import ccall unsafe "hs_bindgen_461a1d4ecaa70f7b"
   hs_bindgen_461a1d4ecaa70f7b_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Int32
+    -> BG.CInt
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Unsafe_SDL_hid_set_nonblocking@
 hs_bindgen_461a1d4ecaa70f7b
@@ -611,7 +650,9 @@
   -> BG.CInt
   -> IO BG.CInt
 hs_bindgen_461a1d4ecaa70f7b =
-  BG.fromFFIType hs_bindgen_461a1d4ecaa70f7b_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_461a1d4ecaa70f7b_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the device handle to be non-blocking.
 --
@@ -641,8 +682,8 @@
   hs_bindgen_e2bc17c282363a0a_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Int32
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Unsafe_SDL_hid_send_feature_report@
 hs_bindgen_e2bc17c282363a0a
@@ -651,7 +692,12 @@
   -> HsBindgen.Runtime.LibC.CSize
   -> IO BG.CInt
 hs_bindgen_e2bc17c282363a0a =
-  BG.fromFFIType hs_bindgen_e2bc17c282363a0a_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_e2bc17c282363a0a_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Send a Feature report to the device.
 --
@@ -684,8 +730,8 @@
   hs_bindgen_9a50cca655a383d6_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Int32
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Unsafe_SDL_hid_get_feature_report@
 hs_bindgen_9a50cca655a383d6
@@ -694,7 +740,12 @@
   -> HsBindgen.Runtime.LibC.CSize
   -> IO BG.CInt
 hs_bindgen_9a50cca655a383d6 =
-  BG.fromFFIType hs_bindgen_9a50cca655a383d6_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_9a50cca655a383d6_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get a feature report from a HID device.
 --
@@ -727,8 +778,8 @@
   hs_bindgen_69c42f891dcf07ec_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Int32
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Unsafe_SDL_hid_get_input_report@
 hs_bindgen_69c42f891dcf07ec
@@ -737,7 +788,12 @@
   -> HsBindgen.Runtime.LibC.CSize
   -> IO BG.CInt
 hs_bindgen_69c42f891dcf07ec =
-  BG.fromFFIType hs_bindgen_69c42f891dcf07ec_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_69c42f891dcf07ec_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get an input report from a HID device.
 --
@@ -769,14 +825,15 @@
 foreign import ccall unsafe "hs_bindgen_f1b65245de342510"
   hs_bindgen_f1b65245de342510_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Unsafe_SDL_hid_close@
 hs_bindgen_f1b65245de342510
   :: BG.Ptr SDL_hid_device
   -> IO BG.CInt
 hs_bindgen_f1b65245de342510 =
-  BG.fromFFIType hs_bindgen_f1b65245de342510_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_f1b65245de342510_base (BG.toFFIType x0))
 
 -- | Close a HID device.
 --
@@ -798,8 +855,8 @@
   hs_bindgen_618b34900d079096_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Int32
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Unsafe_SDL_hid_get_manufacturer_string@
 hs_bindgen_618b34900d079096
@@ -808,7 +865,12 @@
   -> HsBindgen.Runtime.LibC.CSize
   -> IO BG.CInt
 hs_bindgen_618b34900d079096 =
-  BG.fromFFIType hs_bindgen_618b34900d079096_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_618b34900d079096_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get The Manufacturer String from a HID device.
 --
@@ -839,8 +901,8 @@
   hs_bindgen_56bf4b52bb0ee8a4_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Int32
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Unsafe_SDL_hid_get_product_string@
 hs_bindgen_56bf4b52bb0ee8a4
@@ -849,7 +911,12 @@
   -> HsBindgen.Runtime.LibC.CSize
   -> IO BG.CInt
 hs_bindgen_56bf4b52bb0ee8a4 =
-  BG.fromFFIType hs_bindgen_56bf4b52bb0ee8a4_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_56bf4b52bb0ee8a4_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get The Product String from a HID device.
 --
@@ -880,8 +947,8 @@
   hs_bindgen_dec4af789ee01ecf_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Int32
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Unsafe_SDL_hid_get_serial_number_string@
 hs_bindgen_dec4af789ee01ecf
@@ -890,7 +957,12 @@
   -> HsBindgen.Runtime.LibC.CSize
   -> IO BG.CInt
 hs_bindgen_dec4af789ee01ecf =
-  BG.fromFFIType hs_bindgen_dec4af789ee01ecf_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_dec4af789ee01ecf_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get The Serial Number String from a HID device.
 --
@@ -920,10 +992,10 @@
 foreign import ccall unsafe "hs_bindgen_4ec0bddefa08ebea"
   hs_bindgen_4ec0bddefa08ebea_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Int32
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Unsafe_SDL_hid_get_indexed_string@
 hs_bindgen_4ec0bddefa08ebea
@@ -933,7 +1005,18 @@
   -> HsBindgen.Runtime.LibC.CSize
   -> IO BG.CInt
 hs_bindgen_4ec0bddefa08ebea =
-  BG.fromFFIType hs_bindgen_4ec0bddefa08ebea_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_4ec0bddefa08ebea_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Get a string from a HID device, based on its string index.
 --
@@ -974,7 +1057,8 @@
   :: BG.Ptr SDL_hid_device
   -> IO (BG.Ptr SDL_hid_device_info)
 hs_bindgen_48075159cccbc3cd =
-  BG.fromFFIType hs_bindgen_48075159cccbc3cd_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_48075159cccbc3cd_base (BG.toFFIType x0))
 
 -- | Get the device info from a HID device.
 --
@@ -996,8 +1080,8 @@
   hs_bindgen_682cc2cefec05416_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Int32
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Unsafe_SDL_hid_get_report_descriptor@
 hs_bindgen_682cc2cefec05416
@@ -1006,7 +1090,12 @@
   -> HsBindgen.Runtime.LibC.CSize
   -> IO BG.CInt
 hs_bindgen_682cc2cefec05416 =
-  BG.fromFFIType hs_bindgen_682cc2cefec05416_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_682cc2cefec05416_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get a report descriptor from a HID device.
 --
@@ -1037,7 +1126,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Unsafe_SDL_hid_ble_scan@
 foreign import ccall unsafe "hs_bindgen_5c88299056af21de"
   hs_bindgen_5c88299056af21de_base
-    :: BG.Word8
+    :: BG.CBool
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hidapi_Unsafe_SDL_hid_ble_scan@
@@ -1045,7 +1134,8 @@
   :: BG.CBool
   -> IO ()
 hs_bindgen_5c88299056af21de =
-  BG.fromFFIType hs_bindgen_5c88299056af21de_base
+  \x0 ->
+    hs_bindgen_5c88299056af21de_base (BG.toFFIType x0)
 
 -- | Start or stop a BLE scan on iOS and tvOS to pair Steam Controllers.
 --
diff --git a/src/SDL3/Sys/Bindgen/Hints.hs b/src/SDL3/Sys/Bindgen/Hints.hs
--- a/src/SDL3/Sys/Bindgen/Hints.hs
+++ b/src/SDL3/Sys/Bindgen/Hints.hs
@@ -6,6 +6,7 @@
 {-# LANGUAGE ExplicitForAll #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE MagicHash #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
@@ -17,6 +18,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | This file contains functions to set and get configuration hints, as well as listing each of them alphabetically.
 --
@@ -311,6 +313,8 @@
 )
 where
 
+import Prelude (Eq, IO, Int, Ord, Read, Show, fmap, pure, (<*>), type (~))
+
 import HsBindgen.Runtime.CEnum qualified as CEnum
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.Marshal qualified as Marshal
@@ -12376,7 +12380,6 @@
       -> IO ()
   }
   deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
 
 -- __unique:__ @toSDL_HintCallback_Aux@
 foreign import ccall safe "wrapper"
@@ -12390,7 +12393,21 @@
   -> IO (BG.FunPtr SDL_HintCallback_Aux)
 hs_bindgen_d373a1a98e80dd1f =
   \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_d373a1a98e80dd1f_base (BG.toFFIType fun0))
+    fmap
+      BG.castFunPtr
+      ( hs_bindgen_d373a1a98e80dd1f_base
+          ( \x1 ->
+              \x2 ->
+                \x3 ->
+                  \x4 ->
+                    BG.getField @"unwrap"
+                      fun0
+                      (BG.fromFFIType x1)
+                      (BG.fromFFIType x2)
+                      (BG.fromFFIType x3)
+                      (BG.fromFFIType x4)
+          )
+      )
 
 -- __unique:__ @fromSDL_HintCallback_Aux@
 foreign import ccall safe "dynamic"
@@ -12408,7 +12425,18 @@
   -> SDL_HintCallback_Aux
 hs_bindgen_52c5a5e7b6578189 =
   \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_52c5a5e7b6578189_base (BG.castFunPtrToFFIType funPtr0))
+    SDL_HintCallback_Aux
+      ( \x1 ->
+          \x2 ->
+            \x3 ->
+              \x4 ->
+                hs_bindgen_52c5a5e7b6578189_base
+                  (BG.castFunPtr funPtr0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+      )
 
 instance BG.ToFunPtr SDL_HintCallback_Aux where
   toFunPtr = hs_bindgen_d373a1a98e80dd1f
diff --git a/src/SDL3/Sys/Bindgen/Hints/FunPtr.hs b/src/SDL3/Sys/Bindgen/Hints/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Hints/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Hints/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Hints.FunPtr (
@@ -14,6 +16,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -21,7 +25,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_hints.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_hints.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Hints_get_SDL_SetHintWithPriority */"
          , "__attribute__ ((const))"
          , "_Bool (*hs_bindgen_a1124b908df29b8d (void)) ("
@@ -108,7 +116,7 @@
            (PtrConst.PtrConst BG.CChar -> PtrConst.PtrConst BG.CChar -> SDL_HintPriority -> IO BG.CBool)
        )
 hs_bindgen_a1124b908df29b8d =
-  BG.fromFFIType hs_bindgen_a1124b908df29b8d_base
+  fmap BG.fromFFIType hs_bindgen_a1124b908df29b8d_base
 
 {-# NOINLINE sDL_SetHintWithPriority #-}
 
@@ -146,7 +154,7 @@
 hs_bindgen_67e0f6aa5619e9be
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> PtrConst.PtrConst BG.CChar -> IO BG.CBool))
 hs_bindgen_67e0f6aa5619e9be =
-  BG.fromFFIType hs_bindgen_67e0f6aa5619e9be_base
+  fmap BG.fromFFIType hs_bindgen_67e0f6aa5619e9be_base
 
 {-# NOINLINE sDL_SetHint #-}
 
@@ -179,7 +187,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hints_get_SDL_ResetHint@
 hs_bindgen_978a3ef046005881 :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO BG.CBool))
 hs_bindgen_978a3ef046005881 =
-  BG.fromFFIType hs_bindgen_978a3ef046005881_base
+  fmap BG.fromFFIType hs_bindgen_978a3ef046005881_base
 
 {-# NOINLINE sDL_ResetHint #-}
 
@@ -210,7 +218,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hints_get_SDL_ResetHints@
 hs_bindgen_55759cca20a8fc7a :: IO (BG.FunPtr (IO ()))
 hs_bindgen_55759cca20a8fc7a =
-  BG.fromFFIType hs_bindgen_55759cca20a8fc7a_base
+  fmap BG.fromFFIType hs_bindgen_55759cca20a8fc7a_base
 
 {-# NOINLINE sDL_ResetHints #-}
 
@@ -238,7 +246,7 @@
 hs_bindgen_76a1a86d4bb7fe80
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_76a1a86d4bb7fe80 =
-  BG.fromFFIType hs_bindgen_76a1a86d4bb7fe80_base
+  fmap BG.fromFFIType hs_bindgen_76a1a86d4bb7fe80_base
 
 {-# NOINLINE sDL_GetHint #-}
 
@@ -268,7 +276,7 @@
 hs_bindgen_31d7e0760df235bb
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> BG.CBool -> IO BG.CBool))
 hs_bindgen_31d7e0760df235bb =
-  BG.fromFFIType hs_bindgen_31d7e0760df235bb_base
+  fmap BG.fromFFIType hs_bindgen_31d7e0760df235bb_base
 
 {-# NOINLINE sDL_GetHintBoolean #-}
 
@@ -300,7 +308,7 @@
 hs_bindgen_e8ea72aae64e3056
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> SDL_HintCallback -> BG.Ptr BG.Void -> IO BG.CBool))
 hs_bindgen_e8ea72aae64e3056 =
-  BG.fromFFIType hs_bindgen_e8ea72aae64e3056_base
+  fmap BG.fromFFIType hs_bindgen_e8ea72aae64e3056_base
 
 {-# NOINLINE sDL_AddHintCallback #-}
 
@@ -337,7 +345,7 @@
 hs_bindgen_266d8b3206b888d9
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> SDL_HintCallback -> BG.Ptr BG.Void -> IO ()))
 hs_bindgen_266d8b3206b888d9 =
-  BG.fromFFIType hs_bindgen_266d8b3206b888d9_base
+  fmap BG.fromFFIType hs_bindgen_266d8b3206b888d9_base
 
 {-# NOINLINE sDL_RemoveHintCallback #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Hints/Safe.hs b/src/SDL3/Sys/Bindgen/Hints/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Hints/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Hints/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Hints.Safe (
@@ -14,6 +16,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -21,7 +25,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_hints.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_hints.h>"
          , "_Bool hs_bindgen_0d58d8e15d9ee871 ("
          , "  char const *arg1,"
          , "  char const *arg2,"
@@ -85,8 +93,8 @@
   hs_bindgen_0d58d8e15d9ee871_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
+    -> BG.CUInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hints_Safe_SDL_SetHintWithPriority@
 hs_bindgen_0d58d8e15d9ee871
@@ -95,7 +103,12 @@
   -> SDL_HintPriority
   -> IO BG.CBool
 hs_bindgen_0d58d8e15d9ee871 =
-  BG.fromFFIType hs_bindgen_0d58d8e15d9ee871_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_0d58d8e15d9ee871_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set a hint with a specific priority.
 --
@@ -131,7 +144,7 @@
   hs_bindgen_eab3698ef04ccc46_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hints_Safe_SDL_SetHint@
 hs_bindgen_eab3698ef04ccc46
@@ -139,7 +152,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_eab3698ef04ccc46 =
-  BG.fromFFIType hs_bindgen_eab3698ef04ccc46_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_eab3698ef04ccc46_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set a hint with normal priority.
 --
@@ -170,14 +185,15 @@
 foreign import ccall safe "hs_bindgen_f97886c40bcfbc20"
   hs_bindgen_f97886c40bcfbc20_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hints_Safe_SDL_ResetHint@
 hs_bindgen_f97886c40bcfbc20
   :: PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_f97886c40bcfbc20 =
-  BG.fromFFIType hs_bindgen_f97886c40bcfbc20_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_f97886c40bcfbc20_base (BG.toFFIType x0))
 
 -- | Reset a hint to the default value.
 --
@@ -208,7 +224,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hints_Safe_SDL_ResetHints@
 hs_bindgen_fd2e64a782ded6df :: IO ()
 hs_bindgen_fd2e64a782ded6df =
-  BG.fromFFIType hs_bindgen_fd2e64a782ded6df_base
+  hs_bindgen_fd2e64a782ded6df_base
 
 -- | Reset all hints to the default values.
 --
@@ -235,7 +251,8 @@
   :: PtrConst.PtrConst BG.CChar
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_9ee7b58437f0684a =
-  BG.fromFFIType hs_bindgen_9ee7b58437f0684a_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_9ee7b58437f0684a_base (BG.toFFIType x0))
 
 -- | Get the value of a hint.
 --
@@ -260,8 +277,8 @@
 foreign import ccall safe "hs_bindgen_5a0b364272f99749"
   hs_bindgen_5a0b364272f99749_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hints_Safe_SDL_GetHintBoolean@
 hs_bindgen_5a0b364272f99749
@@ -269,7 +286,9 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_5a0b364272f99749 =
-  BG.fromFFIType hs_bindgen_5a0b364272f99749_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_5a0b364272f99749_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the boolean value of a hint variable.
 --
@@ -300,7 +319,7 @@
     :: BG.Ptr BG.Void
     -> BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hints_Safe_SDL_AddHintCallback@
 hs_bindgen_d78b382b71fb1c63
@@ -309,7 +328,12 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_d78b382b71fb1c63 =
-  BG.fromFFIType hs_bindgen_d78b382b71fb1c63_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_d78b382b71fb1c63_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Add a function to watch a particular hint.
 --
@@ -355,7 +379,10 @@
   -> BG.Ptr BG.Void
   -> IO ()
 hs_bindgen_c51a1a939bae0509 =
-  BG.fromFFIType hs_bindgen_c51a1a939bae0509_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        hs_bindgen_c51a1a939bae0509_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2)
 
 -- | Remove a function watching a particular hint.
 --
diff --git a/src/SDL3/Sys/Bindgen/Hints/Unsafe.hs b/src/SDL3/Sys/Bindgen/Hints/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Hints/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Hints/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Hints.Unsafe (
@@ -14,6 +16,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -21,7 +25,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_hints.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_hints.h>"
          , "_Bool hs_bindgen_cb82b52002f46100 ("
          , "  char const *arg1,"
          , "  char const *arg2,"
@@ -85,8 +93,8 @@
   hs_bindgen_cb82b52002f46100_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
+    -> BG.CUInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hints_Unsafe_SDL_SetHintWithPriority@
 hs_bindgen_cb82b52002f46100
@@ -95,7 +103,12 @@
   -> SDL_HintPriority
   -> IO BG.CBool
 hs_bindgen_cb82b52002f46100 =
-  BG.fromFFIType hs_bindgen_cb82b52002f46100_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_cb82b52002f46100_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set a hint with a specific priority.
 --
@@ -131,7 +144,7 @@
   hs_bindgen_3f922ee38b008540_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hints_Unsafe_SDL_SetHint@
 hs_bindgen_3f922ee38b008540
@@ -139,7 +152,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_3f922ee38b008540 =
-  BG.fromFFIType hs_bindgen_3f922ee38b008540_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_3f922ee38b008540_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set a hint with normal priority.
 --
@@ -170,14 +185,15 @@
 foreign import ccall unsafe "hs_bindgen_3d1b9b2531cc28fe"
   hs_bindgen_3d1b9b2531cc28fe_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hints_Unsafe_SDL_ResetHint@
 hs_bindgen_3d1b9b2531cc28fe
   :: PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_3d1b9b2531cc28fe =
-  BG.fromFFIType hs_bindgen_3d1b9b2531cc28fe_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3d1b9b2531cc28fe_base (BG.toFFIType x0))
 
 -- | Reset a hint to the default value.
 --
@@ -208,7 +224,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hints_Unsafe_SDL_ResetHints@
 hs_bindgen_55d0a8bf7baacba4 :: IO ()
 hs_bindgen_55d0a8bf7baacba4 =
-  BG.fromFFIType hs_bindgen_55d0a8bf7baacba4_base
+  hs_bindgen_55d0a8bf7baacba4_base
 
 -- | Reset all hints to the default values.
 --
@@ -235,7 +251,8 @@
   :: PtrConst.PtrConst BG.CChar
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_637ba7b5c2a54073 =
-  BG.fromFFIType hs_bindgen_637ba7b5c2a54073_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_637ba7b5c2a54073_base (BG.toFFIType x0))
 
 -- | Get the value of a hint.
 --
@@ -260,8 +277,8 @@
 foreign import ccall unsafe "hs_bindgen_df016d033ceb7b47"
   hs_bindgen_df016d033ceb7b47_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hints_Unsafe_SDL_GetHintBoolean@
 hs_bindgen_df016d033ceb7b47
@@ -269,7 +286,9 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_df016d033ceb7b47 =
-  BG.fromFFIType hs_bindgen_df016d033ceb7b47_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_df016d033ceb7b47_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the boolean value of a hint variable.
 --
@@ -300,7 +319,7 @@
     :: BG.Ptr BG.Void
     -> BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Hints_Unsafe_SDL_AddHintCallback@
 hs_bindgen_5d061e74b3f3440a
@@ -309,7 +328,12 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_5d061e74b3f3440a =
-  BG.fromFFIType hs_bindgen_5d061e74b3f3440a_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_5d061e74b3f3440a_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Add a function to watch a particular hint.
 --
@@ -355,7 +379,10 @@
   -> BG.Ptr BG.Void
   -> IO ()
 hs_bindgen_7b0a9c503e7af491 =
-  BG.fromFFIType hs_bindgen_7b0a9c503e7af491_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        hs_bindgen_7b0a9c503e7af491_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2)
 
 -- | Remove a function watching a particular hint.
 --
diff --git a/src/SDL3/Sys/Bindgen/Init.hs b/src/SDL3/Sys/Bindgen/Init.hs
--- a/src/SDL3/Sys/Bindgen/Init.hs
+++ b/src/SDL3/Sys/Bindgen/Init.hs
@@ -6,6 +6,7 @@
 {-# LANGUAGE ExplicitForAll #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE MagicHash #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
@@ -17,6 +18,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | All SDL programs need to initialize the library before starting to work with it.
 --
@@ -65,6 +67,24 @@
 )
 where
 
+import Prelude (
+  Bounded,
+  Enum,
+  Eq,
+  IO,
+  Int,
+  Integral,
+  Num,
+  Ord,
+  Read,
+  Real,
+  Show,
+  fmap,
+  pure,
+  (<*>),
+  type (~),
+ )
+
 import HsBindgen.Runtime.CEnum qualified as CEnum
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.IncompleteArray qualified as IA
@@ -297,13 +317,12 @@
       -> IO SDL_AppResult
   }
   deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
 
 -- __unique:__ @toSDL_AppInit_func_Aux@
 foreign import ccall safe "wrapper"
   hs_bindgen_c9f12691f8f9f34d_base
-    :: (BG.Ptr BG.Void -> BG.Int32 -> BG.Ptr BG.Void -> IO BG.Word32)
-    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.Int32 -> BG.Ptr BG.Void -> IO BG.Word32))
+    :: (BG.Ptr BG.Void -> BG.CInt -> BG.Ptr BG.Void -> IO BG.CUInt)
+    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.CInt -> BG.Ptr BG.Void -> IO BG.CUInt))
 
 -- __unique:__ @toSDL_AppInit_func_Aux@
 hs_bindgen_c9f12691f8f9f34d
@@ -311,16 +330,26 @@
   -> IO (BG.FunPtr SDL_AppInit_func_Aux)
 hs_bindgen_c9f12691f8f9f34d =
   \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_c9f12691f8f9f34d_base (BG.toFFIType fun0))
+    fmap
+      BG.castFunPtr
+      ( hs_bindgen_c9f12691f8f9f34d_base
+          ( \x1 ->
+              \x2 ->
+                \x3 ->
+                  fmap
+                    BG.toFFIType
+                    (BG.getField @"unwrap" fun0 (BG.fromFFIType x1) (BG.fromFFIType x2) (BG.fromFFIType x3))
+          )
+      )
 
 -- __unique:__ @fromSDL_AppInit_func_Aux@
 foreign import ccall safe "dynamic"
   hs_bindgen_1ceb806dcbf0a04a_base
-    :: BG.FunPtr (BG.Ptr BG.Void -> BG.Int32 -> BG.Ptr BG.Void -> IO BG.Word32)
+    :: BG.FunPtr (BG.Ptr BG.Void -> BG.CInt -> BG.Ptr BG.Void -> IO BG.CUInt)
     -> BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @fromSDL_AppInit_func_Aux@
 hs_bindgen_1ceb806dcbf0a04a
@@ -328,7 +357,19 @@
   -> SDL_AppInit_func_Aux
 hs_bindgen_1ceb806dcbf0a04a =
   \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_1ceb806dcbf0a04a_base (BG.castFunPtrToFFIType funPtr0))
+    SDL_AppInit_func_Aux
+      ( \x1 ->
+          \x2 ->
+            \x3 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_1ceb806dcbf0a04a_base
+                    (BG.castFunPtr funPtr0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                )
+      )
 
 instance BG.ToFunPtr SDL_AppInit_func_Aux where
   toFunPtr = hs_bindgen_c9f12691f8f9f34d
@@ -433,13 +474,12 @@
   { unwrap :: BG.Ptr BG.Void -> IO SDL_AppResult
   }
   deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
 
 -- __unique:__ @toSDL_AppIterate_func_Aux@
 foreign import ccall safe "wrapper"
   hs_bindgen_8620c17cf1102621_base
-    :: (BG.Ptr BG.Void -> IO BG.Word32)
-    -> IO (BG.FunPtr (BG.Ptr BG.Void -> IO BG.Word32))
+    :: (BG.Ptr BG.Void -> IO BG.CUInt)
+    -> IO (BG.FunPtr (BG.Ptr BG.Void -> IO BG.CUInt))
 
 -- __unique:__ @toSDL_AppIterate_func_Aux@
 hs_bindgen_8620c17cf1102621
@@ -447,14 +487,20 @@
   -> IO (BG.FunPtr SDL_AppIterate_func_Aux)
 hs_bindgen_8620c17cf1102621 =
   \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_8620c17cf1102621_base (BG.toFFIType fun0))
+    fmap
+      BG.castFunPtr
+      ( hs_bindgen_8620c17cf1102621_base
+          ( \x1 ->
+              fmap BG.toFFIType (BG.getField @"unwrap" fun0 (BG.fromFFIType x1))
+          )
+      )
 
 -- __unique:__ @fromSDL_AppIterate_func_Aux@
 foreign import ccall safe "dynamic"
   hs_bindgen_eafa84799a5f2ef1_base
-    :: BG.FunPtr (BG.Ptr BG.Void -> IO BG.Word32)
+    :: BG.FunPtr (BG.Ptr BG.Void -> IO BG.CUInt)
     -> BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @fromSDL_AppIterate_func_Aux@
 hs_bindgen_eafa84799a5f2ef1
@@ -462,7 +508,10 @@
   -> SDL_AppIterate_func_Aux
 hs_bindgen_eafa84799a5f2ef1 =
   \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_eafa84799a5f2ef1_base (BG.castFunPtrToFFIType funPtr0))
+    SDL_AppIterate_func_Aux
+      ( \x1 ->
+          fmap BG.fromFFIType (hs_bindgen_eafa84799a5f2ef1_base (BG.castFunPtr funPtr0) (BG.toFFIType x1))
+      )
 
 instance BG.ToFunPtr SDL_AppIterate_func_Aux where
   toFunPtr = hs_bindgen_8620c17cf1102621
@@ -548,13 +597,12 @@
   { unwrap :: BG.Ptr BG.Void -> BG.Ptr SDL3.Sys.Bindgen.Events.SDL_Event -> IO SDL_AppResult
   }
   deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
 
 -- __unique:__ @toSDL_AppEvent_func_Aux@
 foreign import ccall safe "wrapper"
   hs_bindgen_2b9dfae6ab23e116_base
-    :: (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.Word32)
-    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.Word32))
+    :: (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.CUInt)
+    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.CUInt))
 
 -- __unique:__ @toSDL_AppEvent_func_Aux@
 hs_bindgen_2b9dfae6ab23e116
@@ -562,15 +610,22 @@
   -> IO (BG.FunPtr SDL_AppEvent_func_Aux)
 hs_bindgen_2b9dfae6ab23e116 =
   \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_2b9dfae6ab23e116_base (BG.toFFIType fun0))
+    fmap
+      BG.castFunPtr
+      ( hs_bindgen_2b9dfae6ab23e116_base
+          ( \x1 ->
+              \x2 ->
+                fmap BG.toFFIType (BG.getField @"unwrap" fun0 (BG.fromFFIType x1) (BG.fromFFIType x2))
+          )
+      )
 
 -- __unique:__ @fromSDL_AppEvent_func_Aux@
 foreign import ccall safe "dynamic"
   hs_bindgen_5d33518a4254e343_base
-    :: BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.Word32)
+    :: BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.CUInt)
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @fromSDL_AppEvent_func_Aux@
 hs_bindgen_5d33518a4254e343
@@ -578,7 +633,13 @@
   -> SDL_AppEvent_func_Aux
 hs_bindgen_5d33518a4254e343 =
   \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_5d33518a4254e343_base (BG.castFunPtrToFFIType funPtr0))
+    SDL_AppEvent_func_Aux
+      ( \x1 ->
+          \x2 ->
+            fmap
+              BG.fromFFIType
+              (hs_bindgen_5d33518a4254e343_base (BG.castFunPtr funPtr0) (BG.toFFIType x1) (BG.toFFIType x2))
+      )
 
 instance BG.ToFunPtr SDL_AppEvent_func_Aux where
   toFunPtr = hs_bindgen_2b9dfae6ab23e116
@@ -666,13 +727,12 @@
   { unwrap :: BG.Ptr BG.Void -> SDL_AppResult -> IO ()
   }
   deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
 
 -- __unique:__ @toSDL_AppQuit_func_Aux@
 foreign import ccall safe "wrapper"
   hs_bindgen_fabdaa4c4e54b1de_base
-    :: (BG.Ptr BG.Void -> BG.Word32 -> IO ())
-    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.Word32 -> IO ()))
+    :: (BG.Ptr BG.Void -> BG.CUInt -> IO ())
+    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.CUInt -> IO ()))
 
 -- __unique:__ @toSDL_AppQuit_func_Aux@
 hs_bindgen_fabdaa4c4e54b1de
@@ -680,14 +740,21 @@
   -> IO (BG.FunPtr SDL_AppQuit_func_Aux)
 hs_bindgen_fabdaa4c4e54b1de =
   \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_fabdaa4c4e54b1de_base (BG.toFFIType fun0))
+    fmap
+      BG.castFunPtr
+      ( hs_bindgen_fabdaa4c4e54b1de_base
+          ( \x1 ->
+              \x2 ->
+                BG.getField @"unwrap" fun0 (BG.fromFFIType x1) (BG.fromFFIType x2)
+          )
+      )
 
 -- __unique:__ @fromSDL_AppQuit_func_Aux@
 foreign import ccall safe "dynamic"
   hs_bindgen_7021ade2d0ddec93_base
-    :: BG.FunPtr (BG.Ptr BG.Void -> BG.Word32 -> IO ())
+    :: BG.FunPtr (BG.Ptr BG.Void -> BG.CUInt -> IO ())
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> BG.CUInt
     -> IO ()
 
 -- __unique:__ @fromSDL_AppQuit_func_Aux@
@@ -696,7 +763,11 @@
   -> SDL_AppQuit_func_Aux
 hs_bindgen_7021ade2d0ddec93 =
   \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_7021ade2d0ddec93_base (BG.castFunPtrToFFIType funPtr0))
+    SDL_AppQuit_func_Aux
+      ( \x1 ->
+          \x2 ->
+            hs_bindgen_7021ade2d0ddec93_base (BG.castFunPtr funPtr0) (BG.toFFIType x1) (BG.toFFIType x2)
+      )
 
 instance BG.ToFunPtr SDL_AppQuit_func_Aux where
   toFunPtr = hs_bindgen_fabdaa4c4e54b1de
@@ -782,7 +853,6 @@
   { unwrap :: BG.Ptr BG.Void -> IO ()
   }
   deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
 
 -- __unique:__ @toSDL_MainThreadCallback_Aux@
 foreign import ccall safe "wrapper"
@@ -796,7 +866,13 @@
   -> IO (BG.FunPtr SDL_MainThreadCallback_Aux)
 hs_bindgen_0ddfb0aab2235e28 =
   \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_0ddfb0aab2235e28_base (BG.toFFIType fun0))
+    fmap
+      BG.castFunPtr
+      ( hs_bindgen_0ddfb0aab2235e28_base
+          ( \x1 ->
+              BG.getField @"unwrap" fun0 (BG.fromFFIType x1)
+          )
+      )
 
 -- __unique:__ @fromSDL_MainThreadCallback_Aux@
 foreign import ccall safe "dynamic"
@@ -811,7 +887,10 @@
   -> SDL_MainThreadCallback_Aux
 hs_bindgen_b1a0621ae55dc01c =
   \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_b1a0621ae55dc01c_base (BG.castFunPtrToFFIType funPtr0))
+    SDL_MainThreadCallback_Aux
+      ( \x1 ->
+          hs_bindgen_b1a0621ae55dc01c_base (BG.castFunPtr funPtr0) (BG.toFFIType x1)
+      )
 
 instance BG.ToFunPtr SDL_MainThreadCallback_Aux where
   toFunPtr = hs_bindgen_0ddfb0aab2235e28
@@ -888,7 +967,7 @@
 
   offset# = \_ -> \_ -> 0
 
--- | [C declaration]: @macro SDL_PROP_APP_METADATA_NAME_STRING@, literal @\"SDL.app.metadata.name\"@, defined at @SDL3\/SDL_init.h 470:9@
+-- | [C declaration]: @macro SDL_PROP_APP_METADATA_NAME_STRING@, literal @\"SDL.app.metadata.name\"@, defined at @SDL3\/SDL_init.h 471:9@
 sDL_PROP_APP_METADATA_NAME_STRING :: BG.ByteString
 sDL_PROP_APP_METADATA_NAME_STRING =
   BG.pack
@@ -915,7 +994,7 @@
     , 0x65
     ]
 
--- | [C declaration]: @macro SDL_PROP_APP_METADATA_VERSION_STRING@, literal @\"SDL.app.metadata.version\"@, defined at @SDL3\/SDL_init.h 471:9@
+-- | [C declaration]: @macro SDL_PROP_APP_METADATA_VERSION_STRING@, literal @\"SDL.app.metadata.version\"@, defined at @SDL3\/SDL_init.h 472:9@
 sDL_PROP_APP_METADATA_VERSION_STRING :: BG.ByteString
 sDL_PROP_APP_METADATA_VERSION_STRING =
   BG.pack
@@ -945,7 +1024,7 @@
     , 0x6E
     ]
 
--- | [C declaration]: @macro SDL_PROP_APP_METADATA_IDENTIFIER_STRING@, literal @\"SDL.app.metadata.identifier\"@, defined at @SDL3\/SDL_init.h 472:9@
+-- | [C declaration]: @macro SDL_PROP_APP_METADATA_IDENTIFIER_STRING@, literal @\"SDL.app.metadata.identifier\"@, defined at @SDL3\/SDL_init.h 473:9@
 sDL_PROP_APP_METADATA_IDENTIFIER_STRING :: BG.ByteString
 sDL_PROP_APP_METADATA_IDENTIFIER_STRING =
   BG.pack
@@ -978,7 +1057,7 @@
     , 0x72
     ]
 
--- | [C declaration]: @macro SDL_PROP_APP_METADATA_CREATOR_STRING@, literal @\"SDL.app.metadata.creator\"@, defined at @SDL3\/SDL_init.h 473:9@
+-- | [C declaration]: @macro SDL_PROP_APP_METADATA_CREATOR_STRING@, literal @\"SDL.app.metadata.creator\"@, defined at @SDL3\/SDL_init.h 474:9@
 sDL_PROP_APP_METADATA_CREATOR_STRING :: BG.ByteString
 sDL_PROP_APP_METADATA_CREATOR_STRING =
   BG.pack
@@ -1008,7 +1087,7 @@
     , 0x72
     ]
 
--- | [C declaration]: @macro SDL_PROP_APP_METADATA_COPYRIGHT_STRING@, literal @\"SDL.app.metadata.copyright\"@, defined at @SDL3\/SDL_init.h 474:9@
+-- | [C declaration]: @macro SDL_PROP_APP_METADATA_COPYRIGHT_STRING@, literal @\"SDL.app.metadata.copyright\"@, defined at @SDL3\/SDL_init.h 475:9@
 sDL_PROP_APP_METADATA_COPYRIGHT_STRING :: BG.ByteString
 sDL_PROP_APP_METADATA_COPYRIGHT_STRING =
   BG.pack
@@ -1040,7 +1119,7 @@
     , 0x74
     ]
 
--- | [C declaration]: @macro SDL_PROP_APP_METADATA_URL_STRING@, literal @\"SDL.app.metadata.url\"@, defined at @SDL3\/SDL_init.h 475:9@
+-- | [C declaration]: @macro SDL_PROP_APP_METADATA_URL_STRING@, literal @\"SDL.app.metadata.url\"@, defined at @SDL3\/SDL_init.h 476:9@
 sDL_PROP_APP_METADATA_URL_STRING :: BG.ByteString
 sDL_PROP_APP_METADATA_URL_STRING =
   BG.pack
@@ -1066,7 +1145,7 @@
     , 0x6C
     ]
 
--- | [C declaration]: @macro SDL_PROP_APP_METADATA_TYPE_STRING@, literal @\"SDL.app.metadata.type\"@, defined at @SDL3\/SDL_init.h 476:9@
+-- | [C declaration]: @macro SDL_PROP_APP_METADATA_TYPE_STRING@, literal @\"SDL.app.metadata.type\"@, defined at @SDL3\/SDL_init.h 477:9@
 sDL_PROP_APP_METADATA_TYPE_STRING :: BG.ByteString
 sDL_PROP_APP_METADATA_TYPE_STRING =
   BG.pack
diff --git a/src/SDL3/Sys/Bindgen/Init/FunPtr.hs b/src/SDL3/Sys/Bindgen/Init/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Init/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Init/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Init.FunPtr (
@@ -16,6 +18,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -23,7 +27,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_init.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_init.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Init_get_SDL_Init */"
          , "__attribute__ ((const))"
          , "_Bool (*hs_bindgen_dfba4f22209c9554 (void)) ("
@@ -117,7 +125,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Init_get_SDL_Init@
 hs_bindgen_dfba4f22209c9554 :: IO (BG.FunPtr (SDL_InitFlags -> IO BG.CBool))
 hs_bindgen_dfba4f22209c9554 =
-  BG.fromFFIType hs_bindgen_dfba4f22209c9554_base
+  fmap BG.fromFFIType hs_bindgen_dfba4f22209c9554_base
 
 {-# NOINLINE sDL_Init #-}
 
@@ -174,7 +182,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Init_get_SDL_InitSubSystem@
 hs_bindgen_5bce25b55e9d45e3 :: IO (BG.FunPtr (SDL_InitFlags -> IO BG.CBool))
 hs_bindgen_5bce25b55e9d45e3 =
-  BG.fromFFIType hs_bindgen_5bce25b55e9d45e3_base
+  fmap BG.fromFFIType hs_bindgen_5bce25b55e9d45e3_base
 
 {-# NOINLINE sDL_InitSubSystem #-}
 
@@ -205,7 +213,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Init_get_SDL_QuitSubSystem@
 hs_bindgen_149d9b7709db6751 :: IO (BG.FunPtr (SDL_InitFlags -> IO ()))
 hs_bindgen_149d9b7709db6751 =
-  BG.fromFFIType hs_bindgen_149d9b7709db6751_base
+  fmap BG.fromFFIType hs_bindgen_149d9b7709db6751_base
 
 {-# NOINLINE sDL_QuitSubSystem #-}
 
@@ -234,7 +242,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Init_get_SDL_WasInit@
 hs_bindgen_53dd2f1aac19a298 :: IO (BG.FunPtr (SDL_InitFlags -> IO SDL_InitFlags))
 hs_bindgen_53dd2f1aac19a298 =
-  BG.fromFFIType hs_bindgen_53dd2f1aac19a298_base
+  fmap BG.fromFFIType hs_bindgen_53dd2f1aac19a298_base
 
 {-# NOINLINE sDL_WasInit #-}
 
@@ -263,7 +271,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Init_get_SDL_Quit@
 hs_bindgen_9b631cb78cf1671f :: IO (BG.FunPtr (IO ()))
 hs_bindgen_9b631cb78cf1671f =
-  BG.fromFFIType hs_bindgen_9b631cb78cf1671f_base
+  fmap BG.fromFFIType hs_bindgen_9b631cb78cf1671f_base
 
 {-# NOINLINE sDL_Quit #-}
 
@@ -292,7 +300,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Init_get_SDL_IsMainThread@
 hs_bindgen_a902ff5ab130bb25 :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_a902ff5ab130bb25 =
-  BG.fromFFIType hs_bindgen_a902ff5ab130bb25_base
+  fmap BG.fromFFIType hs_bindgen_a902ff5ab130bb25_base
 
 {-# NOINLINE sDL_IsMainThread #-}
 
@@ -322,7 +330,7 @@
 hs_bindgen_1cff011229869063
   :: IO (BG.FunPtr (SDL_MainThreadCallback -> BG.Ptr BG.Void -> BG.CBool -> IO BG.CBool))
 hs_bindgen_1cff011229869063 =
-  BG.fromFFIType hs_bindgen_1cff011229869063_base
+  fmap BG.fromFFIType hs_bindgen_1cff011229869063_base
 
 {-# NOINLINE sDL_RunOnMainThread #-}
 
@@ -368,7 +376,7 @@
            )
        )
 hs_bindgen_7a68851346541d78 =
-  BG.fromFFIType hs_bindgen_7a68851346541d78_base
+  fmap BG.fromFFIType hs_bindgen_7a68851346541d78_base
 
 {-# NOINLINE sDL_SetAppMetadata #-}
 
@@ -418,7 +426,7 @@
 hs_bindgen_d0081e390d662467
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> PtrConst.PtrConst BG.CChar -> IO BG.CBool))
 hs_bindgen_d0081e390d662467 =
-  BG.fromFFIType hs_bindgen_d0081e390d662467_base
+  fmap BG.fromFFIType hs_bindgen_d0081e390d662467_base
 
 {-# NOINLINE sDL_SetAppMetadataProperty #-}
 
@@ -434,7 +442,7 @@
 --
 --     These are the supported properties:
 --
---     * @'sDL_PROP_APP_METADATA_NAME_STRING'@: The human-readable name of the application, like \"My Game 2: Bad Guy\'s Revenge!\". This will show up anywhere the OS shows the name of the application separately from window titles, such as volume control applets, etc. This defaults to \"SDL Application\".
+--     * @'sDL_PROP_APP_METADATA_NAME_STRING'@: The human-readable name of the application, like \"My Game 2: Bad Guy\'s Revenge!\". This will show up anywhere the OS shows the name of the application separately from window titles, such as volume control applets, etc. If not provided by the app, SDL will attempt to pick a reasonable default (the app\'s binary\'s name if the platform can provide it, or \"SDL Application\" if all else fails).
 --
 --     * @'sDL_PROP_APP_METADATA_VERSION_STRING'@: The version of the app that is running; there are no rules on format, so \"1.0.3beta2\" and \"April 22nd, 2024\" and a git hash are all valid options. This has no default.
 --
@@ -460,7 +468,7 @@
 --
 --     [See also]: 'sDL_GetAppMetadataProperty', 'sDL_SetAppMetadata'
 --
---     [C declaration]: @SDL_SetAppMetadataProperty@, defined at @SDL3\/SDL_init.h 468:34@
+--     [C declaration]: @SDL_SetAppMetadataProperty@, defined at @SDL3\/SDL_init.h 469:34@
 sDL_SetAppMetadataProperty
   :: BG.FunPtr (PtrConst.PtrConst BG.CChar -> PtrConst.PtrConst BG.CChar -> IO BG.CBool)
 sDL_SetAppMetadataProperty =
@@ -475,7 +483,7 @@
 hs_bindgen_fdbd2caae5327fdc
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_fdbd2caae5327fdc =
-  BG.fromFFIType hs_bindgen_fdbd2caae5327fdc_base
+  fmap BG.fromFFIType hs_bindgen_fdbd2caae5327fdc_base
 
 {-# NOINLINE sDL_GetAppMetadataProperty #-}
 
@@ -493,7 +501,7 @@
 --
 --     [See also]: 'sDL_SetAppMetadata', 'sDL_SetAppMetadataProperty'
 --
---     [C declaration]: @SDL_GetAppMetadataProperty@, defined at @SDL3\/SDL_init.h 499:42@
+--     [C declaration]: @SDL_GetAppMetadataProperty@, defined at @SDL3\/SDL_init.h 500:42@
 sDL_GetAppMetadataProperty
   :: BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO (PtrConst.PtrConst BG.CChar))
 sDL_GetAppMetadataProperty =
diff --git a/src/SDL3/Sys/Bindgen/Init/Safe.hs b/src/SDL3/Sys/Bindgen/Init/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Init/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Init/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Init.Safe (
@@ -16,6 +18,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -23,7 +28,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_init.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_init.h>"
          , "_Bool hs_bindgen_cce05a9def0ccffc ("
          , "  SDL_InitFlags arg1"
          , ")"
@@ -92,15 +101,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Init_Safe_SDL_Init@
 foreign import ccall safe "hs_bindgen_cce05a9def0ccffc"
   hs_bindgen_cce05a9def0ccffc_base
-    :: BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Init_Safe_SDL_Init@
 hs_bindgen_cce05a9def0ccffc
   :: SDL_InitFlags
   -> IO BG.CBool
 hs_bindgen_cce05a9def0ccffc =
-  BG.fromFFIType hs_bindgen_cce05a9def0ccffc_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_cce05a9def0ccffc_base (BG.toFFIType x0))
 
 -- | Initialize the SDL library.
 --
@@ -152,15 +162,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Init_Safe_SDL_InitSubSystem@
 foreign import ccall safe "hs_bindgen_7c583c295e3b8523"
   hs_bindgen_7c583c295e3b8523_base
-    :: BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Init_Safe_SDL_InitSubSystem@
 hs_bindgen_7c583c295e3b8523
   :: SDL_InitFlags
   -> IO BG.CBool
 hs_bindgen_7c583c295e3b8523 =
-  BG.fromFFIType hs_bindgen_7c583c295e3b8523_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_7c583c295e3b8523_base (BG.toFFIType x0))
 
 -- | Compatibility function to initialize the SDL library.
 --
@@ -186,7 +197,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Init_Safe_SDL_QuitSubSystem@
 foreign import ccall safe "hs_bindgen_c31cb1c8dc07319b"
   hs_bindgen_c31cb1c8dc07319b_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Init_Safe_SDL_QuitSubSystem@
@@ -194,7 +205,8 @@
   :: SDL_InitFlags
   -> IO ()
 hs_bindgen_c31cb1c8dc07319b =
-  BG.fromFFIType hs_bindgen_c31cb1c8dc07319b_base
+  \x0 ->
+    hs_bindgen_c31cb1c8dc07319b_base (BG.toFFIType x0)
 
 -- | Shut down specific SDL subsystems.
 --
@@ -218,15 +230,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Init_Safe_SDL_WasInit@
 foreign import ccall safe "hs_bindgen_6d57cac3c583d674"
   hs_bindgen_6d57cac3c583d674_base
-    :: BG.Word32
-    -> IO BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Init_Safe_SDL_WasInit@
 hs_bindgen_6d57cac3c583d674
   :: SDL_InitFlags
   -> IO SDL_InitFlags
 hs_bindgen_6d57cac3c583d674 =
-  BG.fromFFIType hs_bindgen_6d57cac3c583d674_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_6d57cac3c583d674_base (BG.toFFIType x0))
 
 -- | Get a mask of the specified subsystems which are currently initialized.
 --
@@ -255,7 +268,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Init_Safe_SDL_Quit@
 hs_bindgen_96d0ac915668fb34 :: IO ()
 hs_bindgen_96d0ac915668fb34 =
-  BG.fromFFIType hs_bindgen_96d0ac915668fb34_base
+  hs_bindgen_96d0ac915668fb34_base
 
 -- | Clean up all initialized subsystems.
 --
@@ -276,12 +289,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Init_Safe_SDL_IsMainThread@
 foreign import ccall safe "hs_bindgen_45b2d9eafd0eabc3"
   hs_bindgen_45b2d9eafd0eabc3_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Init_Safe_SDL_IsMainThread@
 hs_bindgen_45b2d9eafd0eabc3 :: IO BG.CBool
 hs_bindgen_45b2d9eafd0eabc3 =
-  BG.fromFFIType hs_bindgen_45b2d9eafd0eabc3_base
+  fmap BG.fromFFIType hs_bindgen_45b2d9eafd0eabc3_base
 
 -- | Return whether this is the main thread.
 --
@@ -304,8 +317,8 @@
   hs_bindgen_d86c3ceed06f5ebf_base
     :: BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Init_Safe_SDL_RunOnMainThread@
 hs_bindgen_d86c3ceed06f5ebf
@@ -314,7 +327,12 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_d86c3ceed06f5ebf =
-  BG.fromFFIType hs_bindgen_d86c3ceed06f5ebf_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_d86c3ceed06f5ebf_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Call a function on the main thread during event processing.
 --
@@ -353,7 +371,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Init_Safe_SDL_SetAppMetadata@
 hs_bindgen_d087dffccd50b723
@@ -362,7 +380,12 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_d087dffccd50b723 =
-  BG.fromFFIType hs_bindgen_d087dffccd50b723_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_d087dffccd50b723_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Specify basic metadata about your app.
 --
@@ -406,7 +429,7 @@
   hs_bindgen_85f726d170efe2ac_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Init_Safe_SDL_SetAppMetadataProperty@
 hs_bindgen_85f726d170efe2ac
@@ -414,7 +437,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_85f726d170efe2ac =
-  BG.fromFFIType hs_bindgen_85f726d170efe2ac_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_85f726d170efe2ac_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Specify metadata about your app through a set of properties.
 --
@@ -428,7 +453,7 @@
 --
 --     These are the supported properties:
 --
---     * @'sDL_PROP_APP_METADATA_NAME_STRING'@: The human-readable name of the application, like \"My Game 2: Bad Guy\'s Revenge!\". This will show up anywhere the OS shows the name of the application separately from window titles, such as volume control applets, etc. This defaults to \"SDL Application\".
+--     * @'sDL_PROP_APP_METADATA_NAME_STRING'@: The human-readable name of the application, like \"My Game 2: Bad Guy\'s Revenge!\". This will show up anywhere the OS shows the name of the application separately from window titles, such as volume control applets, etc. If not provided by the app, SDL will attempt to pick a reasonable default (the app\'s binary\'s name if the platform can provide it, or \"SDL Application\" if all else fails).
 --
 --     * @'sDL_PROP_APP_METADATA_VERSION_STRING'@: The version of the app that is running; there are no rules on format, so \"1.0.3beta2\" and \"April 22nd, 2024\" and a git hash are all valid options. This has no default.
 --
@@ -450,7 +475,7 @@
 --
 --     [See also]: 'sDL_GetAppMetadataProperty', 'sDL_SetAppMetadata'
 --
---     [C declaration]: @SDL_SetAppMetadataProperty@, defined at @SDL3\/SDL_init.h 468:34@
+--     [C declaration]: @SDL_SetAppMetadataProperty@, defined at @SDL3\/SDL_init.h 469:34@
 sDL_SetAppMetadataProperty
   :: PtrConst.PtrConst BG.CChar
   -- ^
@@ -475,7 +500,8 @@
   :: PtrConst.PtrConst BG.CChar
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_0affadab10f86eb8 =
-  BG.fromFFIType hs_bindgen_0affadab10f86eb8_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_0affadab10f86eb8_base (BG.toFFIType x0))
 
 -- | Get metadata about your app.
 --
@@ -489,7 +515,7 @@
 --
 --     [See also]: 'sDL_SetAppMetadata', 'sDL_SetAppMetadataProperty'
 --
---     [C declaration]: @SDL_GetAppMetadataProperty@, defined at @SDL3\/SDL_init.h 499:42@
+--     [C declaration]: @SDL_GetAppMetadataProperty@, defined at @SDL3\/SDL_init.h 500:42@
 sDL_GetAppMetadataProperty
   :: PtrConst.PtrConst BG.CChar
   -- ^
diff --git a/src/SDL3/Sys/Bindgen/Init/Unsafe.hs b/src/SDL3/Sys/Bindgen/Init/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Init/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Init/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Init.Unsafe (
@@ -16,6 +18,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -23,7 +28,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_init.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_init.h>"
          , "_Bool hs_bindgen_3146d3eb9a1aad3e ("
          , "  SDL_InitFlags arg1"
          , ")"
@@ -92,15 +101,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Init_Unsafe_SDL_Init@
 foreign import ccall unsafe "hs_bindgen_3146d3eb9a1aad3e"
   hs_bindgen_3146d3eb9a1aad3e_base
-    :: BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Init_Unsafe_SDL_Init@
 hs_bindgen_3146d3eb9a1aad3e
   :: SDL_InitFlags
   -> IO BG.CBool
 hs_bindgen_3146d3eb9a1aad3e =
-  BG.fromFFIType hs_bindgen_3146d3eb9a1aad3e_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3146d3eb9a1aad3e_base (BG.toFFIType x0))
 
 -- | Initialize the SDL library.
 --
@@ -152,15 +162,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Init_Unsafe_SDL_InitSubSystem@
 foreign import ccall unsafe "hs_bindgen_57954ca9dc375557"
   hs_bindgen_57954ca9dc375557_base
-    :: BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Init_Unsafe_SDL_InitSubSystem@
 hs_bindgen_57954ca9dc375557
   :: SDL_InitFlags
   -> IO BG.CBool
 hs_bindgen_57954ca9dc375557 =
-  BG.fromFFIType hs_bindgen_57954ca9dc375557_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_57954ca9dc375557_base (BG.toFFIType x0))
 
 -- | Compatibility function to initialize the SDL library.
 --
@@ -186,7 +197,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Init_Unsafe_SDL_QuitSubSystem@
 foreign import ccall unsafe "hs_bindgen_5d9dc091dfdc8bd7"
   hs_bindgen_5d9dc091dfdc8bd7_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Init_Unsafe_SDL_QuitSubSystem@
@@ -194,7 +205,8 @@
   :: SDL_InitFlags
   -> IO ()
 hs_bindgen_5d9dc091dfdc8bd7 =
-  BG.fromFFIType hs_bindgen_5d9dc091dfdc8bd7_base
+  \x0 ->
+    hs_bindgen_5d9dc091dfdc8bd7_base (BG.toFFIType x0)
 
 -- | Shut down specific SDL subsystems.
 --
@@ -218,15 +230,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Init_Unsafe_SDL_WasInit@
 foreign import ccall unsafe "hs_bindgen_5abb235ceb2564c2"
   hs_bindgen_5abb235ceb2564c2_base
-    :: BG.Word32
-    -> IO BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Init_Unsafe_SDL_WasInit@
 hs_bindgen_5abb235ceb2564c2
   :: SDL_InitFlags
   -> IO SDL_InitFlags
 hs_bindgen_5abb235ceb2564c2 =
-  BG.fromFFIType hs_bindgen_5abb235ceb2564c2_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_5abb235ceb2564c2_base (BG.toFFIType x0))
 
 -- | Get a mask of the specified subsystems which are currently initialized.
 --
@@ -255,7 +268,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Init_Unsafe_SDL_Quit@
 hs_bindgen_d99f89f24c86653e :: IO ()
 hs_bindgen_d99f89f24c86653e =
-  BG.fromFFIType hs_bindgen_d99f89f24c86653e_base
+  hs_bindgen_d99f89f24c86653e_base
 
 -- | Clean up all initialized subsystems.
 --
@@ -276,12 +289,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Init_Unsafe_SDL_IsMainThread@
 foreign import ccall unsafe "hs_bindgen_d6dd8b3588afcaaa"
   hs_bindgen_d6dd8b3588afcaaa_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Init_Unsafe_SDL_IsMainThread@
 hs_bindgen_d6dd8b3588afcaaa :: IO BG.CBool
 hs_bindgen_d6dd8b3588afcaaa =
-  BG.fromFFIType hs_bindgen_d6dd8b3588afcaaa_base
+  fmap BG.fromFFIType hs_bindgen_d6dd8b3588afcaaa_base
 
 -- | Return whether this is the main thread.
 --
@@ -304,8 +317,8 @@
   hs_bindgen_886c10728e9044d1_base
     :: BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Init_Unsafe_SDL_RunOnMainThread@
 hs_bindgen_886c10728e9044d1
@@ -314,7 +327,12 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_886c10728e9044d1 =
-  BG.fromFFIType hs_bindgen_886c10728e9044d1_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_886c10728e9044d1_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Call a function on the main thread during event processing.
 --
@@ -353,7 +371,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Init_Unsafe_SDL_SetAppMetadata@
 hs_bindgen_7113951a96cf8697
@@ -362,7 +380,12 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_7113951a96cf8697 =
-  BG.fromFFIType hs_bindgen_7113951a96cf8697_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_7113951a96cf8697_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Specify basic metadata about your app.
 --
@@ -406,7 +429,7 @@
   hs_bindgen_f74424c7b29a0aec_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Init_Unsafe_SDL_SetAppMetadataProperty@
 hs_bindgen_f74424c7b29a0aec
@@ -414,7 +437,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_f74424c7b29a0aec =
-  BG.fromFFIType hs_bindgen_f74424c7b29a0aec_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_f74424c7b29a0aec_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Specify metadata about your app through a set of properties.
 --
@@ -428,7 +453,7 @@
 --
 --     These are the supported properties:
 --
---     * @'sDL_PROP_APP_METADATA_NAME_STRING'@: The human-readable name of the application, like \"My Game 2: Bad Guy\'s Revenge!\". This will show up anywhere the OS shows the name of the application separately from window titles, such as volume control applets, etc. This defaults to \"SDL Application\".
+--     * @'sDL_PROP_APP_METADATA_NAME_STRING'@: The human-readable name of the application, like \"My Game 2: Bad Guy\'s Revenge!\". This will show up anywhere the OS shows the name of the application separately from window titles, such as volume control applets, etc. If not provided by the app, SDL will attempt to pick a reasonable default (the app\'s binary\'s name if the platform can provide it, or \"SDL Application\" if all else fails).
 --
 --     * @'sDL_PROP_APP_METADATA_VERSION_STRING'@: The version of the app that is running; there are no rules on format, so \"1.0.3beta2\" and \"April 22nd, 2024\" and a git hash are all valid options. This has no default.
 --
@@ -450,7 +475,7 @@
 --
 --     [See also]: 'sDL_GetAppMetadataProperty', 'sDL_SetAppMetadata'
 --
---     [C declaration]: @SDL_SetAppMetadataProperty@, defined at @SDL3\/SDL_init.h 468:34@
+--     [C declaration]: @SDL_SetAppMetadataProperty@, defined at @SDL3\/SDL_init.h 469:34@
 sDL_SetAppMetadataProperty
   :: PtrConst.PtrConst BG.CChar
   -- ^
@@ -475,7 +500,8 @@
   :: PtrConst.PtrConst BG.CChar
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_564623fbc2006948 =
-  BG.fromFFIType hs_bindgen_564623fbc2006948_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_564623fbc2006948_base (BG.toFFIType x0))
 
 -- | Get metadata about your app.
 --
@@ -489,7 +515,7 @@
 --
 --     [See also]: 'sDL_SetAppMetadata', 'sDL_SetAppMetadataProperty'
 --
---     [C declaration]: @SDL_GetAppMetadataProperty@, defined at @SDL3\/SDL_init.h 499:42@
+--     [C declaration]: @SDL_GetAppMetadataProperty@, defined at @SDL3\/SDL_init.h 500:42@
 sDL_GetAppMetadataProperty
   :: PtrConst.PtrConst BG.CChar
   -- ^
diff --git a/src/SDL3/Sys/Bindgen/Iostream.hs b/src/SDL3/Sys/Bindgen/Iostream.hs
--- a/src/SDL3/Sys/Bindgen/Iostream.hs
+++ b/src/SDL3/Sys/Bindgen/Iostream.hs
@@ -18,6 +18,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | SDL provides an abstract interface for reading and writing data streams. It offers implementations for files, memory, etc, and the app can provide their own implementations, too.
 --
@@ -50,11 +51,14 @@
 )
 where
 
+import Prelude (Eq, IO, Int, Ord, Read, Show, pure, (<*>), (>>), type (~))
+
 import HsBindgen.Runtime.CEnum qualified as CEnum
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.Marshal qualified as Marshal
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Struct qualified as Struct
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField
 import SDL3.Sys.Bindgen.Stdinc qualified
@@ -388,6 +392,12 @@
 
 deriving via Marshal.EquivStorable SDL_IOStreamInterface instance BG.Storable SDL_IOStreamInterface
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_IOStreamInterface
+  instance
+    Struct.IsStruct SDL_IOStreamInterface
+
+-- | [C declaration]: @version@, defined at @SDL3\/SDL_iostream.h 95:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "version" SDL_IOStreamInterface ty
@@ -420,6 +430,7 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | [C declaration]: @size@, defined at @SDL3\/SDL_iostream.h 102:22@
 instance
   (ty ~ BG.FunPtr (BG.Ptr BG.Void -> IO SDL3.Sys.Bindgen.Stdinc.Sint64))
   => BG.CompatHasField.HasField "size" SDL_IOStreamInterface ty
@@ -452,6 +463,7 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | [C declaration]: @seek@, defined at @SDL3\/SDL_iostream.h 110:22@
 instance
   ( ty
       ~ BG.FunPtr
@@ -503,6 +515,7 @@
 
   offset# = \_ -> \_ -> 16
 
+-- | [C declaration]: @read@, defined at @SDL3\/SDL_iostream.h 122:22@
 instance
   ( ty
       ~ BG.FunPtr
@@ -557,6 +570,7 @@
 
   offset# = \_ -> \_ -> 24
 
+-- | [C declaration]: @write@, defined at @SDL3\/SDL_iostream.h 134:22@
 instance
   ( ty
       ~ BG.FunPtr
@@ -611,6 +625,7 @@
 
   offset# = \_ -> \_ -> 32
 
+-- | [C declaration]: @flush@, defined at @SDL3\/SDL_iostream.h 145:20@
 instance
   (ty ~ BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr SDL_IOStatus -> IO BG.CBool))
   => BG.CompatHasField.HasField "flush" SDL_IOStreamInterface ty
@@ -643,6 +658,7 @@
 
   offset# = \_ -> \_ -> 40
 
+-- | [C declaration]: @close@, defined at @SDL3\/SDL_iostream.h 158:20@
 instance
   (ty ~ BG.FunPtr (BG.Ptr BG.Void -> IO BG.CBool))
   => BG.CompatHasField.HasField "close" SDL_IOStreamInterface ty
diff --git a/src/SDL3/Sys/Bindgen/Iostream/FunPtr.hs b/src/SDL3/Sys/Bindgen/Iostream/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Iostream/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Iostream/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Iostream.FunPtr (
@@ -52,6 +54,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
@@ -62,7 +66,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_iostream.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_iostream.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_get_SDL_IOFromFile */"
          , "__attribute__ ((const))"
          , "SDL_IOStream *(*hs_bindgen_201a8b6453f8984e (void)) ("
@@ -489,7 +497,7 @@
   :: IO
        (BG.FunPtr (PtrConst.PtrConst BG.CChar -> PtrConst.PtrConst BG.CChar -> IO (BG.Ptr SDL_IOStream)))
 hs_bindgen_201a8b6453f8984e =
-  BG.fromFFIType hs_bindgen_201a8b6453f8984e_base
+  fmap BG.fromFFIType hs_bindgen_201a8b6453f8984e_base
 
 {-# NOINLINE sDL_IOFromFile #-}
 
@@ -560,7 +568,7 @@
 hs_bindgen_85f5d4c89469983e
   :: IO (BG.FunPtr (BG.Ptr BG.Void -> HsBindgen.Runtime.LibC.CSize -> IO (BG.Ptr SDL_IOStream)))
 hs_bindgen_85f5d4c89469983e =
-  BG.fromFFIType hs_bindgen_85f5d4c89469983e_base
+  fmap BG.fromFFIType hs_bindgen_85f5d4c89469983e_base
 
 {-# NOINLINE sDL_IOFromMem #-}
 
@@ -610,7 +618,7 @@
   :: IO
        (BG.FunPtr (PtrConst.PtrConst BG.Void -> HsBindgen.Runtime.LibC.CSize -> IO (BG.Ptr SDL_IOStream)))
 hs_bindgen_8e9894d9b76b4508 =
-  BG.fromFFIType hs_bindgen_8e9894d9b76b4508_base
+  fmap BG.fromFFIType hs_bindgen_8e9894d9b76b4508_base
 
 {-# NOINLINE sDL_IOFromConstMem #-}
 
@@ -660,7 +668,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_get_SDL_IOFromDynamicMem@
 hs_bindgen_0bc01e6fcc469c5d :: IO (BG.FunPtr (IO (BG.Ptr SDL_IOStream)))
 hs_bindgen_0bc01e6fcc469c5d =
-  BG.fromFFIType hs_bindgen_0bc01e6fcc469c5d_base
+  fmap BG.fromFFIType hs_bindgen_0bc01e6fcc469c5d_base
 
 {-# NOINLINE sDL_IOFromDynamicMem #-}
 
@@ -695,7 +703,7 @@
   :: IO
        (BG.FunPtr (PtrConst.PtrConst SDL_IOStreamInterface -> BG.Ptr BG.Void -> IO (BG.Ptr SDL_IOStream)))
 hs_bindgen_6ff7847ea63b8084 =
-  BG.fromFFIType hs_bindgen_6ff7847ea63b8084_base
+  fmap BG.fromFFIType hs_bindgen_6ff7847ea63b8084_base
 
 {-# NOINLINE sDL_OpenIO #-}
 
@@ -731,7 +739,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_get_SDL_CloseIO@
 hs_bindgen_f6068828da8e5825 :: IO (BG.FunPtr (BG.Ptr SDL_IOStream -> IO BG.CBool))
 hs_bindgen_f6068828da8e5825 =
-  BG.fromFFIType hs_bindgen_f6068828da8e5825_base
+  fmap BG.fromFFIType hs_bindgen_f6068828da8e5825_base
 
 {-# NOINLINE sDL_CloseIO #-}
 
@@ -767,7 +775,7 @@
 hs_bindgen_8dacbe3916578a37
   :: IO (BG.FunPtr (BG.Ptr SDL_IOStream -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID))
 hs_bindgen_8dacbe3916578a37 =
-  BG.fromFFIType hs_bindgen_8dacbe3916578a37_base
+  fmap BG.fromFFIType hs_bindgen_8dacbe3916578a37_base
 
 {-# NOINLINE sDL_GetIOProperties #-}
 
@@ -795,7 +803,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_get_SDL_GetIOStatus@
 hs_bindgen_31f5af3182a34a32 :: IO (BG.FunPtr (BG.Ptr SDL_IOStream -> IO SDL_IOStatus))
 hs_bindgen_31f5af3182a34a32 =
-  BG.fromFFIType hs_bindgen_31f5af3182a34a32_base
+  fmap BG.fromFFIType hs_bindgen_31f5af3182a34a32_base
 
 {-# NOINLINE sDL_GetIOStatus #-}
 
@@ -827,7 +835,7 @@
 hs_bindgen_322d6819ddbd6d39
   :: IO (BG.FunPtr (BG.Ptr SDL_IOStream -> IO SDL3.Sys.Bindgen.Stdinc.Sint64))
 hs_bindgen_322d6819ddbd6d39 =
-  BG.fromFFIType hs_bindgen_322d6819ddbd6d39_base
+  fmap BG.fromFFIType hs_bindgen_322d6819ddbd6d39_base
 
 {-# NOINLINE sDL_GetIOSize #-}
 
@@ -862,7 +870,7 @@
            )
        )
 hs_bindgen_0a9b2c955dab0026 =
-  BG.fromFFIType hs_bindgen_0a9b2c955dab0026_base
+  fmap BG.fromFFIType hs_bindgen_0a9b2c955dab0026_base
 
 {-# NOINLINE sDL_SeekIO #-}
 
@@ -914,7 +922,7 @@
 hs_bindgen_bef67ceee53b6142
   :: IO (BG.FunPtr (BG.Ptr SDL_IOStream -> IO SDL3.Sys.Bindgen.Stdinc.Sint64))
 hs_bindgen_bef67ceee53b6142 =
-  BG.fromFFIType hs_bindgen_bef67ceee53b6142_base
+  fmap BG.fromFFIType hs_bindgen_bef67ceee53b6142_base
 
 {-# NOINLINE sDL_TellIO #-}
 
@@ -953,7 +961,7 @@
            )
        )
 hs_bindgen_0c9d4db36a2719b6 =
-  BG.fromFFIType hs_bindgen_0c9d4db36a2719b6_base
+  fmap BG.fromFFIType hs_bindgen_0c9d4db36a2719b6_base
 
 {-# NOINLINE sDL_ReadIO #-}
 
@@ -1006,7 +1014,7 @@
            )
        )
 hs_bindgen_d9956d7898ea90e2 =
-  BG.fromFFIType hs_bindgen_d9956d7898ea90e2_base
+  fmap BG.fromFFIType hs_bindgen_d9956d7898ea90e2_base
 
 {-# NOINLINE sDL_WriteIO #-}
 
@@ -1053,7 +1061,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_get_SDL_FlushIO@
 hs_bindgen_ae112d17ec9c64f0 :: IO (BG.FunPtr (BG.Ptr SDL_IOStream -> IO BG.CBool))
 hs_bindgen_ae112d17ec9c64f0 =
-  BG.fromFFIType hs_bindgen_ae112d17ec9c64f0_base
+  fmap BG.fromFFIType hs_bindgen_ae112d17ec9c64f0_base
 
 {-# NOINLINE sDL_FlushIO #-}
 
@@ -1088,7 +1096,7 @@
            (BG.Ptr SDL_IOStream -> BG.Ptr HsBindgen.Runtime.LibC.CSize -> BG.CBool -> IO (BG.Ptr BG.Void))
        )
 hs_bindgen_e46ab82952c4c1d4 =
-  BG.fromFFIType hs_bindgen_e46ab82952c4c1d4_base
+  fmap BG.fromFFIType hs_bindgen_e46ab82952c4c1d4_base
 
 {-# NOINLINE sDL_LoadFile_IO #-}
 
@@ -1129,7 +1137,7 @@
   :: IO
        (BG.FunPtr (PtrConst.PtrConst BG.CChar -> BG.Ptr HsBindgen.Runtime.LibC.CSize -> IO (BG.Ptr BG.Void)))
 hs_bindgen_ea9bbd4467b9e2c6 =
-  BG.fromFFIType hs_bindgen_ea9bbd4467b9e2c6_base
+  fmap BG.fromFFIType hs_bindgen_ea9bbd4467b9e2c6_base
 
 {-# NOINLINE sDL_LoadFile #-}
 
@@ -1174,7 +1182,7 @@
            )
        )
 hs_bindgen_de0267086f8fc295 =
-  BG.fromFFIType hs_bindgen_de0267086f8fc295_base
+  fmap BG.fromFFIType hs_bindgen_de0267086f8fc295_base
 
 {-# NOINLINE sDL_SaveFile_IO #-}
 
@@ -1224,7 +1232,7 @@
            )
        )
 hs_bindgen_841c544344507810 =
-  BG.fromFFIType hs_bindgen_841c544344507810_base
+  fmap BG.fromFFIType hs_bindgen_841c544344507810_base
 
 {-# NOINLINE sDL_SaveFile #-}
 
@@ -1264,7 +1272,7 @@
 hs_bindgen_c304f9e2b3baf9dd
   :: IO (BG.FunPtr (BG.Ptr SDL_IOStream -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8 -> IO BG.CBool))
 hs_bindgen_c304f9e2b3baf9dd =
-  BG.fromFFIType hs_bindgen_c304f9e2b3baf9dd_base
+  fmap BG.fromFFIType hs_bindgen_c304f9e2b3baf9dd_base
 
 {-# NOINLINE sDL_ReadU8 #-}
 
@@ -1296,7 +1304,7 @@
 hs_bindgen_c39406dce63371f8
   :: IO (BG.FunPtr (BG.Ptr SDL_IOStream -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Sint8 -> IO BG.CBool))
 hs_bindgen_c39406dce63371f8 =
-  BG.fromFFIType hs_bindgen_c39406dce63371f8_base
+  fmap BG.fromFFIType hs_bindgen_c39406dce63371f8_base
 
 {-# NOINLINE sDL_ReadS8 #-}
 
@@ -1328,7 +1336,7 @@
 hs_bindgen_6849a0e565e7ac74
   :: IO (BG.FunPtr (BG.Ptr SDL_IOStream -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint16 -> IO BG.CBool))
 hs_bindgen_6849a0e565e7ac74 =
-  BG.fromFFIType hs_bindgen_6849a0e565e7ac74_base
+  fmap BG.fromFFIType hs_bindgen_6849a0e565e7ac74_base
 
 {-# NOINLINE sDL_ReadU16LE #-}
 
@@ -1363,7 +1371,7 @@
 hs_bindgen_fe15c03a2323f8ee
   :: IO (BG.FunPtr (BG.Ptr SDL_IOStream -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Sint16 -> IO BG.CBool))
 hs_bindgen_fe15c03a2323f8ee =
-  BG.fromFFIType hs_bindgen_fe15c03a2323f8ee_base
+  fmap BG.fromFFIType hs_bindgen_fe15c03a2323f8ee_base
 
 {-# NOINLINE sDL_ReadS16LE #-}
 
@@ -1398,7 +1406,7 @@
 hs_bindgen_04f5c88868a2821e
   :: IO (BG.FunPtr (BG.Ptr SDL_IOStream -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint16 -> IO BG.CBool))
 hs_bindgen_04f5c88868a2821e =
-  BG.fromFFIType hs_bindgen_04f5c88868a2821e_base
+  fmap BG.fromFFIType hs_bindgen_04f5c88868a2821e_base
 
 {-# NOINLINE sDL_ReadU16BE #-}
 
@@ -1433,7 +1441,7 @@
 hs_bindgen_ab83010c5ae7ab35
   :: IO (BG.FunPtr (BG.Ptr SDL_IOStream -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Sint16 -> IO BG.CBool))
 hs_bindgen_ab83010c5ae7ab35 =
-  BG.fromFFIType hs_bindgen_ab83010c5ae7ab35_base
+  fmap BG.fromFFIType hs_bindgen_ab83010c5ae7ab35_base
 
 {-# NOINLINE sDL_ReadS16BE #-}
 
@@ -1468,7 +1476,7 @@
 hs_bindgen_4dedf81005dea655
   :: IO (BG.FunPtr (BG.Ptr SDL_IOStream -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO BG.CBool))
 hs_bindgen_4dedf81005dea655 =
-  BG.fromFFIType hs_bindgen_4dedf81005dea655_base
+  fmap BG.fromFFIType hs_bindgen_4dedf81005dea655_base
 
 {-# NOINLINE sDL_ReadU32LE #-}
 
@@ -1503,7 +1511,7 @@
 hs_bindgen_fffd09bacab3320d
   :: IO (BG.FunPtr (BG.Ptr SDL_IOStream -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Sint32 -> IO BG.CBool))
 hs_bindgen_fffd09bacab3320d =
-  BG.fromFFIType hs_bindgen_fffd09bacab3320d_base
+  fmap BG.fromFFIType hs_bindgen_fffd09bacab3320d_base
 
 {-# NOINLINE sDL_ReadS32LE #-}
 
@@ -1538,7 +1546,7 @@
 hs_bindgen_42b0f1d027be0c67
   :: IO (BG.FunPtr (BG.Ptr SDL_IOStream -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO BG.CBool))
 hs_bindgen_42b0f1d027be0c67 =
-  BG.fromFFIType hs_bindgen_42b0f1d027be0c67_base
+  fmap BG.fromFFIType hs_bindgen_42b0f1d027be0c67_base
 
 {-# NOINLINE sDL_ReadU32BE #-}
 
@@ -1573,7 +1581,7 @@
 hs_bindgen_97bc8b4d68748597
   :: IO (BG.FunPtr (BG.Ptr SDL_IOStream -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Sint32 -> IO BG.CBool))
 hs_bindgen_97bc8b4d68748597 =
-  BG.fromFFIType hs_bindgen_97bc8b4d68748597_base
+  fmap BG.fromFFIType hs_bindgen_97bc8b4d68748597_base
 
 {-# NOINLINE sDL_ReadS32BE #-}
 
@@ -1608,7 +1616,7 @@
 hs_bindgen_076f54bb27254ddb
   :: IO (BG.FunPtr (BG.Ptr SDL_IOStream -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint64 -> IO BG.CBool))
 hs_bindgen_076f54bb27254ddb =
-  BG.fromFFIType hs_bindgen_076f54bb27254ddb_base
+  fmap BG.fromFFIType hs_bindgen_076f54bb27254ddb_base
 
 {-# NOINLINE sDL_ReadU64LE #-}
 
@@ -1643,7 +1651,7 @@
 hs_bindgen_1aa96b5b13230b9b
   :: IO (BG.FunPtr (BG.Ptr SDL_IOStream -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Sint64 -> IO BG.CBool))
 hs_bindgen_1aa96b5b13230b9b =
-  BG.fromFFIType hs_bindgen_1aa96b5b13230b9b_base
+  fmap BG.fromFFIType hs_bindgen_1aa96b5b13230b9b_base
 
 {-# NOINLINE sDL_ReadS64LE #-}
 
@@ -1678,7 +1686,7 @@
 hs_bindgen_b0379b9f20acb50b
   :: IO (BG.FunPtr (BG.Ptr SDL_IOStream -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint64 -> IO BG.CBool))
 hs_bindgen_b0379b9f20acb50b =
-  BG.fromFFIType hs_bindgen_b0379b9f20acb50b_base
+  fmap BG.fromFFIType hs_bindgen_b0379b9f20acb50b_base
 
 {-# NOINLINE sDL_ReadU64BE #-}
 
@@ -1713,7 +1721,7 @@
 hs_bindgen_91c79c6f23b10cea
   :: IO (BG.FunPtr (BG.Ptr SDL_IOStream -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Sint64 -> IO BG.CBool))
 hs_bindgen_91c79c6f23b10cea =
-  BG.fromFFIType hs_bindgen_91c79c6f23b10cea_base
+  fmap BG.fromFFIType hs_bindgen_91c79c6f23b10cea_base
 
 {-# NOINLINE sDL_ReadS64BE #-}
 
@@ -1748,7 +1756,7 @@
 hs_bindgen_6a41201b6dedc01d
   :: IO (BG.FunPtr (BG.Ptr SDL_IOStream -> SDL3.Sys.Bindgen.Stdinc.Uint8 -> IO BG.CBool))
 hs_bindgen_6a41201b6dedc01d =
-  BG.fromFFIType hs_bindgen_6a41201b6dedc01d_base
+  fmap BG.fromFFIType hs_bindgen_6a41201b6dedc01d_base
 
 {-# NOINLINE sDL_WriteU8 #-}
 
@@ -1778,7 +1786,7 @@
 hs_bindgen_7779de5157457a4b
   :: IO (BG.FunPtr (BG.Ptr SDL_IOStream -> SDL3.Sys.Bindgen.Stdinc.Sint8 -> IO BG.CBool))
 hs_bindgen_7779de5157457a4b =
-  BG.fromFFIType hs_bindgen_7779de5157457a4b_base
+  fmap BG.fromFFIType hs_bindgen_7779de5157457a4b_base
 
 {-# NOINLINE sDL_WriteS8 #-}
 
@@ -1808,7 +1816,7 @@
 hs_bindgen_d47e66728dda1cb5
   :: IO (BG.FunPtr (BG.Ptr SDL_IOStream -> SDL3.Sys.Bindgen.Stdinc.Uint16 -> IO BG.CBool))
 hs_bindgen_d47e66728dda1cb5 =
-  BG.fromFFIType hs_bindgen_d47e66728dda1cb5_base
+  fmap BG.fromFFIType hs_bindgen_d47e66728dda1cb5_base
 
 {-# NOINLINE sDL_WriteU16LE #-}
 
@@ -1840,7 +1848,7 @@
 hs_bindgen_93f38ce5f51dbf43
   :: IO (BG.FunPtr (BG.Ptr SDL_IOStream -> SDL3.Sys.Bindgen.Stdinc.Sint16 -> IO BG.CBool))
 hs_bindgen_93f38ce5f51dbf43 =
-  BG.fromFFIType hs_bindgen_93f38ce5f51dbf43_base
+  fmap BG.fromFFIType hs_bindgen_93f38ce5f51dbf43_base
 
 {-# NOINLINE sDL_WriteS16LE #-}
 
@@ -1872,7 +1880,7 @@
 hs_bindgen_e336b4900affdc95
   :: IO (BG.FunPtr (BG.Ptr SDL_IOStream -> SDL3.Sys.Bindgen.Stdinc.Uint16 -> IO BG.CBool))
 hs_bindgen_e336b4900affdc95 =
-  BG.fromFFIType hs_bindgen_e336b4900affdc95_base
+  fmap BG.fromFFIType hs_bindgen_e336b4900affdc95_base
 
 {-# NOINLINE sDL_WriteU16BE #-}
 
@@ -1904,7 +1912,7 @@
 hs_bindgen_ae3652657a7f54ff
   :: IO (BG.FunPtr (BG.Ptr SDL_IOStream -> SDL3.Sys.Bindgen.Stdinc.Sint16 -> IO BG.CBool))
 hs_bindgen_ae3652657a7f54ff =
-  BG.fromFFIType hs_bindgen_ae3652657a7f54ff_base
+  fmap BG.fromFFIType hs_bindgen_ae3652657a7f54ff_base
 
 {-# NOINLINE sDL_WriteS16BE #-}
 
@@ -1936,7 +1944,7 @@
 hs_bindgen_3eafe174eec9869a
   :: IO (BG.FunPtr (BG.Ptr SDL_IOStream -> SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO BG.CBool))
 hs_bindgen_3eafe174eec9869a =
-  BG.fromFFIType hs_bindgen_3eafe174eec9869a_base
+  fmap BG.fromFFIType hs_bindgen_3eafe174eec9869a_base
 
 {-# NOINLINE sDL_WriteU32LE #-}
 
@@ -1968,7 +1976,7 @@
 hs_bindgen_93d996acdc68faa4
   :: IO (BG.FunPtr (BG.Ptr SDL_IOStream -> SDL3.Sys.Bindgen.Stdinc.Sint32 -> IO BG.CBool))
 hs_bindgen_93d996acdc68faa4 =
-  BG.fromFFIType hs_bindgen_93d996acdc68faa4_base
+  fmap BG.fromFFIType hs_bindgen_93d996acdc68faa4_base
 
 {-# NOINLINE sDL_WriteS32LE #-}
 
@@ -2000,7 +2008,7 @@
 hs_bindgen_b65faf115109388d
   :: IO (BG.FunPtr (BG.Ptr SDL_IOStream -> SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO BG.CBool))
 hs_bindgen_b65faf115109388d =
-  BG.fromFFIType hs_bindgen_b65faf115109388d_base
+  fmap BG.fromFFIType hs_bindgen_b65faf115109388d_base
 
 {-# NOINLINE sDL_WriteU32BE #-}
 
@@ -2032,7 +2040,7 @@
 hs_bindgen_dfe1b91f6dd8a3fa
   :: IO (BG.FunPtr (BG.Ptr SDL_IOStream -> SDL3.Sys.Bindgen.Stdinc.Sint32 -> IO BG.CBool))
 hs_bindgen_dfe1b91f6dd8a3fa =
-  BG.fromFFIType hs_bindgen_dfe1b91f6dd8a3fa_base
+  fmap BG.fromFFIType hs_bindgen_dfe1b91f6dd8a3fa_base
 
 {-# NOINLINE sDL_WriteS32BE #-}
 
@@ -2064,7 +2072,7 @@
 hs_bindgen_2d1c699323094d03
   :: IO (BG.FunPtr (BG.Ptr SDL_IOStream -> SDL3.Sys.Bindgen.Stdinc.Uint64 -> IO BG.CBool))
 hs_bindgen_2d1c699323094d03 =
-  BG.fromFFIType hs_bindgen_2d1c699323094d03_base
+  fmap BG.fromFFIType hs_bindgen_2d1c699323094d03_base
 
 {-# NOINLINE sDL_WriteU64LE #-}
 
@@ -2096,7 +2104,7 @@
 hs_bindgen_fe1f17e206d55f2a
   :: IO (BG.FunPtr (BG.Ptr SDL_IOStream -> SDL3.Sys.Bindgen.Stdinc.Sint64 -> IO BG.CBool))
 hs_bindgen_fe1f17e206d55f2a =
-  BG.fromFFIType hs_bindgen_fe1f17e206d55f2a_base
+  fmap BG.fromFFIType hs_bindgen_fe1f17e206d55f2a_base
 
 {-# NOINLINE sDL_WriteS64LE #-}
 
@@ -2128,7 +2136,7 @@
 hs_bindgen_9dd43ac41e9a2bb2
   :: IO (BG.FunPtr (BG.Ptr SDL_IOStream -> SDL3.Sys.Bindgen.Stdinc.Uint64 -> IO BG.CBool))
 hs_bindgen_9dd43ac41e9a2bb2 =
-  BG.fromFFIType hs_bindgen_9dd43ac41e9a2bb2_base
+  fmap BG.fromFFIType hs_bindgen_9dd43ac41e9a2bb2_base
 
 {-# NOINLINE sDL_WriteU64BE #-}
 
@@ -2160,7 +2168,7 @@
 hs_bindgen_fbc1776f62682806
   :: IO (BG.FunPtr (BG.Ptr SDL_IOStream -> SDL3.Sys.Bindgen.Stdinc.Sint64 -> IO BG.CBool))
 hs_bindgen_fbc1776f62682806 =
-  BG.fromFFIType hs_bindgen_fbc1776f62682806_base
+  fmap BG.fromFFIType hs_bindgen_fbc1776f62682806_base
 
 {-# NOINLINE sDL_WriteS64BE #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Iostream/Safe.hs b/src/SDL3/Sys/Bindgen/Iostream/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Iostream/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Iostream/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Iostream.Safe (
@@ -52,6 +54,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
@@ -62,7 +66,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_iostream.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_iostream.h>"
          , "SDL_IOStream *hs_bindgen_34e479a8367942af ("
          , "  char const *arg1,"
          , "  char const *arg2"
@@ -400,7 +408,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO (BG.Ptr SDL_IOStream)
 hs_bindgen_34e479a8367942af =
-  BG.fromFFIType hs_bindgen_34e479a8367942af_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_34e479a8367942af_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to create a new 'SDL_IOStream' structure for reading from and\/or writing to a named file.
 --
@@ -467,7 +477,7 @@
 foreign import ccall safe "hs_bindgen_cf3ad24eb5c5fc0a"
   hs_bindgen_cf3ad24eb5c5fc0a_base
     :: BG.Ptr BG.Void
-    -> BG.Word64
+    -> HsBindgen.Runtime.LibC.CSize
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_IOFromMem@
@@ -476,7 +486,9 @@
   -> HsBindgen.Runtime.LibC.CSize
   -> IO (BG.Ptr SDL_IOStream)
 hs_bindgen_cf3ad24eb5c5fc0a =
-  BG.fromFFIType hs_bindgen_cf3ad24eb5c5fc0a_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_cf3ad24eb5c5fc0a_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to prepare a read-write memory buffer for use with 'SDL_IOStream'.
 --
@@ -521,7 +533,7 @@
 foreign import ccall safe "hs_bindgen_5e86d852c63fbcca"
   hs_bindgen_5e86d852c63fbcca_base
     :: BG.Ptr BG.Void
-    -> BG.Word64
+    -> HsBindgen.Runtime.LibC.CSize
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_IOFromConstMem@
@@ -530,7 +542,9 @@
   -> HsBindgen.Runtime.LibC.CSize
   -> IO (BG.Ptr SDL_IOStream)
 hs_bindgen_5e86d852c63fbcca =
-  BG.fromFFIType hs_bindgen_5e86d852c63fbcca_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_5e86d852c63fbcca_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to prepare a read-only memory buffer for use with 'SDL_IOStream'.
 --
@@ -581,7 +595,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_IOFromDynamicMem@
 hs_bindgen_683cd141fd8245a6 :: IO (BG.Ptr SDL_IOStream)
 hs_bindgen_683cd141fd8245a6 =
-  BG.fromFFIType hs_bindgen_683cd141fd8245a6_base
+  fmap BG.fromFFIType hs_bindgen_683cd141fd8245a6_base
 
 -- | Use this function to create an 'SDL_IOStream' that is backed by dynamically allocated memory.
 --
@@ -616,7 +630,9 @@
   -> BG.Ptr BG.Void
   -> IO (BG.Ptr SDL_IOStream)
 hs_bindgen_03754d9f752b3672 =
-  BG.fromFFIType hs_bindgen_03754d9f752b3672_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_03754d9f752b3672_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Create a custom 'SDL_IOStream'.
 --
@@ -649,14 +665,15 @@
 foreign import ccall safe "hs_bindgen_3194e5e921bc697c"
   hs_bindgen_3194e5e921bc697c_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_CloseIO@
 hs_bindgen_3194e5e921bc697c
   :: BG.Ptr SDL_IOStream
   -> IO BG.CBool
 hs_bindgen_3194e5e921bc697c =
-  BG.fromFFIType hs_bindgen_3194e5e921bc697c_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3194e5e921bc697c_base (BG.toFFIType x0))
 
 -- | Close and free an allocated 'SDL_IOStream' structure.
 --
@@ -687,14 +704,15 @@
 foreign import ccall safe "hs_bindgen_16a31766d73c85ef"
   hs_bindgen_16a31766d73c85ef_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_GetIOProperties@
 hs_bindgen_16a31766d73c85ef
   :: BG.Ptr SDL_IOStream
   -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
 hs_bindgen_16a31766d73c85ef =
-  BG.fromFFIType hs_bindgen_16a31766d73c85ef_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_16a31766d73c85ef_base (BG.toFFIType x0))
 
 -- | Get the properties associated with an 'SDL_IOStream'.
 --
@@ -717,14 +735,15 @@
 foreign import ccall safe "hs_bindgen_aa2e9a65d05ce21f"
   hs_bindgen_aa2e9a65d05ce21f_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_GetIOStatus@
 hs_bindgen_aa2e9a65d05ce21f
   :: BG.Ptr SDL_IOStream
   -> IO SDL_IOStatus
 hs_bindgen_aa2e9a65d05ce21f =
-  BG.fromFFIType hs_bindgen_aa2e9a65d05ce21f_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_aa2e9a65d05ce21f_base (BG.toFFIType x0))
 
 -- | Query the stream status of an 'SDL_IOStream'.
 --
@@ -751,14 +770,15 @@
 foreign import ccall safe "hs_bindgen_54da1584c7a84cda"
   hs_bindgen_54da1584c7a84cda_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int64
+    -> IO HsBindgen.Runtime.LibC.Int64
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_GetIOSize@
 hs_bindgen_54da1584c7a84cda
   :: BG.Ptr SDL_IOStream
   -> IO SDL3.Sys.Bindgen.Stdinc.Sint64
 hs_bindgen_54da1584c7a84cda =
-  BG.fromFFIType hs_bindgen_54da1584c7a84cda_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_54da1584c7a84cda_base (BG.toFFIType x0))
 
 -- | Use this function to get the size of the data stream in an 'SDL_IOStream'.
 --
@@ -781,9 +801,9 @@
 foreign import ccall safe "hs_bindgen_0c3b6f6c9596a5d8"
   hs_bindgen_0c3b6f6c9596a5d8_base
     :: BG.Ptr BG.Void
-    -> BG.Int64
-    -> BG.Word32
-    -> IO BG.Int64
+    -> HsBindgen.Runtime.LibC.Int64
+    -> BG.CUInt
+    -> IO HsBindgen.Runtime.LibC.Int64
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_SeekIO@
 hs_bindgen_0c3b6f6c9596a5d8
@@ -792,7 +812,12 @@
   -> SDL_IOWhence
   -> IO SDL3.Sys.Bindgen.Stdinc.Sint64
 hs_bindgen_0c3b6f6c9596a5d8 =
-  BG.fromFFIType hs_bindgen_0c3b6f6c9596a5d8_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_0c3b6f6c9596a5d8_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Seek within an 'SDL_IOStream' data stream.
 --
@@ -837,14 +862,15 @@
 foreign import ccall safe "hs_bindgen_094df7d1bb2e26ac"
   hs_bindgen_094df7d1bb2e26ac_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int64
+    -> IO HsBindgen.Runtime.LibC.Int64
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_TellIO@
 hs_bindgen_094df7d1bb2e26ac
   :: BG.Ptr SDL_IOStream
   -> IO SDL3.Sys.Bindgen.Stdinc.Sint64
 hs_bindgen_094df7d1bb2e26ac =
-  BG.fromFFIType hs_bindgen_094df7d1bb2e26ac_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_094df7d1bb2e26ac_base (BG.toFFIType x0))
 
 -- | Determine the current read\/write offset in an 'SDL_IOStream' data stream.
 --
@@ -872,8 +898,8 @@
   hs_bindgen_04c1c6ca873e76fc_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word64
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO HsBindgen.Runtime.LibC.CSize
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_ReadIO@
 hs_bindgen_04c1c6ca873e76fc
@@ -882,7 +908,12 @@
   -> HsBindgen.Runtime.LibC.CSize
   -> IO HsBindgen.Runtime.LibC.CSize
 hs_bindgen_04c1c6ca873e76fc =
-  BG.fromFFIType hs_bindgen_04c1c6ca873e76fc_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_04c1c6ca873e76fc_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Read from a data source.
 --
@@ -922,8 +953,8 @@
   hs_bindgen_ec9c16b5e587afb8_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word64
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO HsBindgen.Runtime.LibC.CSize
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_WriteIO@
 hs_bindgen_ec9c16b5e587afb8
@@ -932,7 +963,12 @@
   -> HsBindgen.Runtime.LibC.CSize
   -> IO HsBindgen.Runtime.LibC.CSize
 hs_bindgen_ec9c16b5e587afb8 =
-  BG.fromFFIType hs_bindgen_ec9c16b5e587afb8_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_ec9c16b5e587afb8_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Write to an 'SDL_IOStream' data stream.
 --
@@ -973,14 +1009,15 @@
 foreign import ccall safe "hs_bindgen_bbb89fd7a1a95596"
   hs_bindgen_bbb89fd7a1a95596_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_FlushIO@
 hs_bindgen_bbb89fd7a1a95596
   :: BG.Ptr SDL_IOStream
   -> IO BG.CBool
 hs_bindgen_bbb89fd7a1a95596 =
-  BG.fromFFIType hs_bindgen_bbb89fd7a1a95596_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_bbb89fd7a1a95596_base (BG.toFFIType x0))
 
 -- | Flush any buffered data in the stream.
 --
@@ -1008,7 +1045,7 @@
   hs_bindgen_8fefdb56bfbc407b_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word8
+    -> BG.CBool
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_LoadFile_IO@
@@ -1018,7 +1055,12 @@
   -> BG.CBool
   -> IO (BG.Ptr BG.Void)
 hs_bindgen_8fefdb56bfbc407b =
-  BG.fromFFIType hs_bindgen_8fefdb56bfbc407b_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_8fefdb56bfbc407b_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Load all the data from an SDL data stream.
 --
@@ -1064,7 +1106,9 @@
   -> BG.Ptr HsBindgen.Runtime.LibC.CSize
   -> IO (BG.Ptr BG.Void)
 hs_bindgen_3ffc176218094904 =
-  BG.fromFFIType hs_bindgen_3ffc176218094904_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_3ffc176218094904_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Load all the data from a file path.
 --
@@ -1098,9 +1142,9 @@
   hs_bindgen_ee2bf39575dd56cd_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> BG.Word8
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.CSize
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_SaveFile_IO@
 hs_bindgen_ee2bf39575dd56cd
@@ -1110,7 +1154,18 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_ee2bf39575dd56cd =
-  BG.fromFFIType hs_bindgen_ee2bf39575dd56cd_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_ee2bf39575dd56cd_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Save all the data into an SDL data stream.
 --
@@ -1148,8 +1203,8 @@
   hs_bindgen_1157ae79ba240b92_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_SaveFile@
 hs_bindgen_1157ae79ba240b92
@@ -1158,7 +1213,12 @@
   -> HsBindgen.Runtime.LibC.CSize
   -> IO BG.CBool
 hs_bindgen_1157ae79ba240b92 =
-  BG.fromFFIType hs_bindgen_1157ae79ba240b92_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_1157ae79ba240b92_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Save all the data into a file path.
 --
@@ -1192,7 +1252,7 @@
   hs_bindgen_9458dbc19d3102af_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_ReadU8@
 hs_bindgen_9458dbc19d3102af
@@ -1200,7 +1260,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO BG.CBool
 hs_bindgen_9458dbc19d3102af =
-  BG.fromFFIType hs_bindgen_9458dbc19d3102af_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_9458dbc19d3102af_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to read a byte from an 'SDL_IOStream'.
 --
@@ -1230,7 +1292,7 @@
   hs_bindgen_9ef691b554f38735_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_ReadS8@
 hs_bindgen_9ef691b554f38735
@@ -1238,7 +1300,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Sint8
   -> IO BG.CBool
 hs_bindgen_9ef691b554f38735 =
-  BG.fromFFIType hs_bindgen_9ef691b554f38735_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_9ef691b554f38735_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to read a signed byte from an 'SDL_IOStream'.
 --
@@ -1268,7 +1332,7 @@
   hs_bindgen_312b11f2676e3c2f_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_ReadU16LE@
 hs_bindgen_312b11f2676e3c2f
@@ -1276,7 +1340,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint16
   -> IO BG.CBool
 hs_bindgen_312b11f2676e3c2f =
-  BG.fromFFIType hs_bindgen_312b11f2676e3c2f_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_312b11f2676e3c2f_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to read 16 bits of little-endian data from an 'SDL_IOStream' and return in native format.
 --
@@ -1308,7 +1374,7 @@
   hs_bindgen_bfc3c7dd523a2b73_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_ReadS16LE@
 hs_bindgen_bfc3c7dd523a2b73
@@ -1316,7 +1382,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Sint16
   -> IO BG.CBool
 hs_bindgen_bfc3c7dd523a2b73 =
-  BG.fromFFIType hs_bindgen_bfc3c7dd523a2b73_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_bfc3c7dd523a2b73_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to read 16 bits of little-endian data from an 'SDL_IOStream' and return in native format.
 --
@@ -1348,7 +1416,7 @@
   hs_bindgen_9b3b157e729c0965_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_ReadU16BE@
 hs_bindgen_9b3b157e729c0965
@@ -1356,7 +1424,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint16
   -> IO BG.CBool
 hs_bindgen_9b3b157e729c0965 =
-  BG.fromFFIType hs_bindgen_9b3b157e729c0965_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_9b3b157e729c0965_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to read 16 bits of big-endian data from an 'SDL_IOStream' and return in native format.
 --
@@ -1388,7 +1458,7 @@
   hs_bindgen_53f6414a33954d51_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_ReadS16BE@
 hs_bindgen_53f6414a33954d51
@@ -1396,7 +1466,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Sint16
   -> IO BG.CBool
 hs_bindgen_53f6414a33954d51 =
-  BG.fromFFIType hs_bindgen_53f6414a33954d51_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_53f6414a33954d51_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to read 16 bits of big-endian data from an 'SDL_IOStream' and return in native format.
 --
@@ -1428,7 +1500,7 @@
   hs_bindgen_cf9bb68f7e8594b1_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_ReadU32LE@
 hs_bindgen_cf9bb68f7e8594b1
@@ -1436,7 +1508,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_cf9bb68f7e8594b1 =
-  BG.fromFFIType hs_bindgen_cf9bb68f7e8594b1_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_cf9bb68f7e8594b1_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to read 32 bits of little-endian data from an 'SDL_IOStream' and return in native format.
 --
@@ -1468,7 +1542,7 @@
   hs_bindgen_e2c2855a2483a810_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_ReadS32LE@
 hs_bindgen_e2c2855a2483a810
@@ -1476,7 +1550,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Sint32
   -> IO BG.CBool
 hs_bindgen_e2c2855a2483a810 =
-  BG.fromFFIType hs_bindgen_e2c2855a2483a810_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_e2c2855a2483a810_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to read 32 bits of little-endian data from an 'SDL_IOStream' and return in native format.
 --
@@ -1508,7 +1584,7 @@
   hs_bindgen_8cce948b1185d898_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_ReadU32BE@
 hs_bindgen_8cce948b1185d898
@@ -1516,7 +1592,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_8cce948b1185d898 =
-  BG.fromFFIType hs_bindgen_8cce948b1185d898_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_8cce948b1185d898_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to read 32 bits of big-endian data from an 'SDL_IOStream' and return in native format.
 --
@@ -1548,7 +1626,7 @@
   hs_bindgen_74529309d09c0236_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_ReadS32BE@
 hs_bindgen_74529309d09c0236
@@ -1556,7 +1634,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Sint32
   -> IO BG.CBool
 hs_bindgen_74529309d09c0236 =
-  BG.fromFFIType hs_bindgen_74529309d09c0236_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_74529309d09c0236_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to read 32 bits of big-endian data from an 'SDL_IOStream' and return in native format.
 --
@@ -1588,7 +1668,7 @@
   hs_bindgen_a50de42944661366_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_ReadU64LE@
 hs_bindgen_a50de42944661366
@@ -1596,7 +1676,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint64
   -> IO BG.CBool
 hs_bindgen_a50de42944661366 =
-  BG.fromFFIType hs_bindgen_a50de42944661366_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_a50de42944661366_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to read 64 bits of little-endian data from an 'SDL_IOStream' and return in native format.
 --
@@ -1628,7 +1710,7 @@
   hs_bindgen_5dc23c0193ff348f_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_ReadS64LE@
 hs_bindgen_5dc23c0193ff348f
@@ -1636,7 +1718,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Sint64
   -> IO BG.CBool
 hs_bindgen_5dc23c0193ff348f =
-  BG.fromFFIType hs_bindgen_5dc23c0193ff348f_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_5dc23c0193ff348f_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to read 64 bits of little-endian data from an 'SDL_IOStream' and return in native format.
 --
@@ -1668,7 +1752,7 @@
   hs_bindgen_5c7313fe19df3bc5_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_ReadU64BE@
 hs_bindgen_5c7313fe19df3bc5
@@ -1676,7 +1760,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint64
   -> IO BG.CBool
 hs_bindgen_5c7313fe19df3bc5 =
-  BG.fromFFIType hs_bindgen_5c7313fe19df3bc5_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_5c7313fe19df3bc5_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to read 64 bits of big-endian data from an 'SDL_IOStream' and return in native format.
 --
@@ -1708,7 +1794,7 @@
   hs_bindgen_77cc43bf1b465b08_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_ReadS64BE@
 hs_bindgen_77cc43bf1b465b08
@@ -1716,7 +1802,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Sint64
   -> IO BG.CBool
 hs_bindgen_77cc43bf1b465b08 =
-  BG.fromFFIType hs_bindgen_77cc43bf1b465b08_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_77cc43bf1b465b08_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to read 64 bits of big-endian data from an 'SDL_IOStream' and return in native format.
 --
@@ -1747,8 +1835,8 @@
 foreign import ccall safe "hs_bindgen_06be6eeabea4ef7e"
   hs_bindgen_06be6eeabea4ef7e_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_WriteU8@
 hs_bindgen_06be6eeabea4ef7e
@@ -1756,7 +1844,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO BG.CBool
 hs_bindgen_06be6eeabea4ef7e =
-  BG.fromFFIType hs_bindgen_06be6eeabea4ef7e_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_06be6eeabea4ef7e_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to write a byte to an 'SDL_IOStream'.
 --
@@ -1783,8 +1873,8 @@
 foreign import ccall safe "hs_bindgen_b7f1551a531fd2e5"
   hs_bindgen_b7f1551a531fd2e5_base
     :: BG.Ptr BG.Void
-    -> BG.Int8
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Int8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_WriteS8@
 hs_bindgen_b7f1551a531fd2e5
@@ -1792,7 +1882,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Sint8
   -> IO BG.CBool
 hs_bindgen_b7f1551a531fd2e5 =
-  BG.fromFFIType hs_bindgen_b7f1551a531fd2e5_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_b7f1551a531fd2e5_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to write a signed byte to an 'SDL_IOStream'.
 --
@@ -1819,8 +1911,8 @@
 foreign import ccall safe "hs_bindgen_dc258899c026cf6f"
   hs_bindgen_dc258899c026cf6f_base
     :: BG.Ptr BG.Void
-    -> BG.Word16
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word16
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_WriteU16LE@
 hs_bindgen_dc258899c026cf6f
@@ -1828,7 +1920,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint16
   -> IO BG.CBool
 hs_bindgen_dc258899c026cf6f =
-  BG.fromFFIType hs_bindgen_dc258899c026cf6f_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_dc258899c026cf6f_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to write 16 bits in native format to an 'SDL_IOStream' as little-endian data.
 --
@@ -1857,8 +1951,8 @@
 foreign import ccall safe "hs_bindgen_a1111b4c96df3259"
   hs_bindgen_a1111b4c96df3259_base
     :: BG.Ptr BG.Void
-    -> BG.Int16
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Int16
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_WriteS16LE@
 hs_bindgen_a1111b4c96df3259
@@ -1866,7 +1960,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Sint16
   -> IO BG.CBool
 hs_bindgen_a1111b4c96df3259 =
-  BG.fromFFIType hs_bindgen_a1111b4c96df3259_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_a1111b4c96df3259_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to write 16 bits in native format to an 'SDL_IOStream' as little-endian data.
 --
@@ -1895,8 +1991,8 @@
 foreign import ccall safe "hs_bindgen_a4cb3983fa64c5c7"
   hs_bindgen_a4cb3983fa64c5c7_base
     :: BG.Ptr BG.Void
-    -> BG.Word16
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word16
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_WriteU16BE@
 hs_bindgen_a4cb3983fa64c5c7
@@ -1904,7 +2000,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint16
   -> IO BG.CBool
 hs_bindgen_a4cb3983fa64c5c7 =
-  BG.fromFFIType hs_bindgen_a4cb3983fa64c5c7_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_a4cb3983fa64c5c7_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to write 16 bits in native format to an 'SDL_IOStream' as big-endian data.
 --
@@ -1933,8 +2031,8 @@
 foreign import ccall safe "hs_bindgen_161a5c3e908403a2"
   hs_bindgen_161a5c3e908403a2_base
     :: BG.Ptr BG.Void
-    -> BG.Int16
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Int16
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_WriteS16BE@
 hs_bindgen_161a5c3e908403a2
@@ -1942,7 +2040,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Sint16
   -> IO BG.CBool
 hs_bindgen_161a5c3e908403a2 =
-  BG.fromFFIType hs_bindgen_161a5c3e908403a2_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_161a5c3e908403a2_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to write 16 bits in native format to an 'SDL_IOStream' as big-endian data.
 --
@@ -1971,8 +2071,8 @@
 foreign import ccall safe "hs_bindgen_ae468e82155587e1"
   hs_bindgen_ae468e82155587e1_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_WriteU32LE@
 hs_bindgen_ae468e82155587e1
@@ -1980,7 +2080,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_ae468e82155587e1 =
-  BG.fromFFIType hs_bindgen_ae468e82155587e1_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_ae468e82155587e1_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to write 32 bits in native format to an 'SDL_IOStream' as little-endian data.
 --
@@ -2009,8 +2111,8 @@
 foreign import ccall safe "hs_bindgen_175539b403c6fd0c"
   hs_bindgen_175539b403c6fd0c_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Int32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_WriteS32LE@
 hs_bindgen_175539b403c6fd0c
@@ -2018,7 +2120,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Sint32
   -> IO BG.CBool
 hs_bindgen_175539b403c6fd0c =
-  BG.fromFFIType hs_bindgen_175539b403c6fd0c_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_175539b403c6fd0c_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to write 32 bits in native format to an 'SDL_IOStream' as little-endian data.
 --
@@ -2047,8 +2151,8 @@
 foreign import ccall safe "hs_bindgen_f6e00995ced904a6"
   hs_bindgen_f6e00995ced904a6_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_WriteU32BE@
 hs_bindgen_f6e00995ced904a6
@@ -2056,7 +2160,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_f6e00995ced904a6 =
-  BG.fromFFIType hs_bindgen_f6e00995ced904a6_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_f6e00995ced904a6_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to write 32 bits in native format to an 'SDL_IOStream' as big-endian data.
 --
@@ -2085,8 +2191,8 @@
 foreign import ccall safe "hs_bindgen_7986b77b455fd8d4"
   hs_bindgen_7986b77b455fd8d4_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Int32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_WriteS32BE@
 hs_bindgen_7986b77b455fd8d4
@@ -2094,7 +2200,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Sint32
   -> IO BG.CBool
 hs_bindgen_7986b77b455fd8d4 =
-  BG.fromFFIType hs_bindgen_7986b77b455fd8d4_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_7986b77b455fd8d4_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to write 32 bits in native format to an 'SDL_IOStream' as big-endian data.
 --
@@ -2123,8 +2231,8 @@
 foreign import ccall safe "hs_bindgen_065f64617e3e327c"
   hs_bindgen_065f64617e3e327c_base
     :: BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word64
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_WriteU64LE@
 hs_bindgen_065f64617e3e327c
@@ -2132,7 +2240,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint64
   -> IO BG.CBool
 hs_bindgen_065f64617e3e327c =
-  BG.fromFFIType hs_bindgen_065f64617e3e327c_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_065f64617e3e327c_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to write 64 bits in native format to an 'SDL_IOStream' as little-endian data.
 --
@@ -2161,8 +2271,8 @@
 foreign import ccall safe "hs_bindgen_846e3f81a5b9c657"
   hs_bindgen_846e3f81a5b9c657_base
     :: BG.Ptr BG.Void
-    -> BG.Int64
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Int64
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_WriteS64LE@
 hs_bindgen_846e3f81a5b9c657
@@ -2170,7 +2280,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Sint64
   -> IO BG.CBool
 hs_bindgen_846e3f81a5b9c657 =
-  BG.fromFFIType hs_bindgen_846e3f81a5b9c657_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_846e3f81a5b9c657_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to write 64 bits in native format to an 'SDL_IOStream' as little-endian data.
 --
@@ -2199,8 +2311,8 @@
 foreign import ccall safe "hs_bindgen_8f9d3f23bd1a20e7"
   hs_bindgen_8f9d3f23bd1a20e7_base
     :: BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word64
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_WriteU64BE@
 hs_bindgen_8f9d3f23bd1a20e7
@@ -2208,7 +2320,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint64
   -> IO BG.CBool
 hs_bindgen_8f9d3f23bd1a20e7 =
-  BG.fromFFIType hs_bindgen_8f9d3f23bd1a20e7_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_8f9d3f23bd1a20e7_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to write 64 bits in native format to an 'SDL_IOStream' as big-endian data.
 --
@@ -2237,8 +2351,8 @@
 foreign import ccall safe "hs_bindgen_ef095eaa3e7cb9b4"
   hs_bindgen_ef095eaa3e7cb9b4_base
     :: BG.Ptr BG.Void
-    -> BG.Int64
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Int64
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Safe_SDL_WriteS64BE@
 hs_bindgen_ef095eaa3e7cb9b4
@@ -2246,7 +2360,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Sint64
   -> IO BG.CBool
 hs_bindgen_ef095eaa3e7cb9b4 =
-  BG.fromFFIType hs_bindgen_ef095eaa3e7cb9b4_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_ef095eaa3e7cb9b4_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to write 64 bits in native format to an 'SDL_IOStream' as big-endian data.
 --
diff --git a/src/SDL3/Sys/Bindgen/Iostream/Unsafe.hs b/src/SDL3/Sys/Bindgen/Iostream/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Iostream/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Iostream/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Iostream.Unsafe (
@@ -52,6 +54,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
@@ -62,7 +66,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_iostream.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_iostream.h>"
          , "SDL_IOStream *hs_bindgen_8b8c09f1f05c3c68 ("
          , "  char const *arg1,"
          , "  char const *arg2"
@@ -400,7 +408,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO (BG.Ptr SDL_IOStream)
 hs_bindgen_8b8c09f1f05c3c68 =
-  BG.fromFFIType hs_bindgen_8b8c09f1f05c3c68_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_8b8c09f1f05c3c68_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to create a new 'SDL_IOStream' structure for reading from and\/or writing to a named file.
 --
@@ -467,7 +477,7 @@
 foreign import ccall unsafe "hs_bindgen_38dc0cd7a21f676a"
   hs_bindgen_38dc0cd7a21f676a_base
     :: BG.Ptr BG.Void
-    -> BG.Word64
+    -> HsBindgen.Runtime.LibC.CSize
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_IOFromMem@
@@ -476,7 +486,9 @@
   -> HsBindgen.Runtime.LibC.CSize
   -> IO (BG.Ptr SDL_IOStream)
 hs_bindgen_38dc0cd7a21f676a =
-  BG.fromFFIType hs_bindgen_38dc0cd7a21f676a_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_38dc0cd7a21f676a_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to prepare a read-write memory buffer for use with 'SDL_IOStream'.
 --
@@ -521,7 +533,7 @@
 foreign import ccall unsafe "hs_bindgen_7db7a44d6863f5af"
   hs_bindgen_7db7a44d6863f5af_base
     :: BG.Ptr BG.Void
-    -> BG.Word64
+    -> HsBindgen.Runtime.LibC.CSize
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_IOFromConstMem@
@@ -530,7 +542,9 @@
   -> HsBindgen.Runtime.LibC.CSize
   -> IO (BG.Ptr SDL_IOStream)
 hs_bindgen_7db7a44d6863f5af =
-  BG.fromFFIType hs_bindgen_7db7a44d6863f5af_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_7db7a44d6863f5af_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to prepare a read-only memory buffer for use with 'SDL_IOStream'.
 --
@@ -581,7 +595,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_IOFromDynamicMem@
 hs_bindgen_8b5a0a64dc4bfeed :: IO (BG.Ptr SDL_IOStream)
 hs_bindgen_8b5a0a64dc4bfeed =
-  BG.fromFFIType hs_bindgen_8b5a0a64dc4bfeed_base
+  fmap BG.fromFFIType hs_bindgen_8b5a0a64dc4bfeed_base
 
 -- | Use this function to create an 'SDL_IOStream' that is backed by dynamically allocated memory.
 --
@@ -616,7 +630,9 @@
   -> BG.Ptr BG.Void
   -> IO (BG.Ptr SDL_IOStream)
 hs_bindgen_5fcee53dabf5e4a5 =
-  BG.fromFFIType hs_bindgen_5fcee53dabf5e4a5_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_5fcee53dabf5e4a5_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Create a custom 'SDL_IOStream'.
 --
@@ -649,14 +665,15 @@
 foreign import ccall unsafe "hs_bindgen_c8ffca82bc3714ea"
   hs_bindgen_c8ffca82bc3714ea_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_CloseIO@
 hs_bindgen_c8ffca82bc3714ea
   :: BG.Ptr SDL_IOStream
   -> IO BG.CBool
 hs_bindgen_c8ffca82bc3714ea =
-  BG.fromFFIType hs_bindgen_c8ffca82bc3714ea_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c8ffca82bc3714ea_base (BG.toFFIType x0))
 
 -- | Close and free an allocated 'SDL_IOStream' structure.
 --
@@ -687,14 +704,15 @@
 foreign import ccall unsafe "hs_bindgen_c33e25d9e6f53535"
   hs_bindgen_c33e25d9e6f53535_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_GetIOProperties@
 hs_bindgen_c33e25d9e6f53535
   :: BG.Ptr SDL_IOStream
   -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
 hs_bindgen_c33e25d9e6f53535 =
-  BG.fromFFIType hs_bindgen_c33e25d9e6f53535_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c33e25d9e6f53535_base (BG.toFFIType x0))
 
 -- | Get the properties associated with an 'SDL_IOStream'.
 --
@@ -717,14 +735,15 @@
 foreign import ccall unsafe "hs_bindgen_2dadd7990de850df"
   hs_bindgen_2dadd7990de850df_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_GetIOStatus@
 hs_bindgen_2dadd7990de850df
   :: BG.Ptr SDL_IOStream
   -> IO SDL_IOStatus
 hs_bindgen_2dadd7990de850df =
-  BG.fromFFIType hs_bindgen_2dadd7990de850df_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_2dadd7990de850df_base (BG.toFFIType x0))
 
 -- | Query the stream status of an 'SDL_IOStream'.
 --
@@ -751,14 +770,15 @@
 foreign import ccall unsafe "hs_bindgen_001759e01a1dcb96"
   hs_bindgen_001759e01a1dcb96_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int64
+    -> IO HsBindgen.Runtime.LibC.Int64
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_GetIOSize@
 hs_bindgen_001759e01a1dcb96
   :: BG.Ptr SDL_IOStream
   -> IO SDL3.Sys.Bindgen.Stdinc.Sint64
 hs_bindgen_001759e01a1dcb96 =
-  BG.fromFFIType hs_bindgen_001759e01a1dcb96_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_001759e01a1dcb96_base (BG.toFFIType x0))
 
 -- | Use this function to get the size of the data stream in an 'SDL_IOStream'.
 --
@@ -781,9 +801,9 @@
 foreign import ccall unsafe "hs_bindgen_501f4e8bfb646025"
   hs_bindgen_501f4e8bfb646025_base
     :: BG.Ptr BG.Void
-    -> BG.Int64
-    -> BG.Word32
-    -> IO BG.Int64
+    -> HsBindgen.Runtime.LibC.Int64
+    -> BG.CUInt
+    -> IO HsBindgen.Runtime.LibC.Int64
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_SeekIO@
 hs_bindgen_501f4e8bfb646025
@@ -792,7 +812,12 @@
   -> SDL_IOWhence
   -> IO SDL3.Sys.Bindgen.Stdinc.Sint64
 hs_bindgen_501f4e8bfb646025 =
-  BG.fromFFIType hs_bindgen_501f4e8bfb646025_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_501f4e8bfb646025_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Seek within an 'SDL_IOStream' data stream.
 --
@@ -837,14 +862,15 @@
 foreign import ccall unsafe "hs_bindgen_c618e703fbe3da7e"
   hs_bindgen_c618e703fbe3da7e_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int64
+    -> IO HsBindgen.Runtime.LibC.Int64
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_TellIO@
 hs_bindgen_c618e703fbe3da7e
   :: BG.Ptr SDL_IOStream
   -> IO SDL3.Sys.Bindgen.Stdinc.Sint64
 hs_bindgen_c618e703fbe3da7e =
-  BG.fromFFIType hs_bindgen_c618e703fbe3da7e_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c618e703fbe3da7e_base (BG.toFFIType x0))
 
 -- | Determine the current read\/write offset in an 'SDL_IOStream' data stream.
 --
@@ -872,8 +898,8 @@
   hs_bindgen_23496bbdb54b0e23_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word64
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO HsBindgen.Runtime.LibC.CSize
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_ReadIO@
 hs_bindgen_23496bbdb54b0e23
@@ -882,7 +908,12 @@
   -> HsBindgen.Runtime.LibC.CSize
   -> IO HsBindgen.Runtime.LibC.CSize
 hs_bindgen_23496bbdb54b0e23 =
-  BG.fromFFIType hs_bindgen_23496bbdb54b0e23_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_23496bbdb54b0e23_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Read from a data source.
 --
@@ -922,8 +953,8 @@
   hs_bindgen_2b2fc1036073bd5d_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word64
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO HsBindgen.Runtime.LibC.CSize
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_WriteIO@
 hs_bindgen_2b2fc1036073bd5d
@@ -932,7 +963,12 @@
   -> HsBindgen.Runtime.LibC.CSize
   -> IO HsBindgen.Runtime.LibC.CSize
 hs_bindgen_2b2fc1036073bd5d =
-  BG.fromFFIType hs_bindgen_2b2fc1036073bd5d_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_2b2fc1036073bd5d_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Write to an 'SDL_IOStream' data stream.
 --
@@ -973,14 +1009,15 @@
 foreign import ccall unsafe "hs_bindgen_1bf3de05eea73b47"
   hs_bindgen_1bf3de05eea73b47_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_FlushIO@
 hs_bindgen_1bf3de05eea73b47
   :: BG.Ptr SDL_IOStream
   -> IO BG.CBool
 hs_bindgen_1bf3de05eea73b47 =
-  BG.fromFFIType hs_bindgen_1bf3de05eea73b47_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_1bf3de05eea73b47_base (BG.toFFIType x0))
 
 -- | Flush any buffered data in the stream.
 --
@@ -1008,7 +1045,7 @@
   hs_bindgen_8acc89fe9bbc77ba_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word8
+    -> BG.CBool
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_LoadFile_IO@
@@ -1018,7 +1055,12 @@
   -> BG.CBool
   -> IO (BG.Ptr BG.Void)
 hs_bindgen_8acc89fe9bbc77ba =
-  BG.fromFFIType hs_bindgen_8acc89fe9bbc77ba_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_8acc89fe9bbc77ba_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Load all the data from an SDL data stream.
 --
@@ -1064,7 +1106,9 @@
   -> BG.Ptr HsBindgen.Runtime.LibC.CSize
   -> IO (BG.Ptr BG.Void)
 hs_bindgen_2ff49a3a9a587592 =
-  BG.fromFFIType hs_bindgen_2ff49a3a9a587592_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_2ff49a3a9a587592_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Load all the data from a file path.
 --
@@ -1098,9 +1142,9 @@
   hs_bindgen_cc427af5b7d6a992_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> BG.Word8
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.CSize
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_SaveFile_IO@
 hs_bindgen_cc427af5b7d6a992
@@ -1110,7 +1154,18 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_cc427af5b7d6a992 =
-  BG.fromFFIType hs_bindgen_cc427af5b7d6a992_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_cc427af5b7d6a992_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Save all the data into an SDL data stream.
 --
@@ -1148,8 +1203,8 @@
   hs_bindgen_ffc2a22709d13ea5_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_SaveFile@
 hs_bindgen_ffc2a22709d13ea5
@@ -1158,7 +1213,12 @@
   -> HsBindgen.Runtime.LibC.CSize
   -> IO BG.CBool
 hs_bindgen_ffc2a22709d13ea5 =
-  BG.fromFFIType hs_bindgen_ffc2a22709d13ea5_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_ffc2a22709d13ea5_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Save all the data into a file path.
 --
@@ -1192,7 +1252,7 @@
   hs_bindgen_b1b1e0a90daf22ef_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_ReadU8@
 hs_bindgen_b1b1e0a90daf22ef
@@ -1200,7 +1260,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO BG.CBool
 hs_bindgen_b1b1e0a90daf22ef =
-  BG.fromFFIType hs_bindgen_b1b1e0a90daf22ef_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_b1b1e0a90daf22ef_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to read a byte from an 'SDL_IOStream'.
 --
@@ -1230,7 +1292,7 @@
   hs_bindgen_e87d63e49d240616_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_ReadS8@
 hs_bindgen_e87d63e49d240616
@@ -1238,7 +1300,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Sint8
   -> IO BG.CBool
 hs_bindgen_e87d63e49d240616 =
-  BG.fromFFIType hs_bindgen_e87d63e49d240616_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_e87d63e49d240616_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to read a signed byte from an 'SDL_IOStream'.
 --
@@ -1268,7 +1332,7 @@
   hs_bindgen_d3e2c7a83368733b_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_ReadU16LE@
 hs_bindgen_d3e2c7a83368733b
@@ -1276,7 +1340,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint16
   -> IO BG.CBool
 hs_bindgen_d3e2c7a83368733b =
-  BG.fromFFIType hs_bindgen_d3e2c7a83368733b_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_d3e2c7a83368733b_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to read 16 bits of little-endian data from an 'SDL_IOStream' and return in native format.
 --
@@ -1308,7 +1374,7 @@
   hs_bindgen_479681c9d7efb4b6_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_ReadS16LE@
 hs_bindgen_479681c9d7efb4b6
@@ -1316,7 +1382,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Sint16
   -> IO BG.CBool
 hs_bindgen_479681c9d7efb4b6 =
-  BG.fromFFIType hs_bindgen_479681c9d7efb4b6_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_479681c9d7efb4b6_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to read 16 bits of little-endian data from an 'SDL_IOStream' and return in native format.
 --
@@ -1348,7 +1416,7 @@
   hs_bindgen_9f0f6b734c649005_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_ReadU16BE@
 hs_bindgen_9f0f6b734c649005
@@ -1356,7 +1424,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint16
   -> IO BG.CBool
 hs_bindgen_9f0f6b734c649005 =
-  BG.fromFFIType hs_bindgen_9f0f6b734c649005_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_9f0f6b734c649005_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to read 16 bits of big-endian data from an 'SDL_IOStream' and return in native format.
 --
@@ -1388,7 +1458,7 @@
   hs_bindgen_f2e57f79f83f7ccb_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_ReadS16BE@
 hs_bindgen_f2e57f79f83f7ccb
@@ -1396,7 +1466,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Sint16
   -> IO BG.CBool
 hs_bindgen_f2e57f79f83f7ccb =
-  BG.fromFFIType hs_bindgen_f2e57f79f83f7ccb_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_f2e57f79f83f7ccb_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to read 16 bits of big-endian data from an 'SDL_IOStream' and return in native format.
 --
@@ -1428,7 +1500,7 @@
   hs_bindgen_4c7ed5f362c69100_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_ReadU32LE@
 hs_bindgen_4c7ed5f362c69100
@@ -1436,7 +1508,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_4c7ed5f362c69100 =
-  BG.fromFFIType hs_bindgen_4c7ed5f362c69100_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_4c7ed5f362c69100_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to read 32 bits of little-endian data from an 'SDL_IOStream' and return in native format.
 --
@@ -1468,7 +1542,7 @@
   hs_bindgen_6817084863d4f803_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_ReadS32LE@
 hs_bindgen_6817084863d4f803
@@ -1476,7 +1550,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Sint32
   -> IO BG.CBool
 hs_bindgen_6817084863d4f803 =
-  BG.fromFFIType hs_bindgen_6817084863d4f803_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_6817084863d4f803_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to read 32 bits of little-endian data from an 'SDL_IOStream' and return in native format.
 --
@@ -1508,7 +1584,7 @@
   hs_bindgen_a689b6518018f0f8_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_ReadU32BE@
 hs_bindgen_a689b6518018f0f8
@@ -1516,7 +1592,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_a689b6518018f0f8 =
-  BG.fromFFIType hs_bindgen_a689b6518018f0f8_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_a689b6518018f0f8_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to read 32 bits of big-endian data from an 'SDL_IOStream' and return in native format.
 --
@@ -1548,7 +1626,7 @@
   hs_bindgen_8803a44bce7c7e75_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_ReadS32BE@
 hs_bindgen_8803a44bce7c7e75
@@ -1556,7 +1634,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Sint32
   -> IO BG.CBool
 hs_bindgen_8803a44bce7c7e75 =
-  BG.fromFFIType hs_bindgen_8803a44bce7c7e75_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_8803a44bce7c7e75_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to read 32 bits of big-endian data from an 'SDL_IOStream' and return in native format.
 --
@@ -1588,7 +1668,7 @@
   hs_bindgen_e3dd1a0b9ab72b6e_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_ReadU64LE@
 hs_bindgen_e3dd1a0b9ab72b6e
@@ -1596,7 +1676,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint64
   -> IO BG.CBool
 hs_bindgen_e3dd1a0b9ab72b6e =
-  BG.fromFFIType hs_bindgen_e3dd1a0b9ab72b6e_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_e3dd1a0b9ab72b6e_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to read 64 bits of little-endian data from an 'SDL_IOStream' and return in native format.
 --
@@ -1628,7 +1710,7 @@
   hs_bindgen_ad567c6f2b1bd0a7_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_ReadS64LE@
 hs_bindgen_ad567c6f2b1bd0a7
@@ -1636,7 +1718,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Sint64
   -> IO BG.CBool
 hs_bindgen_ad567c6f2b1bd0a7 =
-  BG.fromFFIType hs_bindgen_ad567c6f2b1bd0a7_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_ad567c6f2b1bd0a7_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to read 64 bits of little-endian data from an 'SDL_IOStream' and return in native format.
 --
@@ -1668,7 +1752,7 @@
   hs_bindgen_2e71cf93b76724a0_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_ReadU64BE@
 hs_bindgen_2e71cf93b76724a0
@@ -1676,7 +1760,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint64
   -> IO BG.CBool
 hs_bindgen_2e71cf93b76724a0 =
-  BG.fromFFIType hs_bindgen_2e71cf93b76724a0_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_2e71cf93b76724a0_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to read 64 bits of big-endian data from an 'SDL_IOStream' and return in native format.
 --
@@ -1708,7 +1794,7 @@
   hs_bindgen_95ecf77ce8aa6634_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_ReadS64BE@
 hs_bindgen_95ecf77ce8aa6634
@@ -1716,7 +1802,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Sint64
   -> IO BG.CBool
 hs_bindgen_95ecf77ce8aa6634 =
-  BG.fromFFIType hs_bindgen_95ecf77ce8aa6634_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_95ecf77ce8aa6634_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to read 64 bits of big-endian data from an 'SDL_IOStream' and return in native format.
 --
@@ -1747,8 +1835,8 @@
 foreign import ccall unsafe "hs_bindgen_054c3110f978dbc5"
   hs_bindgen_054c3110f978dbc5_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_WriteU8@
 hs_bindgen_054c3110f978dbc5
@@ -1756,7 +1844,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO BG.CBool
 hs_bindgen_054c3110f978dbc5 =
-  BG.fromFFIType hs_bindgen_054c3110f978dbc5_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_054c3110f978dbc5_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to write a byte to an 'SDL_IOStream'.
 --
@@ -1783,8 +1873,8 @@
 foreign import ccall unsafe "hs_bindgen_d0a9827894815b9e"
   hs_bindgen_d0a9827894815b9e_base
     :: BG.Ptr BG.Void
-    -> BG.Int8
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Int8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_WriteS8@
 hs_bindgen_d0a9827894815b9e
@@ -1792,7 +1882,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Sint8
   -> IO BG.CBool
 hs_bindgen_d0a9827894815b9e =
-  BG.fromFFIType hs_bindgen_d0a9827894815b9e_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_d0a9827894815b9e_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to write a signed byte to an 'SDL_IOStream'.
 --
@@ -1819,8 +1911,8 @@
 foreign import ccall unsafe "hs_bindgen_197d92df5116e339"
   hs_bindgen_197d92df5116e339_base
     :: BG.Ptr BG.Void
-    -> BG.Word16
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word16
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_WriteU16LE@
 hs_bindgen_197d92df5116e339
@@ -1828,7 +1920,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint16
   -> IO BG.CBool
 hs_bindgen_197d92df5116e339 =
-  BG.fromFFIType hs_bindgen_197d92df5116e339_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_197d92df5116e339_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to write 16 bits in native format to an 'SDL_IOStream' as little-endian data.
 --
@@ -1857,8 +1951,8 @@
 foreign import ccall unsafe "hs_bindgen_6bf86c914d8f27c9"
   hs_bindgen_6bf86c914d8f27c9_base
     :: BG.Ptr BG.Void
-    -> BG.Int16
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Int16
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_WriteS16LE@
 hs_bindgen_6bf86c914d8f27c9
@@ -1866,7 +1960,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Sint16
   -> IO BG.CBool
 hs_bindgen_6bf86c914d8f27c9 =
-  BG.fromFFIType hs_bindgen_6bf86c914d8f27c9_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_6bf86c914d8f27c9_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to write 16 bits in native format to an 'SDL_IOStream' as little-endian data.
 --
@@ -1895,8 +1991,8 @@
 foreign import ccall unsafe "hs_bindgen_22ad038fcf74bfca"
   hs_bindgen_22ad038fcf74bfca_base
     :: BG.Ptr BG.Void
-    -> BG.Word16
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word16
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_WriteU16BE@
 hs_bindgen_22ad038fcf74bfca
@@ -1904,7 +2000,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint16
   -> IO BG.CBool
 hs_bindgen_22ad038fcf74bfca =
-  BG.fromFFIType hs_bindgen_22ad038fcf74bfca_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_22ad038fcf74bfca_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to write 16 bits in native format to an 'SDL_IOStream' as big-endian data.
 --
@@ -1933,8 +2031,8 @@
 foreign import ccall unsafe "hs_bindgen_3a1b7a64deee39d0"
   hs_bindgen_3a1b7a64deee39d0_base
     :: BG.Ptr BG.Void
-    -> BG.Int16
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Int16
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_WriteS16BE@
 hs_bindgen_3a1b7a64deee39d0
@@ -1942,7 +2040,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Sint16
   -> IO BG.CBool
 hs_bindgen_3a1b7a64deee39d0 =
-  BG.fromFFIType hs_bindgen_3a1b7a64deee39d0_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_3a1b7a64deee39d0_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to write 16 bits in native format to an 'SDL_IOStream' as big-endian data.
 --
@@ -1971,8 +2071,8 @@
 foreign import ccall unsafe "hs_bindgen_e3779860ffb0e190"
   hs_bindgen_e3779860ffb0e190_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_WriteU32LE@
 hs_bindgen_e3779860ffb0e190
@@ -1980,7 +2080,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_e3779860ffb0e190 =
-  BG.fromFFIType hs_bindgen_e3779860ffb0e190_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_e3779860ffb0e190_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to write 32 bits in native format to an 'SDL_IOStream' as little-endian data.
 --
@@ -2009,8 +2111,8 @@
 foreign import ccall unsafe "hs_bindgen_3b943b45962d4109"
   hs_bindgen_3b943b45962d4109_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Int32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_WriteS32LE@
 hs_bindgen_3b943b45962d4109
@@ -2018,7 +2120,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Sint32
   -> IO BG.CBool
 hs_bindgen_3b943b45962d4109 =
-  BG.fromFFIType hs_bindgen_3b943b45962d4109_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_3b943b45962d4109_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to write 32 bits in native format to an 'SDL_IOStream' as little-endian data.
 --
@@ -2047,8 +2151,8 @@
 foreign import ccall unsafe "hs_bindgen_88b11c56e4dcdce7"
   hs_bindgen_88b11c56e4dcdce7_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_WriteU32BE@
 hs_bindgen_88b11c56e4dcdce7
@@ -2056,7 +2160,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_88b11c56e4dcdce7 =
-  BG.fromFFIType hs_bindgen_88b11c56e4dcdce7_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_88b11c56e4dcdce7_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to write 32 bits in native format to an 'SDL_IOStream' as big-endian data.
 --
@@ -2085,8 +2191,8 @@
 foreign import ccall unsafe "hs_bindgen_8f32aca42f3f9abc"
   hs_bindgen_8f32aca42f3f9abc_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Int32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_WriteS32BE@
 hs_bindgen_8f32aca42f3f9abc
@@ -2094,7 +2200,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Sint32
   -> IO BG.CBool
 hs_bindgen_8f32aca42f3f9abc =
-  BG.fromFFIType hs_bindgen_8f32aca42f3f9abc_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_8f32aca42f3f9abc_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to write 32 bits in native format to an 'SDL_IOStream' as big-endian data.
 --
@@ -2123,8 +2231,8 @@
 foreign import ccall unsafe "hs_bindgen_5b5ed260c10314c5"
   hs_bindgen_5b5ed260c10314c5_base
     :: BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word64
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_WriteU64LE@
 hs_bindgen_5b5ed260c10314c5
@@ -2132,7 +2240,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint64
   -> IO BG.CBool
 hs_bindgen_5b5ed260c10314c5 =
-  BG.fromFFIType hs_bindgen_5b5ed260c10314c5_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_5b5ed260c10314c5_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to write 64 bits in native format to an 'SDL_IOStream' as little-endian data.
 --
@@ -2161,8 +2271,8 @@
 foreign import ccall unsafe "hs_bindgen_6b0d99f99a1f8f14"
   hs_bindgen_6b0d99f99a1f8f14_base
     :: BG.Ptr BG.Void
-    -> BG.Int64
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Int64
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_WriteS64LE@
 hs_bindgen_6b0d99f99a1f8f14
@@ -2170,7 +2280,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Sint64
   -> IO BG.CBool
 hs_bindgen_6b0d99f99a1f8f14 =
-  BG.fromFFIType hs_bindgen_6b0d99f99a1f8f14_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_6b0d99f99a1f8f14_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to write 64 bits in native format to an 'SDL_IOStream' as little-endian data.
 --
@@ -2199,8 +2311,8 @@
 foreign import ccall unsafe "hs_bindgen_8d6f10b5ca6caad3"
   hs_bindgen_8d6f10b5ca6caad3_base
     :: BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word64
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_WriteU64BE@
 hs_bindgen_8d6f10b5ca6caad3
@@ -2208,7 +2320,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint64
   -> IO BG.CBool
 hs_bindgen_8d6f10b5ca6caad3 =
-  BG.fromFFIType hs_bindgen_8d6f10b5ca6caad3_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_8d6f10b5ca6caad3_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to write 64 bits in native format to an 'SDL_IOStream' as big-endian data.
 --
@@ -2237,8 +2351,8 @@
 foreign import ccall unsafe "hs_bindgen_50adbb19351b1adb"
   hs_bindgen_50adbb19351b1adb_base
     :: BG.Ptr BG.Void
-    -> BG.Int64
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Int64
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Iostream_Unsafe_SDL_WriteS64BE@
 hs_bindgen_50adbb19351b1adb
@@ -2246,7 +2360,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Sint64
   -> IO BG.CBool
 hs_bindgen_50adbb19351b1adb =
-  BG.fromFFIType hs_bindgen_50adbb19351b1adb_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_50adbb19351b1adb_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Use this function to write 64 bits in native format to an 'SDL_IOStream' as big-endian data.
 --
diff --git a/src/SDL3/Sys/Bindgen/IostreamShims/FunPtr.hs b/src/SDL3/Sys/Bindgen/IostreamShims/FunPtr.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/IostreamShims/FunPtr.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.IostreamShims.FunPtr (
+  SDL3.Sys.Bindgen.IostreamShims.FunPtr.lithon_SDL_IOprintf,
+)
+where
+
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
+import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+import SDL3.Sys.Bindgen.Iostream qualified
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <sdl3-bindgen-sys/SDL_iostream_shims.h>"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.IostreamShims_get_lithon_SDL_IOprintf */"
+         , "__attribute__ ((const))"
+         , "size_t (*hs_bindgen_d032484c29c37b48 (void)) ("
+         , "  SDL_IOStream *arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_IOprintf;"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.IostreamShims_get_lithon_SDL_IOprintf@
+foreign import ccall unsafe "hs_bindgen_d032484c29c37b48"
+  hs_bindgen_d032484c29c37b48_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.IostreamShims_get_lithon_SDL_IOprintf@
+hs_bindgen_d032484c29c37b48
+  :: IO
+       ( BG.FunPtr
+           ( BG.Ptr SDL3.Sys.Bindgen.Iostream.SDL_IOStream
+             -> PtrConst.PtrConst BG.CChar
+             -> IO HsBindgen.Runtime.LibC.CSize
+           )
+       )
+hs_bindgen_d032484c29c37b48 =
+  fmap BG.fromFFIType hs_bindgen_d032484c29c37b48_base
+
+{-# NOINLINE lithon_SDL_IOprintf #-}
+
+-- | Print a string to an SDL_IOStream data stream.
+--
+--     A fixed-arity shim over the variadic SDL_IOprintf: @str@ is written verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [@context@]: a pointer to an SDL_IOStream structure.
+--
+--     [@str@]: the NUL-terminated string to write.
+--
+--     [Returns]: the number of bytes written or 0 on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: Do not use the same SDL_IOStream from two threads at once.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_WriteIO
+--
+--     [C declaration]: @lithon_SDL_IOprintf@, defined at @sdl3-bindgen-sys\/SDL_iostream_shims.h 42:26@
+lithon_SDL_IOprintf
+  :: BG.FunPtr
+       ( BG.Ptr SDL3.Sys.Bindgen.Iostream.SDL_IOStream
+         -> PtrConst.PtrConst BG.CChar
+         -> IO HsBindgen.Runtime.LibC.CSize
+       )
+lithon_SDL_IOprintf =
+  BG.unsafePerformIO hs_bindgen_d032484c29c37b48
diff --git a/src/SDL3/Sys/Bindgen/IostreamShims/Safe.hs b/src/SDL3/Sys/Bindgen/IostreamShims/Safe.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/IostreamShims/Safe.hs
@@ -0,0 +1,78 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.IostreamShims.Safe (
+  SDL3.Sys.Bindgen.IostreamShims.Safe.lithon_SDL_IOprintf,
+)
+where
+
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
+import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+import SDL3.Sys.Bindgen.Iostream qualified
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <sdl3-bindgen-sys/SDL_iostream_shims.h>"
+         , "size_t hs_bindgen_d76177092e1a5fce ("
+         , "  SDL_IOStream *arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_IOprintf)(arg1, arg2);"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.IostreamShims_Safe_lithon_SDL_IOprintf@
+foreign import ccall safe "hs_bindgen_d76177092e1a5fce"
+  hs_bindgen_d76177092e1a5fce_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO HsBindgen.Runtime.LibC.CSize
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.IostreamShims_Safe_lithon_SDL_IOprintf@
+hs_bindgen_d76177092e1a5fce
+  :: BG.Ptr SDL3.Sys.Bindgen.Iostream.SDL_IOStream
+  -> PtrConst.PtrConst BG.CChar
+  -> IO HsBindgen.Runtime.LibC.CSize
+hs_bindgen_d76177092e1a5fce =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_d76177092e1a5fce_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Print a string to an SDL_IOStream data stream.
+--
+--     A fixed-arity shim over the variadic SDL_IOprintf: @str@ is written verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Returns]: the number of bytes written or 0 on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: Do not use the same SDL_IOStream from two threads at once.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_WriteIO
+--
+--     [C declaration]: @lithon_SDL_IOprintf@, defined at @sdl3-bindgen-sys\/SDL_iostream_shims.h 42:26@
+lithon_SDL_IOprintf
+  :: BG.Ptr SDL3.Sys.Bindgen.Iostream.SDL_IOStream
+  -- ^
+  --
+  --           [@context@]: a pointer to an SDL_IOStream structure.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: the NUL-terminated string to write.
+  -> IO HsBindgen.Runtime.LibC.CSize
+lithon_SDL_IOprintf = hs_bindgen_d76177092e1a5fce
diff --git a/src/SDL3/Sys/Bindgen/IostreamShims/Unsafe.hs b/src/SDL3/Sys/Bindgen/IostreamShims/Unsafe.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/IostreamShims/Unsafe.hs
@@ -0,0 +1,78 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.IostreamShims.Unsafe (
+  SDL3.Sys.Bindgen.IostreamShims.Unsafe.lithon_SDL_IOprintf,
+)
+where
+
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
+import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+import SDL3.Sys.Bindgen.Iostream qualified
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <sdl3-bindgen-sys/SDL_iostream_shims.h>"
+         , "size_t hs_bindgen_761783ccd0be8456 ("
+         , "  SDL_IOStream *arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_IOprintf)(arg1, arg2);"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.IostreamShims_Unsafe_lithon_SDL_IOprintf@
+foreign import ccall unsafe "hs_bindgen_761783ccd0be8456"
+  hs_bindgen_761783ccd0be8456_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO HsBindgen.Runtime.LibC.CSize
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.IostreamShims_Unsafe_lithon_SDL_IOprintf@
+hs_bindgen_761783ccd0be8456
+  :: BG.Ptr SDL3.Sys.Bindgen.Iostream.SDL_IOStream
+  -> PtrConst.PtrConst BG.CChar
+  -> IO HsBindgen.Runtime.LibC.CSize
+hs_bindgen_761783ccd0be8456 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_761783ccd0be8456_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Print a string to an SDL_IOStream data stream.
+--
+--     A fixed-arity shim over the variadic SDL_IOprintf: @str@ is written verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Returns]: the number of bytes written or 0 on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: Do not use the same SDL_IOStream from two threads at once.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_WriteIO
+--
+--     [C declaration]: @lithon_SDL_IOprintf@, defined at @sdl3-bindgen-sys\/SDL_iostream_shims.h 42:26@
+lithon_SDL_IOprintf
+  :: BG.Ptr SDL3.Sys.Bindgen.Iostream.SDL_IOStream
+  -- ^
+  --
+  --           [@context@]: a pointer to an SDL_IOStream structure.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: the NUL-terminated string to write.
+  -> IO HsBindgen.Runtime.LibC.CSize
+lithon_SDL_IOprintf = hs_bindgen_761783ccd0be8456
diff --git a/src/SDL3/Sys/Bindgen/Joystick.hs b/src/SDL3/Sys/Bindgen/Joystick.hs
--- a/src/SDL3/Sys/Bindgen/Joystick.hs
+++ b/src/SDL3/Sys/Bindgen/Joystick.hs
@@ -18,6 +18,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | SDL joystick support.
 --
@@ -80,12 +81,31 @@
 )
 where
 
+import Prelude (
+  Bounded,
+  Enum,
+  Eq,
+  IO,
+  Int,
+  Integral,
+  Num,
+  Ord,
+  Read,
+  Real,
+  Show,
+  pure,
+  (<*>),
+  (>>),
+  type (~),
+ )
+
 import C.Expr.HostPlatform qualified
 import HsBindgen.Runtime.CEnum qualified as CEnum
 import HsBindgen.Runtime.ConstantArray qualified as CA
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.Marshal qualified as Marshal
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Struct qualified as Struct
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField
 import SDL3.Sys.Bindgen.Sensor qualified
@@ -489,6 +509,14 @@
   instance
     BG.Storable SDL_VirtualJoystickTouchpadDesc
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_VirtualJoystickTouchpadDesc
+  instance
+    Struct.IsStruct SDL_VirtualJoystickTouchpadDesc
+
+-- | the number of simultaneous fingers on this touchpad
+--
+--     [C declaration]: @nfingers@, defined at @SDL3\/SDL_joystick.h 435:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "nfingers" SDL_VirtualJoystickTouchpadDesc ty
@@ -513,6 +541,7 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | [C declaration]: @padding@, defined at @SDL3\/SDL_joystick.h 436:12@
 instance
   (ty ~ CA.ConstantArray 3 SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "padding" SDL_VirtualJoystickTouchpadDesc ty
@@ -582,6 +611,14 @@
   instance
     BG.Storable SDL_VirtualJoystickSensorDesc
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_VirtualJoystickSensorDesc
+  instance
+    Struct.IsStruct SDL_VirtualJoystickSensorDesc
+
+-- | the type of this sensor
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_joystick.h 448:20@
 instance
   (ty ~ SDL3.Sys.Bindgen.Sensor.SDL_SensorType)
   => BG.CompatHasField.HasField "type'" SDL_VirtualJoystickSensorDesc ty
@@ -606,6 +643,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | the update frequency of this sensor, may be 0.0f
+--
+--     [C declaration]: @rate@, defined at @SDL3\/SDL_joystick.h 449:11@
 instance
   (ty ~ BG.CFloat)
   => BG.CompatHasField.HasField "rate" SDL_VirtualJoystickSensorDesc ty
@@ -842,6 +882,14 @@
   instance
     BG.Storable SDL_VirtualJoystickDesc
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_VirtualJoystickDesc
+  instance
+    Struct.IsStruct SDL_VirtualJoystickDesc
+
+-- | the version of this interface
+--
+--     [C declaration]: @version@, defined at @SDL3\/SDL_joystick.h 467:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "version" SDL_VirtualJoystickDesc ty
@@ -893,6 +941,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | @'SDL_JoystickType'@
+--
+--     [C declaration]: @type@, defined at @SDL3\/SDL_joystick.h 468:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "type'" SDL_VirtualJoystickDesc ty
@@ -944,6 +995,9 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | unused
+--
+--     [C declaration]: @padding@, defined at @SDL3\/SDL_joystick.h 469:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "padding" SDL_VirtualJoystickDesc ty
@@ -995,6 +1049,9 @@
 
   offset# = \_ -> \_ -> 6
 
+-- | the USB vendor ID of this joystick
+--
+--     [C declaration]: @vendor_id@, defined at @SDL3\/SDL_joystick.h 470:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "vendor_id" SDL_VirtualJoystickDesc ty
@@ -1046,6 +1103,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | the USB product ID of this joystick
+--
+--     [C declaration]: @product_id@, defined at @SDL3\/SDL_joystick.h 471:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "product_id" SDL_VirtualJoystickDesc ty
@@ -1097,6 +1157,9 @@
 
   offset# = \_ -> \_ -> 10
 
+-- | the number of axes on this joystick
+--
+--     [C declaration]: @naxes@, defined at @SDL3\/SDL_joystick.h 472:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "naxes" SDL_VirtualJoystickDesc ty
@@ -1148,6 +1211,9 @@
 
   offset# = \_ -> \_ -> 12
 
+-- | the number of buttons on this joystick
+--
+--     [C declaration]: @nbuttons@, defined at @SDL3\/SDL_joystick.h 473:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "nbuttons" SDL_VirtualJoystickDesc ty
@@ -1199,6 +1265,9 @@
 
   offset# = \_ -> \_ -> 14
 
+-- | the number of balls on this joystick
+--
+--     [C declaration]: @nballs@, defined at @SDL3\/SDL_joystick.h 474:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "nballs" SDL_VirtualJoystickDesc ty
@@ -1250,6 +1319,9 @@
 
   offset# = \_ -> \_ -> 16
 
+-- | the number of hats on this joystick
+--
+--     [C declaration]: @nhats@, defined at @SDL3\/SDL_joystick.h 475:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "nhats" SDL_VirtualJoystickDesc ty
@@ -1301,6 +1373,9 @@
 
   offset# = \_ -> \_ -> 18
 
+-- | the number of touchpads on this joystick, requires @touchpads@ to point at valid descriptions
+--
+--     [C declaration]: @ntouchpads@, defined at @SDL3\/SDL_joystick.h 476:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "ntouchpads" SDL_VirtualJoystickDesc ty
@@ -1352,6 +1427,9 @@
 
   offset# = \_ -> \_ -> 20
 
+-- | the number of sensors on this joystick, requires @sensors@ to point at valid descriptions
+--
+--     [C declaration]: @nsensors@, defined at @SDL3\/SDL_joystick.h 477:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "nsensors" SDL_VirtualJoystickDesc ty
@@ -1403,6 +1481,9 @@
 
   offset# = \_ -> \_ -> 22
 
+-- | unused
+--
+--     [C declaration]: @padding2@, defined at @SDL3\/SDL_joystick.h 478:12@
 instance
   (ty ~ CA.ConstantArray 2 SDL3.Sys.Bindgen.Stdinc.Uint16)
   => BG.CompatHasField.HasField "padding2" SDL_VirtualJoystickDesc ty
@@ -1454,6 +1535,9 @@
 
   offset# = \_ -> \_ -> 24
 
+-- | A mask of which buttons are valid for this controller e.g. (1 \<\< SDL_GAMEPAD_BUTTON_SOUTH)
+--
+--     [C declaration]: @button_mask@, defined at @SDL3\/SDL_joystick.h 479:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "button_mask" SDL_VirtualJoystickDesc ty
@@ -1506,6 +1590,9 @@
 
   offset# = \_ -> \_ -> 28
 
+-- | A mask of which axes are valid for this controller e.g. (1 \<\< SDL_GAMEPAD_AXIS_LEFTX)
+--
+--     [C declaration]: @axis_mask@, defined at @SDL3\/SDL_joystick.h 481:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "axis_mask" SDL_VirtualJoystickDesc ty
@@ -1557,6 +1644,9 @@
 
   offset# = \_ -> \_ -> 32
 
+-- | the name of the joystick
+--
+--     [C declaration]: @name@, defined at @SDL3\/SDL_joystick.h 483:17@
 instance
   (ty ~ PtrConst.PtrConst BG.CChar)
   => BG.CompatHasField.HasField "name" SDL_VirtualJoystickDesc ty
@@ -1608,6 +1698,9 @@
 
   offset# = \_ -> \_ -> 40
 
+-- | A pointer to an array of touchpad descriptions, required if @ntouchpads@ is > 0
+--
+--     [C declaration]: @touchpads@, defined at @SDL3\/SDL_joystick.h 484:44@
 instance
   (ty ~ PtrConst.PtrConst SDL_VirtualJoystickTouchpadDesc)
   => BG.CompatHasField.HasField "touchpads" SDL_VirtualJoystickDesc ty
@@ -1659,6 +1752,9 @@
 
   offset# = \_ -> \_ -> 48
 
+-- | A pointer to an array of sensor descriptions, required if @nsensors@ is > 0
+--
+--     [C declaration]: @sensors@, defined at @SDL3\/SDL_joystick.h 485:42@
 instance
   (ty ~ PtrConst.PtrConst SDL_VirtualJoystickSensorDesc)
   => BG.CompatHasField.HasField "sensors" SDL_VirtualJoystickDesc ty
@@ -1710,6 +1806,9 @@
 
   offset# = \_ -> \_ -> 56
 
+-- | User data pointer passed to callbacks
+--
+--     [C declaration]: @userdata@, defined at @SDL3\/SDL_joystick.h 487:11@
 instance
   (ty ~ BG.Ptr BG.Void)
   => BG.CompatHasField.HasField "userdata" SDL_VirtualJoystickDesc ty
@@ -1761,6 +1860,7 @@
 
   offset# = \_ -> \_ -> 64
 
+-- | [C declaration]: @Update@, defined at @SDL3\/SDL_joystick.h 488:20@
 instance
   (ty ~ BG.FunPtr (BG.Ptr BG.Void -> IO ()))
   => BG.CompatHasField.HasField "update" SDL_VirtualJoystickDesc ty
@@ -1812,6 +1912,7 @@
 
   offset# = \_ -> \_ -> 72
 
+-- | [C declaration]: @SetPlayerIndex@, defined at @SDL3\/SDL_joystick.h 489:20@
 instance
   (ty ~ BG.FunPtr (BG.Ptr BG.Void -> BG.CInt -> IO ()))
   => BG.CompatHasField.HasField "setPlayerIndex" SDL_VirtualJoystickDesc ty
@@ -1864,6 +1965,7 @@
 
   offset# = \_ -> \_ -> 80
 
+-- | [C declaration]: @Rumble@, defined at @SDL3\/SDL_joystick.h 490:20@
 instance
   ( ty
       ~ BG.FunPtr
@@ -1922,6 +2024,7 @@
 
   offset# = \_ -> \_ -> 88
 
+-- | [C declaration]: @RumbleTriggers@, defined at @SDL3\/SDL_joystick.h 491:20@
 instance
   ( ty
       ~ BG.FunPtr
@@ -1981,6 +2084,7 @@
 
   offset# = \_ -> \_ -> 96
 
+-- | [C declaration]: @SetLED@, defined at @SDL3\/SDL_joystick.h 492:20@
 instance
   ( ty
       ~ BG.FunPtr
@@ -2054,6 +2158,7 @@
 
   offset# = \_ -> \_ -> 104
 
+-- | [C declaration]: @SendEffect@, defined at @SDL3\/SDL_joystick.h 493:20@
 instance
   (ty ~ BG.FunPtr (BG.Ptr BG.Void -> PtrConst.PtrConst BG.Void -> BG.CInt -> IO BG.CBool))
   => BG.CompatHasField.HasField "sendEffect" SDL_VirtualJoystickDesc ty
@@ -2105,6 +2210,7 @@
 
   offset# = \_ -> \_ -> 112
 
+-- | [C declaration]: @SetSensorsEnabled@, defined at @SDL3\/SDL_joystick.h 494:20@
 instance
   (ty ~ BG.FunPtr (BG.Ptr BG.Void -> BG.CBool -> IO BG.CBool))
   => BG.CompatHasField.HasField "setSensorsEnabled" SDL_VirtualJoystickDesc ty
@@ -2157,6 +2263,7 @@
 
   offset# = \_ -> \_ -> 120
 
+-- | [C declaration]: @Cleanup@, defined at @SDL3\/SDL_joystick.h 495:20@
 instance
   (ty ~ BG.FunPtr (BG.Ptr BG.Void -> IO ()))
   => BG.CompatHasField.HasField "cleanup" SDL_VirtualJoystickDesc ty
diff --git a/src/SDL3/Sys/Bindgen/Joystick/FunPtr.hs b/src/SDL3/Sys/Bindgen/Joystick/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Joystick/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Joystick/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Joystick.FunPtr (
@@ -64,6 +66,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -76,7 +80,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_joystick.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_joystick.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_get_SDL_LockJoysticks */"
          , "__attribute__ ((const))"
          , "void (*hs_bindgen_114e63986aa83034 (void)) (void)"
@@ -587,7 +595,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_get_SDL_LockJoysticks@
 hs_bindgen_114e63986aa83034 :: IO (BG.FunPtr (IO ()))
 hs_bindgen_114e63986aa83034 =
-  BG.fromFFIType hs_bindgen_114e63986aa83034_base
+  fmap BG.fromFFIType hs_bindgen_114e63986aa83034_base
 
 {-# NOINLINE sDL_LockJoysticks #-}
 
@@ -612,7 +620,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_get_SDL_UnlockJoysticks@
 hs_bindgen_08af331be04bcfc6 :: IO (BG.FunPtr (IO ()))
 hs_bindgen_08af331be04bcfc6 =
-  BG.fromFFIType hs_bindgen_08af331be04bcfc6_base
+  fmap BG.fromFFIType hs_bindgen_08af331be04bcfc6_base
 
 {-# NOINLINE sDL_UnlockJoysticks #-}
 
@@ -635,7 +643,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_get_SDL_HasJoystick@
 hs_bindgen_43b30c46c7a64c3f :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_43b30c46c7a64c3f =
-  BG.fromFFIType hs_bindgen_43b30c46c7a64c3f_base
+  fmap BG.fromFFIType hs_bindgen_43b30c46c7a64c3f_base
 
 {-# NOINLINE sDL_HasJoystick #-}
 
@@ -662,7 +670,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_get_SDL_GetJoysticks@
 hs_bindgen_8980d2e00276c32b :: IO (BG.FunPtr (BG.Ptr BG.CInt -> IO (BG.Ptr SDL_JoystickID)))
 hs_bindgen_8980d2e00276c32b =
-  BG.fromFFIType hs_bindgen_8980d2e00276c32b_base
+  fmap BG.fromFFIType hs_bindgen_8980d2e00276c32b_base
 
 {-# NOINLINE sDL_GetJoysticks #-}
 
@@ -691,7 +699,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_get_SDL_GetJoystickNameForID@
 hs_bindgen_609608d63d9b62ea :: IO (BG.FunPtr (SDL_JoystickID -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_609608d63d9b62ea =
-  BG.fromFFIType hs_bindgen_609608d63d9b62ea_base
+  fmap BG.fromFFIType hs_bindgen_609608d63d9b62ea_base
 
 {-# NOINLINE sDL_GetJoystickNameForID #-}
 
@@ -722,7 +730,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_get_SDL_GetJoystickPathForID@
 hs_bindgen_5ac5dcd7fcf6852e :: IO (BG.FunPtr (SDL_JoystickID -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_5ac5dcd7fcf6852e =
-  BG.fromFFIType hs_bindgen_5ac5dcd7fcf6852e_base
+  fmap BG.fromFFIType hs_bindgen_5ac5dcd7fcf6852e_base
 
 {-# NOINLINE sDL_GetJoystickPathForID #-}
 
@@ -753,7 +761,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_get_SDL_GetJoystickPlayerIndexForID@
 hs_bindgen_cba85122d2af347d :: IO (BG.FunPtr (SDL_JoystickID -> IO BG.CInt))
 hs_bindgen_cba85122d2af347d =
-  BG.fromFFIType hs_bindgen_cba85122d2af347d_base
+  fmap BG.fromFFIType hs_bindgen_cba85122d2af347d_base
 
 {-# NOINLINE sDL_GetJoystickPlayerIndexForID #-}
 
@@ -784,7 +792,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_get_SDL_GetJoystickGUIDForID@
 hs_bindgen_449e28b8e0e67e88 :: IO (BG.FunPtr (SDL_JoystickID -> IO SDL3.Sys.Bindgen.Guid.SDL_GUID))
 hs_bindgen_449e28b8e0e67e88 =
-  BG.fromFFIType hs_bindgen_449e28b8e0e67e88_base
+  fmap BG.fromFFIType hs_bindgen_449e28b8e0e67e88_base
 
 {-# NOINLINE sDL_GetJoystickGUIDForID #-}
 
@@ -815,7 +823,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_get_SDL_GetJoystickVendorForID@
 hs_bindgen_44ce4b8a7fdf6cbf :: IO (BG.FunPtr (SDL_JoystickID -> IO SDL3.Sys.Bindgen.Stdinc.Uint16))
 hs_bindgen_44ce4b8a7fdf6cbf =
-  BG.fromFFIType hs_bindgen_44ce4b8a7fdf6cbf_base
+  fmap BG.fromFFIType hs_bindgen_44ce4b8a7fdf6cbf_base
 
 {-# NOINLINE sDL_GetJoystickVendorForID #-}
 
@@ -846,7 +854,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_get_SDL_GetJoystickProductForID@
 hs_bindgen_820a9291485cee97 :: IO (BG.FunPtr (SDL_JoystickID -> IO SDL3.Sys.Bindgen.Stdinc.Uint16))
 hs_bindgen_820a9291485cee97 =
-  BG.fromFFIType hs_bindgen_820a9291485cee97_base
+  fmap BG.fromFFIType hs_bindgen_820a9291485cee97_base
 
 {-# NOINLINE sDL_GetJoystickProductForID #-}
 
@@ -877,7 +885,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_get_SDL_GetJoystickProductVersionForID@
 hs_bindgen_3a0e1d9bde47f0ff :: IO (BG.FunPtr (SDL_JoystickID -> IO SDL3.Sys.Bindgen.Stdinc.Uint16))
 hs_bindgen_3a0e1d9bde47f0ff =
-  BG.fromFFIType hs_bindgen_3a0e1d9bde47f0ff_base
+  fmap BG.fromFFIType hs_bindgen_3a0e1d9bde47f0ff_base
 
 {-# NOINLINE sDL_GetJoystickProductVersionForID #-}
 
@@ -909,7 +917,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_get_SDL_GetJoystickTypeForID@
 hs_bindgen_a20dfde681f6caa0 :: IO (BG.FunPtr (SDL_JoystickID -> IO SDL_JoystickType))
 hs_bindgen_a20dfde681f6caa0 =
-  BG.fromFFIType hs_bindgen_a20dfde681f6caa0_base
+  fmap BG.fromFFIType hs_bindgen_a20dfde681f6caa0_base
 
 {-# NOINLINE sDL_GetJoystickTypeForID #-}
 
@@ -940,7 +948,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_get_SDL_OpenJoystick@
 hs_bindgen_c7b5fbf5268defc4 :: IO (BG.FunPtr (SDL_JoystickID -> IO (BG.Ptr SDL_Joystick)))
 hs_bindgen_c7b5fbf5268defc4 =
-  BG.fromFFIType hs_bindgen_c7b5fbf5268defc4_base
+  fmap BG.fromFFIType hs_bindgen_c7b5fbf5268defc4_base
 
 {-# NOINLINE sDL_OpenJoystick #-}
 
@@ -971,7 +979,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_get_SDL_GetJoystickFromID@
 hs_bindgen_e1dd196b7b6820f0 :: IO (BG.FunPtr (SDL_JoystickID -> IO (BG.Ptr SDL_Joystick)))
 hs_bindgen_e1dd196b7b6820f0 =
-  BG.fromFFIType hs_bindgen_e1dd196b7b6820f0_base
+  fmap BG.fromFFIType hs_bindgen_e1dd196b7b6820f0_base
 
 {-# NOINLINE sDL_GetJoystickFromID #-}
 
@@ -998,7 +1006,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_get_SDL_GetJoystickFromPlayerIndex@
 hs_bindgen_557bcf514d2319d8 :: IO (BG.FunPtr (BG.CInt -> IO (BG.Ptr SDL_Joystick)))
 hs_bindgen_557bcf514d2319d8 =
-  BG.fromFFIType hs_bindgen_557bcf514d2319d8_base
+  fmap BG.fromFFIType hs_bindgen_557bcf514d2319d8_base
 
 {-# NOINLINE sDL_GetJoystickFromPlayerIndex #-}
 
@@ -1028,7 +1036,7 @@
 hs_bindgen_1ad626510c8533e6
   :: IO (BG.FunPtr (PtrConst.PtrConst SDL_VirtualJoystickDesc -> IO SDL_JoystickID))
 hs_bindgen_1ad626510c8533e6 =
-  BG.fromFFIType hs_bindgen_1ad626510c8533e6_base
+  fmap BG.fromFFIType hs_bindgen_1ad626510c8533e6_base
 
 {-# NOINLINE sDL_AttachVirtualJoystick #-}
 
@@ -1064,7 +1072,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_get_SDL_DetachVirtualJoystick@
 hs_bindgen_cce198ac8f90dd3d :: IO (BG.FunPtr (SDL_JoystickID -> IO BG.CBool))
 hs_bindgen_cce198ac8f90dd3d =
-  BG.fromFFIType hs_bindgen_cce198ac8f90dd3d_base
+  fmap BG.fromFFIType hs_bindgen_cce198ac8f90dd3d_base
 
 {-# NOINLINE sDL_DetachVirtualJoystick #-}
 
@@ -1093,7 +1101,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_get_SDL_IsJoystickVirtual@
 hs_bindgen_f63774bb7235f389 :: IO (BG.FunPtr (SDL_JoystickID -> IO BG.CBool))
 hs_bindgen_f63774bb7235f389 =
-  BG.fromFFIType hs_bindgen_f63774bb7235f389_base
+  fmap BG.fromFFIType hs_bindgen_f63774bb7235f389_base
 
 {-# NOINLINE sDL_IsJoystickVirtual #-}
 
@@ -1121,7 +1129,7 @@
 hs_bindgen_25ad7457e11fdfc6
   :: IO (BG.FunPtr (BG.Ptr SDL_Joystick -> BG.CInt -> SDL3.Sys.Bindgen.Stdinc.Sint16 -> IO BG.CBool))
 hs_bindgen_25ad7457e11fdfc6 =
-  BG.fromFFIType hs_bindgen_25ad7457e11fdfc6_base
+  fmap BG.fromFFIType hs_bindgen_25ad7457e11fdfc6_base
 
 {-# NOINLINE sDL_SetJoystickVirtualAxis #-}
 
@@ -1168,7 +1176,7 @@
            )
        )
 hs_bindgen_883279d52c622be7 =
-  BG.fromFFIType hs_bindgen_883279d52c622be7_base
+  fmap BG.fromFFIType hs_bindgen_883279d52c622be7_base
 
 {-# NOINLINE sDL_SetJoystickVirtualBall #-}
 
@@ -1213,7 +1221,7 @@
 hs_bindgen_c874e2ca8a04d63f
   :: IO (BG.FunPtr (BG.Ptr SDL_Joystick -> BG.CInt -> BG.CBool -> IO BG.CBool))
 hs_bindgen_c874e2ca8a04d63f =
-  BG.fromFFIType hs_bindgen_c874e2ca8a04d63f_base
+  fmap BG.fromFFIType hs_bindgen_c874e2ca8a04d63f_base
 
 {-# NOINLINE sDL_SetJoystickVirtualButton #-}
 
@@ -1250,7 +1258,7 @@
 hs_bindgen_c1356b5e756048fc
   :: IO (BG.FunPtr (BG.Ptr SDL_Joystick -> BG.CInt -> SDL3.Sys.Bindgen.Stdinc.Uint8 -> IO BG.CBool))
 hs_bindgen_c1356b5e756048fc =
-  BG.fromFFIType hs_bindgen_c1356b5e756048fc_base
+  fmap BG.fromFFIType hs_bindgen_c1356b5e756048fc_base
 
 {-# NOINLINE sDL_SetJoystickVirtualHat #-}
 
@@ -1298,7 +1306,7 @@
            )
        )
 hs_bindgen_170b87771a92a148 =
-  BG.fromFFIType hs_bindgen_170b87771a92a148_base
+  fmap BG.fromFFIType hs_bindgen_170b87771a92a148_base
 
 {-# NOINLINE sDL_SetJoystickVirtualTouchpad #-}
 
@@ -1361,7 +1369,7 @@
            )
        )
 hs_bindgen_5c51fdc7918227aa =
-  BG.fromFFIType hs_bindgen_5c51fdc7918227aa_base
+  fmap BG.fromFFIType hs_bindgen_5c51fdc7918227aa_base
 
 {-# NOINLINE sDL_SendJoystickVirtualSensorData #-}
 
@@ -1409,7 +1417,7 @@
 hs_bindgen_9c72e51496d953ec
   :: IO (BG.FunPtr (BG.Ptr SDL_Joystick -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID))
 hs_bindgen_9c72e51496d953ec =
-  BG.fromFFIType hs_bindgen_9c72e51496d953ec_base
+  fmap BG.fromFFIType hs_bindgen_9c72e51496d953ec_base
 
 {-# NOINLINE sDL_GetJoystickProperties #-}
 
@@ -1450,7 +1458,7 @@
 hs_bindgen_6d93bd8000de4d74
   :: IO (BG.FunPtr (BG.Ptr SDL_Joystick -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_6d93bd8000de4d74 =
-  BG.fromFFIType hs_bindgen_6d93bd8000de4d74_base
+  fmap BG.fromFFIType hs_bindgen_6d93bd8000de4d74_base
 
 {-# NOINLINE sDL_GetJoystickName #-}
 
@@ -1480,7 +1488,7 @@
 hs_bindgen_2e7828c53ff173b7
   :: IO (BG.FunPtr (BG.Ptr SDL_Joystick -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_2e7828c53ff173b7 =
-  BG.fromFFIType hs_bindgen_2e7828c53ff173b7_base
+  fmap BG.fromFFIType hs_bindgen_2e7828c53ff173b7_base
 
 {-# NOINLINE sDL_GetJoystickPath #-}
 
@@ -1509,7 +1517,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_get_SDL_GetJoystickPlayerIndex@
 hs_bindgen_63f024097bd9c12b :: IO (BG.FunPtr (BG.Ptr SDL_Joystick -> IO BG.CInt))
 hs_bindgen_63f024097bd9c12b =
-  BG.fromFFIType hs_bindgen_63f024097bd9c12b_base
+  fmap BG.fromFFIType hs_bindgen_63f024097bd9c12b_base
 
 {-# NOINLINE sDL_GetJoystickPlayerIndex #-}
 
@@ -1540,7 +1548,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_get_SDL_SetJoystickPlayerIndex@
 hs_bindgen_258294b3081be5f1 :: IO (BG.FunPtr (BG.Ptr SDL_Joystick -> BG.CInt -> IO BG.CBool))
 hs_bindgen_258294b3081be5f1 =
-  BG.fromFFIType hs_bindgen_258294b3081be5f1_base
+  fmap BG.fromFFIType hs_bindgen_258294b3081be5f1_base
 
 {-# NOINLINE sDL_SetJoystickPlayerIndex #-}
 
@@ -1572,7 +1580,7 @@
 hs_bindgen_aea836abf82f48b9
   :: IO (BG.FunPtr (BG.Ptr SDL_Joystick -> IO SDL3.Sys.Bindgen.Guid.SDL_GUID))
 hs_bindgen_aea836abf82f48b9 =
-  BG.fromFFIType hs_bindgen_aea836abf82f48b9_base
+  fmap BG.fromFFIType hs_bindgen_aea836abf82f48b9_base
 
 {-# NOINLINE sDL_GetJoystickGUID #-}
 
@@ -1604,7 +1612,7 @@
 hs_bindgen_9cd3279f0e0ca747
   :: IO (BG.FunPtr (BG.Ptr SDL_Joystick -> IO SDL3.Sys.Bindgen.Stdinc.Uint16))
 hs_bindgen_9cd3279f0e0ca747 =
-  BG.fromFFIType hs_bindgen_9cd3279f0e0ca747_base
+  fmap BG.fromFFIType hs_bindgen_9cd3279f0e0ca747_base
 
 {-# NOINLINE sDL_GetJoystickVendor #-}
 
@@ -1636,7 +1644,7 @@
 hs_bindgen_22acb36edfbd0e8c
   :: IO (BG.FunPtr (BG.Ptr SDL_Joystick -> IO SDL3.Sys.Bindgen.Stdinc.Uint16))
 hs_bindgen_22acb36edfbd0e8c =
-  BG.fromFFIType hs_bindgen_22acb36edfbd0e8c_base
+  fmap BG.fromFFIType hs_bindgen_22acb36edfbd0e8c_base
 
 {-# NOINLINE sDL_GetJoystickProduct #-}
 
@@ -1668,7 +1676,7 @@
 hs_bindgen_0bae3c3de11e8bcd
   :: IO (BG.FunPtr (BG.Ptr SDL_Joystick -> IO SDL3.Sys.Bindgen.Stdinc.Uint16))
 hs_bindgen_0bae3c3de11e8bcd =
-  BG.fromFFIType hs_bindgen_0bae3c3de11e8bcd_base
+  fmap BG.fromFFIType hs_bindgen_0bae3c3de11e8bcd_base
 
 {-# NOINLINE sDL_GetJoystickProductVersion #-}
 
@@ -1701,7 +1709,7 @@
 hs_bindgen_38f91890f6c8dd34
   :: IO (BG.FunPtr (BG.Ptr SDL_Joystick -> IO SDL3.Sys.Bindgen.Stdinc.Uint16))
 hs_bindgen_38f91890f6c8dd34 =
-  BG.fromFFIType hs_bindgen_38f91890f6c8dd34_base
+  fmap BG.fromFFIType hs_bindgen_38f91890f6c8dd34_base
 
 {-# NOINLINE sDL_GetJoystickFirmwareVersion #-}
 
@@ -1732,7 +1740,7 @@
 hs_bindgen_a8489b391d128726
   :: IO (BG.FunPtr (BG.Ptr SDL_Joystick -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_a8489b391d128726 =
-  BG.fromFFIType hs_bindgen_a8489b391d128726_base
+  fmap BG.fromFFIType hs_bindgen_a8489b391d128726_base
 
 {-# NOINLINE sDL_GetJoystickSerial #-}
 
@@ -1761,7 +1769,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_get_SDL_GetJoystickType@
 hs_bindgen_27fa723927645a5b :: IO (BG.FunPtr (BG.Ptr SDL_Joystick -> IO SDL_JoystickType))
 hs_bindgen_27fa723927645a5b =
-  BG.fromFFIType hs_bindgen_27fa723927645a5b_base
+  fmap BG.fromFFIType hs_bindgen_27fa723927645a5b_base
 
 {-# NOINLINE sDL_GetJoystickType #-}
 
@@ -1800,7 +1808,7 @@
            )
        )
 hs_bindgen_43f734d8766d207f =
-  BG.fromFFIType hs_bindgen_43f734d8766d207f_base
+  fmap BG.fromFFIType hs_bindgen_43f734d8766d207f_base
 
 {-# NOINLINE sDL_GetJoystickGUIDInfo #-}
 
@@ -1843,7 +1851,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_get_SDL_JoystickConnected@
 hs_bindgen_34fe2e0cf303a75f :: IO (BG.FunPtr (BG.Ptr SDL_Joystick -> IO BG.CBool))
 hs_bindgen_34fe2e0cf303a75f =
-  BG.fromFFIType hs_bindgen_34fe2e0cf303a75f_base
+  fmap BG.fromFFIType hs_bindgen_34fe2e0cf303a75f_base
 
 {-# NOINLINE sDL_JoystickConnected #-}
 
@@ -1870,7 +1878,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_get_SDL_GetJoystickID@
 hs_bindgen_db36c45c44877744 :: IO (BG.FunPtr (BG.Ptr SDL_Joystick -> IO SDL_JoystickID))
 hs_bindgen_db36c45c44877744 =
-  BG.fromFFIType hs_bindgen_db36c45c44877744_base
+  fmap BG.fromFFIType hs_bindgen_db36c45c44877744_base
 
 {-# NOINLINE sDL_GetJoystickID #-}
 
@@ -1897,7 +1905,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_get_SDL_GetNumJoystickAxes@
 hs_bindgen_c743dc688bb6eabd :: IO (BG.FunPtr (BG.Ptr SDL_Joystick -> IO BG.CInt))
 hs_bindgen_c743dc688bb6eabd =
-  BG.fromFFIType hs_bindgen_c743dc688bb6eabd_base
+  fmap BG.fromFFIType hs_bindgen_c743dc688bb6eabd_base
 
 {-# NOINLINE sDL_GetNumJoystickAxes #-}
 
@@ -1928,7 +1936,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_get_SDL_GetNumJoystickBalls@
 hs_bindgen_948af313b23a1c65 :: IO (BG.FunPtr (BG.Ptr SDL_Joystick -> IO BG.CInt))
 hs_bindgen_948af313b23a1c65 =
-  BG.fromFFIType hs_bindgen_948af313b23a1c65_base
+  fmap BG.fromFFIType hs_bindgen_948af313b23a1c65_base
 
 {-# NOINLINE sDL_GetNumJoystickBalls #-}
 
@@ -1961,7 +1969,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_get_SDL_GetNumJoystickHats@
 hs_bindgen_2bfa757cb6822a72 :: IO (BG.FunPtr (BG.Ptr SDL_Joystick -> IO BG.CInt))
 hs_bindgen_2bfa757cb6822a72 =
-  BG.fromFFIType hs_bindgen_2bfa757cb6822a72_base
+  fmap BG.fromFFIType hs_bindgen_2bfa757cb6822a72_base
 
 {-# NOINLINE sDL_GetNumJoystickHats #-}
 
@@ -1990,7 +1998,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_get_SDL_GetNumJoystickButtons@
 hs_bindgen_a91d035d49fdc8d2 :: IO (BG.FunPtr (BG.Ptr SDL_Joystick -> IO BG.CInt))
 hs_bindgen_a91d035d49fdc8d2 =
-  BG.fromFFIType hs_bindgen_a91d035d49fdc8d2_base
+  fmap BG.fromFFIType hs_bindgen_a91d035d49fdc8d2_base
 
 {-# NOINLINE sDL_GetNumJoystickButtons #-}
 
@@ -2019,7 +2027,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_get_SDL_SetJoystickEventsEnabled@
 hs_bindgen_33fbade22db04a59 :: IO (BG.FunPtr (BG.CBool -> IO ()))
 hs_bindgen_33fbade22db04a59 =
-  BG.fromFFIType hs_bindgen_33fbade22db04a59_base
+  fmap BG.fromFFIType hs_bindgen_33fbade22db04a59_base
 
 {-# NOINLINE sDL_SetJoystickEventsEnabled #-}
 
@@ -2048,7 +2056,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_get_SDL_JoystickEventsEnabled@
 hs_bindgen_ddd93029215cfd37 :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_ddd93029215cfd37 =
-  BG.fromFFIType hs_bindgen_ddd93029215cfd37_base
+  fmap BG.fromFFIType hs_bindgen_ddd93029215cfd37_base
 
 {-# NOINLINE sDL_JoystickEventsEnabled #-}
 
@@ -2077,7 +2085,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_get_SDL_UpdateJoysticks@
 hs_bindgen_fab2d264eddcaffa :: IO (BG.FunPtr (IO ()))
 hs_bindgen_fab2d264eddcaffa =
-  BG.fromFFIType hs_bindgen_fab2d264eddcaffa_base
+  fmap BG.fromFFIType hs_bindgen_fab2d264eddcaffa_base
 
 {-# NOINLINE sDL_UpdateJoysticks #-}
 
@@ -2103,7 +2111,7 @@
 hs_bindgen_f60a6cb5f1d09a81
   :: IO (BG.FunPtr (BG.Ptr SDL_Joystick -> BG.CInt -> IO SDL3.Sys.Bindgen.Stdinc.Sint16))
 hs_bindgen_f60a6cb5f1d09a81 =
-  BG.fromFFIType hs_bindgen_f60a6cb5f1d09a81_base
+  fmap BG.fromFFIType hs_bindgen_f60a6cb5f1d09a81_base
 
 {-# NOINLINE sDL_GetJoystickAxis #-}
 
@@ -2141,7 +2149,7 @@
   :: IO
        (BG.FunPtr (BG.Ptr SDL_Joystick -> BG.CInt -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Sint16 -> IO BG.CBool))
 hs_bindgen_c09eb5cfd016adfb =
-  BG.fromFFIType hs_bindgen_c09eb5cfd016adfb_base
+  fmap BG.fromFFIType hs_bindgen_c09eb5cfd016adfb_base
 
 {-# NOINLINE sDL_GetJoystickAxisInitialState #-}
 
@@ -2178,7 +2186,7 @@
 hs_bindgen_ea4bd75fcfd7173a
   :: IO (BG.FunPtr (BG.Ptr SDL_Joystick -> BG.CInt -> BG.Ptr BG.CInt -> BG.Ptr BG.CInt -> IO BG.CBool))
 hs_bindgen_ea4bd75fcfd7173a =
-  BG.fromFFIType hs_bindgen_ea4bd75fcfd7173a_base
+  fmap BG.fromFFIType hs_bindgen_ea4bd75fcfd7173a_base
 
 {-# NOINLINE sDL_GetJoystickBall #-}
 
@@ -2219,7 +2227,7 @@
 hs_bindgen_79462e0207a041dd
   :: IO (BG.FunPtr (BG.Ptr SDL_Joystick -> BG.CInt -> IO SDL3.Sys.Bindgen.Stdinc.Uint8))
 hs_bindgen_79462e0207a041dd =
-  BG.fromFFIType hs_bindgen_79462e0207a041dd_base
+  fmap BG.fromFFIType hs_bindgen_79462e0207a041dd_base
 
 {-# NOINLINE sDL_GetJoystickHat #-}
 
@@ -2252,7 +2260,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_get_SDL_GetJoystickButton@
 hs_bindgen_8db4e8a6fc998c72 :: IO (BG.FunPtr (BG.Ptr SDL_Joystick -> BG.CInt -> IO BG.CBool))
 hs_bindgen_8db4e8a6fc998c72 =
-  BG.fromFFIType hs_bindgen_8db4e8a6fc998c72_base
+  fmap BG.fromFFIType hs_bindgen_8db4e8a6fc998c72_base
 
 {-# NOINLINE sDL_GetJoystickButton #-}
 
@@ -2292,7 +2300,7 @@
            )
        )
 hs_bindgen_01a69fecc103bd0a =
-  BG.fromFFIType hs_bindgen_01a69fecc103bd0a_base
+  fmap BG.fromFFIType hs_bindgen_01a69fecc103bd0a_base
 
 {-# NOINLINE sDL_RumbleJoystick #-}
 
@@ -2345,7 +2353,7 @@
            )
        )
 hs_bindgen_9190634ce5c1726f =
-  BG.fromFFIType hs_bindgen_9190634ce5c1726f_base
+  fmap BG.fromFFIType hs_bindgen_9190634ce5c1726f_base
 
 {-# NOINLINE sDL_RumbleJoystickTriggers #-}
 
@@ -2402,7 +2410,7 @@
            )
        )
 hs_bindgen_a99b95fd254e2484 =
-  BG.fromFFIType hs_bindgen_a99b95fd254e2484_base
+  fmap BG.fromFFIType hs_bindgen_a99b95fd254e2484_base
 
 {-# NOINLINE sDL_SetJoystickLED #-}
 
@@ -2447,7 +2455,7 @@
 hs_bindgen_2552aba22a4e5237
   :: IO (BG.FunPtr (BG.Ptr SDL_Joystick -> PtrConst.PtrConst BG.Void -> BG.CInt -> IO BG.CBool))
 hs_bindgen_2552aba22a4e5237 =
-  BG.fromFFIType hs_bindgen_2552aba22a4e5237_base
+  fmap BG.fromFFIType hs_bindgen_2552aba22a4e5237_base
 
 {-# NOINLINE sDL_SendJoystickEffect #-}
 
@@ -2479,7 +2487,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_get_SDL_CloseJoystick@
 hs_bindgen_85ce86bc3120d0c6 :: IO (BG.FunPtr (BG.Ptr SDL_Joystick -> IO ()))
 hs_bindgen_85ce86bc3120d0c6 =
-  BG.fromFFIType hs_bindgen_85ce86bc3120d0c6_base
+  fmap BG.fromFFIType hs_bindgen_85ce86bc3120d0c6_base
 
 {-# NOINLINE sDL_CloseJoystick #-}
 
@@ -2507,7 +2515,7 @@
 hs_bindgen_47061e113b50ffdc
   :: IO (BG.FunPtr (BG.Ptr SDL_Joystick -> IO SDL_JoystickConnectionState))
 hs_bindgen_47061e113b50ffdc =
-  BG.fromFFIType hs_bindgen_47061e113b50ffdc_base
+  fmap BG.fromFFIType hs_bindgen_47061e113b50ffdc_base
 
 {-# NOINLINE sDL_GetJoystickConnectionState #-}
 
@@ -2535,7 +2543,7 @@
 hs_bindgen_cf314c27d59c09a1
   :: IO (BG.FunPtr (BG.Ptr SDL_Joystick -> BG.Ptr BG.CInt -> IO SDL3.Sys.Bindgen.Power.SDL_PowerState))
 hs_bindgen_cf314c27d59c09a1 =
-  BG.fromFFIType hs_bindgen_cf314c27d59c09a1_base
+  fmap BG.fromFFIType hs_bindgen_cf314c27d59c09a1_base
 
 {-# NOINLINE sDL_GetJoystickPowerInfo #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Joystick/Safe.hs b/src/SDL3/Sys/Bindgen/Joystick/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Joystick/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Joystick/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Joystick.Safe (
@@ -64,7 +66,11 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Guid qualified
@@ -76,7 +82,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_joystick.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_joystick.h>"
          , "void hs_bindgen_19b2fb0e1aa23b4e (void)"
          , "{"
          , "  (SDL_LockJoysticks)();"
@@ -473,7 +483,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_LockJoysticks@
 hs_bindgen_19b2fb0e1aa23b4e :: IO ()
 hs_bindgen_19b2fb0e1aa23b4e =
-  BG.fromFFIType hs_bindgen_19b2fb0e1aa23b4e_base
+  hs_bindgen_19b2fb0e1aa23b4e_base
 
 -- | Locking for atomic access to the joystick API.
 --
@@ -495,7 +505,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_UnlockJoysticks@
 hs_bindgen_1e385ec73db339ad :: IO ()
 hs_bindgen_1e385ec73db339ad =
-  BG.fromFFIType hs_bindgen_1e385ec73db339ad_base
+  hs_bindgen_1e385ec73db339ad_base
 
 -- | Unlocking for atomic access to the joystick API.
 --
@@ -510,12 +520,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_HasJoystick@
 foreign import ccall safe "hs_bindgen_35e62bce1113cd99"
   hs_bindgen_35e62bce1113cd99_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_HasJoystick@
 hs_bindgen_35e62bce1113cd99 :: IO BG.CBool
 hs_bindgen_35e62bce1113cd99 =
-  BG.fromFFIType hs_bindgen_35e62bce1113cd99_base
+  fmap BG.fromFFIType hs_bindgen_35e62bce1113cd99_base
 
 -- | Return whether a joystick is currently connected.
 --
@@ -542,7 +552,8 @@
   :: BG.Ptr BG.CInt
   -> IO (BG.Ptr SDL_JoystickID)
 hs_bindgen_a648e48d15a7195e =
-  BG.fromFFIType hs_bindgen_a648e48d15a7195e_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a648e48d15a7195e_base (BG.toFFIType x0))
 
 -- | Get a list of currently connected joysticks.
 --
@@ -566,7 +577,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetJoystickNameForID@
 foreign import ccall safe "hs_bindgen_25173d20a8c29264"
   hs_bindgen_25173d20a8c29264_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetJoystickNameForID@
@@ -574,7 +585,8 @@
   :: SDL_JoystickID
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_25173d20a8c29264 =
-  BG.fromFFIType hs_bindgen_25173d20a8c29264_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_25173d20a8c29264_base (BG.toFFIType x0))
 
 -- | Get the implementation dependent name of a joystick.
 --
@@ -601,7 +613,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetJoystickPathForID@
 foreign import ccall safe "hs_bindgen_bdd23d794dc05a80"
   hs_bindgen_bdd23d794dc05a80_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetJoystickPathForID@
@@ -609,7 +621,8 @@
   :: SDL_JoystickID
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_bdd23d794dc05a80 =
-  BG.fromFFIType hs_bindgen_bdd23d794dc05a80_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_bdd23d794dc05a80_base (BG.toFFIType x0))
 
 -- | Get the implementation dependent path of a joystick.
 --
@@ -636,15 +649,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetJoystickPlayerIndexForID@
 foreign import ccall safe "hs_bindgen_79f42832d2cd073a"
   hs_bindgen_79f42832d2cd073a_base
-    :: BG.Word32
-    -> IO BG.Int32
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetJoystickPlayerIndexForID@
 hs_bindgen_79f42832d2cd073a
   :: SDL_JoystickID
   -> IO BG.CInt
 hs_bindgen_79f42832d2cd073a =
-  BG.fromFFIType hs_bindgen_79f42832d2cd073a_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_79f42832d2cd073a_base (BG.toFFIType x0))
 
 -- | Get the player index of a joystick.
 --
@@ -671,7 +685,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetJoystickGUIDForID@
 foreign import ccall safe "hs_bindgen_f9a989144ab124be"
   hs_bindgen_f9a989144ab124be_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> IO ()
 
@@ -681,7 +695,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Guid.SDL_GUID
   -> IO ()
 hs_bindgen_f9a989144ab124be =
-  BG.fromFFIType hs_bindgen_f9a989144ab124be_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_f9a989144ab124be_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Get the implementation-dependent GUID of a joystick.
 --
@@ -712,15 +728,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetJoystickVendorForID@
 foreign import ccall safe "hs_bindgen_eadbde2ef191eb5b"
   hs_bindgen_eadbde2ef191eb5b_base
-    :: BG.Word32
-    -> IO BG.Word16
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO HsBindgen.Runtime.LibC.Word16
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetJoystickVendorForID@
 hs_bindgen_eadbde2ef191eb5b
   :: SDL_JoystickID
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
 hs_bindgen_eadbde2ef191eb5b =
-  BG.fromFFIType hs_bindgen_eadbde2ef191eb5b_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_eadbde2ef191eb5b_base (BG.toFFIType x0))
 
 -- | Get the USB vendor ID of a joystick, if available.
 --
@@ -747,15 +764,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetJoystickProductForID@
 foreign import ccall safe "hs_bindgen_bb593396127cd149"
   hs_bindgen_bb593396127cd149_base
-    :: BG.Word32
-    -> IO BG.Word16
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO HsBindgen.Runtime.LibC.Word16
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetJoystickProductForID@
 hs_bindgen_bb593396127cd149
   :: SDL_JoystickID
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
 hs_bindgen_bb593396127cd149 =
-  BG.fromFFIType hs_bindgen_bb593396127cd149_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_bb593396127cd149_base (BG.toFFIType x0))
 
 -- | Get the USB product ID of a joystick, if available.
 --
@@ -782,15 +800,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetJoystickProductVersionForID@
 foreign import ccall safe "hs_bindgen_44e1a599dadd0805"
   hs_bindgen_44e1a599dadd0805_base
-    :: BG.Word32
-    -> IO BG.Word16
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO HsBindgen.Runtime.LibC.Word16
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetJoystickProductVersionForID@
 hs_bindgen_44e1a599dadd0805
   :: SDL_JoystickID
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
 hs_bindgen_44e1a599dadd0805 =
-  BG.fromFFIType hs_bindgen_44e1a599dadd0805_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_44e1a599dadd0805_base (BG.toFFIType x0))
 
 -- | Get the product version of a joystick, if available.
 --
@@ -817,15 +836,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetJoystickTypeForID@
 foreign import ccall safe "hs_bindgen_336781da50ffa73f"
   hs_bindgen_336781da50ffa73f_base
-    :: BG.Word32
-    -> IO BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetJoystickTypeForID@
 hs_bindgen_336781da50ffa73f
   :: SDL_JoystickID
   -> IO SDL_JoystickType
 hs_bindgen_336781da50ffa73f =
-  BG.fromFFIType hs_bindgen_336781da50ffa73f_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_336781da50ffa73f_base (BG.toFFIType x0))
 
 -- | Get the type of a joystick, if available.
 --
@@ -852,7 +872,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_OpenJoystick@
 foreign import ccall safe "hs_bindgen_a95f6ee451f3128f"
   hs_bindgen_a95f6ee451f3128f_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_OpenJoystick@
@@ -860,7 +880,8 @@
   :: SDL_JoystickID
   -> IO (BG.Ptr SDL_Joystick)
 hs_bindgen_a95f6ee451f3128f =
-  BG.fromFFIType hs_bindgen_a95f6ee451f3128f_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a95f6ee451f3128f_base (BG.toFFIType x0))
 
 -- | Open a joystick for use.
 --
@@ -886,7 +907,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetJoystickFromID@
 foreign import ccall safe "hs_bindgen_8b8e060d989b32c5"
   hs_bindgen_8b8e060d989b32c5_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetJoystickFromID@
@@ -894,7 +915,8 @@
   :: SDL_JoystickID
   -> IO (BG.Ptr SDL_Joystick)
 hs_bindgen_8b8e060d989b32c5 =
-  BG.fromFFIType hs_bindgen_8b8e060d989b32c5_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_8b8e060d989b32c5_base (BG.toFFIType x0))
 
 -- | Get the 'SDL_Joystick' associated with an instance ID, if it has been opened.
 --
@@ -916,7 +938,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetJoystickFromPlayerIndex@
 foreign import ccall safe "hs_bindgen_435b2937a9d773b0"
   hs_bindgen_435b2937a9d773b0_base
-    :: BG.Int32
+    :: BG.CInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetJoystickFromPlayerIndex@
@@ -924,7 +946,8 @@
   :: BG.CInt
   -> IO (BG.Ptr SDL_Joystick)
 hs_bindgen_435b2937a9d773b0 =
-  BG.fromFFIType hs_bindgen_435b2937a9d773b0_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_435b2937a9d773b0_base (BG.toFFIType x0))
 
 -- | Get the 'SDL_Joystick' associated with a player index.
 --
@@ -950,14 +973,15 @@
 foreign import ccall safe "hs_bindgen_9b992b621bc9d228"
   hs_bindgen_9b992b621bc9d228_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_AttachVirtualJoystick@
 hs_bindgen_9b992b621bc9d228
   :: PtrConst.PtrConst SDL_VirtualJoystickDesc
   -> IO SDL_JoystickID
 hs_bindgen_9b992b621bc9d228 =
-  BG.fromFFIType hs_bindgen_9b992b621bc9d228_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_9b992b621bc9d228_base (BG.toFFIType x0))
 
 -- | Attach a new virtual joystick.
 --
@@ -988,15 +1012,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_DetachVirtualJoystick@
 foreign import ccall safe "hs_bindgen_95f96ae58c7060c5"
   hs_bindgen_95f96ae58c7060c5_base
-    :: BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_DetachVirtualJoystick@
 hs_bindgen_95f96ae58c7060c5
   :: SDL_JoystickID
   -> IO BG.CBool
 hs_bindgen_95f96ae58c7060c5 =
-  BG.fromFFIType hs_bindgen_95f96ae58c7060c5_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_95f96ae58c7060c5_base (BG.toFFIType x0))
 
 -- | Detach a virtual joystick.
 --
@@ -1021,15 +1046,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_IsJoystickVirtual@
 foreign import ccall safe "hs_bindgen_b4d6fc0d358b2610"
   hs_bindgen_b4d6fc0d358b2610_base
-    :: BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_IsJoystickVirtual@
 hs_bindgen_b4d6fc0d358b2610
   :: SDL_JoystickID
   -> IO BG.CBool
 hs_bindgen_b4d6fc0d358b2610 =
-  BG.fromFFIType hs_bindgen_b4d6fc0d358b2610_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_b4d6fc0d358b2610_base (BG.toFFIType x0))
 
 -- | Query whether or not a joystick is virtual.
 --
@@ -1052,9 +1078,9 @@
 foreign import ccall safe "hs_bindgen_950280d1c0af9b76"
   hs_bindgen_950280d1c0af9b76_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int16
-    -> IO BG.Word8
+    -> BG.CInt
+    -> HsBindgen.Runtime.LibC.Int16
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_SetJoystickVirtualAxis@
 hs_bindgen_950280d1c0af9b76
@@ -1063,7 +1089,12 @@
   -> SDL3.Sys.Bindgen.Stdinc.Sint16
   -> IO BG.CBool
 hs_bindgen_950280d1c0af9b76 =
-  BG.fromFFIType hs_bindgen_950280d1c0af9b76_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_950280d1c0af9b76_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set the state of an axis on an opened virtual joystick.
 --
@@ -1101,10 +1132,10 @@
 foreign import ccall safe "hs_bindgen_ebe45871302400bf"
   hs_bindgen_ebe45871302400bf_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int16
-    -> BG.Int16
-    -> IO BG.Word8
+    -> BG.CInt
+    -> HsBindgen.Runtime.LibC.Int16
+    -> HsBindgen.Runtime.LibC.Int16
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_SetJoystickVirtualBall@
 hs_bindgen_ebe45871302400bf
@@ -1114,7 +1145,18 @@
   -> SDL3.Sys.Bindgen.Stdinc.Sint16
   -> IO BG.CBool
 hs_bindgen_ebe45871302400bf =
-  BG.fromFFIType hs_bindgen_ebe45871302400bf_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_ebe45871302400bf_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Generate ball motion on an opened virtual joystick.
 --
@@ -1154,9 +1196,9 @@
 foreign import ccall safe "hs_bindgen_943b4ea8f02f7dfb"
   hs_bindgen_943b4ea8f02f7dfb_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CInt
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_SetJoystickVirtualButton@
 hs_bindgen_943b4ea8f02f7dfb
@@ -1165,7 +1207,12 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_943b4ea8f02f7dfb =
-  BG.fromFFIType hs_bindgen_943b4ea8f02f7dfb_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_943b4ea8f02f7dfb_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set the state of a button on an opened virtual joystick.
 --
@@ -1201,9 +1248,9 @@
 foreign import ccall safe "hs_bindgen_466a950a48c1bafe"
   hs_bindgen_466a950a48c1bafe_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CInt
+    -> HsBindgen.Runtime.LibC.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_SetJoystickVirtualHat@
 hs_bindgen_466a950a48c1bafe
@@ -1212,7 +1259,12 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO BG.CBool
 hs_bindgen_466a950a48c1bafe =
-  BG.fromFFIType hs_bindgen_466a950a48c1bafe_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_466a950a48c1bafe_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set the state of a hat on an opened virtual joystick.
 --
@@ -1248,13 +1300,13 @@
 foreign import ccall safe "hs_bindgen_520069e80ffda161"
   hs_bindgen_520069e80ffda161_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> BG.Word8
-    -> Float
-    -> Float
-    -> Float
-    -> IO BG.Word8
+    -> BG.CInt
+    -> BG.CInt
+    -> BG.CBool
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.CFloat
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_SetJoystickVirtualTouchpad@
 hs_bindgen_520069e80ffda161
@@ -1267,7 +1319,24 @@
   -> BG.CFloat
   -> IO BG.CBool
 hs_bindgen_520069e80ffda161 =
-  BG.fromFFIType hs_bindgen_520069e80ffda161_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                fmap
+                  BG.fromFFIType
+                  ( hs_bindgen_520069e80ffda161_base
+                      (BG.toFFIType x0)
+                      (BG.toFFIType x1)
+                      (BG.toFFIType x2)
+                      (BG.toFFIType x3)
+                      (BG.toFFIType x4)
+                      (BG.toFFIType x5)
+                      (BG.toFFIType x6)
+                  )
 
 -- | Set touchpad finger state on an opened virtual joystick.
 --
@@ -1319,11 +1388,11 @@
 foreign import ccall safe "hs_bindgen_502da6838ce8a4f8"
   hs_bindgen_502da6838ce8a4f8_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Word64
+    -> HsBindgen.Runtime.Support.CInt
+    -> HsBindgen.Runtime.LibC.Word64
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_SendJoystickVirtualSensorData@
 hs_bindgen_502da6838ce8a4f8
@@ -1334,7 +1403,20 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_502da6838ce8a4f8 =
-  BG.fromFFIType hs_bindgen_502da6838ce8a4f8_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_502da6838ce8a4f8_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Send a sensor update for an opened virtual joystick.
 --
@@ -1378,14 +1460,15 @@
 foreign import ccall safe "hs_bindgen_0e41310a58070b5c"
   hs_bindgen_0e41310a58070b5c_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetJoystickProperties@
 hs_bindgen_0e41310a58070b5c
   :: BG.Ptr SDL_Joystick
   -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
 hs_bindgen_0e41310a58070b5c =
-  BG.fromFFIType hs_bindgen_0e41310a58070b5c_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_0e41310a58070b5c_base (BG.toFFIType x0))
 
 -- | Get the properties associated with a joystick.
 --
@@ -1428,7 +1511,8 @@
   :: BG.Ptr SDL_Joystick
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_a9e087059d7ddd66 =
-  BG.fromFFIType hs_bindgen_a9e087059d7ddd66_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a9e087059d7ddd66_base (BG.toFFIType x0))
 
 -- | Get the implementation dependent name of a joystick.
 --
@@ -1460,7 +1544,8 @@
   :: BG.Ptr SDL_Joystick
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_33ba12816518ab07 =
-  BG.fromFFIType hs_bindgen_33ba12816518ab07_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_33ba12816518ab07_base (BG.toFFIType x0))
 
 -- | Get the implementation dependent path of a joystick.
 --
@@ -1485,14 +1570,15 @@
 foreign import ccall safe "hs_bindgen_3f3bef7e45cb79c2"
   hs_bindgen_3f3bef7e45cb79c2_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetJoystickPlayerIndex@
 hs_bindgen_3f3bef7e45cb79c2
   :: BG.Ptr SDL_Joystick
   -> IO BG.CInt
 hs_bindgen_3f3bef7e45cb79c2 =
-  BG.fromFFIType hs_bindgen_3f3bef7e45cb79c2_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3f3bef7e45cb79c2_base (BG.toFFIType x0))
 
 -- | Get the player index of an opened joystick.
 --
@@ -1520,8 +1606,8 @@
 foreign import ccall safe "hs_bindgen_24bf75158e208f66"
   hs_bindgen_24bf75158e208f66_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_SetJoystickPlayerIndex@
 hs_bindgen_24bf75158e208f66
@@ -1529,7 +1615,9 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_24bf75158e208f66 =
-  BG.fromFFIType hs_bindgen_24bf75158e208f66_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_24bf75158e208f66_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the player index of an opened joystick.
 --
@@ -1568,7 +1656,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Guid.SDL_GUID
   -> IO ()
 hs_bindgen_9d48edfe80deea21 =
-  BG.fromFFIType hs_bindgen_9d48edfe80deea21_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_9d48edfe80deea21_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Get the implementation-dependent GUID for the joystick.
 --
@@ -1600,14 +1690,15 @@
 foreign import ccall safe "hs_bindgen_58e23abd1321767d"
   hs_bindgen_58e23abd1321767d_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word16
+    -> IO HsBindgen.Runtime.LibC.Word16
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetJoystickVendor@
 hs_bindgen_58e23abd1321767d
   :: BG.Ptr SDL_Joystick
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
 hs_bindgen_58e23abd1321767d =
-  BG.fromFFIType hs_bindgen_58e23abd1321767d_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_58e23abd1321767d_base (BG.toFFIType x0))
 
 -- | Get the USB vendor ID of an opened joystick, if available.
 --
@@ -1634,14 +1725,15 @@
 foreign import ccall safe "hs_bindgen_a1a810fac491b03c"
   hs_bindgen_a1a810fac491b03c_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word16
+    -> IO HsBindgen.Runtime.LibC.Word16
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetJoystickProduct@
 hs_bindgen_a1a810fac491b03c
   :: BG.Ptr SDL_Joystick
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
 hs_bindgen_a1a810fac491b03c =
-  BG.fromFFIType hs_bindgen_a1a810fac491b03c_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a1a810fac491b03c_base (BG.toFFIType x0))
 
 -- | Get the USB product ID of an opened joystick, if available.
 --
@@ -1668,14 +1760,15 @@
 foreign import ccall safe "hs_bindgen_ffcb72c6f02c76c7"
   hs_bindgen_ffcb72c6f02c76c7_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word16
+    -> IO HsBindgen.Runtime.LibC.Word16
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetJoystickProductVersion@
 hs_bindgen_ffcb72c6f02c76c7
   :: BG.Ptr SDL_Joystick
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
 hs_bindgen_ffcb72c6f02c76c7 =
-  BG.fromFFIType hs_bindgen_ffcb72c6f02c76c7_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_ffcb72c6f02c76c7_base (BG.toFFIType x0))
 
 -- | Get the product version of an opened joystick, if available.
 --
@@ -1703,14 +1796,15 @@
 foreign import ccall safe "hs_bindgen_990e53211d186662"
   hs_bindgen_990e53211d186662_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word16
+    -> IO HsBindgen.Runtime.LibC.Word16
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetJoystickFirmwareVersion@
 hs_bindgen_990e53211d186662
   :: BG.Ptr SDL_Joystick
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
 hs_bindgen_990e53211d186662 =
-  BG.fromFFIType hs_bindgen_990e53211d186662_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_990e53211d186662_base (BG.toFFIType x0))
 
 -- | Get the firmware version of an opened joystick, if available.
 --
@@ -1743,7 +1837,8 @@
   :: BG.Ptr SDL_Joystick
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_b1bfb007ec57169c =
-  BG.fromFFIType hs_bindgen_b1bfb007ec57169c_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_b1bfb007ec57169c_base (BG.toFFIType x0))
 
 -- | Get the serial number of an opened joystick, if available.
 --
@@ -1768,14 +1863,15 @@
 foreign import ccall safe "hs_bindgen_4bbfdbe521ae4448"
   hs_bindgen_4bbfdbe521ae4448_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetJoystickType@
 hs_bindgen_4bbfdbe521ae4448
   :: BG.Ptr SDL_Joystick
   -> IO SDL_JoystickType
 hs_bindgen_4bbfdbe521ae4448 =
-  BG.fromFFIType hs_bindgen_4bbfdbe521ae4448_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_4bbfdbe521ae4448_base (BG.toFFIType x0))
 
 -- | Get the type of an opened joystick.
 --
@@ -1815,7 +1911,17 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint16
   -> IO ()
 hs_bindgen_ac4457e1668303cb =
-  BG.fromFFIType hs_bindgen_ac4457e1668303cb_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            hs_bindgen_ac4457e1668303cb_base
+              (BG.toFFIType x0)
+              (BG.toFFIType x1)
+              (BG.toFFIType x2)
+              (BG.toFFIType x3)
+              (BG.toFFIType x4)
 
 -- | Get the device information encoded in a SDL_GUID structure.
 --
@@ -1864,14 +1970,15 @@
 foreign import ccall safe "hs_bindgen_fd1547f6643cd55d"
   hs_bindgen_fd1547f6643cd55d_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_JoystickConnected@
 hs_bindgen_fd1547f6643cd55d
   :: BG.Ptr SDL_Joystick
   -> IO BG.CBool
 hs_bindgen_fd1547f6643cd55d =
-  BG.fromFFIType hs_bindgen_fd1547f6643cd55d_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_fd1547f6643cd55d_base (BG.toFFIType x0))
 
 -- | Get the status of a specified joystick.
 --
@@ -1894,14 +2001,15 @@
 foreign import ccall safe "hs_bindgen_e792f601776227ad"
   hs_bindgen_e792f601776227ad_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetJoystickID@
 hs_bindgen_e792f601776227ad
   :: BG.Ptr SDL_Joystick
   -> IO SDL_JoystickID
 hs_bindgen_e792f601776227ad =
-  BG.fromFFIType hs_bindgen_e792f601776227ad_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_e792f601776227ad_base (BG.toFFIType x0))
 
 -- | Get the instance ID of an opened joystick.
 --
@@ -1924,14 +2032,15 @@
 foreign import ccall safe "hs_bindgen_eb5cf1b5a80cb490"
   hs_bindgen_eb5cf1b5a80cb490_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetNumJoystickAxes@
 hs_bindgen_eb5cf1b5a80cb490
   :: BG.Ptr SDL_Joystick
   -> IO BG.CInt
 hs_bindgen_eb5cf1b5a80cb490 =
-  BG.fromFFIType hs_bindgen_eb5cf1b5a80cb490_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_eb5cf1b5a80cb490_base (BG.toFFIType x0))
 
 -- | Get the number of general axis controls on a joystick.
 --
@@ -1958,14 +2067,15 @@
 foreign import ccall safe "hs_bindgen_e856e95bf561b58f"
   hs_bindgen_e856e95bf561b58f_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetNumJoystickBalls@
 hs_bindgen_e856e95bf561b58f
   :: BG.Ptr SDL_Joystick
   -> IO BG.CInt
 hs_bindgen_e856e95bf561b58f =
-  BG.fromFFIType hs_bindgen_e856e95bf561b58f_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_e856e95bf561b58f_base (BG.toFFIType x0))
 
 -- | Get the number of trackballs on a joystick.
 --
@@ -1994,14 +2104,15 @@
 foreign import ccall safe "hs_bindgen_14f7806c41b802cb"
   hs_bindgen_14f7806c41b802cb_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetNumJoystickHats@
 hs_bindgen_14f7806c41b802cb
   :: BG.Ptr SDL_Joystick
   -> IO BG.CInt
 hs_bindgen_14f7806c41b802cb =
-  BG.fromFFIType hs_bindgen_14f7806c41b802cb_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_14f7806c41b802cb_base (BG.toFFIType x0))
 
 -- | Get the number of POV hats on a joystick.
 --
@@ -2026,14 +2137,15 @@
 foreign import ccall safe "hs_bindgen_737397e3a398beb9"
   hs_bindgen_737397e3a398beb9_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetNumJoystickButtons@
 hs_bindgen_737397e3a398beb9
   :: BG.Ptr SDL_Joystick
   -> IO BG.CInt
 hs_bindgen_737397e3a398beb9 =
-  BG.fromFFIType hs_bindgen_737397e3a398beb9_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_737397e3a398beb9_base (BG.toFFIType x0))
 
 -- | Get the number of buttons on a joystick.
 --
@@ -2058,7 +2170,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_SetJoystickEventsEnabled@
 foreign import ccall safe "hs_bindgen_ed51a1754ff9d6c7"
   hs_bindgen_ed51a1754ff9d6c7_base
-    :: BG.Word8
+    :: BG.CBool
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_SetJoystickEventsEnabled@
@@ -2066,7 +2178,8 @@
   :: BG.CBool
   -> IO ()
 hs_bindgen_ed51a1754ff9d6c7 =
-  BG.fromFFIType hs_bindgen_ed51a1754ff9d6c7_base
+  \x0 ->
+    hs_bindgen_ed51a1754ff9d6c7_base (BG.toFFIType x0)
 
 -- | Set the state of joystick event processing.
 --
@@ -2091,12 +2204,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_JoystickEventsEnabled@
 foreign import ccall safe "hs_bindgen_86ece04390ea5953"
   hs_bindgen_86ece04390ea5953_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_JoystickEventsEnabled@
 hs_bindgen_86ece04390ea5953 :: IO BG.CBool
 hs_bindgen_86ece04390ea5953 =
-  BG.fromFFIType hs_bindgen_86ece04390ea5953_base
+  fmap BG.fromFFIType hs_bindgen_86ece04390ea5953_base
 
 -- | Query the state of joystick event processing.
 --
@@ -2123,7 +2236,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_UpdateJoysticks@
 hs_bindgen_277bf35db967cb76 :: IO ()
 hs_bindgen_277bf35db967cb76 =
-  BG.fromFFIType hs_bindgen_277bf35db967cb76_base
+  hs_bindgen_277bf35db967cb76_base
 
 -- | Update the current state of the open joysticks.
 --
@@ -2141,8 +2254,8 @@
 foreign import ccall safe "hs_bindgen_5ffa383d290b6a82"
   hs_bindgen_5ffa383d290b6a82_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Int16
+    -> BG.CInt
+    -> IO HsBindgen.Runtime.LibC.Int16
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetJoystickAxis@
 hs_bindgen_5ffa383d290b6a82
@@ -2150,7 +2263,9 @@
   -> BG.CInt
   -> IO SDL3.Sys.Bindgen.Stdinc.Sint16
 hs_bindgen_5ffa383d290b6a82 =
-  BG.fromFFIType hs_bindgen_5ffa383d290b6a82_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_5ffa383d290b6a82_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the current state of an axis control on a joystick.
 --
@@ -2183,9 +2298,9 @@
 foreign import ccall safe "hs_bindgen_427de097dfec8d31"
   hs_bindgen_427de097dfec8d31_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetJoystickAxisInitialState@
 hs_bindgen_427de097dfec8d31
@@ -2194,7 +2309,12 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Sint16
   -> IO BG.CBool
 hs_bindgen_427de097dfec8d31 =
-  BG.fromFFIType hs_bindgen_427de097dfec8d31_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_427de097dfec8d31_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get the initial state of an axis control on a joystick.
 --
@@ -2230,10 +2350,10 @@
 foreign import ccall safe "hs_bindgen_aee21b71d3004e03"
   hs_bindgen_aee21b71d3004e03_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetJoystickBall@
 hs_bindgen_aee21b71d3004e03
@@ -2243,7 +2363,18 @@
   -> BG.Ptr BG.CInt
   -> IO BG.CBool
 hs_bindgen_aee21b71d3004e03 =
-  BG.fromFFIType hs_bindgen_aee21b71d3004e03_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_aee21b71d3004e03_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Get the ball axis change since the last poll.
 --
@@ -2284,8 +2415,8 @@
 foreign import ccall safe "hs_bindgen_03a81f7b52479c1f"
   hs_bindgen_03a81f7b52479c1f_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO HsBindgen.Runtime.LibC.Word8
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetJoystickHat@
 hs_bindgen_03a81f7b52479c1f
@@ -2293,7 +2424,9 @@
   -> BG.CInt
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint8
 hs_bindgen_03a81f7b52479c1f =
-  BG.fromFFIType hs_bindgen_03a81f7b52479c1f_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_03a81f7b52479c1f_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the current state of a POV hat on a joystick.
 --
@@ -2324,8 +2457,8 @@
 foreign import ccall safe "hs_bindgen_066ace0739b36572"
   hs_bindgen_066ace0739b36572_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetJoystickButton@
 hs_bindgen_066ace0739b36572
@@ -2333,7 +2466,9 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_066ace0739b36572 =
-  BG.fromFFIType hs_bindgen_066ace0739b36572_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_066ace0739b36572_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the current state of a button on a joystick.
 --
@@ -2362,10 +2497,10 @@
 foreign import ccall safe "hs_bindgen_7e8a72caa95f2c2b"
   hs_bindgen_7e8a72caa95f2c2b_base
     :: BG.Ptr BG.Void
-    -> BG.Word16
-    -> BG.Word16
-    -> BG.Word32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word16
+    -> HsBindgen.Runtime.LibC.Word16
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_RumbleJoystick@
 hs_bindgen_7e8a72caa95f2c2b
@@ -2375,7 +2510,18 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_7e8a72caa95f2c2b =
-  BG.fromFFIType hs_bindgen_7e8a72caa95f2c2b_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_7e8a72caa95f2c2b_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Start a rumble effect.
 --
@@ -2414,10 +2560,10 @@
 foreign import ccall safe "hs_bindgen_301092a71603b81a"
   hs_bindgen_301092a71603b81a_base
     :: BG.Ptr BG.Void
-    -> BG.Word16
-    -> BG.Word16
-    -> BG.Word32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word16
+    -> HsBindgen.Runtime.LibC.Word16
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_RumbleJoystickTriggers@
 hs_bindgen_301092a71603b81a
@@ -2427,7 +2573,18 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_301092a71603b81a =
-  BG.fromFFIType hs_bindgen_301092a71603b81a_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_301092a71603b81a_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Start a rumble effect in the joystick\'s triggers.
 --
@@ -2471,10 +2628,10 @@
 foreign import ccall safe "hs_bindgen_8b94c1cbb487385b"
   hs_bindgen_8b94c1cbb487385b_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> BG.Word8
-    -> BG.Word8
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_SetJoystickLED@
 hs_bindgen_8b94c1cbb487385b
@@ -2484,7 +2641,18 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO BG.CBool
 hs_bindgen_8b94c1cbb487385b =
-  BG.fromFFIType hs_bindgen_8b94c1cbb487385b_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_8b94c1cbb487385b_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Update a joystick\'s LED color.
 --
@@ -2524,8 +2692,8 @@
   hs_bindgen_f7e59a6e5bb608fe_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_SendJoystickEffect@
 hs_bindgen_f7e59a6e5bb608fe
@@ -2534,7 +2702,12 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_f7e59a6e5bb608fe =
-  BG.fromFFIType hs_bindgen_f7e59a6e5bb608fe_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_f7e59a6e5bb608fe_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Send a joystick specific effect packet.
 --
@@ -2572,7 +2745,8 @@
   :: BG.Ptr SDL_Joystick
   -> IO ()
 hs_bindgen_ea0c624f184dccba =
-  BG.fromFFIType hs_bindgen_ea0c624f184dccba_base
+  \x0 ->
+    hs_bindgen_ea0c624f184dccba_base (BG.toFFIType x0)
 
 -- | Close a joystick previously opened with @SDL_OpenJoystick()@.
 --
@@ -2595,14 +2769,15 @@
 foreign import ccall safe "hs_bindgen_08992afe945eb606"
   hs_bindgen_08992afe945eb606_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetJoystickConnectionState@
 hs_bindgen_08992afe945eb606
   :: BG.Ptr SDL_Joystick
   -> IO SDL_JoystickConnectionState
 hs_bindgen_08992afe945eb606 =
-  BG.fromFFIType hs_bindgen_08992afe945eb606_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_08992afe945eb606_base (BG.toFFIType x0))
 
 -- | Get the connection state of a joystick.
 --
@@ -2627,7 +2802,7 @@
   hs_bindgen_8bfbd5889037e579_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO HsBindgen.Runtime.Support.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Safe_SDL_GetJoystickPowerInfo@
 hs_bindgen_8bfbd5889037e579
@@ -2635,7 +2810,9 @@
   -> BG.Ptr BG.CInt
   -> IO SDL3.Sys.Bindgen.Power.SDL_PowerState
 hs_bindgen_8bfbd5889037e579 =
-  BG.fromFFIType hs_bindgen_8bfbd5889037e579_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_8bfbd5889037e579_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the battery state of a joystick.
 --
diff --git a/src/SDL3/Sys/Bindgen/Joystick/Unsafe.hs b/src/SDL3/Sys/Bindgen/Joystick/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Joystick/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Joystick/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Joystick.Unsafe (
@@ -64,7 +66,11 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Guid qualified
@@ -76,7 +82,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_joystick.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_joystick.h>"
          , "void hs_bindgen_a5f9679bb55a9be2 (void)"
          , "{"
          , "  (SDL_LockJoysticks)();"
@@ -473,7 +483,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_LockJoysticks@
 hs_bindgen_a5f9679bb55a9be2 :: IO ()
 hs_bindgen_a5f9679bb55a9be2 =
-  BG.fromFFIType hs_bindgen_a5f9679bb55a9be2_base
+  hs_bindgen_a5f9679bb55a9be2_base
 
 -- | Locking for atomic access to the joystick API.
 --
@@ -495,7 +505,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_UnlockJoysticks@
 hs_bindgen_4fb7bf5674b81cd5 :: IO ()
 hs_bindgen_4fb7bf5674b81cd5 =
-  BG.fromFFIType hs_bindgen_4fb7bf5674b81cd5_base
+  hs_bindgen_4fb7bf5674b81cd5_base
 
 -- | Unlocking for atomic access to the joystick API.
 --
@@ -510,12 +520,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_HasJoystick@
 foreign import ccall unsafe "hs_bindgen_6974c5058c398636"
   hs_bindgen_6974c5058c398636_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_HasJoystick@
 hs_bindgen_6974c5058c398636 :: IO BG.CBool
 hs_bindgen_6974c5058c398636 =
-  BG.fromFFIType hs_bindgen_6974c5058c398636_base
+  fmap BG.fromFFIType hs_bindgen_6974c5058c398636_base
 
 -- | Return whether a joystick is currently connected.
 --
@@ -542,7 +552,8 @@
   :: BG.Ptr BG.CInt
   -> IO (BG.Ptr SDL_JoystickID)
 hs_bindgen_52b14e92fdb53649 =
-  BG.fromFFIType hs_bindgen_52b14e92fdb53649_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_52b14e92fdb53649_base (BG.toFFIType x0))
 
 -- | Get a list of currently connected joysticks.
 --
@@ -566,7 +577,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetJoystickNameForID@
 foreign import ccall unsafe "hs_bindgen_7e75165c0d2f9d72"
   hs_bindgen_7e75165c0d2f9d72_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetJoystickNameForID@
@@ -574,7 +585,8 @@
   :: SDL_JoystickID
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_7e75165c0d2f9d72 =
-  BG.fromFFIType hs_bindgen_7e75165c0d2f9d72_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_7e75165c0d2f9d72_base (BG.toFFIType x0))
 
 -- | Get the implementation dependent name of a joystick.
 --
@@ -601,7 +613,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetJoystickPathForID@
 foreign import ccall unsafe "hs_bindgen_2161a8b12229ac30"
   hs_bindgen_2161a8b12229ac30_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetJoystickPathForID@
@@ -609,7 +621,8 @@
   :: SDL_JoystickID
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_2161a8b12229ac30 =
-  BG.fromFFIType hs_bindgen_2161a8b12229ac30_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_2161a8b12229ac30_base (BG.toFFIType x0))
 
 -- | Get the implementation dependent path of a joystick.
 --
@@ -636,15 +649,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetJoystickPlayerIndexForID@
 foreign import ccall unsafe "hs_bindgen_386a2da9898f9057"
   hs_bindgen_386a2da9898f9057_base
-    :: BG.Word32
-    -> IO BG.Int32
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetJoystickPlayerIndexForID@
 hs_bindgen_386a2da9898f9057
   :: SDL_JoystickID
   -> IO BG.CInt
 hs_bindgen_386a2da9898f9057 =
-  BG.fromFFIType hs_bindgen_386a2da9898f9057_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_386a2da9898f9057_base (BG.toFFIType x0))
 
 -- | Get the player index of a joystick.
 --
@@ -671,7 +685,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetJoystickGUIDForID@
 foreign import ccall unsafe "hs_bindgen_bfb7bb52d70dab96"
   hs_bindgen_bfb7bb52d70dab96_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> IO ()
 
@@ -681,7 +695,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Guid.SDL_GUID
   -> IO ()
 hs_bindgen_bfb7bb52d70dab96 =
-  BG.fromFFIType hs_bindgen_bfb7bb52d70dab96_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_bfb7bb52d70dab96_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Get the implementation-dependent GUID of a joystick.
 --
@@ -712,15 +728,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetJoystickVendorForID@
 foreign import ccall unsafe "hs_bindgen_43fce2fd8176f766"
   hs_bindgen_43fce2fd8176f766_base
-    :: BG.Word32
-    -> IO BG.Word16
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO HsBindgen.Runtime.LibC.Word16
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetJoystickVendorForID@
 hs_bindgen_43fce2fd8176f766
   :: SDL_JoystickID
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
 hs_bindgen_43fce2fd8176f766 =
-  BG.fromFFIType hs_bindgen_43fce2fd8176f766_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_43fce2fd8176f766_base (BG.toFFIType x0))
 
 -- | Get the USB vendor ID of a joystick, if available.
 --
@@ -747,15 +764,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetJoystickProductForID@
 foreign import ccall unsafe "hs_bindgen_942a59625bde2720"
   hs_bindgen_942a59625bde2720_base
-    :: BG.Word32
-    -> IO BG.Word16
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO HsBindgen.Runtime.LibC.Word16
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetJoystickProductForID@
 hs_bindgen_942a59625bde2720
   :: SDL_JoystickID
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
 hs_bindgen_942a59625bde2720 =
-  BG.fromFFIType hs_bindgen_942a59625bde2720_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_942a59625bde2720_base (BG.toFFIType x0))
 
 -- | Get the USB product ID of a joystick, if available.
 --
@@ -782,15 +800,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetJoystickProductVersionForID@
 foreign import ccall unsafe "hs_bindgen_c4f2f0cc80e64773"
   hs_bindgen_c4f2f0cc80e64773_base
-    :: BG.Word32
-    -> IO BG.Word16
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO HsBindgen.Runtime.LibC.Word16
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetJoystickProductVersionForID@
 hs_bindgen_c4f2f0cc80e64773
   :: SDL_JoystickID
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
 hs_bindgen_c4f2f0cc80e64773 =
-  BG.fromFFIType hs_bindgen_c4f2f0cc80e64773_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c4f2f0cc80e64773_base (BG.toFFIType x0))
 
 -- | Get the product version of a joystick, if available.
 --
@@ -817,15 +836,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetJoystickTypeForID@
 foreign import ccall unsafe "hs_bindgen_d95cbbc03c3eccf3"
   hs_bindgen_d95cbbc03c3eccf3_base
-    :: BG.Word32
-    -> IO BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetJoystickTypeForID@
 hs_bindgen_d95cbbc03c3eccf3
   :: SDL_JoystickID
   -> IO SDL_JoystickType
 hs_bindgen_d95cbbc03c3eccf3 =
-  BG.fromFFIType hs_bindgen_d95cbbc03c3eccf3_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d95cbbc03c3eccf3_base (BG.toFFIType x0))
 
 -- | Get the type of a joystick, if available.
 --
@@ -852,7 +872,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_OpenJoystick@
 foreign import ccall unsafe "hs_bindgen_96b31a30b26b761d"
   hs_bindgen_96b31a30b26b761d_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_OpenJoystick@
@@ -860,7 +880,8 @@
   :: SDL_JoystickID
   -> IO (BG.Ptr SDL_Joystick)
 hs_bindgen_96b31a30b26b761d =
-  BG.fromFFIType hs_bindgen_96b31a30b26b761d_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_96b31a30b26b761d_base (BG.toFFIType x0))
 
 -- | Open a joystick for use.
 --
@@ -886,7 +907,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetJoystickFromID@
 foreign import ccall unsafe "hs_bindgen_79e317a6737caef2"
   hs_bindgen_79e317a6737caef2_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetJoystickFromID@
@@ -894,7 +915,8 @@
   :: SDL_JoystickID
   -> IO (BG.Ptr SDL_Joystick)
 hs_bindgen_79e317a6737caef2 =
-  BG.fromFFIType hs_bindgen_79e317a6737caef2_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_79e317a6737caef2_base (BG.toFFIType x0))
 
 -- | Get the 'SDL_Joystick' associated with an instance ID, if it has been opened.
 --
@@ -916,7 +938,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetJoystickFromPlayerIndex@
 foreign import ccall unsafe "hs_bindgen_533baada064a0d12"
   hs_bindgen_533baada064a0d12_base
-    :: BG.Int32
+    :: BG.CInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetJoystickFromPlayerIndex@
@@ -924,7 +946,8 @@
   :: BG.CInt
   -> IO (BG.Ptr SDL_Joystick)
 hs_bindgen_533baada064a0d12 =
-  BG.fromFFIType hs_bindgen_533baada064a0d12_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_533baada064a0d12_base (BG.toFFIType x0))
 
 -- | Get the 'SDL_Joystick' associated with a player index.
 --
@@ -950,14 +973,15 @@
 foreign import ccall unsafe "hs_bindgen_f778cfec8f93ba4b"
   hs_bindgen_f778cfec8f93ba4b_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_AttachVirtualJoystick@
 hs_bindgen_f778cfec8f93ba4b
   :: PtrConst.PtrConst SDL_VirtualJoystickDesc
   -> IO SDL_JoystickID
 hs_bindgen_f778cfec8f93ba4b =
-  BG.fromFFIType hs_bindgen_f778cfec8f93ba4b_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_f778cfec8f93ba4b_base (BG.toFFIType x0))
 
 -- | Attach a new virtual joystick.
 --
@@ -988,15 +1012,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_DetachVirtualJoystick@
 foreign import ccall unsafe "hs_bindgen_b1026bd68d5bfd9e"
   hs_bindgen_b1026bd68d5bfd9e_base
-    :: BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_DetachVirtualJoystick@
 hs_bindgen_b1026bd68d5bfd9e
   :: SDL_JoystickID
   -> IO BG.CBool
 hs_bindgen_b1026bd68d5bfd9e =
-  BG.fromFFIType hs_bindgen_b1026bd68d5bfd9e_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_b1026bd68d5bfd9e_base (BG.toFFIType x0))
 
 -- | Detach a virtual joystick.
 --
@@ -1021,15 +1046,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_IsJoystickVirtual@
 foreign import ccall unsafe "hs_bindgen_d1c274bbe874b100"
   hs_bindgen_d1c274bbe874b100_base
-    :: BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_IsJoystickVirtual@
 hs_bindgen_d1c274bbe874b100
   :: SDL_JoystickID
   -> IO BG.CBool
 hs_bindgen_d1c274bbe874b100 =
-  BG.fromFFIType hs_bindgen_d1c274bbe874b100_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d1c274bbe874b100_base (BG.toFFIType x0))
 
 -- | Query whether or not a joystick is virtual.
 --
@@ -1052,9 +1078,9 @@
 foreign import ccall unsafe "hs_bindgen_8eb5e45ef7f888cc"
   hs_bindgen_8eb5e45ef7f888cc_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int16
-    -> IO BG.Word8
+    -> BG.CInt
+    -> HsBindgen.Runtime.LibC.Int16
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_SetJoystickVirtualAxis@
 hs_bindgen_8eb5e45ef7f888cc
@@ -1063,7 +1089,12 @@
   -> SDL3.Sys.Bindgen.Stdinc.Sint16
   -> IO BG.CBool
 hs_bindgen_8eb5e45ef7f888cc =
-  BG.fromFFIType hs_bindgen_8eb5e45ef7f888cc_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_8eb5e45ef7f888cc_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set the state of an axis on an opened virtual joystick.
 --
@@ -1101,10 +1132,10 @@
 foreign import ccall unsafe "hs_bindgen_2e47467a34561f41"
   hs_bindgen_2e47467a34561f41_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int16
-    -> BG.Int16
-    -> IO BG.Word8
+    -> BG.CInt
+    -> HsBindgen.Runtime.LibC.Int16
+    -> HsBindgen.Runtime.LibC.Int16
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_SetJoystickVirtualBall@
 hs_bindgen_2e47467a34561f41
@@ -1114,7 +1145,18 @@
   -> SDL3.Sys.Bindgen.Stdinc.Sint16
   -> IO BG.CBool
 hs_bindgen_2e47467a34561f41 =
-  BG.fromFFIType hs_bindgen_2e47467a34561f41_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_2e47467a34561f41_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Generate ball motion on an opened virtual joystick.
 --
@@ -1154,9 +1196,9 @@
 foreign import ccall unsafe "hs_bindgen_d61b8aa1cc7bcea2"
   hs_bindgen_d61b8aa1cc7bcea2_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CInt
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_SetJoystickVirtualButton@
 hs_bindgen_d61b8aa1cc7bcea2
@@ -1165,7 +1207,12 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_d61b8aa1cc7bcea2 =
-  BG.fromFFIType hs_bindgen_d61b8aa1cc7bcea2_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_d61b8aa1cc7bcea2_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set the state of a button on an opened virtual joystick.
 --
@@ -1201,9 +1248,9 @@
 foreign import ccall unsafe "hs_bindgen_9e983d431a7b8fe6"
   hs_bindgen_9e983d431a7b8fe6_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CInt
+    -> HsBindgen.Runtime.LibC.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_SetJoystickVirtualHat@
 hs_bindgen_9e983d431a7b8fe6
@@ -1212,7 +1259,12 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO BG.CBool
 hs_bindgen_9e983d431a7b8fe6 =
-  BG.fromFFIType hs_bindgen_9e983d431a7b8fe6_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_9e983d431a7b8fe6_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set the state of a hat on an opened virtual joystick.
 --
@@ -1248,13 +1300,13 @@
 foreign import ccall unsafe "hs_bindgen_5bb42b2517c1eb69"
   hs_bindgen_5bb42b2517c1eb69_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> BG.Word8
-    -> Float
-    -> Float
-    -> Float
-    -> IO BG.Word8
+    -> BG.CInt
+    -> BG.CInt
+    -> BG.CBool
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.CFloat
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_SetJoystickVirtualTouchpad@
 hs_bindgen_5bb42b2517c1eb69
@@ -1267,7 +1319,24 @@
   -> BG.CFloat
   -> IO BG.CBool
 hs_bindgen_5bb42b2517c1eb69 =
-  BG.fromFFIType hs_bindgen_5bb42b2517c1eb69_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                fmap
+                  BG.fromFFIType
+                  ( hs_bindgen_5bb42b2517c1eb69_base
+                      (BG.toFFIType x0)
+                      (BG.toFFIType x1)
+                      (BG.toFFIType x2)
+                      (BG.toFFIType x3)
+                      (BG.toFFIType x4)
+                      (BG.toFFIType x5)
+                      (BG.toFFIType x6)
+                  )
 
 -- | Set touchpad finger state on an opened virtual joystick.
 --
@@ -1319,11 +1388,11 @@
 foreign import ccall unsafe "hs_bindgen_3d0650aed2d406ec"
   hs_bindgen_3d0650aed2d406ec_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Word64
+    -> HsBindgen.Runtime.Support.CInt
+    -> HsBindgen.Runtime.LibC.Word64
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_SendJoystickVirtualSensorData@
 hs_bindgen_3d0650aed2d406ec
@@ -1334,7 +1403,20 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_3d0650aed2d406ec =
-  BG.fromFFIType hs_bindgen_3d0650aed2d406ec_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_3d0650aed2d406ec_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Send a sensor update for an opened virtual joystick.
 --
@@ -1378,14 +1460,15 @@
 foreign import ccall unsafe "hs_bindgen_7b418051f3497220"
   hs_bindgen_7b418051f3497220_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetJoystickProperties@
 hs_bindgen_7b418051f3497220
   :: BG.Ptr SDL_Joystick
   -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
 hs_bindgen_7b418051f3497220 =
-  BG.fromFFIType hs_bindgen_7b418051f3497220_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_7b418051f3497220_base (BG.toFFIType x0))
 
 -- | Get the properties associated with a joystick.
 --
@@ -1428,7 +1511,8 @@
   :: BG.Ptr SDL_Joystick
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_efa173428595a9f5 =
-  BG.fromFFIType hs_bindgen_efa173428595a9f5_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_efa173428595a9f5_base (BG.toFFIType x0))
 
 -- | Get the implementation dependent name of a joystick.
 --
@@ -1460,7 +1544,8 @@
   :: BG.Ptr SDL_Joystick
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_1b1b5dcb365287fd =
-  BG.fromFFIType hs_bindgen_1b1b5dcb365287fd_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_1b1b5dcb365287fd_base (BG.toFFIType x0))
 
 -- | Get the implementation dependent path of a joystick.
 --
@@ -1485,14 +1570,15 @@
 foreign import ccall unsafe "hs_bindgen_55ef8dfcc4d84345"
   hs_bindgen_55ef8dfcc4d84345_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetJoystickPlayerIndex@
 hs_bindgen_55ef8dfcc4d84345
   :: BG.Ptr SDL_Joystick
   -> IO BG.CInt
 hs_bindgen_55ef8dfcc4d84345 =
-  BG.fromFFIType hs_bindgen_55ef8dfcc4d84345_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_55ef8dfcc4d84345_base (BG.toFFIType x0))
 
 -- | Get the player index of an opened joystick.
 --
@@ -1520,8 +1606,8 @@
 foreign import ccall unsafe "hs_bindgen_5e98a74b28f72b8e"
   hs_bindgen_5e98a74b28f72b8e_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_SetJoystickPlayerIndex@
 hs_bindgen_5e98a74b28f72b8e
@@ -1529,7 +1615,9 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_5e98a74b28f72b8e =
-  BG.fromFFIType hs_bindgen_5e98a74b28f72b8e_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_5e98a74b28f72b8e_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the player index of an opened joystick.
 --
@@ -1568,7 +1656,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Guid.SDL_GUID
   -> IO ()
 hs_bindgen_e5b4be9fcfc28bc3 =
-  BG.fromFFIType hs_bindgen_e5b4be9fcfc28bc3_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_e5b4be9fcfc28bc3_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Get the implementation-dependent GUID for the joystick.
 --
@@ -1600,14 +1690,15 @@
 foreign import ccall unsafe "hs_bindgen_62c6fda961bf2fa9"
   hs_bindgen_62c6fda961bf2fa9_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word16
+    -> IO HsBindgen.Runtime.LibC.Word16
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetJoystickVendor@
 hs_bindgen_62c6fda961bf2fa9
   :: BG.Ptr SDL_Joystick
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
 hs_bindgen_62c6fda961bf2fa9 =
-  BG.fromFFIType hs_bindgen_62c6fda961bf2fa9_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_62c6fda961bf2fa9_base (BG.toFFIType x0))
 
 -- | Get the USB vendor ID of an opened joystick, if available.
 --
@@ -1634,14 +1725,15 @@
 foreign import ccall unsafe "hs_bindgen_d7e0f0c36e50f0e2"
   hs_bindgen_d7e0f0c36e50f0e2_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word16
+    -> IO HsBindgen.Runtime.LibC.Word16
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetJoystickProduct@
 hs_bindgen_d7e0f0c36e50f0e2
   :: BG.Ptr SDL_Joystick
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
 hs_bindgen_d7e0f0c36e50f0e2 =
-  BG.fromFFIType hs_bindgen_d7e0f0c36e50f0e2_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d7e0f0c36e50f0e2_base (BG.toFFIType x0))
 
 -- | Get the USB product ID of an opened joystick, if available.
 --
@@ -1668,14 +1760,15 @@
 foreign import ccall unsafe "hs_bindgen_4d80e87af7618ebc"
   hs_bindgen_4d80e87af7618ebc_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word16
+    -> IO HsBindgen.Runtime.LibC.Word16
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetJoystickProductVersion@
 hs_bindgen_4d80e87af7618ebc
   :: BG.Ptr SDL_Joystick
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
 hs_bindgen_4d80e87af7618ebc =
-  BG.fromFFIType hs_bindgen_4d80e87af7618ebc_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_4d80e87af7618ebc_base (BG.toFFIType x0))
 
 -- | Get the product version of an opened joystick, if available.
 --
@@ -1703,14 +1796,15 @@
 foreign import ccall unsafe "hs_bindgen_29a99ec3dcd0fa98"
   hs_bindgen_29a99ec3dcd0fa98_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word16
+    -> IO HsBindgen.Runtime.LibC.Word16
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetJoystickFirmwareVersion@
 hs_bindgen_29a99ec3dcd0fa98
   :: BG.Ptr SDL_Joystick
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint16
 hs_bindgen_29a99ec3dcd0fa98 =
-  BG.fromFFIType hs_bindgen_29a99ec3dcd0fa98_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_29a99ec3dcd0fa98_base (BG.toFFIType x0))
 
 -- | Get the firmware version of an opened joystick, if available.
 --
@@ -1743,7 +1837,8 @@
   :: BG.Ptr SDL_Joystick
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_a4795a75ac263066 =
-  BG.fromFFIType hs_bindgen_a4795a75ac263066_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a4795a75ac263066_base (BG.toFFIType x0))
 
 -- | Get the serial number of an opened joystick, if available.
 --
@@ -1768,14 +1863,15 @@
 foreign import ccall unsafe "hs_bindgen_76843a2261bd1972"
   hs_bindgen_76843a2261bd1972_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetJoystickType@
 hs_bindgen_76843a2261bd1972
   :: BG.Ptr SDL_Joystick
   -> IO SDL_JoystickType
 hs_bindgen_76843a2261bd1972 =
-  BG.fromFFIType hs_bindgen_76843a2261bd1972_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_76843a2261bd1972_base (BG.toFFIType x0))
 
 -- | Get the type of an opened joystick.
 --
@@ -1815,7 +1911,17 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint16
   -> IO ()
 hs_bindgen_436078b1ecf22b0d =
-  BG.fromFFIType hs_bindgen_436078b1ecf22b0d_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            hs_bindgen_436078b1ecf22b0d_base
+              (BG.toFFIType x0)
+              (BG.toFFIType x1)
+              (BG.toFFIType x2)
+              (BG.toFFIType x3)
+              (BG.toFFIType x4)
 
 -- | Get the device information encoded in a SDL_GUID structure.
 --
@@ -1864,14 +1970,15 @@
 foreign import ccall unsafe "hs_bindgen_0241ed6d6117fa6f"
   hs_bindgen_0241ed6d6117fa6f_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_JoystickConnected@
 hs_bindgen_0241ed6d6117fa6f
   :: BG.Ptr SDL_Joystick
   -> IO BG.CBool
 hs_bindgen_0241ed6d6117fa6f =
-  BG.fromFFIType hs_bindgen_0241ed6d6117fa6f_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_0241ed6d6117fa6f_base (BG.toFFIType x0))
 
 -- | Get the status of a specified joystick.
 --
@@ -1894,14 +2001,15 @@
 foreign import ccall unsafe "hs_bindgen_ca7a1f2ac4ecb56d"
   hs_bindgen_ca7a1f2ac4ecb56d_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetJoystickID@
 hs_bindgen_ca7a1f2ac4ecb56d
   :: BG.Ptr SDL_Joystick
   -> IO SDL_JoystickID
 hs_bindgen_ca7a1f2ac4ecb56d =
-  BG.fromFFIType hs_bindgen_ca7a1f2ac4ecb56d_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_ca7a1f2ac4ecb56d_base (BG.toFFIType x0))
 
 -- | Get the instance ID of an opened joystick.
 --
@@ -1924,14 +2032,15 @@
 foreign import ccall unsafe "hs_bindgen_1510ba234e23c104"
   hs_bindgen_1510ba234e23c104_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetNumJoystickAxes@
 hs_bindgen_1510ba234e23c104
   :: BG.Ptr SDL_Joystick
   -> IO BG.CInt
 hs_bindgen_1510ba234e23c104 =
-  BG.fromFFIType hs_bindgen_1510ba234e23c104_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_1510ba234e23c104_base (BG.toFFIType x0))
 
 -- | Get the number of general axis controls on a joystick.
 --
@@ -1958,14 +2067,15 @@
 foreign import ccall unsafe "hs_bindgen_69d452e9cc046adb"
   hs_bindgen_69d452e9cc046adb_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetNumJoystickBalls@
 hs_bindgen_69d452e9cc046adb
   :: BG.Ptr SDL_Joystick
   -> IO BG.CInt
 hs_bindgen_69d452e9cc046adb =
-  BG.fromFFIType hs_bindgen_69d452e9cc046adb_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_69d452e9cc046adb_base (BG.toFFIType x0))
 
 -- | Get the number of trackballs on a joystick.
 --
@@ -1994,14 +2104,15 @@
 foreign import ccall unsafe "hs_bindgen_cc24966a772d0240"
   hs_bindgen_cc24966a772d0240_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetNumJoystickHats@
 hs_bindgen_cc24966a772d0240
   :: BG.Ptr SDL_Joystick
   -> IO BG.CInt
 hs_bindgen_cc24966a772d0240 =
-  BG.fromFFIType hs_bindgen_cc24966a772d0240_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_cc24966a772d0240_base (BG.toFFIType x0))
 
 -- | Get the number of POV hats on a joystick.
 --
@@ -2026,14 +2137,15 @@
 foreign import ccall unsafe "hs_bindgen_aeac535e5fa443a0"
   hs_bindgen_aeac535e5fa443a0_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetNumJoystickButtons@
 hs_bindgen_aeac535e5fa443a0
   :: BG.Ptr SDL_Joystick
   -> IO BG.CInt
 hs_bindgen_aeac535e5fa443a0 =
-  BG.fromFFIType hs_bindgen_aeac535e5fa443a0_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_aeac535e5fa443a0_base (BG.toFFIType x0))
 
 -- | Get the number of buttons on a joystick.
 --
@@ -2058,7 +2170,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_SetJoystickEventsEnabled@
 foreign import ccall unsafe "hs_bindgen_4ca6ee37a9e122b5"
   hs_bindgen_4ca6ee37a9e122b5_base
-    :: BG.Word8
+    :: BG.CBool
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_SetJoystickEventsEnabled@
@@ -2066,7 +2178,8 @@
   :: BG.CBool
   -> IO ()
 hs_bindgen_4ca6ee37a9e122b5 =
-  BG.fromFFIType hs_bindgen_4ca6ee37a9e122b5_base
+  \x0 ->
+    hs_bindgen_4ca6ee37a9e122b5_base (BG.toFFIType x0)
 
 -- | Set the state of joystick event processing.
 --
@@ -2091,12 +2204,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_JoystickEventsEnabled@
 foreign import ccall unsafe "hs_bindgen_fd430a3c399eb18b"
   hs_bindgen_fd430a3c399eb18b_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_JoystickEventsEnabled@
 hs_bindgen_fd430a3c399eb18b :: IO BG.CBool
 hs_bindgen_fd430a3c399eb18b =
-  BG.fromFFIType hs_bindgen_fd430a3c399eb18b_base
+  fmap BG.fromFFIType hs_bindgen_fd430a3c399eb18b_base
 
 -- | Query the state of joystick event processing.
 --
@@ -2123,7 +2236,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_UpdateJoysticks@
 hs_bindgen_2766ee6323a0f722 :: IO ()
 hs_bindgen_2766ee6323a0f722 =
-  BG.fromFFIType hs_bindgen_2766ee6323a0f722_base
+  hs_bindgen_2766ee6323a0f722_base
 
 -- | Update the current state of the open joysticks.
 --
@@ -2141,8 +2254,8 @@
 foreign import ccall unsafe "hs_bindgen_c16201bd08e902dc"
   hs_bindgen_c16201bd08e902dc_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Int16
+    -> BG.CInt
+    -> IO HsBindgen.Runtime.LibC.Int16
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetJoystickAxis@
 hs_bindgen_c16201bd08e902dc
@@ -2150,7 +2263,9 @@
   -> BG.CInt
   -> IO SDL3.Sys.Bindgen.Stdinc.Sint16
 hs_bindgen_c16201bd08e902dc =
-  BG.fromFFIType hs_bindgen_c16201bd08e902dc_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_c16201bd08e902dc_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the current state of an axis control on a joystick.
 --
@@ -2183,9 +2298,9 @@
 foreign import ccall unsafe "hs_bindgen_803984b597c873b4"
   hs_bindgen_803984b597c873b4_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetJoystickAxisInitialState@
 hs_bindgen_803984b597c873b4
@@ -2194,7 +2309,12 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Sint16
   -> IO BG.CBool
 hs_bindgen_803984b597c873b4 =
-  BG.fromFFIType hs_bindgen_803984b597c873b4_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_803984b597c873b4_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get the initial state of an axis control on a joystick.
 --
@@ -2230,10 +2350,10 @@
 foreign import ccall unsafe "hs_bindgen_f564c6f917207491"
   hs_bindgen_f564c6f917207491_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetJoystickBall@
 hs_bindgen_f564c6f917207491
@@ -2243,7 +2363,18 @@
   -> BG.Ptr BG.CInt
   -> IO BG.CBool
 hs_bindgen_f564c6f917207491 =
-  BG.fromFFIType hs_bindgen_f564c6f917207491_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_f564c6f917207491_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Get the ball axis change since the last poll.
 --
@@ -2284,8 +2415,8 @@
 foreign import ccall unsafe "hs_bindgen_bdb3e1a3519b04dc"
   hs_bindgen_bdb3e1a3519b04dc_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO HsBindgen.Runtime.LibC.Word8
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetJoystickHat@
 hs_bindgen_bdb3e1a3519b04dc
@@ -2293,7 +2424,9 @@
   -> BG.CInt
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint8
 hs_bindgen_bdb3e1a3519b04dc =
-  BG.fromFFIType hs_bindgen_bdb3e1a3519b04dc_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_bdb3e1a3519b04dc_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the current state of a POV hat on a joystick.
 --
@@ -2324,8 +2457,8 @@
 foreign import ccall unsafe "hs_bindgen_c3fe9ce78b1fb4e4"
   hs_bindgen_c3fe9ce78b1fb4e4_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetJoystickButton@
 hs_bindgen_c3fe9ce78b1fb4e4
@@ -2333,7 +2466,9 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_c3fe9ce78b1fb4e4 =
-  BG.fromFFIType hs_bindgen_c3fe9ce78b1fb4e4_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_c3fe9ce78b1fb4e4_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the current state of a button on a joystick.
 --
@@ -2362,10 +2497,10 @@
 foreign import ccall unsafe "hs_bindgen_83d21d7ab5b5f640"
   hs_bindgen_83d21d7ab5b5f640_base
     :: BG.Ptr BG.Void
-    -> BG.Word16
-    -> BG.Word16
-    -> BG.Word32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word16
+    -> HsBindgen.Runtime.LibC.Word16
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_RumbleJoystick@
 hs_bindgen_83d21d7ab5b5f640
@@ -2375,7 +2510,18 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_83d21d7ab5b5f640 =
-  BG.fromFFIType hs_bindgen_83d21d7ab5b5f640_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_83d21d7ab5b5f640_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Start a rumble effect.
 --
@@ -2414,10 +2560,10 @@
 foreign import ccall unsafe "hs_bindgen_b273e29ac9df2371"
   hs_bindgen_b273e29ac9df2371_base
     :: BG.Ptr BG.Void
-    -> BG.Word16
-    -> BG.Word16
-    -> BG.Word32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word16
+    -> HsBindgen.Runtime.LibC.Word16
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_RumbleJoystickTriggers@
 hs_bindgen_b273e29ac9df2371
@@ -2427,7 +2573,18 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_b273e29ac9df2371 =
-  BG.fromFFIType hs_bindgen_b273e29ac9df2371_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_b273e29ac9df2371_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Start a rumble effect in the joystick\'s triggers.
 --
@@ -2471,10 +2628,10 @@
 foreign import ccall unsafe "hs_bindgen_afcd4a7ee63caeb4"
   hs_bindgen_afcd4a7ee63caeb4_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> BG.Word8
-    -> BG.Word8
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_SetJoystickLED@
 hs_bindgen_afcd4a7ee63caeb4
@@ -2484,7 +2641,18 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO BG.CBool
 hs_bindgen_afcd4a7ee63caeb4 =
-  BG.fromFFIType hs_bindgen_afcd4a7ee63caeb4_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_afcd4a7ee63caeb4_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Update a joystick\'s LED color.
 --
@@ -2524,8 +2692,8 @@
   hs_bindgen_6b3ca271f1d12b4d_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_SendJoystickEffect@
 hs_bindgen_6b3ca271f1d12b4d
@@ -2534,7 +2702,12 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_6b3ca271f1d12b4d =
-  BG.fromFFIType hs_bindgen_6b3ca271f1d12b4d_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_6b3ca271f1d12b4d_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Send a joystick specific effect packet.
 --
@@ -2572,7 +2745,8 @@
   :: BG.Ptr SDL_Joystick
   -> IO ()
 hs_bindgen_24a578a58e09e216 =
-  BG.fromFFIType hs_bindgen_24a578a58e09e216_base
+  \x0 ->
+    hs_bindgen_24a578a58e09e216_base (BG.toFFIType x0)
 
 -- | Close a joystick previously opened with @SDL_OpenJoystick()@.
 --
@@ -2595,14 +2769,15 @@
 foreign import ccall unsafe "hs_bindgen_d6589b95cb209778"
   hs_bindgen_d6589b95cb209778_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetJoystickConnectionState@
 hs_bindgen_d6589b95cb209778
   :: BG.Ptr SDL_Joystick
   -> IO SDL_JoystickConnectionState
 hs_bindgen_d6589b95cb209778 =
-  BG.fromFFIType hs_bindgen_d6589b95cb209778_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d6589b95cb209778_base (BG.toFFIType x0))
 
 -- | Get the connection state of a joystick.
 --
@@ -2627,7 +2802,7 @@
   hs_bindgen_eb82ac709209a25a_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO HsBindgen.Runtime.Support.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Joystick_Unsafe_SDL_GetJoystickPowerInfo@
 hs_bindgen_eb82ac709209a25a
@@ -2635,7 +2810,9 @@
   -> BG.Ptr BG.CInt
   -> IO SDL3.Sys.Bindgen.Power.SDL_PowerState
 hs_bindgen_eb82ac709209a25a =
-  BG.fromFFIType hs_bindgen_eb82ac709209a25a_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_eb82ac709209a25a_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the battery state of a joystick.
 --
diff --git a/src/SDL3/Sys/Bindgen/Keyboard.hs b/src/SDL3/Sys/Bindgen/Keyboard.hs
--- a/src/SDL3/Sys/Bindgen/Keyboard.hs
+++ b/src/SDL3/Sys/Bindgen/Keyboard.hs
@@ -17,6 +17,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | SDL keyboard management.
 --
@@ -53,6 +54,8 @@
   SDL3.Sys.Bindgen.Keyboard.sDL_PROP_TEXTINPUT_ANDROID_INPUTTYPE_NUMBER,
 )
 where
+
+import Prelude (Bounded, Enum, Eq, Int, Integral, Num, Ord, Read, Real, Show, pure, (<*>), type (~))
 
 import HsBindgen.Runtime.CEnum qualified as CEnum
 import HsBindgen.Runtime.HasCField qualified as HasCField
diff --git a/src/SDL3/Sys/Bindgen/Keyboard/FunPtr.hs b/src/SDL3/Sys/Bindgen/Keyboard/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Keyboard/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Keyboard/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Keyboard.FunPtr (
@@ -30,6 +32,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -42,7 +46,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_keyboard.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_keyboard.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_get_SDL_HasKeyboard */"
          , "__attribute__ ((const))"
          , "_Bool (*hs_bindgen_f2d4cba2f0ac16c1 (void)) (void)"
@@ -246,7 +254,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_get_SDL_HasKeyboard@
 hs_bindgen_f2d4cba2f0ac16c1 :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_f2d4cba2f0ac16c1 =
-  BG.fromFFIType hs_bindgen_f2d4cba2f0ac16c1_base
+  fmap BG.fromFFIType hs_bindgen_f2d4cba2f0ac16c1_base
 
 {-# NOINLINE sDL_HasKeyboard #-}
 
@@ -273,7 +281,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_get_SDL_GetKeyboards@
 hs_bindgen_07570de4c113f860 :: IO (BG.FunPtr (BG.Ptr BG.CInt -> IO (BG.Ptr SDL_KeyboardID)))
 hs_bindgen_07570de4c113f860 =
-  BG.fromFFIType hs_bindgen_07570de4c113f860_base
+  fmap BG.fromFFIType hs_bindgen_07570de4c113f860_base
 
 {-# NOINLINE sDL_GetKeyboards #-}
 
@@ -304,7 +312,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_get_SDL_GetKeyboardNameForID@
 hs_bindgen_83b903949cfcfe63 :: IO (BG.FunPtr (SDL_KeyboardID -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_83b903949cfcfe63 =
-  BG.fromFFIType hs_bindgen_83b903949cfcfe63_base
+  fmap BG.fromFFIType hs_bindgen_83b903949cfcfe63_base
 
 {-# NOINLINE sDL_GetKeyboardNameForID #-}
 
@@ -335,7 +343,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_get_SDL_GetKeyboardFocus@
 hs_bindgen_8df2b4d534724c71 :: IO (BG.FunPtr (IO (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window)))
 hs_bindgen_8df2b4d534724c71 =
-  BG.fromFFIType hs_bindgen_8df2b4d534724c71_base
+  fmap BG.fromFFIType hs_bindgen_8df2b4d534724c71_base
 
 {-# NOINLINE sDL_GetKeyboardFocus #-}
 
@@ -360,7 +368,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_get_SDL_GetKeyboardState@
 hs_bindgen_d62d5a74819a4670 :: IO (BG.FunPtr (BG.Ptr BG.CInt -> IO (PtrConst.PtrConst BG.CBool)))
 hs_bindgen_d62d5a74819a4670 =
-  BG.fromFFIType hs_bindgen_d62d5a74819a4670_base
+  fmap BG.fromFFIType hs_bindgen_d62d5a74819a4670_base
 
 {-# NOINLINE sDL_GetKeyboardState #-}
 
@@ -399,7 +407,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_get_SDL_ResetKeyboard@
 hs_bindgen_d91e3b4a0a33939a :: IO (BG.FunPtr (IO ()))
 hs_bindgen_d91e3b4a0a33939a =
-  BG.fromFFIType hs_bindgen_d91e3b4a0a33939a_base
+  fmap BG.fromFFIType hs_bindgen_d91e3b4a0a33939a_base
 
 {-# NOINLINE sDL_ResetKeyboard #-}
 
@@ -426,7 +434,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_get_SDL_GetModState@
 hs_bindgen_cc0f02de8bc450f1 :: IO (BG.FunPtr (IO SDL3.Sys.Bindgen.Keycode.SDL_Keymod))
 hs_bindgen_cc0f02de8bc450f1 =
-  BG.fromFFIType hs_bindgen_cc0f02de8bc450f1_base
+  fmap BG.fromFFIType hs_bindgen_cc0f02de8bc450f1_base
 
 {-# NOINLINE sDL_GetModState #-}
 
@@ -453,7 +461,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_get_SDL_SetModState@
 hs_bindgen_6bbf695b3fa0e177 :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Keycode.SDL_Keymod -> IO ()))
 hs_bindgen_6bbf695b3fa0e177 =
-  BG.fromFFIType hs_bindgen_6bbf695b3fa0e177_base
+  fmap BG.fromFFIType hs_bindgen_6bbf695b3fa0e177_base
 
 {-# NOINLINE sDL_SetModState #-}
 
@@ -492,7 +500,7 @@
            )
        )
 hs_bindgen_c9f6615acff7b796 =
-  BG.fromFFIType hs_bindgen_c9f6615acff7b796_base
+  fmap BG.fromFFIType hs_bindgen_c9f6615acff7b796_base
 
 {-# NOINLINE sDL_GetKeyFromScancode #-}
 
@@ -540,7 +548,7 @@
            )
        )
 hs_bindgen_435c07f787a65684 =
-  BG.fromFFIType hs_bindgen_435c07f787a65684_base
+  fmap BG.fromFFIType hs_bindgen_435c07f787a65684_base
 
 {-# NOINLINE sDL_GetScancodeFromKey #-}
 
@@ -579,7 +587,7 @@
 hs_bindgen_087c95eefbd6f76f
   :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Scancode.SDL_Scancode -> PtrConst.PtrConst BG.CChar -> IO BG.CBool))
 hs_bindgen_087c95eefbd6f76f =
-  BG.fromFFIType hs_bindgen_087c95eefbd6f76f_base
+  fmap BG.fromFFIType hs_bindgen_087c95eefbd6f76f_base
 
 {-# NOINLINE sDL_SetScancodeName #-}
 
@@ -612,7 +620,7 @@
 hs_bindgen_8a2bf360adc31889
   :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Scancode.SDL_Scancode -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_8a2bf360adc31889 =
-  BG.fromFFIType hs_bindgen_8a2bf360adc31889_base
+  fmap BG.fromFFIType hs_bindgen_8a2bf360adc31889_base
 
 {-# NOINLINE sDL_GetScancodeName #-}
 
@@ -645,7 +653,7 @@
 hs_bindgen_b93acbb95d9d0d72
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO SDL3.Sys.Bindgen.Scancode.SDL_Scancode))
 hs_bindgen_b93acbb95d9d0d72 =
-  BG.fromFFIType hs_bindgen_b93acbb95d9d0d72_base
+  fmap BG.fromFFIType hs_bindgen_b93acbb95d9d0d72_base
 
 {-# NOINLINE sDL_GetScancodeFromName #-}
 
@@ -676,7 +684,7 @@
 hs_bindgen_f93a8976e79ac924
   :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Keycode.SDL_Keycode -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_f93a8976e79ac924 =
-  BG.fromFFIType hs_bindgen_f93a8976e79ac924_base
+  fmap BG.fromFFIType hs_bindgen_f93a8976e79ac924_base
 
 {-# NOINLINE sDL_GetKeyName #-}
 
@@ -711,7 +719,7 @@
 hs_bindgen_b72924cf51764a24
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO SDL3.Sys.Bindgen.Keycode.SDL_Keycode))
 hs_bindgen_b72924cf51764a24 =
-  BG.fromFFIType hs_bindgen_b72924cf51764a24_base
+  fmap BG.fromFFIType hs_bindgen_b72924cf51764a24_base
 
 {-# NOINLINE sDL_GetKeyFromName #-}
 
@@ -742,7 +750,7 @@
 hs_bindgen_4b6d937c5c094fac
   :: IO (BG.FunPtr (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window -> IO BG.CBool))
 hs_bindgen_4b6d937c5c094fac =
-  BG.fromFFIType hs_bindgen_4b6d937c5c094fac_base
+  fmap BG.fromFFIType hs_bindgen_4b6d937c5c094fac_base
 
 {-# NOINLINE sDL_StartTextInput #-}
 
@@ -784,7 +792,7 @@
            )
        )
 hs_bindgen_cef63a814fd09fce =
-  BG.fromFFIType hs_bindgen_cef63a814fd09fce_base
+  fmap BG.fromFFIType hs_bindgen_cef63a814fd09fce_base
 
 {-# NOINLINE sDL_StartTextInputWithProperties #-}
 
@@ -841,7 +849,7 @@
 hs_bindgen_1f67969c2fa5317a
   :: IO (BG.FunPtr (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window -> IO BG.CBool))
 hs_bindgen_1f67969c2fa5317a =
-  BG.fromFFIType hs_bindgen_1f67969c2fa5317a_base
+  fmap BG.fromFFIType hs_bindgen_1f67969c2fa5317a_base
 
 {-# NOINLINE sDL_TextInputActive #-}
 
@@ -871,7 +879,7 @@
 hs_bindgen_9b542f1ba0dfe34d
   :: IO (BG.FunPtr (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window -> IO BG.CBool))
 hs_bindgen_9b542f1ba0dfe34d =
-  BG.fromFFIType hs_bindgen_9b542f1ba0dfe34d_base
+  fmap BG.fromFFIType hs_bindgen_9b542f1ba0dfe34d_base
 
 {-# NOINLINE sDL_StopTextInput #-}
 
@@ -903,7 +911,7 @@
 hs_bindgen_60c12ad8dda93779
   :: IO (BG.FunPtr (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window -> IO BG.CBool))
 hs_bindgen_60c12ad8dda93779 =
-  BG.fromFFIType hs_bindgen_60c12ad8dda93779_base
+  fmap BG.fromFFIType hs_bindgen_60c12ad8dda93779_base
 
 {-# NOINLINE sDL_ClearComposition #-}
 
@@ -940,7 +948,7 @@
            )
        )
 hs_bindgen_a46b72607b603a3c =
-  BG.fromFFIType hs_bindgen_a46b72607b603a3c_base
+  fmap BG.fromFFIType hs_bindgen_a46b72607b603a3c_base
 
 {-# NOINLINE sDL_SetTextInputArea #-}
 
@@ -989,7 +997,7 @@
            )
        )
 hs_bindgen_b5c6f5df66854547 =
-  BG.fromFFIType hs_bindgen_b5c6f5df66854547_base
+  fmap BG.fromFFIType hs_bindgen_b5c6f5df66854547_base
 
 {-# NOINLINE sDL_GetTextInputArea #-}
 
@@ -1030,7 +1038,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_get_SDL_HasScreenKeyboardSupport@
 hs_bindgen_e8fffc349e61bb9c :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_e8fffc349e61bb9c =
-  BG.fromFFIType hs_bindgen_e8fffc349e61bb9c_base
+  fmap BG.fromFFIType hs_bindgen_e8fffc349e61bb9c_base
 
 {-# NOINLINE sDL_HasScreenKeyboardSupport #-}
 
@@ -1058,7 +1066,7 @@
 hs_bindgen_f094fa8f75a49f31
   :: IO (BG.FunPtr (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window -> IO BG.CBool))
 hs_bindgen_f094fa8f75a49f31 =
-  BG.fromFFIType hs_bindgen_f094fa8f75a49f31_base
+  fmap BG.fromFFIType hs_bindgen_f094fa8f75a49f31_base
 
 {-# NOINLINE sDL_ScreenKeyboardShown #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Keyboard/Safe.hs b/src/SDL3/Sys/Bindgen/Keyboard/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Keyboard/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Keyboard/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Keyboard.Safe (
@@ -30,7 +32,11 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Keyboard
@@ -42,7 +48,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_keyboard.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_keyboard.h>"
          , "_Bool hs_bindgen_1ef4ce9325e1d7c1 (void)"
          , "{"
          , "  return (SDL_HasKeyboard)();"
@@ -193,12 +203,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Safe_SDL_HasKeyboard@
 foreign import ccall safe "hs_bindgen_1ef4ce9325e1d7c1"
   hs_bindgen_1ef4ce9325e1d7c1_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Safe_SDL_HasKeyboard@
 hs_bindgen_1ef4ce9325e1d7c1 :: IO BG.CBool
 hs_bindgen_1ef4ce9325e1d7c1 =
-  BG.fromFFIType hs_bindgen_1ef4ce9325e1d7c1_base
+  fmap BG.fromFFIType hs_bindgen_1ef4ce9325e1d7c1_base
 
 -- | Return whether a keyboard is currently connected.
 --
@@ -225,7 +235,8 @@
   :: BG.Ptr BG.CInt
   -> IO (BG.Ptr SDL_KeyboardID)
 hs_bindgen_b59c0860157b89a3 =
-  BG.fromFFIType hs_bindgen_b59c0860157b89a3_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_b59c0860157b89a3_base (BG.toFFIType x0))
 
 -- | Get a list of currently connected keyboards.
 --
@@ -251,7 +262,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Safe_SDL_GetKeyboardNameForID@
 foreign import ccall safe "hs_bindgen_cbd6c7684c35aab5"
   hs_bindgen_cbd6c7684c35aab5_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Safe_SDL_GetKeyboardNameForID@
@@ -259,7 +270,8 @@
   :: SDL_KeyboardID
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_cbd6c7684c35aab5 =
-  BG.fromFFIType hs_bindgen_cbd6c7684c35aab5_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_cbd6c7684c35aab5_base (BG.toFFIType x0))
 
 -- | Get the name of a keyboard.
 --
@@ -291,7 +303,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Safe_SDL_GetKeyboardFocus@
 hs_bindgen_4466a0bcf920ec34 :: IO (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window)
 hs_bindgen_4466a0bcf920ec34 =
-  BG.fromFFIType hs_bindgen_4466a0bcf920ec34_base
+  fmap BG.fromFFIType hs_bindgen_4466a0bcf920ec34_base
 
 -- | Query the window which currently has keyboard focus.
 --
@@ -316,7 +328,8 @@
   :: BG.Ptr BG.CInt
   -> IO (PtrConst.PtrConst BG.CBool)
 hs_bindgen_28f41d367bc840d8 =
-  BG.fromFFIType hs_bindgen_28f41d367bc840d8_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_28f41d367bc840d8_base (BG.toFFIType x0))
 
 -- | Get a snapshot of the current state of the keyboard.
 --
@@ -355,7 +368,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Safe_SDL_ResetKeyboard@
 hs_bindgen_e5be3af904377165 :: IO ()
 hs_bindgen_e5be3af904377165 =
-  BG.fromFFIType hs_bindgen_e5be3af904377165_base
+  hs_bindgen_e5be3af904377165_base
 
 -- | Clear the state of the keyboard.
 --
@@ -374,12 +387,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Safe_SDL_GetModState@
 foreign import ccall safe "hs_bindgen_2b74759b43835352"
   hs_bindgen_2b74759b43835352_base
-    :: IO BG.Word16
+    :: IO HsBindgen.Runtime.LibC.Word16
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Safe_SDL_GetModState@
 hs_bindgen_2b74759b43835352 :: IO SDL3.Sys.Bindgen.Keycode.SDL_Keymod
 hs_bindgen_2b74759b43835352 =
-  BG.fromFFIType hs_bindgen_2b74759b43835352_base
+  fmap BG.fromFFIType hs_bindgen_2b74759b43835352_base
 
 -- | Get the current key modifier state for the keyboard.
 --
@@ -398,7 +411,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Safe_SDL_SetModState@
 foreign import ccall safe "hs_bindgen_12c8d03624bdd31a"
   hs_bindgen_12c8d03624bdd31a_base
-    :: BG.Word16
+    :: HsBindgen.Runtime.LibC.Word16
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Safe_SDL_SetModState@
@@ -406,7 +419,8 @@
   :: SDL3.Sys.Bindgen.Keycode.SDL_Keymod
   -> IO ()
 hs_bindgen_12c8d03624bdd31a =
-  BG.fromFFIType hs_bindgen_12c8d03624bdd31a_base
+  \x0 ->
+    hs_bindgen_12c8d03624bdd31a_base (BG.toFFIType x0)
 
 -- | Set the current key modifier state for the keyboard.
 --
@@ -432,10 +446,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Safe_SDL_GetKeyFromScancode@
 foreign import ccall safe "hs_bindgen_2ed37c1ae220bcdc"
   hs_bindgen_2ed37c1ae220bcdc_base
-    :: BG.Word32
-    -> BG.Word16
-    -> BG.Word8
-    -> IO BG.Word32
+    :: HsBindgen.Runtime.Support.CUInt
+    -> HsBindgen.Runtime.LibC.Word16
+    -> BG.CBool
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Safe_SDL_GetKeyFromScancode@
 hs_bindgen_2ed37c1ae220bcdc
@@ -444,7 +458,12 @@
   -> BG.CBool
   -> IO SDL3.Sys.Bindgen.Keycode.SDL_Keycode
 hs_bindgen_2ed37c1ae220bcdc =
-  BG.fromFFIType hs_bindgen_2ed37c1ae220bcdc_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_2ed37c1ae220bcdc_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get the key code corresponding to the given scancode according to the current keyboard layout.
 --
@@ -478,9 +497,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Safe_SDL_GetScancodeFromKey@
 foreign import ccall safe "hs_bindgen_fc2da5865c26d1eb"
   hs_bindgen_fc2da5865c26d1eb_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.Support.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Safe_SDL_GetScancodeFromKey@
 hs_bindgen_fc2da5865c26d1eb
@@ -488,7 +507,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Keycode.SDL_Keymod
   -> IO SDL3.Sys.Bindgen.Scancode.SDL_Scancode
 hs_bindgen_fc2da5865c26d1eb =
-  BG.fromFFIType hs_bindgen_fc2da5865c26d1eb_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_fc2da5865c26d1eb_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the scancode corresponding to the given key code according to the current keyboard layout.
 --
@@ -518,9 +539,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Safe_SDL_SetScancodeName@
 foreign import ccall safe "hs_bindgen_d3d1490d83b9909e"
   hs_bindgen_d3d1490d83b9909e_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.Support.CUInt
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Safe_SDL_SetScancodeName@
 hs_bindgen_d3d1490d83b9909e
@@ -528,7 +549,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_d3d1490d83b9909e =
-  BG.fromFFIType hs_bindgen_d3d1490d83b9909e_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_d3d1490d83b9909e_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set a human-readable name for a scancode.
 --
@@ -556,7 +579,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Safe_SDL_GetScancodeName@
 foreign import ccall safe "hs_bindgen_7fa9ebec253c00ba"
   hs_bindgen_7fa9ebec253c00ba_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.Support.CUInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Safe_SDL_GetScancodeName@
@@ -564,7 +587,8 @@
   :: SDL3.Sys.Bindgen.Scancode.SDL_Scancode
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_7fa9ebec253c00ba =
-  BG.fromFFIType hs_bindgen_7fa9ebec253c00ba_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_7fa9ebec253c00ba_base (BG.toFFIType x0))
 
 -- | Get a human-readable name for a scancode.
 --
@@ -591,14 +615,15 @@
 foreign import ccall safe "hs_bindgen_93b32ce48be9ecca"
   hs_bindgen_93b32ce48be9ecca_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.Support.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Safe_SDL_GetScancodeFromName@
 hs_bindgen_93b32ce48be9ecca
   :: PtrConst.PtrConst BG.CChar
   -> IO SDL3.Sys.Bindgen.Scancode.SDL_Scancode
 hs_bindgen_93b32ce48be9ecca =
-  BG.fromFFIType hs_bindgen_93b32ce48be9ecca_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_93b32ce48be9ecca_base (BG.toFFIType x0))
 
 -- | Get a scancode from a human-readable name.
 --
@@ -622,7 +647,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Safe_SDL_GetKeyName@
 foreign import ccall safe "hs_bindgen_1808b5592239c8c9"
   hs_bindgen_1808b5592239c8c9_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Safe_SDL_GetKeyName@
@@ -630,7 +655,8 @@
   :: SDL3.Sys.Bindgen.Keycode.SDL_Keycode
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_1808b5592239c8c9 =
-  BG.fromFFIType hs_bindgen_1808b5592239c8c9_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_1808b5592239c8c9_base (BG.toFFIType x0))
 
 -- | Get a human-readable name for a key.
 --
@@ -659,14 +685,15 @@
 foreign import ccall safe "hs_bindgen_cc4e614de70c9201"
   hs_bindgen_cc4e614de70c9201_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Safe_SDL_GetKeyFromName@
 hs_bindgen_cc4e614de70c9201
   :: PtrConst.PtrConst BG.CChar
   -> IO SDL3.Sys.Bindgen.Keycode.SDL_Keycode
 hs_bindgen_cc4e614de70c9201 =
-  BG.fromFFIType hs_bindgen_cc4e614de70c9201_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_cc4e614de70c9201_base (BG.toFFIType x0))
 
 -- | Get a key code from a human-readable name.
 --
@@ -691,14 +718,15 @@
 foreign import ccall safe "hs_bindgen_ee1b6ad2d89317cd"
   hs_bindgen_ee1b6ad2d89317cd_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Safe_SDL_StartTextInput@
 hs_bindgen_ee1b6ad2d89317cd
   :: BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
   -> IO BG.CBool
 hs_bindgen_ee1b6ad2d89317cd =
-  BG.fromFFIType hs_bindgen_ee1b6ad2d89317cd_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_ee1b6ad2d89317cd_base (BG.toFFIType x0))
 
 -- | Start accepting Unicode text input events in a window.
 --
@@ -729,8 +757,8 @@
 foreign import ccall safe "hs_bindgen_9f9c608b064a8e66"
   hs_bindgen_9f9c608b064a8e66_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Safe_SDL_StartTextInputWithProperties@
 hs_bindgen_9f9c608b064a8e66
@@ -738,7 +766,9 @@
   -> SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
   -> IO BG.CBool
 hs_bindgen_9f9c608b064a8e66 =
-  BG.fromFFIType hs_bindgen_9f9c608b064a8e66_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_9f9c608b064a8e66_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Start accepting Unicode text input events in a window, with properties describing the input.
 --
@@ -788,14 +818,15 @@
 foreign import ccall safe "hs_bindgen_459a3903a479c503"
   hs_bindgen_459a3903a479c503_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Safe_SDL_TextInputActive@
 hs_bindgen_459a3903a479c503
   :: BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
   -> IO BG.CBool
 hs_bindgen_459a3903a479c503 =
-  BG.fromFFIType hs_bindgen_459a3903a479c503_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_459a3903a479c503_base (BG.toFFIType x0))
 
 -- | Check whether or not Unicode text input events are enabled for a window.
 --
@@ -820,14 +851,15 @@
 foreign import ccall safe "hs_bindgen_2b5c6adc62fd6b03"
   hs_bindgen_2b5c6adc62fd6b03_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Safe_SDL_StopTextInput@
 hs_bindgen_2b5c6adc62fd6b03
   :: BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
   -> IO BG.CBool
 hs_bindgen_2b5c6adc62fd6b03 =
-  BG.fromFFIType hs_bindgen_2b5c6adc62fd6b03_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_2b5c6adc62fd6b03_base (BG.toFFIType x0))
 
 -- | Stop receiving any text input events in a window.
 --
@@ -854,14 +886,15 @@
 foreign import ccall safe "hs_bindgen_6b1d107b71fa60e9"
   hs_bindgen_6b1d107b71fa60e9_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Safe_SDL_ClearComposition@
 hs_bindgen_6b1d107b71fa60e9
   :: BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
   -> IO BG.CBool
 hs_bindgen_6b1d107b71fa60e9 =
-  BG.fromFFIType hs_bindgen_6b1d107b71fa60e9_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_6b1d107b71fa60e9_base (BG.toFFIType x0))
 
 -- | Dismiss the composition window\/IME without disabling the subsystem.
 --
@@ -887,8 +920,8 @@
   hs_bindgen_03f0bc714d10f56b_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Safe_SDL_SetTextInputArea@
 hs_bindgen_03f0bc714d10f56b
@@ -897,7 +930,12 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_03f0bc714d10f56b =
-  BG.fromFFIType hs_bindgen_03f0bc714d10f56b_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_03f0bc714d10f56b_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set the area used to type Unicode text input.
 --
@@ -934,7 +972,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Safe_SDL_GetTextInputArea@
 hs_bindgen_20c88b6d3256a2c4
@@ -943,7 +981,12 @@
   -> BG.Ptr BG.CInt
   -> IO BG.CBool
 hs_bindgen_20c88b6d3256a2c4 =
-  BG.fromFFIType hs_bindgen_20c88b6d3256a2c4_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_20c88b6d3256a2c4_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get the area used to type Unicode text input.
 --
@@ -977,12 +1020,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Safe_SDL_HasScreenKeyboardSupport@
 foreign import ccall safe "hs_bindgen_052de17a6a7b51b1"
   hs_bindgen_052de17a6a7b51b1_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Safe_SDL_HasScreenKeyboardSupport@
 hs_bindgen_052de17a6a7b51b1 :: IO BG.CBool
 hs_bindgen_052de17a6a7b51b1 =
-  BG.fromFFIType hs_bindgen_052de17a6a7b51b1_base
+  fmap BG.fromFFIType hs_bindgen_052de17a6a7b51b1_base
 
 -- | Check whether the platform has screen keyboard support.
 --
@@ -1003,14 +1046,15 @@
 foreign import ccall safe "hs_bindgen_166e1a8b6522af56"
   hs_bindgen_166e1a8b6522af56_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Safe_SDL_ScreenKeyboardShown@
 hs_bindgen_166e1a8b6522af56
   :: BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
   -> IO BG.CBool
 hs_bindgen_166e1a8b6522af56 =
-  BG.fromFFIType hs_bindgen_166e1a8b6522af56_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_166e1a8b6522af56_base (BG.toFFIType x0))
 
 -- | Check whether the screen keyboard is shown for given window.
 --
diff --git a/src/SDL3/Sys/Bindgen/Keyboard/Unsafe.hs b/src/SDL3/Sys/Bindgen/Keyboard/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Keyboard/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Keyboard/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Keyboard.Unsafe (
@@ -30,7 +32,11 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Keyboard
@@ -42,7 +48,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_keyboard.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_keyboard.h>"
          , "_Bool hs_bindgen_d64e7e9c8eac060b (void)"
          , "{"
          , "  return (SDL_HasKeyboard)();"
@@ -193,12 +203,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Unsafe_SDL_HasKeyboard@
 foreign import ccall unsafe "hs_bindgen_d64e7e9c8eac060b"
   hs_bindgen_d64e7e9c8eac060b_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Unsafe_SDL_HasKeyboard@
 hs_bindgen_d64e7e9c8eac060b :: IO BG.CBool
 hs_bindgen_d64e7e9c8eac060b =
-  BG.fromFFIType hs_bindgen_d64e7e9c8eac060b_base
+  fmap BG.fromFFIType hs_bindgen_d64e7e9c8eac060b_base
 
 -- | Return whether a keyboard is currently connected.
 --
@@ -225,7 +235,8 @@
   :: BG.Ptr BG.CInt
   -> IO (BG.Ptr SDL_KeyboardID)
 hs_bindgen_5cbd85637f312ec5 =
-  BG.fromFFIType hs_bindgen_5cbd85637f312ec5_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_5cbd85637f312ec5_base (BG.toFFIType x0))
 
 -- | Get a list of currently connected keyboards.
 --
@@ -251,7 +262,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Unsafe_SDL_GetKeyboardNameForID@
 foreign import ccall unsafe "hs_bindgen_ddca0041795d5b05"
   hs_bindgen_ddca0041795d5b05_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Unsafe_SDL_GetKeyboardNameForID@
@@ -259,7 +270,8 @@
   :: SDL_KeyboardID
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_ddca0041795d5b05 =
-  BG.fromFFIType hs_bindgen_ddca0041795d5b05_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_ddca0041795d5b05_base (BG.toFFIType x0))
 
 -- | Get the name of a keyboard.
 --
@@ -291,7 +303,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Unsafe_SDL_GetKeyboardFocus@
 hs_bindgen_c75176be07ddf456 :: IO (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window)
 hs_bindgen_c75176be07ddf456 =
-  BG.fromFFIType hs_bindgen_c75176be07ddf456_base
+  fmap BG.fromFFIType hs_bindgen_c75176be07ddf456_base
 
 -- | Query the window which currently has keyboard focus.
 --
@@ -316,7 +328,8 @@
   :: BG.Ptr BG.CInt
   -> IO (PtrConst.PtrConst BG.CBool)
 hs_bindgen_a0b91f25692e960c =
-  BG.fromFFIType hs_bindgen_a0b91f25692e960c_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a0b91f25692e960c_base (BG.toFFIType x0))
 
 -- | Get a snapshot of the current state of the keyboard.
 --
@@ -355,7 +368,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Unsafe_SDL_ResetKeyboard@
 hs_bindgen_61b9fb1b26a3505c :: IO ()
 hs_bindgen_61b9fb1b26a3505c =
-  BG.fromFFIType hs_bindgen_61b9fb1b26a3505c_base
+  hs_bindgen_61b9fb1b26a3505c_base
 
 -- | Clear the state of the keyboard.
 --
@@ -374,12 +387,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Unsafe_SDL_GetModState@
 foreign import ccall unsafe "hs_bindgen_d1acc028a58a01f0"
   hs_bindgen_d1acc028a58a01f0_base
-    :: IO BG.Word16
+    :: IO HsBindgen.Runtime.LibC.Word16
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Unsafe_SDL_GetModState@
 hs_bindgen_d1acc028a58a01f0 :: IO SDL3.Sys.Bindgen.Keycode.SDL_Keymod
 hs_bindgen_d1acc028a58a01f0 =
-  BG.fromFFIType hs_bindgen_d1acc028a58a01f0_base
+  fmap BG.fromFFIType hs_bindgen_d1acc028a58a01f0_base
 
 -- | Get the current key modifier state for the keyboard.
 --
@@ -398,7 +411,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Unsafe_SDL_SetModState@
 foreign import ccall unsafe "hs_bindgen_b05ffb360c052d7c"
   hs_bindgen_b05ffb360c052d7c_base
-    :: BG.Word16
+    :: HsBindgen.Runtime.LibC.Word16
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Unsafe_SDL_SetModState@
@@ -406,7 +419,8 @@
   :: SDL3.Sys.Bindgen.Keycode.SDL_Keymod
   -> IO ()
 hs_bindgen_b05ffb360c052d7c =
-  BG.fromFFIType hs_bindgen_b05ffb360c052d7c_base
+  \x0 ->
+    hs_bindgen_b05ffb360c052d7c_base (BG.toFFIType x0)
 
 -- | Set the current key modifier state for the keyboard.
 --
@@ -432,10 +446,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Unsafe_SDL_GetKeyFromScancode@
 foreign import ccall unsafe "hs_bindgen_ff76f1254f8fdac9"
   hs_bindgen_ff76f1254f8fdac9_base
-    :: BG.Word32
-    -> BG.Word16
-    -> BG.Word8
-    -> IO BG.Word32
+    :: HsBindgen.Runtime.Support.CUInt
+    -> HsBindgen.Runtime.LibC.Word16
+    -> BG.CBool
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Unsafe_SDL_GetKeyFromScancode@
 hs_bindgen_ff76f1254f8fdac9
@@ -444,7 +458,12 @@
   -> BG.CBool
   -> IO SDL3.Sys.Bindgen.Keycode.SDL_Keycode
 hs_bindgen_ff76f1254f8fdac9 =
-  BG.fromFFIType hs_bindgen_ff76f1254f8fdac9_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_ff76f1254f8fdac9_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get the key code corresponding to the given scancode according to the current keyboard layout.
 --
@@ -478,9 +497,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Unsafe_SDL_GetScancodeFromKey@
 foreign import ccall unsafe "hs_bindgen_3ca1dc40673f0b86"
   hs_bindgen_3ca1dc40673f0b86_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.Support.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Unsafe_SDL_GetScancodeFromKey@
 hs_bindgen_3ca1dc40673f0b86
@@ -488,7 +507,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Keycode.SDL_Keymod
   -> IO SDL3.Sys.Bindgen.Scancode.SDL_Scancode
 hs_bindgen_3ca1dc40673f0b86 =
-  BG.fromFFIType hs_bindgen_3ca1dc40673f0b86_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_3ca1dc40673f0b86_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the scancode corresponding to the given key code according to the current keyboard layout.
 --
@@ -518,9 +539,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Unsafe_SDL_SetScancodeName@
 foreign import ccall unsafe "hs_bindgen_8dafd77961e1a111"
   hs_bindgen_8dafd77961e1a111_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.Support.CUInt
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Unsafe_SDL_SetScancodeName@
 hs_bindgen_8dafd77961e1a111
@@ -528,7 +549,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_8dafd77961e1a111 =
-  BG.fromFFIType hs_bindgen_8dafd77961e1a111_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_8dafd77961e1a111_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set a human-readable name for a scancode.
 --
@@ -556,7 +579,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Unsafe_SDL_GetScancodeName@
 foreign import ccall unsafe "hs_bindgen_b685af9e0919d14c"
   hs_bindgen_b685af9e0919d14c_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.Support.CUInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Unsafe_SDL_GetScancodeName@
@@ -564,7 +587,8 @@
   :: SDL3.Sys.Bindgen.Scancode.SDL_Scancode
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_b685af9e0919d14c =
-  BG.fromFFIType hs_bindgen_b685af9e0919d14c_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_b685af9e0919d14c_base (BG.toFFIType x0))
 
 -- | Get a human-readable name for a scancode.
 --
@@ -591,14 +615,15 @@
 foreign import ccall unsafe "hs_bindgen_7e17fd8d9faf99b2"
   hs_bindgen_7e17fd8d9faf99b2_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.Support.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Unsafe_SDL_GetScancodeFromName@
 hs_bindgen_7e17fd8d9faf99b2
   :: PtrConst.PtrConst BG.CChar
   -> IO SDL3.Sys.Bindgen.Scancode.SDL_Scancode
 hs_bindgen_7e17fd8d9faf99b2 =
-  BG.fromFFIType hs_bindgen_7e17fd8d9faf99b2_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_7e17fd8d9faf99b2_base (BG.toFFIType x0))
 
 -- | Get a scancode from a human-readable name.
 --
@@ -622,7 +647,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Unsafe_SDL_GetKeyName@
 foreign import ccall unsafe "hs_bindgen_bc806af89a4922a7"
   hs_bindgen_bc806af89a4922a7_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Unsafe_SDL_GetKeyName@
@@ -630,7 +655,8 @@
   :: SDL3.Sys.Bindgen.Keycode.SDL_Keycode
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_bc806af89a4922a7 =
-  BG.fromFFIType hs_bindgen_bc806af89a4922a7_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_bc806af89a4922a7_base (BG.toFFIType x0))
 
 -- | Get a human-readable name for a key.
 --
@@ -659,14 +685,15 @@
 foreign import ccall unsafe "hs_bindgen_427d0617876df1a1"
   hs_bindgen_427d0617876df1a1_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Unsafe_SDL_GetKeyFromName@
 hs_bindgen_427d0617876df1a1
   :: PtrConst.PtrConst BG.CChar
   -> IO SDL3.Sys.Bindgen.Keycode.SDL_Keycode
 hs_bindgen_427d0617876df1a1 =
-  BG.fromFFIType hs_bindgen_427d0617876df1a1_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_427d0617876df1a1_base (BG.toFFIType x0))
 
 -- | Get a key code from a human-readable name.
 --
@@ -691,14 +718,15 @@
 foreign import ccall unsafe "hs_bindgen_5a9261502fa2575b"
   hs_bindgen_5a9261502fa2575b_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Unsafe_SDL_StartTextInput@
 hs_bindgen_5a9261502fa2575b
   :: BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
   -> IO BG.CBool
 hs_bindgen_5a9261502fa2575b =
-  BG.fromFFIType hs_bindgen_5a9261502fa2575b_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_5a9261502fa2575b_base (BG.toFFIType x0))
 
 -- | Start accepting Unicode text input events in a window.
 --
@@ -729,8 +757,8 @@
 foreign import ccall unsafe "hs_bindgen_0c7cd0ff2864a5c4"
   hs_bindgen_0c7cd0ff2864a5c4_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Unsafe_SDL_StartTextInputWithProperties@
 hs_bindgen_0c7cd0ff2864a5c4
@@ -738,7 +766,9 @@
   -> SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
   -> IO BG.CBool
 hs_bindgen_0c7cd0ff2864a5c4 =
-  BG.fromFFIType hs_bindgen_0c7cd0ff2864a5c4_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_0c7cd0ff2864a5c4_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Start accepting Unicode text input events in a window, with properties describing the input.
 --
@@ -788,14 +818,15 @@
 foreign import ccall unsafe "hs_bindgen_5c76ed8d45b8c50f"
   hs_bindgen_5c76ed8d45b8c50f_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Unsafe_SDL_TextInputActive@
 hs_bindgen_5c76ed8d45b8c50f
   :: BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
   -> IO BG.CBool
 hs_bindgen_5c76ed8d45b8c50f =
-  BG.fromFFIType hs_bindgen_5c76ed8d45b8c50f_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_5c76ed8d45b8c50f_base (BG.toFFIType x0))
 
 -- | Check whether or not Unicode text input events are enabled for a window.
 --
@@ -820,14 +851,15 @@
 foreign import ccall unsafe "hs_bindgen_3ae77c9248468f14"
   hs_bindgen_3ae77c9248468f14_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Unsafe_SDL_StopTextInput@
 hs_bindgen_3ae77c9248468f14
   :: BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
   -> IO BG.CBool
 hs_bindgen_3ae77c9248468f14 =
-  BG.fromFFIType hs_bindgen_3ae77c9248468f14_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3ae77c9248468f14_base (BG.toFFIType x0))
 
 -- | Stop receiving any text input events in a window.
 --
@@ -854,14 +886,15 @@
 foreign import ccall unsafe "hs_bindgen_2d81775a3f86e350"
   hs_bindgen_2d81775a3f86e350_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Unsafe_SDL_ClearComposition@
 hs_bindgen_2d81775a3f86e350
   :: BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
   -> IO BG.CBool
 hs_bindgen_2d81775a3f86e350 =
-  BG.fromFFIType hs_bindgen_2d81775a3f86e350_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_2d81775a3f86e350_base (BG.toFFIType x0))
 
 -- | Dismiss the composition window\/IME without disabling the subsystem.
 --
@@ -887,8 +920,8 @@
   hs_bindgen_6de1e1b47fbde959_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Unsafe_SDL_SetTextInputArea@
 hs_bindgen_6de1e1b47fbde959
@@ -897,7 +930,12 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_6de1e1b47fbde959 =
-  BG.fromFFIType hs_bindgen_6de1e1b47fbde959_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_6de1e1b47fbde959_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set the area used to type Unicode text input.
 --
@@ -934,7 +972,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Unsafe_SDL_GetTextInputArea@
 hs_bindgen_e48f604580fa9c58
@@ -943,7 +981,12 @@
   -> BG.Ptr BG.CInt
   -> IO BG.CBool
 hs_bindgen_e48f604580fa9c58 =
-  BG.fromFFIType hs_bindgen_e48f604580fa9c58_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_e48f604580fa9c58_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get the area used to type Unicode text input.
 --
@@ -977,12 +1020,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Unsafe_SDL_HasScreenKeyboardSupport@
 foreign import ccall unsafe "hs_bindgen_94887f48a4a41d37"
   hs_bindgen_94887f48a4a41d37_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Unsafe_SDL_HasScreenKeyboardSupport@
 hs_bindgen_94887f48a4a41d37 :: IO BG.CBool
 hs_bindgen_94887f48a4a41d37 =
-  BG.fromFFIType hs_bindgen_94887f48a4a41d37_base
+  fmap BG.fromFFIType hs_bindgen_94887f48a4a41d37_base
 
 -- | Check whether the platform has screen keyboard support.
 --
@@ -1003,14 +1046,15 @@
 foreign import ccall unsafe "hs_bindgen_6ec8a3c2431361bd"
   hs_bindgen_6ec8a3c2431361bd_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Keyboard_Unsafe_SDL_ScreenKeyboardShown@
 hs_bindgen_6ec8a3c2431361bd
   :: BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
   -> IO BG.CBool
 hs_bindgen_6ec8a3c2431361bd =
-  BG.fromFFIType hs_bindgen_6ec8a3c2431361bd_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_6ec8a3c2431361bd_base (BG.toFFIType x0))
 
 -- | Check whether the screen keyboard is shown for given window.
 --
diff --git a/src/SDL3/Sys/Bindgen/Keycode.hs b/src/SDL3/Sys/Bindgen/Keycode.hs
--- a/src/SDL3/Sys/Bindgen/Keycode.hs
+++ b/src/SDL3/Sys/Bindgen/Keycode.hs
@@ -14,6 +14,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | Defines constants which identify keyboard keys and modifiers.
 --
@@ -198,6 +199,7 @@
   SDL3.Sys.Bindgen.Keycode.sDLK_CLEARAGAIN,
   SDL3.Sys.Bindgen.Keycode.sDLK_CRSEL,
   SDL3.Sys.Bindgen.Keycode.sDLK_EXSEL,
+  SDL3.Sys.Bindgen.Keycode.sDLK_FRONT,
   SDL3.Sys.Bindgen.Keycode.sDLK_KP_00,
   SDL3.Sys.Bindgen.Keycode.sDLK_KP_000,
   SDL3.Sys.Bindgen.Keycode.sDLK_THOUSANDSSEPARATOR,
@@ -315,6 +317,8 @@
 )
 where
 
+import Prelude (Bounded, Enum, Eq, Integral, Num, Ord, Read, Real, Show, type (~))
+
 import C.Expr.HostPlatform qualified
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.Marshal qualified as Marshal
@@ -1350,573 +1354,579 @@
 sDLK_EXSEL :: BG.CUInt
 sDLK_EXSEL = (1073741988 :: BG.CUInt)
 
+-- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_FRONT)@
+--
+--     [C declaration]: @macro SDLK_FRONT@, defined at @SDL3\/SDL_keycode.h 225:9@
+sDLK_FRONT :: BG.CUInt
+sDLK_FRONT = (1073741989 :: BG.CUInt)
+
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_00)@
 --
---     [C declaration]: @macro SDLK_KP_00@, defined at @SDL3\/SDL_keycode.h 225:9@
+--     [C declaration]: @macro SDLK_KP_00@, defined at @SDL3\/SDL_keycode.h 226:9@
 sDLK_KP_00 :: BG.CUInt
 sDLK_KP_00 = (1073742000 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_000)@
 --
---     [C declaration]: @macro SDLK_KP_000@, defined at @SDL3\/SDL_keycode.h 226:9@
+--     [C declaration]: @macro SDLK_KP_000@, defined at @SDL3\/SDL_keycode.h 227:9@
 sDLK_KP_000 :: BG.CUInt
 sDLK_KP_000 = (1073742001 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_THOUSANDSSEPARATOR)@
 --
---     [C declaration]: @macro SDLK_THOUSANDSSEPARATOR@, defined at @SDL3\/SDL_keycode.h 227:9@
+--     [C declaration]: @macro SDLK_THOUSANDSSEPARATOR@, defined at @SDL3\/SDL_keycode.h 228:9@
 sDLK_THOUSANDSSEPARATOR :: BG.CUInt
 sDLK_THOUSANDSSEPARATOR = (1073742002 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DECIMALSEPARATOR)@
 --
---     [C declaration]: @macro SDLK_DECIMALSEPARATOR@, defined at @SDL3\/SDL_keycode.h 228:9@
+--     [C declaration]: @macro SDLK_DECIMALSEPARATOR@, defined at @SDL3\/SDL_keycode.h 229:9@
 sDLK_DECIMALSEPARATOR :: BG.CUInt
 sDLK_DECIMALSEPARATOR = (1073742003 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CURRENCYUNIT)@
 --
---     [C declaration]: @macro SDLK_CURRENCYUNIT@, defined at @SDL3\/SDL_keycode.h 229:9@
+--     [C declaration]: @macro SDLK_CURRENCYUNIT@, defined at @SDL3\/SDL_keycode.h 230:9@
 sDLK_CURRENCYUNIT :: BG.CUInt
 sDLK_CURRENCYUNIT = (1073742004 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CURRENCYSUBUNIT)@
 --
---     [C declaration]: @macro SDLK_CURRENCYSUBUNIT@, defined at @SDL3\/SDL_keycode.h 230:9@
+--     [C declaration]: @macro SDLK_CURRENCYSUBUNIT@, defined at @SDL3\/SDL_keycode.h 231:9@
 sDLK_CURRENCYSUBUNIT :: BG.CUInt
 sDLK_CURRENCYSUBUNIT = (1073742005 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LEFTPAREN)@
 --
---     [C declaration]: @macro SDLK_KP_LEFTPAREN@, defined at @SDL3\/SDL_keycode.h 231:9@
+--     [C declaration]: @macro SDLK_KP_LEFTPAREN@, defined at @SDL3\/SDL_keycode.h 232:9@
 sDLK_KP_LEFTPAREN :: BG.CUInt
 sDLK_KP_LEFTPAREN = (1073742006 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_RIGHTPAREN)@
 --
---     [C declaration]: @macro SDLK_KP_RIGHTPAREN@, defined at @SDL3\/SDL_keycode.h 232:9@
+--     [C declaration]: @macro SDLK_KP_RIGHTPAREN@, defined at @SDL3\/SDL_keycode.h 233:9@
 sDLK_KP_RIGHTPAREN :: BG.CUInt
 sDLK_KP_RIGHTPAREN = (1073742007 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LEFTBRACE)@
 --
---     [C declaration]: @macro SDLK_KP_LEFTBRACE@, defined at @SDL3\/SDL_keycode.h 233:9@
+--     [C declaration]: @macro SDLK_KP_LEFTBRACE@, defined at @SDL3\/SDL_keycode.h 234:9@
 sDLK_KP_LEFTBRACE :: BG.CUInt
 sDLK_KP_LEFTBRACE = (1073742008 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_RIGHTBRACE)@
 --
---     [C declaration]: @macro SDLK_KP_RIGHTBRACE@, defined at @SDL3\/SDL_keycode.h 234:9@
+--     [C declaration]: @macro SDLK_KP_RIGHTBRACE@, defined at @SDL3\/SDL_keycode.h 235:9@
 sDLK_KP_RIGHTBRACE :: BG.CUInt
 sDLK_KP_RIGHTBRACE = (1073742009 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_TAB)@
 --
---     [C declaration]: @macro SDLK_KP_TAB@, defined at @SDL3\/SDL_keycode.h 235:9@
+--     [C declaration]: @macro SDLK_KP_TAB@, defined at @SDL3\/SDL_keycode.h 236:9@
 sDLK_KP_TAB :: BG.CUInt
 sDLK_KP_TAB = (1073742010 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_BACKSPACE)@
 --
---     [C declaration]: @macro SDLK_KP_BACKSPACE@, defined at @SDL3\/SDL_keycode.h 236:9@
+--     [C declaration]: @macro SDLK_KP_BACKSPACE@, defined at @SDL3\/SDL_keycode.h 237:9@
 sDLK_KP_BACKSPACE :: BG.CUInt
 sDLK_KP_BACKSPACE = (1073742011 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_A)@
 --
---     [C declaration]: @macro SDLK_KP_A@, defined at @SDL3\/SDL_keycode.h 237:9@
+--     [C declaration]: @macro SDLK_KP_A@, defined at @SDL3\/SDL_keycode.h 238:9@
 sDLK_KP_A :: BG.CUInt
 sDLK_KP_A = (1073742012 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_B)@
 --
---     [C declaration]: @macro SDLK_KP_B@, defined at @SDL3\/SDL_keycode.h 238:9@
+--     [C declaration]: @macro SDLK_KP_B@, defined at @SDL3\/SDL_keycode.h 239:9@
 sDLK_KP_B :: BG.CUInt
 sDLK_KP_B = (1073742013 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_C)@
 --
---     [C declaration]: @macro SDLK_KP_C@, defined at @SDL3\/SDL_keycode.h 239:9@
+--     [C declaration]: @macro SDLK_KP_C@, defined at @SDL3\/SDL_keycode.h 240:9@
 sDLK_KP_C :: BG.CUInt
 sDLK_KP_C = (1073742014 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_D)@
 --
---     [C declaration]: @macro SDLK_KP_D@, defined at @SDL3\/SDL_keycode.h 240:9@
+--     [C declaration]: @macro SDLK_KP_D@, defined at @SDL3\/SDL_keycode.h 241:9@
 sDLK_KP_D :: BG.CUInt
 sDLK_KP_D = (1073742015 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_E)@
 --
---     [C declaration]: @macro SDLK_KP_E@, defined at @SDL3\/SDL_keycode.h 241:9@
+--     [C declaration]: @macro SDLK_KP_E@, defined at @SDL3\/SDL_keycode.h 242:9@
 sDLK_KP_E :: BG.CUInt
 sDLK_KP_E = (1073742016 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_F)@
 --
---     [C declaration]: @macro SDLK_KP_F@, defined at @SDL3\/SDL_keycode.h 242:9@
+--     [C declaration]: @macro SDLK_KP_F@, defined at @SDL3\/SDL_keycode.h 243:9@
 sDLK_KP_F :: BG.CUInt
 sDLK_KP_F = (1073742017 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_XOR)@
 --
---     [C declaration]: @macro SDLK_KP_XOR@, defined at @SDL3\/SDL_keycode.h 243:9@
+--     [C declaration]: @macro SDLK_KP_XOR@, defined at @SDL3\/SDL_keycode.h 244:9@
 sDLK_KP_XOR :: BG.CUInt
 sDLK_KP_XOR = (1073742018 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_POWER)@
 --
---     [C declaration]: @macro SDLK_KP_POWER@, defined at @SDL3\/SDL_keycode.h 244:9@
+--     [C declaration]: @macro SDLK_KP_POWER@, defined at @SDL3\/SDL_keycode.h 245:9@
 sDLK_KP_POWER :: BG.CUInt
 sDLK_KP_POWER = (1073742019 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PERCENT)@
 --
---     [C declaration]: @macro SDLK_KP_PERCENT@, defined at @SDL3\/SDL_keycode.h 245:9@
+--     [C declaration]: @macro SDLK_KP_PERCENT@, defined at @SDL3\/SDL_keycode.h 246:9@
 sDLK_KP_PERCENT :: BG.CUInt
 sDLK_KP_PERCENT = (1073742020 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LESS)@
 --
---     [C declaration]: @macro SDLK_KP_LESS@, defined at @SDL3\/SDL_keycode.h 246:9@
+--     [C declaration]: @macro SDLK_KP_LESS@, defined at @SDL3\/SDL_keycode.h 247:9@
 sDLK_KP_LESS :: BG.CUInt
 sDLK_KP_LESS = (1073742021 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_GREATER)@
 --
---     [C declaration]: @macro SDLK_KP_GREATER@, defined at @SDL3\/SDL_keycode.h 247:9@
+--     [C declaration]: @macro SDLK_KP_GREATER@, defined at @SDL3\/SDL_keycode.h 248:9@
 sDLK_KP_GREATER :: BG.CUInt
 sDLK_KP_GREATER = (1073742022 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_AMPERSAND)@
 --
---     [C declaration]: @macro SDLK_KP_AMPERSAND@, defined at @SDL3\/SDL_keycode.h 248:9@
+--     [C declaration]: @macro SDLK_KP_AMPERSAND@, defined at @SDL3\/SDL_keycode.h 249:9@
 sDLK_KP_AMPERSAND :: BG.CUInt
 sDLK_KP_AMPERSAND = (1073742023 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DBLAMPERSAND)@
 --
---     [C declaration]: @macro SDLK_KP_DBLAMPERSAND@, defined at @SDL3\/SDL_keycode.h 249:9@
+--     [C declaration]: @macro SDLK_KP_DBLAMPERSAND@, defined at @SDL3\/SDL_keycode.h 250:9@
 sDLK_KP_DBLAMPERSAND :: BG.CUInt
 sDLK_KP_DBLAMPERSAND = (1073742024 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_VERTICALBAR)@
 --
---     [C declaration]: @macro SDLK_KP_VERTICALBAR@, defined at @SDL3\/SDL_keycode.h 250:9@
+--     [C declaration]: @macro SDLK_KP_VERTICALBAR@, defined at @SDL3\/SDL_keycode.h 251:9@
 sDLK_KP_VERTICALBAR :: BG.CUInt
 sDLK_KP_VERTICALBAR = (1073742025 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DBLVERTICALBAR)@
 --
---     [C declaration]: @macro SDLK_KP_DBLVERTICALBAR@, defined at @SDL3\/SDL_keycode.h 251:9@
+--     [C declaration]: @macro SDLK_KP_DBLVERTICALBAR@, defined at @SDL3\/SDL_keycode.h 252:9@
 sDLK_KP_DBLVERTICALBAR :: BG.CUInt
 sDLK_KP_DBLVERTICALBAR = (1073742026 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_COLON)@
 --
---     [C declaration]: @macro SDLK_KP_COLON@, defined at @SDL3\/SDL_keycode.h 252:9@
+--     [C declaration]: @macro SDLK_KP_COLON@, defined at @SDL3\/SDL_keycode.h 253:9@
 sDLK_KP_COLON :: BG.CUInt
 sDLK_KP_COLON = (1073742027 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_HASH)@
 --
---     [C declaration]: @macro SDLK_KP_HASH@, defined at @SDL3\/SDL_keycode.h 253:9@
+--     [C declaration]: @macro SDLK_KP_HASH@, defined at @SDL3\/SDL_keycode.h 254:9@
 sDLK_KP_HASH :: BG.CUInt
 sDLK_KP_HASH = (1073742028 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_SPACE)@
 --
---     [C declaration]: @macro SDLK_KP_SPACE@, defined at @SDL3\/SDL_keycode.h 254:9@
+--     [C declaration]: @macro SDLK_KP_SPACE@, defined at @SDL3\/SDL_keycode.h 255:9@
 sDLK_KP_SPACE :: BG.CUInt
 sDLK_KP_SPACE = (1073742029 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_AT)@
 --
---     [C declaration]: @macro SDLK_KP_AT@, defined at @SDL3\/SDL_keycode.h 255:9@
+--     [C declaration]: @macro SDLK_KP_AT@, defined at @SDL3\/SDL_keycode.h 256:9@
 sDLK_KP_AT :: BG.CUInt
 sDLK_KP_AT = (1073742030 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EXCLAM)@
 --
---     [C declaration]: @macro SDLK_KP_EXCLAM@, defined at @SDL3\/SDL_keycode.h 256:9@
+--     [C declaration]: @macro SDLK_KP_EXCLAM@, defined at @SDL3\/SDL_keycode.h 257:9@
 sDLK_KP_EXCLAM :: BG.CUInt
 sDLK_KP_EXCLAM = (1073742031 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMSTORE)@
 --
---     [C declaration]: @macro SDLK_KP_MEMSTORE@, defined at @SDL3\/SDL_keycode.h 257:9@
+--     [C declaration]: @macro SDLK_KP_MEMSTORE@, defined at @SDL3\/SDL_keycode.h 258:9@
 sDLK_KP_MEMSTORE :: BG.CUInt
 sDLK_KP_MEMSTORE = (1073742032 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMRECALL)@
 --
---     [C declaration]: @macro SDLK_KP_MEMRECALL@, defined at @SDL3\/SDL_keycode.h 258:9@
+--     [C declaration]: @macro SDLK_KP_MEMRECALL@, defined at @SDL3\/SDL_keycode.h 259:9@
 sDLK_KP_MEMRECALL :: BG.CUInt
 sDLK_KP_MEMRECALL = (1073742033 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMCLEAR)@
 --
---     [C declaration]: @macro SDLK_KP_MEMCLEAR@, defined at @SDL3\/SDL_keycode.h 259:9@
+--     [C declaration]: @macro SDLK_KP_MEMCLEAR@, defined at @SDL3\/SDL_keycode.h 260:9@
 sDLK_KP_MEMCLEAR :: BG.CUInt
 sDLK_KP_MEMCLEAR = (1073742034 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMADD)@
 --
---     [C declaration]: @macro SDLK_KP_MEMADD@, defined at @SDL3\/SDL_keycode.h 260:9@
+--     [C declaration]: @macro SDLK_KP_MEMADD@, defined at @SDL3\/SDL_keycode.h 261:9@
 sDLK_KP_MEMADD :: BG.CUInt
 sDLK_KP_MEMADD = (1073742035 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMSUBTRACT)@
 --
---     [C declaration]: @macro SDLK_KP_MEMSUBTRACT@, defined at @SDL3\/SDL_keycode.h 261:9@
+--     [C declaration]: @macro SDLK_KP_MEMSUBTRACT@, defined at @SDL3\/SDL_keycode.h 262:9@
 sDLK_KP_MEMSUBTRACT :: BG.CUInt
 sDLK_KP_MEMSUBTRACT = (1073742036 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMMULTIPLY)@
 --
---     [C declaration]: @macro SDLK_KP_MEMMULTIPLY@, defined at @SDL3\/SDL_keycode.h 262:9@
+--     [C declaration]: @macro SDLK_KP_MEMMULTIPLY@, defined at @SDL3\/SDL_keycode.h 263:9@
 sDLK_KP_MEMMULTIPLY :: BG.CUInt
 sDLK_KP_MEMMULTIPLY = (1073742037 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMDIVIDE)@
 --
---     [C declaration]: @macro SDLK_KP_MEMDIVIDE@, defined at @SDL3\/SDL_keycode.h 263:9@
+--     [C declaration]: @macro SDLK_KP_MEMDIVIDE@, defined at @SDL3\/SDL_keycode.h 264:9@
 sDLK_KP_MEMDIVIDE :: BG.CUInt
 sDLK_KP_MEMDIVIDE = (1073742038 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PLUSMINUS)@
 --
---     [C declaration]: @macro SDLK_KP_PLUSMINUS@, defined at @SDL3\/SDL_keycode.h 264:9@
+--     [C declaration]: @macro SDLK_KP_PLUSMINUS@, defined at @SDL3\/SDL_keycode.h 265:9@
 sDLK_KP_PLUSMINUS :: BG.CUInt
 sDLK_KP_PLUSMINUS = (1073742039 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_CLEAR)@
 --
---     [C declaration]: @macro SDLK_KP_CLEAR@, defined at @SDL3\/SDL_keycode.h 265:9@
+--     [C declaration]: @macro SDLK_KP_CLEAR@, defined at @SDL3\/SDL_keycode.h 266:9@
 sDLK_KP_CLEAR :: BG.CUInt
 sDLK_KP_CLEAR = (1073742040 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_CLEARENTRY)@
 --
---     [C declaration]: @macro SDLK_KP_CLEARENTRY@, defined at @SDL3\/SDL_keycode.h 266:9@
+--     [C declaration]: @macro SDLK_KP_CLEARENTRY@, defined at @SDL3\/SDL_keycode.h 267:9@
 sDLK_KP_CLEARENTRY :: BG.CUInt
 sDLK_KP_CLEARENTRY = (1073742041 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_BINARY)@
 --
---     [C declaration]: @macro SDLK_KP_BINARY@, defined at @SDL3\/SDL_keycode.h 267:9@
+--     [C declaration]: @macro SDLK_KP_BINARY@, defined at @SDL3\/SDL_keycode.h 268:9@
 sDLK_KP_BINARY :: BG.CUInt
 sDLK_KP_BINARY = (1073742042 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_OCTAL)@
 --
---     [C declaration]: @macro SDLK_KP_OCTAL@, defined at @SDL3\/SDL_keycode.h 268:9@
+--     [C declaration]: @macro SDLK_KP_OCTAL@, defined at @SDL3\/SDL_keycode.h 269:9@
 sDLK_KP_OCTAL :: BG.CUInt
 sDLK_KP_OCTAL = (1073742043 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DECIMAL)@
 --
---     [C declaration]: @macro SDLK_KP_DECIMAL@, defined at @SDL3\/SDL_keycode.h 269:9@
+--     [C declaration]: @macro SDLK_KP_DECIMAL@, defined at @SDL3\/SDL_keycode.h 270:9@
 sDLK_KP_DECIMAL :: BG.CUInt
 sDLK_KP_DECIMAL = (1073742044 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_HEXADECIMAL)@
 --
---     [C declaration]: @macro SDLK_KP_HEXADECIMAL@, defined at @SDL3\/SDL_keycode.h 270:9@
+--     [C declaration]: @macro SDLK_KP_HEXADECIMAL@, defined at @SDL3\/SDL_keycode.h 271:9@
 sDLK_KP_HEXADECIMAL :: BG.CUInt
 sDLK_KP_HEXADECIMAL = (1073742045 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LCTRL)@
 --
---     [C declaration]: @macro SDLK_LCTRL@, defined at @SDL3\/SDL_keycode.h 271:9@
+--     [C declaration]: @macro SDLK_LCTRL@, defined at @SDL3\/SDL_keycode.h 272:9@
 sDLK_LCTRL :: BG.CUInt
 sDLK_LCTRL = (1073742048 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LSHIFT)@
 --
---     [C declaration]: @macro SDLK_LSHIFT@, defined at @SDL3\/SDL_keycode.h 272:9@
+--     [C declaration]: @macro SDLK_LSHIFT@, defined at @SDL3\/SDL_keycode.h 273:9@
 sDLK_LSHIFT :: BG.CUInt
 sDLK_LSHIFT = (1073742049 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LALT)@
 --
---     [C declaration]: @macro SDLK_LALT@, defined at @SDL3\/SDL_keycode.h 273:9@
+--     [C declaration]: @macro SDLK_LALT@, defined at @SDL3\/SDL_keycode.h 274:9@
 sDLK_LALT :: BG.CUInt
 sDLK_LALT = (1073742050 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LGUI)@
 --
---     [C declaration]: @macro SDLK_LGUI@, defined at @SDL3\/SDL_keycode.h 274:9@
+--     [C declaration]: @macro SDLK_LGUI@, defined at @SDL3\/SDL_keycode.h 275:9@
 sDLK_LGUI :: BG.CUInt
 sDLK_LGUI = (1073742051 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RCTRL)@
 --
---     [C declaration]: @macro SDLK_RCTRL@, defined at @SDL3\/SDL_keycode.h 275:9@
+--     [C declaration]: @macro SDLK_RCTRL@, defined at @SDL3\/SDL_keycode.h 276:9@
 sDLK_RCTRL :: BG.CUInt
 sDLK_RCTRL = (1073742052 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RSHIFT)@
 --
---     [C declaration]: @macro SDLK_RSHIFT@, defined at @SDL3\/SDL_keycode.h 276:9@
+--     [C declaration]: @macro SDLK_RSHIFT@, defined at @SDL3\/SDL_keycode.h 277:9@
 sDLK_RSHIFT :: BG.CUInt
 sDLK_RSHIFT = (1073742053 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RALT)@
 --
---     [C declaration]: @macro SDLK_RALT@, defined at @SDL3\/SDL_keycode.h 277:9@
+--     [C declaration]: @macro SDLK_RALT@, defined at @SDL3\/SDL_keycode.h 278:9@
 sDLK_RALT :: BG.CUInt
 sDLK_RALT = (1073742054 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RGUI)@
 --
---     [C declaration]: @macro SDLK_RGUI@, defined at @SDL3\/SDL_keycode.h 278:9@
+--     [C declaration]: @macro SDLK_RGUI@, defined at @SDL3\/SDL_keycode.h 279:9@
 sDLK_RGUI :: BG.CUInt
 sDLK_RGUI = (1073742055 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MODE)@
 --
---     [C declaration]: @macro SDLK_MODE@, defined at @SDL3\/SDL_keycode.h 279:9@
+--     [C declaration]: @macro SDLK_MODE@, defined at @SDL3\/SDL_keycode.h 280:9@
 sDLK_MODE :: BG.CUInt
 sDLK_MODE = (1073742081 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SLEEP)@
 --
---     [C declaration]: @macro SDLK_SLEEP@, defined at @SDL3\/SDL_keycode.h 280:9@
+--     [C declaration]: @macro SDLK_SLEEP@, defined at @SDL3\/SDL_keycode.h 281:9@
 sDLK_SLEEP :: BG.CUInt
 sDLK_SLEEP = (1073742082 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_WAKE)@
 --
---     [C declaration]: @macro SDLK_WAKE@, defined at @SDL3\/SDL_keycode.h 281:9@
+--     [C declaration]: @macro SDLK_WAKE@, defined at @SDL3\/SDL_keycode.h 282:9@
 sDLK_WAKE :: BG.CUInt
 sDLK_WAKE = (1073742083 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CHANNEL_INCREMENT)@
 --
---     [C declaration]: @macro SDLK_CHANNEL_INCREMENT@, defined at @SDL3\/SDL_keycode.h 282:9@
+--     [C declaration]: @macro SDLK_CHANNEL_INCREMENT@, defined at @SDL3\/SDL_keycode.h 283:9@
 sDLK_CHANNEL_INCREMENT :: BG.CUInt
 sDLK_CHANNEL_INCREMENT = (1073742084 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CHANNEL_DECREMENT)@
 --
---     [C declaration]: @macro SDLK_CHANNEL_DECREMENT@, defined at @SDL3\/SDL_keycode.h 283:9@
+--     [C declaration]: @macro SDLK_CHANNEL_DECREMENT@, defined at @SDL3\/SDL_keycode.h 284:9@
 sDLK_CHANNEL_DECREMENT :: BG.CUInt
 sDLK_CHANNEL_DECREMENT = (1073742085 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MEDIA_PLAY)@
 --
---     [C declaration]: @macro SDLK_MEDIA_PLAY@, defined at @SDL3\/SDL_keycode.h 284:9@
+--     [C declaration]: @macro SDLK_MEDIA_PLAY@, defined at @SDL3\/SDL_keycode.h 285:9@
 sDLK_MEDIA_PLAY :: BG.CUInt
 sDLK_MEDIA_PLAY = (1073742086 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MEDIA_PAUSE)@
 --
---     [C declaration]: @macro SDLK_MEDIA_PAUSE@, defined at @SDL3\/SDL_keycode.h 285:9@
+--     [C declaration]: @macro SDLK_MEDIA_PAUSE@, defined at @SDL3\/SDL_keycode.h 286:9@
 sDLK_MEDIA_PAUSE :: BG.CUInt
 sDLK_MEDIA_PAUSE = (1073742087 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MEDIA_RECORD)@
 --
---     [C declaration]: @macro SDLK_MEDIA_RECORD@, defined at @SDL3\/SDL_keycode.h 286:9@
+--     [C declaration]: @macro SDLK_MEDIA_RECORD@, defined at @SDL3\/SDL_keycode.h 287:9@
 sDLK_MEDIA_RECORD :: BG.CUInt
 sDLK_MEDIA_RECORD = (1073742088 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MEDIA_FAST_FORWARD)@
 --
---     [C declaration]: @macro SDLK_MEDIA_FAST_FORWARD@, defined at @SDL3\/SDL_keycode.h 287:9@
+--     [C declaration]: @macro SDLK_MEDIA_FAST_FORWARD@, defined at @SDL3\/SDL_keycode.h 288:9@
 sDLK_MEDIA_FAST_FORWARD :: BG.CUInt
 sDLK_MEDIA_FAST_FORWARD = (1073742089 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MEDIA_REWIND)@
 --
---     [C declaration]: @macro SDLK_MEDIA_REWIND@, defined at @SDL3\/SDL_keycode.h 288:9@
+--     [C declaration]: @macro SDLK_MEDIA_REWIND@, defined at @SDL3\/SDL_keycode.h 289:9@
 sDLK_MEDIA_REWIND :: BG.CUInt
 sDLK_MEDIA_REWIND = (1073742090 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MEDIA_NEXT_TRACK)@
 --
---     [C declaration]: @macro SDLK_MEDIA_NEXT_TRACK@, defined at @SDL3\/SDL_keycode.h 289:9@
+--     [C declaration]: @macro SDLK_MEDIA_NEXT_TRACK@, defined at @SDL3\/SDL_keycode.h 290:9@
 sDLK_MEDIA_NEXT_TRACK :: BG.CUInt
 sDLK_MEDIA_NEXT_TRACK = (1073742091 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MEDIA_PREVIOUS_TRACK)@
 --
---     [C declaration]: @macro SDLK_MEDIA_PREVIOUS_TRACK@, defined at @SDL3\/SDL_keycode.h 290:9@
+--     [C declaration]: @macro SDLK_MEDIA_PREVIOUS_TRACK@, defined at @SDL3\/SDL_keycode.h 291:9@
 sDLK_MEDIA_PREVIOUS_TRACK :: BG.CUInt
 sDLK_MEDIA_PREVIOUS_TRACK = (1073742092 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MEDIA_STOP)@
 --
---     [C declaration]: @macro SDLK_MEDIA_STOP@, defined at @SDL3\/SDL_keycode.h 291:9@
+--     [C declaration]: @macro SDLK_MEDIA_STOP@, defined at @SDL3\/SDL_keycode.h 292:9@
 sDLK_MEDIA_STOP :: BG.CUInt
 sDLK_MEDIA_STOP = (1073742093 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MEDIA_EJECT)@
 --
---     [C declaration]: @macro SDLK_MEDIA_EJECT@, defined at @SDL3\/SDL_keycode.h 292:9@
+--     [C declaration]: @macro SDLK_MEDIA_EJECT@, defined at @SDL3\/SDL_keycode.h 293:9@
 sDLK_MEDIA_EJECT :: BG.CUInt
 sDLK_MEDIA_EJECT = (1073742094 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MEDIA_PLAY_PAUSE)@
 --
---     [C declaration]: @macro SDLK_MEDIA_PLAY_PAUSE@, defined at @SDL3\/SDL_keycode.h 293:9@
+--     [C declaration]: @macro SDLK_MEDIA_PLAY_PAUSE@, defined at @SDL3\/SDL_keycode.h 294:9@
 sDLK_MEDIA_PLAY_PAUSE :: BG.CUInt
 sDLK_MEDIA_PLAY_PAUSE = (1073742095 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MEDIA_SELECT)@
 --
---     [C declaration]: @macro SDLK_MEDIA_SELECT@, defined at @SDL3\/SDL_keycode.h 294:9@
+--     [C declaration]: @macro SDLK_MEDIA_SELECT@, defined at @SDL3\/SDL_keycode.h 295:9@
 sDLK_MEDIA_SELECT :: BG.CUInt
 sDLK_MEDIA_SELECT = (1073742096 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_NEW)@
 --
---     [C declaration]: @macro SDLK_AC_NEW@, defined at @SDL3\/SDL_keycode.h 295:9@
+--     [C declaration]: @macro SDLK_AC_NEW@, defined at @SDL3\/SDL_keycode.h 296:9@
 sDLK_AC_NEW :: BG.CUInt
 sDLK_AC_NEW = (1073742097 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_OPEN)@
 --
---     [C declaration]: @macro SDLK_AC_OPEN@, defined at @SDL3\/SDL_keycode.h 296:9@
+--     [C declaration]: @macro SDLK_AC_OPEN@, defined at @SDL3\/SDL_keycode.h 297:9@
 sDLK_AC_OPEN :: BG.CUInt
 sDLK_AC_OPEN = (1073742098 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_CLOSE)@
 --
---     [C declaration]: @macro SDLK_AC_CLOSE@, defined at @SDL3\/SDL_keycode.h 297:9@
+--     [C declaration]: @macro SDLK_AC_CLOSE@, defined at @SDL3\/SDL_keycode.h 298:9@
 sDLK_AC_CLOSE :: BG.CUInt
 sDLK_AC_CLOSE = (1073742099 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_EXIT)@
 --
---     [C declaration]: @macro SDLK_AC_EXIT@, defined at @SDL3\/SDL_keycode.h 298:9@
+--     [C declaration]: @macro SDLK_AC_EXIT@, defined at @SDL3\/SDL_keycode.h 299:9@
 sDLK_AC_EXIT :: BG.CUInt
 sDLK_AC_EXIT = (1073742100 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_SAVE)@
 --
---     [C declaration]: @macro SDLK_AC_SAVE@, defined at @SDL3\/SDL_keycode.h 299:9@
+--     [C declaration]: @macro SDLK_AC_SAVE@, defined at @SDL3\/SDL_keycode.h 300:9@
 sDLK_AC_SAVE :: BG.CUInt
 sDLK_AC_SAVE = (1073742101 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_PRINT)@
 --
---     [C declaration]: @macro SDLK_AC_PRINT@, defined at @SDL3\/SDL_keycode.h 300:9@
+--     [C declaration]: @macro SDLK_AC_PRINT@, defined at @SDL3\/SDL_keycode.h 301:9@
 sDLK_AC_PRINT :: BG.CUInt
 sDLK_AC_PRINT = (1073742102 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_PROPERTIES)@
 --
---     [C declaration]: @macro SDLK_AC_PROPERTIES@, defined at @SDL3\/SDL_keycode.h 301:9@
+--     [C declaration]: @macro SDLK_AC_PROPERTIES@, defined at @SDL3\/SDL_keycode.h 302:9@
 sDLK_AC_PROPERTIES :: BG.CUInt
 sDLK_AC_PROPERTIES = (1073742103 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_SEARCH)@
 --
---     [C declaration]: @macro SDLK_AC_SEARCH@, defined at @SDL3\/SDL_keycode.h 302:9@
+--     [C declaration]: @macro SDLK_AC_SEARCH@, defined at @SDL3\/SDL_keycode.h 303:9@
 sDLK_AC_SEARCH :: BG.CUInt
 sDLK_AC_SEARCH = (1073742104 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_HOME)@
 --
---     [C declaration]: @macro SDLK_AC_HOME@, defined at @SDL3\/SDL_keycode.h 303:9@
+--     [C declaration]: @macro SDLK_AC_HOME@, defined at @SDL3\/SDL_keycode.h 304:9@
 sDLK_AC_HOME :: BG.CUInt
 sDLK_AC_HOME = (1073742105 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_BACK)@
 --
---     [C declaration]: @macro SDLK_AC_BACK@, defined at @SDL3\/SDL_keycode.h 304:9@
+--     [C declaration]: @macro SDLK_AC_BACK@, defined at @SDL3\/SDL_keycode.h 305:9@
 sDLK_AC_BACK :: BG.CUInt
 sDLK_AC_BACK = (1073742106 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_FORWARD)@
 --
---     [C declaration]: @macro SDLK_AC_FORWARD@, defined at @SDL3\/SDL_keycode.h 305:9@
+--     [C declaration]: @macro SDLK_AC_FORWARD@, defined at @SDL3\/SDL_keycode.h 306:9@
 sDLK_AC_FORWARD :: BG.CUInt
 sDLK_AC_FORWARD = (1073742107 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_STOP)@
 --
---     [C declaration]: @macro SDLK_AC_STOP@, defined at @SDL3\/SDL_keycode.h 306:9@
+--     [C declaration]: @macro SDLK_AC_STOP@, defined at @SDL3\/SDL_keycode.h 307:9@
 sDLK_AC_STOP :: BG.CUInt
 sDLK_AC_STOP = (1073742108 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_REFRESH)@
 --
---     [C declaration]: @macro SDLK_AC_REFRESH@, defined at @SDL3\/SDL_keycode.h 307:9@
+--     [C declaration]: @macro SDLK_AC_REFRESH@, defined at @SDL3\/SDL_keycode.h 308:9@
 sDLK_AC_REFRESH :: BG.CUInt
 sDLK_AC_REFRESH = (1073742109 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_BOOKMARKS)@
 --
---     [C declaration]: @macro SDLK_AC_BOOKMARKS@, defined at @SDL3\/SDL_keycode.h 308:9@
+--     [C declaration]: @macro SDLK_AC_BOOKMARKS@, defined at @SDL3\/SDL_keycode.h 309:9@
 sDLK_AC_BOOKMARKS :: BG.CUInt
 sDLK_AC_BOOKMARKS = (1073742110 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SOFTLEFT)@
 --
---     [C declaration]: @macro SDLK_SOFTLEFT@, defined at @SDL3\/SDL_keycode.h 309:9@
+--     [C declaration]: @macro SDLK_SOFTLEFT@, defined at @SDL3\/SDL_keycode.h 310:9@
 sDLK_SOFTLEFT :: BG.CUInt
 sDLK_SOFTLEFT = (1073742111 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SOFTRIGHT)@
 --
---     [C declaration]: @macro SDLK_SOFTRIGHT@, defined at @SDL3\/SDL_keycode.h 310:9@
+--     [C declaration]: @macro SDLK_SOFTRIGHT@, defined at @SDL3\/SDL_keycode.h 311:9@
 sDLK_SOFTRIGHT :: BG.CUInt
 sDLK_SOFTRIGHT = (1073742112 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CALL)@
 --
---     [C declaration]: @macro SDLK_CALL@, defined at @SDL3\/SDL_keycode.h 311:9@
+--     [C declaration]: @macro SDLK_CALL@, defined at @SDL3\/SDL_keycode.h 312:9@
 sDLK_CALL :: BG.CUInt
 sDLK_CALL = (1073742113 :: BG.CUInt)
 
 -- | @SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_ENDCALL)@
 --
---     [C declaration]: @macro SDLK_ENDCALL@, defined at @SDL3\/SDL_keycode.h 312:9@
+--     [C declaration]: @macro SDLK_ENDCALL@, defined at @SDL3\/SDL_keycode.h 313:9@
 sDLK_ENDCALL :: BG.CUInt
 sDLK_ENDCALL = (1073742114 :: BG.CUInt)
 
 -- | Extended key Left Tab
 --
---     [C declaration]: @macro SDLK_LEFT_TAB@, defined at @SDL3\/SDL_keycode.h 313:9@
+--     [C declaration]: @macro SDLK_LEFT_TAB@, defined at @SDL3\/SDL_keycode.h 314:9@
 sDLK_LEFT_TAB :: BG.CUInt
 sDLK_LEFT_TAB = (536870913 :: BG.CUInt)
 
 -- | Extended key Level 5 Shift
 --
---     [C declaration]: @macro SDLK_LEVEL5_SHIFT@, defined at @SDL3\/SDL_keycode.h 314:9@
+--     [C declaration]: @macro SDLK_LEVEL5_SHIFT@, defined at @SDL3\/SDL_keycode.h 315:9@
 sDLK_LEVEL5_SHIFT :: BG.CUInt
 sDLK_LEVEL5_SHIFT = (536870914 :: BG.CUInt)
 
 -- | Extended key Multi-key Compose
 --
---     [C declaration]: @macro SDLK_MULTI_KEY_COMPOSE@, defined at @SDL3\/SDL_keycode.h 315:9@
+--     [C declaration]: @macro SDLK_MULTI_KEY_COMPOSE@, defined at @SDL3\/SDL_keycode.h 316:9@
 sDLK_MULTI_KEY_COMPOSE :: BG.CUInt
 sDLK_MULTI_KEY_COMPOSE = (536870915 :: BG.CUInt)
 
 -- | Extended key Left Meta
 --
---     [C declaration]: @macro SDLK_LMETA@, defined at @SDL3\/SDL_keycode.h 316:9@
+--     [C declaration]: @macro SDLK_LMETA@, defined at @SDL3\/SDL_keycode.h 317:9@
 sDLK_LMETA :: BG.CUInt
 sDLK_LMETA = (536870916 :: BG.CUInt)
 
 -- | Extended key Right Meta
 --
---     [C declaration]: @macro SDLK_RMETA@, defined at @SDL3\/SDL_keycode.h 317:9@
+--     [C declaration]: @macro SDLK_RMETA@, defined at @SDL3\/SDL_keycode.h 318:9@
 sDLK_RMETA :: BG.CUInt
 sDLK_RMETA = (536870917 :: BG.CUInt)
 
 -- | Extended key Left Hyper
 --
---     [C declaration]: @macro SDLK_LHYPER@, defined at @SDL3\/SDL_keycode.h 318:9@
+--     [C declaration]: @macro SDLK_LHYPER@, defined at @SDL3\/SDL_keycode.h 319:9@
 sDLK_LHYPER :: BG.CUInt
 sDLK_LHYPER = (536870918 :: BG.CUInt)
 
 -- | Extended key Right Hyper
 --
---     [C declaration]: @macro SDLK_RHYPER@, defined at @SDL3\/SDL_keycode.h 319:9@
+--     [C declaration]: @macro SDLK_RHYPER@, defined at @SDL3\/SDL_keycode.h 320:9@
 sDLK_RHYPER :: BG.CUInt
 sDLK_RHYPER = (536870919 :: BG.CUInt)
 
@@ -1924,7 +1934,7 @@
 --
 --     @since 3.2.0
 --
---     [C declaration]: @SDL_Keymod@, defined at @SDL3\/SDL_keycode.h 326:16@
+--     [C declaration]: @SDL_Keymod@, defined at @SDL3\/SDL_keycode.h 327:16@
 newtype SDL_Keymod = SDL_Keymod
   { unwrap :: SDL3.Sys.Bindgen.Stdinc.Uint16
   }
@@ -1973,112 +1983,112 @@
 
 -- | no modifier is applicable.
 --
---     [C declaration]: @macro SDL_KMOD_NONE@, defined at @SDL3\/SDL_keycode.h 328:9@
+--     [C declaration]: @macro SDL_KMOD_NONE@, defined at @SDL3\/SDL_keycode.h 329:9@
 sDL_KMOD_NONE :: BG.CUInt
 sDL_KMOD_NONE = (0 :: BG.CUInt)
 
 -- | the left Shift key is down.
 --
---     [C declaration]: @macro SDL_KMOD_LSHIFT@, defined at @SDL3\/SDL_keycode.h 329:9@
+--     [C declaration]: @macro SDL_KMOD_LSHIFT@, defined at @SDL3\/SDL_keycode.h 330:9@
 sDL_KMOD_LSHIFT :: BG.CUInt
 sDL_KMOD_LSHIFT = (1 :: BG.CUInt)
 
 -- | the right Shift key is down.
 --
---     [C declaration]: @macro SDL_KMOD_RSHIFT@, defined at @SDL3\/SDL_keycode.h 330:9@
+--     [C declaration]: @macro SDL_KMOD_RSHIFT@, defined at @SDL3\/SDL_keycode.h 331:9@
 sDL_KMOD_RSHIFT :: BG.CUInt
 sDL_KMOD_RSHIFT = (2 :: BG.CUInt)
 
 -- | the Level 5 Shift key is down.
 --
---     [C declaration]: @macro SDL_KMOD_LEVEL5@, defined at @SDL3\/SDL_keycode.h 331:9@
+--     [C declaration]: @macro SDL_KMOD_LEVEL5@, defined at @SDL3\/SDL_keycode.h 332:9@
 sDL_KMOD_LEVEL5 :: BG.CUInt
 sDL_KMOD_LEVEL5 = (4 :: BG.CUInt)
 
 -- | the left Ctrl (Control) key is down.
 --
---     [C declaration]: @macro SDL_KMOD_LCTRL@, defined at @SDL3\/SDL_keycode.h 332:9@
+--     [C declaration]: @macro SDL_KMOD_LCTRL@, defined at @SDL3\/SDL_keycode.h 333:9@
 sDL_KMOD_LCTRL :: BG.CUInt
 sDL_KMOD_LCTRL = (64 :: BG.CUInt)
 
 -- | the right Ctrl (Control) key is down.
 --
---     [C declaration]: @macro SDL_KMOD_RCTRL@, defined at @SDL3\/SDL_keycode.h 333:9@
+--     [C declaration]: @macro SDL_KMOD_RCTRL@, defined at @SDL3\/SDL_keycode.h 334:9@
 sDL_KMOD_RCTRL :: BG.CUInt
 sDL_KMOD_RCTRL = (128 :: BG.CUInt)
 
 -- | the left Alt key is down.
 --
---     [C declaration]: @macro SDL_KMOD_LALT@, defined at @SDL3\/SDL_keycode.h 334:9@
+--     [C declaration]: @macro SDL_KMOD_LALT@, defined at @SDL3\/SDL_keycode.h 335:9@
 sDL_KMOD_LALT :: BG.CUInt
 sDL_KMOD_LALT = (256 :: BG.CUInt)
 
 -- | the right Alt key is down.
 --
---     [C declaration]: @macro SDL_KMOD_RALT@, defined at @SDL3\/SDL_keycode.h 335:9@
+--     [C declaration]: @macro SDL_KMOD_RALT@, defined at @SDL3\/SDL_keycode.h 336:9@
 sDL_KMOD_RALT :: BG.CUInt
 sDL_KMOD_RALT = (512 :: BG.CUInt)
 
 -- | the left GUI key (often the Windows key) is down.
 --
---     [C declaration]: @macro SDL_KMOD_LGUI@, defined at @SDL3\/SDL_keycode.h 336:9@
+--     [C declaration]: @macro SDL_KMOD_LGUI@, defined at @SDL3\/SDL_keycode.h 337:9@
 sDL_KMOD_LGUI :: BG.CUInt
 sDL_KMOD_LGUI = (1024 :: BG.CUInt)
 
 -- | the right GUI key (often the Windows key) is down.
 --
---     [C declaration]: @macro SDL_KMOD_RGUI@, defined at @SDL3\/SDL_keycode.h 337:9@
+--     [C declaration]: @macro SDL_KMOD_RGUI@, defined at @SDL3\/SDL_keycode.h 338:9@
 sDL_KMOD_RGUI :: BG.CUInt
 sDL_KMOD_RGUI = (2048 :: BG.CUInt)
 
 -- | the Num Lock key (may be located on an extended keypad) is down.
 --
---     [C declaration]: @macro SDL_KMOD_NUM@, defined at @SDL3\/SDL_keycode.h 338:9@
+--     [C declaration]: @macro SDL_KMOD_NUM@, defined at @SDL3\/SDL_keycode.h 339:9@
 sDL_KMOD_NUM :: BG.CUInt
 sDL_KMOD_NUM = (4096 :: BG.CUInt)
 
 -- | the Caps Lock key is down.
 --
---     [C declaration]: @macro SDL_KMOD_CAPS@, defined at @SDL3\/SDL_keycode.h 339:9@
+--     [C declaration]: @macro SDL_KMOD_CAPS@, defined at @SDL3\/SDL_keycode.h 340:9@
 sDL_KMOD_CAPS :: BG.CUInt
 sDL_KMOD_CAPS = (8192 :: BG.CUInt)
 
 -- | the !AltGr key is down.
 --
---     [C declaration]: @macro SDL_KMOD_MODE@, defined at @SDL3\/SDL_keycode.h 340:9@
+--     [C declaration]: @macro SDL_KMOD_MODE@, defined at @SDL3\/SDL_keycode.h 341:9@
 sDL_KMOD_MODE :: BG.CUInt
 sDL_KMOD_MODE = (16384 :: BG.CUInt)
 
 -- | the Scroll Lock key is down.
 --
---     [C declaration]: @macro SDL_KMOD_SCROLL@, defined at @SDL3\/SDL_keycode.h 341:9@
+--     [C declaration]: @macro SDL_KMOD_SCROLL@, defined at @SDL3\/SDL_keycode.h 342:9@
 sDL_KMOD_SCROLL :: BG.CUInt
 sDL_KMOD_SCROLL = (32768 :: BG.CUInt)
 
 -- | Any Ctrl key is down.
 --
---     [C declaration]: @macro SDL_KMOD_CTRL@, defined at @SDL3\/SDL_keycode.h 342:9@
+--     [C declaration]: @macro SDL_KMOD_CTRL@, defined at @SDL3\/SDL_keycode.h 343:9@
 sDL_KMOD_CTRL :: BG.CUInt
 sDL_KMOD_CTRL =
   (C.Expr.HostPlatform..|.) sDL_KMOD_LCTRL sDL_KMOD_RCTRL
 
 -- | Any Shift key is down.
 --
---     [C declaration]: @macro SDL_KMOD_SHIFT@, defined at @SDL3\/SDL_keycode.h 343:9@
+--     [C declaration]: @macro SDL_KMOD_SHIFT@, defined at @SDL3\/SDL_keycode.h 344:9@
 sDL_KMOD_SHIFT :: BG.CUInt
 sDL_KMOD_SHIFT =
   (C.Expr.HostPlatform..|.) sDL_KMOD_LSHIFT sDL_KMOD_RSHIFT
 
 -- | Any Alt key is down.
 --
---     [C declaration]: @macro SDL_KMOD_ALT@, defined at @SDL3\/SDL_keycode.h 344:9@
+--     [C declaration]: @macro SDL_KMOD_ALT@, defined at @SDL3\/SDL_keycode.h 345:9@
 sDL_KMOD_ALT :: BG.CUInt
 sDL_KMOD_ALT =
   (C.Expr.HostPlatform..|.) sDL_KMOD_LALT sDL_KMOD_RALT
 
 -- | Any GUI key is down.
 --
---     [C declaration]: @macro SDL_KMOD_GUI@, defined at @SDL3\/SDL_keycode.h 345:9@
+--     [C declaration]: @macro SDL_KMOD_GUI@, defined at @SDL3\/SDL_keycode.h 346:9@
 sDL_KMOD_GUI :: BG.CUInt
 sDL_KMOD_GUI =
   (C.Expr.HostPlatform..|.) sDL_KMOD_LGUI sDL_KMOD_RGUI
diff --git a/src/SDL3/Sys/Bindgen/Loadso.hs b/src/SDL3/Sys/Bindgen/Loadso.hs
--- a/src/SDL3/Sys/Bindgen/Loadso.hs
+++ b/src/SDL3/Sys/Bindgen/Loadso.hs
@@ -1,5 +1,6 @@
 {-# LANGUAGE EmptyDataDecls #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | System-dependent library loading routines.
 --
diff --git a/src/SDL3/Sys/Bindgen/Loadso/FunPtr.hs b/src/SDL3/Sys/Bindgen/Loadso/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Loadso/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Loadso/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Loadso.FunPtr (
@@ -9,6 +11,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -17,7 +21,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_loadso.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_loadso.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Loadso_get_SDL_LoadObject */"
          , "__attribute__ ((const))"
          , "SDL_SharedObject *(*hs_bindgen_06ede04ef7bebd95 (void)) ("
@@ -56,7 +64,7 @@
 hs_bindgen_06ede04ef7bebd95
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO (BG.Ptr SDL_SharedObject)))
 hs_bindgen_06ede04ef7bebd95 =
-  BG.fromFFIType hs_bindgen_06ede04ef7bebd95_base
+  fmap BG.fromFFIType hs_bindgen_06ede04ef7bebd95_base
 
 {-# NOINLINE sDL_LoadObject #-}
 
@@ -92,7 +100,7 @@
            )
        )
 hs_bindgen_c0b414522c89c9e2 =
-  BG.fromFFIType hs_bindgen_c0b414522c89c9e2_base
+  fmap BG.fromFFIType hs_bindgen_c0b414522c89c9e2_base
 
 {-# NOINLINE sDL_LoadFunction #-}
 
@@ -136,7 +144,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Loadso_get_SDL_UnloadObject@
 hs_bindgen_a3520810bae0da07 :: IO (BG.FunPtr (BG.Ptr SDL_SharedObject -> IO ()))
 hs_bindgen_a3520810bae0da07 =
-  BG.fromFFIType hs_bindgen_a3520810bae0da07_base
+  fmap BG.fromFFIType hs_bindgen_a3520810bae0da07_base
 
 {-# NOINLINE sDL_UnloadObject #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Loadso/Safe.hs b/src/SDL3/Sys/Bindgen/Loadso/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Loadso/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Loadso/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Loadso.Safe (
@@ -9,7 +11,10 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Loadso
@@ -17,7 +22,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_loadso.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_loadso.h>"
          , "SDL_SharedObject *hs_bindgen_db107edc1c41c909 ("
          , "  char const *arg1"
          , ")"
@@ -52,7 +61,8 @@
   :: PtrConst.PtrConst BG.CChar
   -> IO (BG.Ptr SDL_SharedObject)
 hs_bindgen_db107edc1c41c909 =
-  BG.fromFFIType hs_bindgen_db107edc1c41c909_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_db107edc1c41c909_base (BG.toFFIType x0))
 
 -- | Dynamically load a shared object.
 --
@@ -78,7 +88,7 @@
   hs_bindgen_47da86a71a34f8de_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO (BG.FunPtr BG.Void)
+    -> IO HsBindgen.Runtime.Support.FunPtrVoid
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Loadso_Safe_SDL_LoadFunction@
 hs_bindgen_47da86a71a34f8de
@@ -86,7 +96,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO SDL3.Sys.Bindgen.Stdinc.SDL_FunctionPointer
 hs_bindgen_47da86a71a34f8de =
-  BG.fromFFIType hs_bindgen_47da86a71a34f8de_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_47da86a71a34f8de_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Look up the address of the named function in a shared object.
 --
@@ -130,7 +142,8 @@
   :: BG.Ptr SDL_SharedObject
   -> IO ()
 hs_bindgen_e548a8de357a59b9 =
-  BG.fromFFIType hs_bindgen_e548a8de357a59b9_base
+  \x0 ->
+    hs_bindgen_e548a8de357a59b9_base (BG.toFFIType x0)
 
 -- | Unload a shared object from memory.
 --
diff --git a/src/SDL3/Sys/Bindgen/Loadso/Unsafe.hs b/src/SDL3/Sys/Bindgen/Loadso/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Loadso/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Loadso/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Loadso.Unsafe (
@@ -9,7 +11,10 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Loadso
@@ -17,7 +22,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_loadso.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_loadso.h>"
          , "SDL_SharedObject *hs_bindgen_480ab0651497eddb ("
          , "  char const *arg1"
          , ")"
@@ -52,7 +61,8 @@
   :: PtrConst.PtrConst BG.CChar
   -> IO (BG.Ptr SDL_SharedObject)
 hs_bindgen_480ab0651497eddb =
-  BG.fromFFIType hs_bindgen_480ab0651497eddb_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_480ab0651497eddb_base (BG.toFFIType x0))
 
 -- | Dynamically load a shared object.
 --
@@ -78,7 +88,7 @@
   hs_bindgen_215b1c5734d854fe_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO (BG.FunPtr BG.Void)
+    -> IO HsBindgen.Runtime.Support.FunPtrVoid
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Loadso_Unsafe_SDL_LoadFunction@
 hs_bindgen_215b1c5734d854fe
@@ -86,7 +96,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO SDL3.Sys.Bindgen.Stdinc.SDL_FunctionPointer
 hs_bindgen_215b1c5734d854fe =
-  BG.fromFFIType hs_bindgen_215b1c5734d854fe_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_215b1c5734d854fe_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Look up the address of the named function in a shared object.
 --
@@ -130,7 +142,8 @@
   :: BG.Ptr SDL_SharedObject
   -> IO ()
 hs_bindgen_0898e457bf0f2807 =
-  BG.fromFFIType hs_bindgen_0898e457bf0f2807_base
+  \x0 ->
+    hs_bindgen_0898e457bf0f2807_base (BG.toFFIType x0)
 
 -- | Unload a shared object from memory.
 --
diff --git a/src/SDL3/Sys/Bindgen/Locale.hs b/src/SDL3/Sys/Bindgen/Locale.hs
--- a/src/SDL3/Sys/Bindgen/Locale.hs
+++ b/src/SDL3/Sys/Bindgen/Locale.hs
@@ -13,6 +13,7 @@
 {-# LANGUAGE TypeOperators #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | SDL locale services.
 --
@@ -28,9 +29,12 @@
 )
 where
 
+import Prelude (Eq, Int, Show, pure, (<*>), (>>), type (~))
+
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.Marshal qualified as Marshal
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Struct qualified as Struct
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField
 
@@ -70,6 +74,11 @@
 
 deriving via Marshal.EquivStorable SDL_Locale instance BG.Storable SDL_Locale
 
+deriving via Struct.IsStructViaReadRaw SDL_Locale instance Struct.IsStruct SDL_Locale
+
+-- | A language name, like \"en\" for English.
+--
+--     [C declaration]: @language@, defined at @SDL3\/SDL_locale.h 62:17@
 instance
   (ty ~ PtrConst.PtrConst BG.CChar)
   => BG.CompatHasField.HasField "language" SDL_Locale ty
@@ -94,6 +103,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | A country, like \"US\" for America. Can be NULL.
+--
+--     [C declaration]: @country@, defined at @SDL3\/SDL_locale.h 63:17@
 instance
   (ty ~ PtrConst.PtrConst BG.CChar)
   => BG.CompatHasField.HasField "country" SDL_Locale ty
diff --git a/src/SDL3/Sys/Bindgen/Locale/FunPtr.hs b/src/SDL3/Sys/Bindgen/Locale/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Locale/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Locale/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Locale.FunPtr (
@@ -7,13 +9,19 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Locale
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_locale.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_locale.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Locale_get_SDL_GetPreferredLocales */"
          , "__attribute__ ((const))"
          , "SDL_Locale **(*hs_bindgen_85c70d4968252352 (void)) ("
@@ -34,7 +42,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Locale_get_SDL_GetPreferredLocales@
 hs_bindgen_85c70d4968252352 :: IO (BG.FunPtr (BG.Ptr BG.CInt -> IO (BG.Ptr (BG.Ptr SDL_Locale))))
 hs_bindgen_85c70d4968252352 =
-  BG.fromFFIType hs_bindgen_85c70d4968252352_base
+  fmap BG.fromFFIType hs_bindgen_85c70d4968252352_base
 
 {-# NOINLINE sDL_GetPreferredLocales #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Locale/Safe.hs b/src/SDL3/Sys/Bindgen/Locale/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Locale/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Locale/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Locale.Safe (
@@ -7,13 +9,19 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Locale
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_locale.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_locale.h>"
          , "SDL_Locale **hs_bindgen_3153090c14b68521 ("
          , "  signed int *arg1"
          , ")"
@@ -35,7 +43,8 @@
   :: BG.Ptr BG.CInt
   -> IO (BG.Ptr (BG.Ptr SDL_Locale))
 hs_bindgen_3153090c14b68521 =
-  BG.fromFFIType hs_bindgen_3153090c14b68521_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3153090c14b68521_base (BG.toFFIType x0))
 
 -- | Report the user\'s preferred locale.
 --
diff --git a/src/SDL3/Sys/Bindgen/Locale/Unsafe.hs b/src/SDL3/Sys/Bindgen/Locale/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Locale/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Locale/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Locale.Unsafe (
@@ -7,13 +9,19 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Locale
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_locale.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_locale.h>"
          , "SDL_Locale **hs_bindgen_ae8e008e79421b8c ("
          , "  signed int *arg1"
          , ")"
@@ -35,7 +43,8 @@
   :: BG.Ptr BG.CInt
   -> IO (BG.Ptr (BG.Ptr SDL_Locale))
 hs_bindgen_ae8e008e79421b8c =
-  BG.fromFFIType hs_bindgen_ae8e008e79421b8c_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_ae8e008e79421b8c_base (BG.toFFIType x0))
 
 -- | Report the user\'s preferred locale.
 --
diff --git a/src/SDL3/Sys/Bindgen/Log.hs b/src/SDL3/Sys/Bindgen/Log.hs
--- a/src/SDL3/Sys/Bindgen/Log.hs
+++ b/src/SDL3/Sys/Bindgen/Log.hs
@@ -5,6 +5,7 @@
 {-# LANGUAGE DuplicateRecordFields #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE MagicHash #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
@@ -16,6 +17,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | Simple log messages with priorities and categories. A message\'s 'SDL_LogPriority' signifies how important the message is. A message\'s 'SDL_LogCategory' signifies from what domain it belongs to. Every category has a minimum priority specified: when a message belongs to that category, it will only be sent out if it has that minimum priority or higher.
 --
@@ -85,6 +87,8 @@
 )
 where
 
+import Prelude (Eq, IO, Int, Ord, Read, Show, fmap, pure, (<*>), type (~))
+
 import HsBindgen.Runtime.CEnum qualified as CEnum
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.Marshal qualified as Marshal
@@ -426,13 +430,12 @@
   { unwrap :: BG.Ptr BG.Void -> BG.CInt -> SDL_LogPriority -> PtrConst.PtrConst BG.CChar -> IO ()
   }
   deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
 
 -- __unique:__ @toSDL_LogOutputFunction_Aux@
 foreign import ccall safe "wrapper"
   hs_bindgen_e51284d24485bac7_base
-    :: (BG.Ptr BG.Void -> BG.Int32 -> BG.Word32 -> BG.Ptr BG.Void -> IO ())
-    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.Int32 -> BG.Word32 -> BG.Ptr BG.Void -> IO ()))
+    :: (BG.Ptr BG.Void -> BG.CInt -> BG.CUInt -> BG.Ptr BG.Void -> IO ())
+    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.CInt -> BG.CUInt -> BG.Ptr BG.Void -> IO ()))
 
 -- __unique:__ @toSDL_LogOutputFunction_Aux@
 hs_bindgen_e51284d24485bac7
@@ -440,15 +443,29 @@
   -> IO (BG.FunPtr SDL_LogOutputFunction_Aux)
 hs_bindgen_e51284d24485bac7 =
   \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_e51284d24485bac7_base (BG.toFFIType fun0))
+    fmap
+      BG.castFunPtr
+      ( hs_bindgen_e51284d24485bac7_base
+          ( \x1 ->
+              \x2 ->
+                \x3 ->
+                  \x4 ->
+                    BG.getField @"unwrap"
+                      fun0
+                      (BG.fromFFIType x1)
+                      (BG.fromFFIType x2)
+                      (BG.fromFFIType x3)
+                      (BG.fromFFIType x4)
+          )
+      )
 
 -- __unique:__ @fromSDL_LogOutputFunction_Aux@
 foreign import ccall safe "dynamic"
   hs_bindgen_0538751d36e72086_base
-    :: BG.FunPtr (BG.Ptr BG.Void -> BG.Int32 -> BG.Word32 -> BG.Ptr BG.Void -> IO ())
+    :: BG.FunPtr (BG.Ptr BG.Void -> BG.CInt -> BG.CUInt -> BG.Ptr BG.Void -> IO ())
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Word32
+    -> BG.CInt
+    -> BG.CUInt
     -> BG.Ptr BG.Void
     -> IO ()
 
@@ -458,7 +475,18 @@
   -> SDL_LogOutputFunction_Aux
 hs_bindgen_0538751d36e72086 =
   \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_0538751d36e72086_base (BG.castFunPtrToFFIType funPtr0))
+    SDL_LogOutputFunction_Aux
+      ( \x1 ->
+          \x2 ->
+            \x3 ->
+              \x4 ->
+                hs_bindgen_0538751d36e72086_base
+                  (BG.castFunPtr funPtr0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+      )
 
 instance BG.ToFunPtr SDL_LogOutputFunction_Aux where
   toFunPtr = hs_bindgen_e51284d24485bac7
diff --git a/src/SDL3/Sys/Bindgen/Log/FunPtr.hs b/src/SDL3/Sys/Bindgen/Log/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Log/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Log/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Log.FunPtr (
@@ -14,6 +16,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -21,7 +25,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_log.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_log.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Log_get_SDL_SetLogPriorities */"
          , "__attribute__ ((const))"
          , "void (*hs_bindgen_53f49172bb06fac5 (void)) ("
@@ -98,7 +106,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Log_get_SDL_SetLogPriorities@
 hs_bindgen_53f49172bb06fac5 :: IO (BG.FunPtr (SDL_LogPriority -> IO ()))
 hs_bindgen_53f49172bb06fac5 =
-  BG.fromFFIType hs_bindgen_53f49172bb06fac5_base
+  fmap BG.fromFFIType hs_bindgen_53f49172bb06fac5_base
 
 {-# NOINLINE sDL_SetLogPriorities #-}
 
@@ -125,7 +133,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Log_get_SDL_SetLogPriority@
 hs_bindgen_efaec8fe88879163 :: IO (BG.FunPtr (BG.CInt -> SDL_LogPriority -> IO ()))
 hs_bindgen_efaec8fe88879163 =
-  BG.fromFFIType hs_bindgen_efaec8fe88879163_base
+  fmap BG.fromFFIType hs_bindgen_efaec8fe88879163_base
 
 {-# NOINLINE sDL_SetLogPriority #-}
 
@@ -154,7 +162,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Log_get_SDL_GetLogPriority@
 hs_bindgen_0a5edd280b63c817 :: IO (BG.FunPtr (BG.CInt -> IO SDL_LogPriority))
 hs_bindgen_0a5edd280b63c817 =
-  BG.fromFFIType hs_bindgen_0a5edd280b63c817_base
+  fmap BG.fromFFIType hs_bindgen_0a5edd280b63c817_base
 
 {-# NOINLINE sDL_GetLogPriority #-}
 
@@ -183,7 +191,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Log_get_SDL_ResetLogPriorities@
 hs_bindgen_a50e52f5fe769c57 :: IO (BG.FunPtr (IO ()))
 hs_bindgen_a50e52f5fe769c57 =
-  BG.fromFFIType hs_bindgen_a50e52f5fe769c57_base
+  fmap BG.fromFFIType hs_bindgen_a50e52f5fe769c57_base
 
 {-# NOINLINE sDL_ResetLogPriorities #-}
 
@@ -211,7 +219,7 @@
 hs_bindgen_69bb7de79ceb0d36
   :: IO (BG.FunPtr (SDL_LogPriority -> PtrConst.PtrConst BG.CChar -> IO BG.CBool))
 hs_bindgen_69bb7de79ceb0d36 =
-  BG.fromFFIType hs_bindgen_69bb7de79ceb0d36_base
+  fmap BG.fromFFIType hs_bindgen_69bb7de79ceb0d36_base
 
 {-# NOINLINE sDL_SetLogPriorityPrefix #-}
 
@@ -246,7 +254,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Log_get_SDL_GetDefaultLogOutputFunction@
 hs_bindgen_48e509121cb8d650 :: IO (BG.FunPtr (IO SDL_LogOutputFunction))
 hs_bindgen_48e509121cb8d650 =
-  BG.fromFFIType hs_bindgen_48e509121cb8d650_base
+  fmap BG.fromFFIType hs_bindgen_48e509121cb8d650_base
 
 {-# NOINLINE sDL_GetDefaultLogOutputFunction #-}
 
@@ -274,7 +282,7 @@
 hs_bindgen_ae4995884c29f0d4
   :: IO (BG.FunPtr (BG.Ptr SDL_LogOutputFunction -> BG.Ptr (BG.Ptr BG.Void) -> IO ()))
 hs_bindgen_ae4995884c29f0d4 =
-  BG.fromFFIType hs_bindgen_ae4995884c29f0d4_base
+  fmap BG.fromFFIType hs_bindgen_ae4995884c29f0d4_base
 
 {-# NOINLINE sDL_GetLogOutputFunction #-}
 
@@ -304,7 +312,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Log_get_SDL_SetLogOutputFunction@
 hs_bindgen_b53e5cacb1899dae :: IO (BG.FunPtr (SDL_LogOutputFunction -> BG.Ptr BG.Void -> IO ()))
 hs_bindgen_b53e5cacb1899dae =
-  BG.fromFFIType hs_bindgen_b53e5cacb1899dae_base
+  fmap BG.fromFFIType hs_bindgen_b53e5cacb1899dae_base
 
 {-# NOINLINE sDL_SetLogOutputFunction #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Log/Safe.hs b/src/SDL3/Sys/Bindgen/Log/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Log/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Log/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Log.Safe (
@@ -14,6 +16,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -21,7 +25,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_log.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_log.h>"
          , "void hs_bindgen_f2fe4ac03d85bd48 ("
          , "  SDL_LogPriority arg1"
          , ")"
@@ -77,7 +85,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Log_Safe_SDL_SetLogPriorities@
 foreign import ccall safe "hs_bindgen_f2fe4ac03d85bd48"
   hs_bindgen_f2fe4ac03d85bd48_base
-    :: BG.Word32
+    :: BG.CUInt
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Log_Safe_SDL_SetLogPriorities@
@@ -85,7 +93,8 @@
   :: SDL_LogPriority
   -> IO ()
 hs_bindgen_f2fe4ac03d85bd48 =
-  BG.fromFFIType hs_bindgen_f2fe4ac03d85bd48_base
+  \x0 ->
+    hs_bindgen_f2fe4ac03d85bd48_base (BG.toFFIType x0)
 
 -- | Set the priority of all log categories.
 --
@@ -107,8 +116,8 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Log_Safe_SDL_SetLogPriority@
 foreign import ccall safe "hs_bindgen_3ebd8c186ab4d36e"
   hs_bindgen_3ebd8c186ab4d36e_base
-    :: BG.Int32
-    -> BG.Word32
+    :: BG.CInt
+    -> BG.CUInt
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Log_Safe_SDL_SetLogPriority@
@@ -117,7 +126,9 @@
   -> SDL_LogPriority
   -> IO ()
 hs_bindgen_3ebd8c186ab4d36e =
-  BG.fromFFIType hs_bindgen_3ebd8c186ab4d36e_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_3ebd8c186ab4d36e_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Set the priority of a particular log category.
 --
@@ -143,15 +154,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Log_Safe_SDL_GetLogPriority@
 foreign import ccall safe "hs_bindgen_ba1c5f57ea908831"
   hs_bindgen_ba1c5f57ea908831_base
-    :: BG.Int32
-    -> IO BG.Word32
+    :: BG.CInt
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Log_Safe_SDL_GetLogPriority@
 hs_bindgen_ba1c5f57ea908831
   :: BG.CInt
   -> IO SDL_LogPriority
 hs_bindgen_ba1c5f57ea908831 =
-  BG.fromFFIType hs_bindgen_ba1c5f57ea908831_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_ba1c5f57ea908831_base (BG.toFFIType x0))
 
 -- | Get the priority of a particular log category.
 --
@@ -180,7 +192,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Log_Safe_SDL_ResetLogPriorities@
 hs_bindgen_6d6b388f10a6a765 :: IO ()
 hs_bindgen_6d6b388f10a6a765 =
-  BG.fromFFIType hs_bindgen_6d6b388f10a6a765_base
+  hs_bindgen_6d6b388f10a6a765_base
 
 -- | Reset all priorities to default.
 --
@@ -199,9 +211,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Log_Safe_SDL_SetLogPriorityPrefix@
 foreign import ccall safe "hs_bindgen_a2865e2847033be6"
   hs_bindgen_a2865e2847033be6_base
-    :: BG.Word32
+    :: BG.CUInt
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Log_Safe_SDL_SetLogPriorityPrefix@
 hs_bindgen_a2865e2847033be6
@@ -209,7 +221,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_a2865e2847033be6 =
-  BG.fromFFIType hs_bindgen_a2865e2847033be6_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_a2865e2847033be6_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the text prepended to log messages of a given priority.
 --
@@ -247,7 +261,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Log_Safe_SDL_GetDefaultLogOutputFunction@
 hs_bindgen_29e148c925d2e14a :: IO SDL_LogOutputFunction
 hs_bindgen_29e148c925d2e14a =
-  BG.fromFFIType hs_bindgen_29e148c925d2e14a_base
+  fmap BG.fromFFIType hs_bindgen_29e148c925d2e14a_base
 
 -- | Get the default log output function.
 --
@@ -277,7 +291,9 @@
   -> BG.Ptr (BG.Ptr BG.Void)
   -> IO ()
 hs_bindgen_50b31a8317423d85 =
-  BG.fromFFIType hs_bindgen_50b31a8317423d85_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_50b31a8317423d85_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Get the current log output function.
 --
@@ -314,7 +330,9 @@
   -> BG.Ptr BG.Void
   -> IO ()
 hs_bindgen_bef3e6ff73c88ce8 =
-  BG.fromFFIType hs_bindgen_bef3e6ff73c88ce8_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_bef3e6ff73c88ce8_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Replace the default log output function with one of your own.
 --
diff --git a/src/SDL3/Sys/Bindgen/Log/Unsafe.hs b/src/SDL3/Sys/Bindgen/Log/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Log/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Log/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Log.Unsafe (
@@ -14,6 +16,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -21,7 +25,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_log.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_log.h>"
          , "void hs_bindgen_f026d42937d04ed8 ("
          , "  SDL_LogPriority arg1"
          , ")"
@@ -77,7 +85,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Log_Unsafe_SDL_SetLogPriorities@
 foreign import ccall unsafe "hs_bindgen_f026d42937d04ed8"
   hs_bindgen_f026d42937d04ed8_base
-    :: BG.Word32
+    :: BG.CUInt
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Log_Unsafe_SDL_SetLogPriorities@
@@ -85,7 +93,8 @@
   :: SDL_LogPriority
   -> IO ()
 hs_bindgen_f026d42937d04ed8 =
-  BG.fromFFIType hs_bindgen_f026d42937d04ed8_base
+  \x0 ->
+    hs_bindgen_f026d42937d04ed8_base (BG.toFFIType x0)
 
 -- | Set the priority of all log categories.
 --
@@ -107,8 +116,8 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Log_Unsafe_SDL_SetLogPriority@
 foreign import ccall unsafe "hs_bindgen_e0acc30fc32ccc59"
   hs_bindgen_e0acc30fc32ccc59_base
-    :: BG.Int32
-    -> BG.Word32
+    :: BG.CInt
+    -> BG.CUInt
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Log_Unsafe_SDL_SetLogPriority@
@@ -117,7 +126,9 @@
   -> SDL_LogPriority
   -> IO ()
 hs_bindgen_e0acc30fc32ccc59 =
-  BG.fromFFIType hs_bindgen_e0acc30fc32ccc59_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_e0acc30fc32ccc59_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Set the priority of a particular log category.
 --
@@ -143,15 +154,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Log_Unsafe_SDL_GetLogPriority@
 foreign import ccall unsafe "hs_bindgen_7b5c14a42af4d447"
   hs_bindgen_7b5c14a42af4d447_base
-    :: BG.Int32
-    -> IO BG.Word32
+    :: BG.CInt
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Log_Unsafe_SDL_GetLogPriority@
 hs_bindgen_7b5c14a42af4d447
   :: BG.CInt
   -> IO SDL_LogPriority
 hs_bindgen_7b5c14a42af4d447 =
-  BG.fromFFIType hs_bindgen_7b5c14a42af4d447_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_7b5c14a42af4d447_base (BG.toFFIType x0))
 
 -- | Get the priority of a particular log category.
 --
@@ -180,7 +192,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Log_Unsafe_SDL_ResetLogPriorities@
 hs_bindgen_dea89eef989102db :: IO ()
 hs_bindgen_dea89eef989102db =
-  BG.fromFFIType hs_bindgen_dea89eef989102db_base
+  hs_bindgen_dea89eef989102db_base
 
 -- | Reset all priorities to default.
 --
@@ -199,9 +211,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Log_Unsafe_SDL_SetLogPriorityPrefix@
 foreign import ccall unsafe "hs_bindgen_27cf84b222a7e17b"
   hs_bindgen_27cf84b222a7e17b_base
-    :: BG.Word32
+    :: BG.CUInt
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Log_Unsafe_SDL_SetLogPriorityPrefix@
 hs_bindgen_27cf84b222a7e17b
@@ -209,7 +221,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_27cf84b222a7e17b =
-  BG.fromFFIType hs_bindgen_27cf84b222a7e17b_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_27cf84b222a7e17b_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the text prepended to log messages of a given priority.
 --
@@ -247,7 +261,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Log_Unsafe_SDL_GetDefaultLogOutputFunction@
 hs_bindgen_513e0ffa6c24153a :: IO SDL_LogOutputFunction
 hs_bindgen_513e0ffa6c24153a =
-  BG.fromFFIType hs_bindgen_513e0ffa6c24153a_base
+  fmap BG.fromFFIType hs_bindgen_513e0ffa6c24153a_base
 
 -- | Get the default log output function.
 --
@@ -277,7 +291,9 @@
   -> BG.Ptr (BG.Ptr BG.Void)
   -> IO ()
 hs_bindgen_acd55da6463a4da5 =
-  BG.fromFFIType hs_bindgen_acd55da6463a4da5_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_acd55da6463a4da5_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Get the current log output function.
 --
@@ -314,7 +330,9 @@
   -> BG.Ptr BG.Void
   -> IO ()
 hs_bindgen_70ca4187e3666373 =
-  BG.fromFFIType hs_bindgen_70ca4187e3666373_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_70ca4187e3666373_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Replace the default log output function with one of your own.
 --
diff --git a/src/SDL3/Sys/Bindgen/LogShims/FunPtr.hs b/src/SDL3/Sys/Bindgen/LogShims/FunPtr.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/LogShims/FunPtr.hs
@@ -0,0 +1,399 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.LogShims.FunPtr (
+  SDL3.Sys.Bindgen.LogShims.FunPtr.lithon_SDL_Log,
+  SDL3.Sys.Bindgen.LogShims.FunPtr.lithon_SDL_LogTrace,
+  SDL3.Sys.Bindgen.LogShims.FunPtr.lithon_SDL_LogVerbose,
+  SDL3.Sys.Bindgen.LogShims.FunPtr.lithon_SDL_LogDebug,
+  SDL3.Sys.Bindgen.LogShims.FunPtr.lithon_SDL_LogInfo,
+  SDL3.Sys.Bindgen.LogShims.FunPtr.lithon_SDL_LogWarn,
+  SDL3.Sys.Bindgen.LogShims.FunPtr.lithon_SDL_LogError,
+  SDL3.Sys.Bindgen.LogShims.FunPtr.lithon_SDL_LogCritical,
+  SDL3.Sys.Bindgen.LogShims.FunPtr.lithon_SDL_LogMessage,
+)
+where
+
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+import SDL3.Sys.Bindgen.Log qualified
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <sdl3-bindgen-sys/SDL_log_shims.h>"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_get_lithon_SDL_Log */"
+         , "__attribute__ ((const))"
+         , "void (*hs_bindgen_02d6bdbfbebbbca7 (void)) ("
+         , "  char const *arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_Log;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_get_lithon_SDL_LogTrace */"
+         , "__attribute__ ((const))"
+         , "void (*hs_bindgen_b031cd617cf2187e (void)) ("
+         , "  signed int arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_LogTrace;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_get_lithon_SDL_LogVerbose */"
+         , "__attribute__ ((const))"
+         , "void (*hs_bindgen_01baad23ee654b8f (void)) ("
+         , "  signed int arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_LogVerbose;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_get_lithon_SDL_LogDebug */"
+         , "__attribute__ ((const))"
+         , "void (*hs_bindgen_08084e27beae5e62 (void)) ("
+         , "  signed int arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_LogDebug;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_get_lithon_SDL_LogInfo */"
+         , "__attribute__ ((const))"
+         , "void (*hs_bindgen_f187e83788791148 (void)) ("
+         , "  signed int arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_LogInfo;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_get_lithon_SDL_LogWarn */"
+         , "__attribute__ ((const))"
+         , "void (*hs_bindgen_9f1fe5bc35ab0a46 (void)) ("
+         , "  signed int arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_LogWarn;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_get_lithon_SDL_LogError */"
+         , "__attribute__ ((const))"
+         , "void (*hs_bindgen_30365de711cd7fc7 (void)) ("
+         , "  signed int arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_LogError;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_get_lithon_SDL_LogCritical */"
+         , "__attribute__ ((const))"
+         , "void (*hs_bindgen_eeabb1c88587b99c (void)) ("
+         , "  signed int arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_LogCritical;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_get_lithon_SDL_LogMessage */"
+         , "__attribute__ ((const))"
+         , "void (*hs_bindgen_ef67c4a50a42a453 (void)) ("
+         , "  signed int arg1,"
+         , "  SDL_LogPriority arg2,"
+         , "  char const *arg3"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_LogMessage;"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_get_lithon_SDL_Log@
+foreign import ccall unsafe "hs_bindgen_02d6bdbfbebbbca7"
+  hs_bindgen_02d6bdbfbebbbca7_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_get_lithon_SDL_Log@
+hs_bindgen_02d6bdbfbebbbca7 :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO ()))
+hs_bindgen_02d6bdbfbebbbca7 =
+  fmap BG.fromFFIType hs_bindgen_02d6bdbfbebbbca7_base
+
+{-# NOINLINE lithon_SDL_Log #-}
+
+-- | Log a message with SDL_LOG_CATEGORY_APPLICATION and SDL_LOG_PRIORITY_INFO.
+--
+--     A fixed-arity shim over the variadic SDL_Log: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [@message@]: the message to log, in UTF-8.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_LogMessage
+--
+--     [C declaration]: @lithon_SDL_Log@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 39:24@
+lithon_SDL_Log :: BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO ())
+lithon_SDL_Log =
+  BG.unsafePerformIO hs_bindgen_02d6bdbfbebbbca7
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_get_lithon_SDL_LogTrace@
+foreign import ccall unsafe "hs_bindgen_b031cd617cf2187e"
+  hs_bindgen_b031cd617cf2187e_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_get_lithon_SDL_LogTrace@
+hs_bindgen_b031cd617cf2187e :: IO (BG.FunPtr (BG.CInt -> PtrConst.PtrConst BG.CChar -> IO ()))
+hs_bindgen_b031cd617cf2187e =
+  fmap BG.fromFFIType hs_bindgen_b031cd617cf2187e_base
+
+{-# NOINLINE lithon_SDL_LogTrace #-}
+
+-- | Log a message with SDL_LOG_PRIORITY_TRACE.
+--
+--     A fixed-arity shim over the variadic SDL_LogTrace: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [@category@]: the category of the message.
+--
+--     [@message@]: the message to log, in UTF-8.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_LogMessage
+--
+--     [C declaration]: @lithon_SDL_LogTrace@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 60:24@
+lithon_SDL_LogTrace :: BG.FunPtr (BG.CInt -> PtrConst.PtrConst BG.CChar -> IO ())
+lithon_SDL_LogTrace =
+  BG.unsafePerformIO hs_bindgen_b031cd617cf2187e
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_get_lithon_SDL_LogVerbose@
+foreign import ccall unsafe "hs_bindgen_01baad23ee654b8f"
+  hs_bindgen_01baad23ee654b8f_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_get_lithon_SDL_LogVerbose@
+hs_bindgen_01baad23ee654b8f :: IO (BG.FunPtr (BG.CInt -> PtrConst.PtrConst BG.CChar -> IO ()))
+hs_bindgen_01baad23ee654b8f =
+  fmap BG.fromFFIType hs_bindgen_01baad23ee654b8f_base
+
+{-# NOINLINE lithon_SDL_LogVerbose #-}
+
+-- | Log a message with SDL_LOG_PRIORITY_VERBOSE.
+--
+--     A fixed-arity shim over the variadic SDL_LogVerbose: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [@category@]: the category of the message.
+--
+--     [@message@]: the message to log, in UTF-8.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_LogMessage
+--
+--     [C declaration]: @lithon_SDL_LogVerbose@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 81:24@
+lithon_SDL_LogVerbose :: BG.FunPtr (BG.CInt -> PtrConst.PtrConst BG.CChar -> IO ())
+lithon_SDL_LogVerbose =
+  BG.unsafePerformIO hs_bindgen_01baad23ee654b8f
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_get_lithon_SDL_LogDebug@
+foreign import ccall unsafe "hs_bindgen_08084e27beae5e62"
+  hs_bindgen_08084e27beae5e62_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_get_lithon_SDL_LogDebug@
+hs_bindgen_08084e27beae5e62 :: IO (BG.FunPtr (BG.CInt -> PtrConst.PtrConst BG.CChar -> IO ()))
+hs_bindgen_08084e27beae5e62 =
+  fmap BG.fromFFIType hs_bindgen_08084e27beae5e62_base
+
+{-# NOINLINE lithon_SDL_LogDebug #-}
+
+-- | Log a message with SDL_LOG_PRIORITY_DEBUG.
+--
+--     A fixed-arity shim over the variadic SDL_LogDebug: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [@category@]: the category of the message.
+--
+--     [@message@]: the message to log, in UTF-8.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_LogMessage
+--
+--     [C declaration]: @lithon_SDL_LogDebug@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 102:24@
+lithon_SDL_LogDebug :: BG.FunPtr (BG.CInt -> PtrConst.PtrConst BG.CChar -> IO ())
+lithon_SDL_LogDebug =
+  BG.unsafePerformIO hs_bindgen_08084e27beae5e62
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_get_lithon_SDL_LogInfo@
+foreign import ccall unsafe "hs_bindgen_f187e83788791148"
+  hs_bindgen_f187e83788791148_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_get_lithon_SDL_LogInfo@
+hs_bindgen_f187e83788791148 :: IO (BG.FunPtr (BG.CInt -> PtrConst.PtrConst BG.CChar -> IO ()))
+hs_bindgen_f187e83788791148 =
+  fmap BG.fromFFIType hs_bindgen_f187e83788791148_base
+
+{-# NOINLINE lithon_SDL_LogInfo #-}
+
+-- | Log a message with SDL_LOG_PRIORITY_INFO.
+--
+--     A fixed-arity shim over the variadic SDL_LogInfo: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [@category@]: the category of the message.
+--
+--     [@message@]: the message to log, in UTF-8.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_LogMessage
+--
+--     [C declaration]: @lithon_SDL_LogInfo@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 123:24@
+lithon_SDL_LogInfo :: BG.FunPtr (BG.CInt -> PtrConst.PtrConst BG.CChar -> IO ())
+lithon_SDL_LogInfo =
+  BG.unsafePerformIO hs_bindgen_f187e83788791148
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_get_lithon_SDL_LogWarn@
+foreign import ccall unsafe "hs_bindgen_9f1fe5bc35ab0a46"
+  hs_bindgen_9f1fe5bc35ab0a46_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_get_lithon_SDL_LogWarn@
+hs_bindgen_9f1fe5bc35ab0a46 :: IO (BG.FunPtr (BG.CInt -> PtrConst.PtrConst BG.CChar -> IO ()))
+hs_bindgen_9f1fe5bc35ab0a46 =
+  fmap BG.fromFFIType hs_bindgen_9f1fe5bc35ab0a46_base
+
+{-# NOINLINE lithon_SDL_LogWarn #-}
+
+-- | Log a message with SDL_LOG_PRIORITY_WARN.
+--
+--     A fixed-arity shim over the variadic SDL_LogWarn: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [@category@]: the category of the message.
+--
+--     [@message@]: the message to log, in UTF-8.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_LogMessage
+--
+--     [C declaration]: @lithon_SDL_LogWarn@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 144:24@
+lithon_SDL_LogWarn :: BG.FunPtr (BG.CInt -> PtrConst.PtrConst BG.CChar -> IO ())
+lithon_SDL_LogWarn =
+  BG.unsafePerformIO hs_bindgen_9f1fe5bc35ab0a46
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_get_lithon_SDL_LogError@
+foreign import ccall unsafe "hs_bindgen_30365de711cd7fc7"
+  hs_bindgen_30365de711cd7fc7_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_get_lithon_SDL_LogError@
+hs_bindgen_30365de711cd7fc7 :: IO (BG.FunPtr (BG.CInt -> PtrConst.PtrConst BG.CChar -> IO ()))
+hs_bindgen_30365de711cd7fc7 =
+  fmap BG.fromFFIType hs_bindgen_30365de711cd7fc7_base
+
+{-# NOINLINE lithon_SDL_LogError #-}
+
+-- | Log a message with SDL_LOG_PRIORITY_ERROR.
+--
+--     A fixed-arity shim over the variadic SDL_LogError: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [@category@]: the category of the message.
+--
+--     [@message@]: the message to log, in UTF-8.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_LogMessage
+--
+--     [C declaration]: @lithon_SDL_LogError@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 165:24@
+lithon_SDL_LogError :: BG.FunPtr (BG.CInt -> PtrConst.PtrConst BG.CChar -> IO ())
+lithon_SDL_LogError =
+  BG.unsafePerformIO hs_bindgen_30365de711cd7fc7
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_get_lithon_SDL_LogCritical@
+foreign import ccall unsafe "hs_bindgen_eeabb1c88587b99c"
+  hs_bindgen_eeabb1c88587b99c_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_get_lithon_SDL_LogCritical@
+hs_bindgen_eeabb1c88587b99c :: IO (BG.FunPtr (BG.CInt -> PtrConst.PtrConst BG.CChar -> IO ()))
+hs_bindgen_eeabb1c88587b99c =
+  fmap BG.fromFFIType hs_bindgen_eeabb1c88587b99c_base
+
+{-# NOINLINE lithon_SDL_LogCritical #-}
+
+-- | Log a message with SDL_LOG_PRIORITY_CRITICAL.
+--
+--     A fixed-arity shim over the variadic SDL_LogCritical: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [@category@]: the category of the message.
+--
+--     [@message@]: the message to log, in UTF-8.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_LogMessage
+--
+--     [C declaration]: @lithon_SDL_LogCritical@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 186:24@
+lithon_SDL_LogCritical :: BG.FunPtr (BG.CInt -> PtrConst.PtrConst BG.CChar -> IO ())
+lithon_SDL_LogCritical =
+  BG.unsafePerformIO hs_bindgen_eeabb1c88587b99c
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_get_lithon_SDL_LogMessage@
+foreign import ccall unsafe "hs_bindgen_ef67c4a50a42a453"
+  hs_bindgen_ef67c4a50a42a453_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_get_lithon_SDL_LogMessage@
+hs_bindgen_ef67c4a50a42a453
+  :: IO
+       (BG.FunPtr (BG.CInt -> SDL3.Sys.Bindgen.Log.SDL_LogPriority -> PtrConst.PtrConst BG.CChar -> IO ()))
+hs_bindgen_ef67c4a50a42a453 =
+  fmap BG.fromFFIType hs_bindgen_ef67c4a50a42a453_base
+
+{-# NOINLINE lithon_SDL_LogMessage #-}
+
+-- | Log a message with the specified category and priority.
+--
+--     A fixed-arity shim over the variadic SDL_LogMessage: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [@category@]: the category of the message.
+--
+--     [@priority@]: the priority of the message.
+--
+--     [@message@]: the message to log, in UTF-8.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_SetLogOutputFunction, SDL_SetLogPriority
+--
+--     [C declaration]: @lithon_SDL_LogMessage@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 209:24@
+lithon_SDL_LogMessage
+  :: BG.FunPtr (BG.CInt -> SDL3.Sys.Bindgen.Log.SDL_LogPriority -> PtrConst.PtrConst BG.CChar -> IO ())
+lithon_SDL_LogMessage =
+  BG.unsafePerformIO hs_bindgen_ef67c4a50a42a453
diff --git a/src/SDL3/Sys/Bindgen/LogShims/Safe.hs b/src/SDL3/Sys/Bindgen/LogShims/Safe.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/LogShims/Safe.hs
@@ -0,0 +1,460 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.LogShims.Safe (
+  SDL3.Sys.Bindgen.LogShims.Safe.lithon_SDL_Log,
+  SDL3.Sys.Bindgen.LogShims.Safe.lithon_SDL_LogTrace,
+  SDL3.Sys.Bindgen.LogShims.Safe.lithon_SDL_LogVerbose,
+  SDL3.Sys.Bindgen.LogShims.Safe.lithon_SDL_LogDebug,
+  SDL3.Sys.Bindgen.LogShims.Safe.lithon_SDL_LogInfo,
+  SDL3.Sys.Bindgen.LogShims.Safe.lithon_SDL_LogWarn,
+  SDL3.Sys.Bindgen.LogShims.Safe.lithon_SDL_LogError,
+  SDL3.Sys.Bindgen.LogShims.Safe.lithon_SDL_LogCritical,
+  SDL3.Sys.Bindgen.LogShims.Safe.lithon_SDL_LogMessage,
+)
+where
+
+import Prelude (IO)
+
+import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+import SDL3.Sys.Bindgen.Log qualified
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <sdl3-bindgen-sys/SDL_log_shims.h>"
+         , "void hs_bindgen_77328bf34cbcb12f ("
+         , "  char const *arg1"
+         , ")"
+         , "{"
+         , "  (lithon_SDL_Log)(arg1);"
+         , "}"
+         , "void hs_bindgen_c27ac2cf8645cf4e ("
+         , "  signed int arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  (lithon_SDL_LogTrace)(arg1, arg2);"
+         , "}"
+         , "void hs_bindgen_fb7600f02da152c8 ("
+         , "  signed int arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  (lithon_SDL_LogVerbose)(arg1, arg2);"
+         , "}"
+         , "void hs_bindgen_f148577846776bf9 ("
+         , "  signed int arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  (lithon_SDL_LogDebug)(arg1, arg2);"
+         , "}"
+         , "void hs_bindgen_2768f1e0951fcadc ("
+         , "  signed int arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  (lithon_SDL_LogInfo)(arg1, arg2);"
+         , "}"
+         , "void hs_bindgen_66494b86233d6dcb ("
+         , "  signed int arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  (lithon_SDL_LogWarn)(arg1, arg2);"
+         , "}"
+         , "void hs_bindgen_572ce25309240a20 ("
+         , "  signed int arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  (lithon_SDL_LogError)(arg1, arg2);"
+         , "}"
+         , "void hs_bindgen_05cdf92f853bb365 ("
+         , "  signed int arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  (lithon_SDL_LogCritical)(arg1, arg2);"
+         , "}"
+         , "void hs_bindgen_a30cd534dfc5a717 ("
+         , "  signed int arg1,"
+         , "  SDL_LogPriority arg2,"
+         , "  char const *arg3"
+         , ")"
+         , "{"
+         , "  (lithon_SDL_LogMessage)(arg1, arg2, arg3);"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Safe_lithon_SDL_Log@
+foreign import ccall safe "hs_bindgen_77328bf34cbcb12f"
+  hs_bindgen_77328bf34cbcb12f_base
+    :: BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Safe_lithon_SDL_Log@
+hs_bindgen_77328bf34cbcb12f
+  :: PtrConst.PtrConst BG.CChar
+  -> IO ()
+hs_bindgen_77328bf34cbcb12f =
+  \x0 ->
+    hs_bindgen_77328bf34cbcb12f_base (BG.toFFIType x0)
+
+-- | Log a message with SDL_LOG_CATEGORY_APPLICATION and SDL_LOG_PRIORITY_INFO.
+--
+--     A fixed-arity shim over the variadic SDL_Log: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_LogMessage
+--
+--     [C declaration]: @lithon_SDL_Log@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 39:24@
+lithon_SDL_Log
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+lithon_SDL_Log = hs_bindgen_77328bf34cbcb12f
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Safe_lithon_SDL_LogTrace@
+foreign import ccall safe "hs_bindgen_c27ac2cf8645cf4e"
+  hs_bindgen_c27ac2cf8645cf4e_base
+    :: BG.CInt
+    -> BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Safe_lithon_SDL_LogTrace@
+hs_bindgen_c27ac2cf8645cf4e
+  :: BG.CInt
+  -> PtrConst.PtrConst BG.CChar
+  -> IO ()
+hs_bindgen_c27ac2cf8645cf4e =
+  \x0 ->
+    \x1 ->
+      hs_bindgen_c27ac2cf8645cf4e_base (BG.toFFIType x0) (BG.toFFIType x1)
+
+-- | Log a message with SDL_LOG_PRIORITY_TRACE.
+--
+--     A fixed-arity shim over the variadic SDL_LogTrace: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_LogMessage
+--
+--     [C declaration]: @lithon_SDL_LogTrace@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 60:24@
+lithon_SDL_LogTrace
+  :: BG.CInt
+  -- ^
+  --
+  --           [@category@]: the category of the message.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+lithon_SDL_LogTrace = hs_bindgen_c27ac2cf8645cf4e
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Safe_lithon_SDL_LogVerbose@
+foreign import ccall safe "hs_bindgen_fb7600f02da152c8"
+  hs_bindgen_fb7600f02da152c8_base
+    :: BG.CInt
+    -> BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Safe_lithon_SDL_LogVerbose@
+hs_bindgen_fb7600f02da152c8
+  :: BG.CInt
+  -> PtrConst.PtrConst BG.CChar
+  -> IO ()
+hs_bindgen_fb7600f02da152c8 =
+  \x0 ->
+    \x1 ->
+      hs_bindgen_fb7600f02da152c8_base (BG.toFFIType x0) (BG.toFFIType x1)
+
+-- | Log a message with SDL_LOG_PRIORITY_VERBOSE.
+--
+--     A fixed-arity shim over the variadic SDL_LogVerbose: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_LogMessage
+--
+--     [C declaration]: @lithon_SDL_LogVerbose@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 81:24@
+lithon_SDL_LogVerbose
+  :: BG.CInt
+  -- ^
+  --
+  --           [@category@]: the category of the message.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+lithon_SDL_LogVerbose = hs_bindgen_fb7600f02da152c8
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Safe_lithon_SDL_LogDebug@
+foreign import ccall safe "hs_bindgen_f148577846776bf9"
+  hs_bindgen_f148577846776bf9_base
+    :: BG.CInt
+    -> BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Safe_lithon_SDL_LogDebug@
+hs_bindgen_f148577846776bf9
+  :: BG.CInt
+  -> PtrConst.PtrConst BG.CChar
+  -> IO ()
+hs_bindgen_f148577846776bf9 =
+  \x0 ->
+    \x1 ->
+      hs_bindgen_f148577846776bf9_base (BG.toFFIType x0) (BG.toFFIType x1)
+
+-- | Log a message with SDL_LOG_PRIORITY_DEBUG.
+--
+--     A fixed-arity shim over the variadic SDL_LogDebug: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_LogMessage
+--
+--     [C declaration]: @lithon_SDL_LogDebug@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 102:24@
+lithon_SDL_LogDebug
+  :: BG.CInt
+  -- ^
+  --
+  --           [@category@]: the category of the message.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+lithon_SDL_LogDebug = hs_bindgen_f148577846776bf9
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Safe_lithon_SDL_LogInfo@
+foreign import ccall safe "hs_bindgen_2768f1e0951fcadc"
+  hs_bindgen_2768f1e0951fcadc_base
+    :: BG.CInt
+    -> BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Safe_lithon_SDL_LogInfo@
+hs_bindgen_2768f1e0951fcadc
+  :: BG.CInt
+  -> PtrConst.PtrConst BG.CChar
+  -> IO ()
+hs_bindgen_2768f1e0951fcadc =
+  \x0 ->
+    \x1 ->
+      hs_bindgen_2768f1e0951fcadc_base (BG.toFFIType x0) (BG.toFFIType x1)
+
+-- | Log a message with SDL_LOG_PRIORITY_INFO.
+--
+--     A fixed-arity shim over the variadic SDL_LogInfo: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_LogMessage
+--
+--     [C declaration]: @lithon_SDL_LogInfo@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 123:24@
+lithon_SDL_LogInfo
+  :: BG.CInt
+  -- ^
+  --
+  --           [@category@]: the category of the message.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+lithon_SDL_LogInfo = hs_bindgen_2768f1e0951fcadc
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Safe_lithon_SDL_LogWarn@
+foreign import ccall safe "hs_bindgen_66494b86233d6dcb"
+  hs_bindgen_66494b86233d6dcb_base
+    :: BG.CInt
+    -> BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Safe_lithon_SDL_LogWarn@
+hs_bindgen_66494b86233d6dcb
+  :: BG.CInt
+  -> PtrConst.PtrConst BG.CChar
+  -> IO ()
+hs_bindgen_66494b86233d6dcb =
+  \x0 ->
+    \x1 ->
+      hs_bindgen_66494b86233d6dcb_base (BG.toFFIType x0) (BG.toFFIType x1)
+
+-- | Log a message with SDL_LOG_PRIORITY_WARN.
+--
+--     A fixed-arity shim over the variadic SDL_LogWarn: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_LogMessage
+--
+--     [C declaration]: @lithon_SDL_LogWarn@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 144:24@
+lithon_SDL_LogWarn
+  :: BG.CInt
+  -- ^
+  --
+  --           [@category@]: the category of the message.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+lithon_SDL_LogWarn = hs_bindgen_66494b86233d6dcb
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Safe_lithon_SDL_LogError@
+foreign import ccall safe "hs_bindgen_572ce25309240a20"
+  hs_bindgen_572ce25309240a20_base
+    :: BG.CInt
+    -> BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Safe_lithon_SDL_LogError@
+hs_bindgen_572ce25309240a20
+  :: BG.CInt
+  -> PtrConst.PtrConst BG.CChar
+  -> IO ()
+hs_bindgen_572ce25309240a20 =
+  \x0 ->
+    \x1 ->
+      hs_bindgen_572ce25309240a20_base (BG.toFFIType x0) (BG.toFFIType x1)
+
+-- | Log a message with SDL_LOG_PRIORITY_ERROR.
+--
+--     A fixed-arity shim over the variadic SDL_LogError: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_LogMessage
+--
+--     [C declaration]: @lithon_SDL_LogError@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 165:24@
+lithon_SDL_LogError
+  :: BG.CInt
+  -- ^
+  --
+  --           [@category@]: the category of the message.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+lithon_SDL_LogError = hs_bindgen_572ce25309240a20
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Safe_lithon_SDL_LogCritical@
+foreign import ccall safe "hs_bindgen_05cdf92f853bb365"
+  hs_bindgen_05cdf92f853bb365_base
+    :: BG.CInt
+    -> BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Safe_lithon_SDL_LogCritical@
+hs_bindgen_05cdf92f853bb365
+  :: BG.CInt
+  -> PtrConst.PtrConst BG.CChar
+  -> IO ()
+hs_bindgen_05cdf92f853bb365 =
+  \x0 ->
+    \x1 ->
+      hs_bindgen_05cdf92f853bb365_base (BG.toFFIType x0) (BG.toFFIType x1)
+
+-- | Log a message with SDL_LOG_PRIORITY_CRITICAL.
+--
+--     A fixed-arity shim over the variadic SDL_LogCritical: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_LogMessage
+--
+--     [C declaration]: @lithon_SDL_LogCritical@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 186:24@
+lithon_SDL_LogCritical
+  :: BG.CInt
+  -- ^
+  --
+  --           [@category@]: the category of the message.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+lithon_SDL_LogCritical = hs_bindgen_05cdf92f853bb365
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Safe_lithon_SDL_LogMessage@
+foreign import ccall safe "hs_bindgen_a30cd534dfc5a717"
+  hs_bindgen_a30cd534dfc5a717_base
+    :: BG.CInt
+    -> HsBindgen.Runtime.Support.CUInt
+    -> BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Safe_lithon_SDL_LogMessage@
+hs_bindgen_a30cd534dfc5a717
+  :: BG.CInt
+  -> SDL3.Sys.Bindgen.Log.SDL_LogPriority
+  -> PtrConst.PtrConst BG.CChar
+  -> IO ()
+hs_bindgen_a30cd534dfc5a717 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        hs_bindgen_a30cd534dfc5a717_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2)
+
+-- | Log a message with the specified category and priority.
+--
+--     A fixed-arity shim over the variadic SDL_LogMessage: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_SetLogOutputFunction, SDL_SetLogPriority
+--
+--     [C declaration]: @lithon_SDL_LogMessage@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 209:24@
+lithon_SDL_LogMessage
+  :: BG.CInt
+  -- ^
+  --
+  --           [@category@]: the category of the message.
+  -> SDL3.Sys.Bindgen.Log.SDL_LogPriority
+  -- ^
+  --
+  --           [@priority@]: the priority of the message.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+lithon_SDL_LogMessage = hs_bindgen_a30cd534dfc5a717
diff --git a/src/SDL3/Sys/Bindgen/LogShims/Unsafe.hs b/src/SDL3/Sys/Bindgen/LogShims/Unsafe.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/LogShims/Unsafe.hs
@@ -0,0 +1,460 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.LogShims.Unsafe (
+  SDL3.Sys.Bindgen.LogShims.Unsafe.lithon_SDL_Log,
+  SDL3.Sys.Bindgen.LogShims.Unsafe.lithon_SDL_LogTrace,
+  SDL3.Sys.Bindgen.LogShims.Unsafe.lithon_SDL_LogVerbose,
+  SDL3.Sys.Bindgen.LogShims.Unsafe.lithon_SDL_LogDebug,
+  SDL3.Sys.Bindgen.LogShims.Unsafe.lithon_SDL_LogInfo,
+  SDL3.Sys.Bindgen.LogShims.Unsafe.lithon_SDL_LogWarn,
+  SDL3.Sys.Bindgen.LogShims.Unsafe.lithon_SDL_LogError,
+  SDL3.Sys.Bindgen.LogShims.Unsafe.lithon_SDL_LogCritical,
+  SDL3.Sys.Bindgen.LogShims.Unsafe.lithon_SDL_LogMessage,
+)
+where
+
+import Prelude (IO)
+
+import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+import SDL3.Sys.Bindgen.Log qualified
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <sdl3-bindgen-sys/SDL_log_shims.h>"
+         , "void hs_bindgen_8dfd7b8bce88ad39 ("
+         , "  char const *arg1"
+         , ")"
+         , "{"
+         , "  (lithon_SDL_Log)(arg1);"
+         , "}"
+         , "void hs_bindgen_a7827e45bd90cb5f ("
+         , "  signed int arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  (lithon_SDL_LogTrace)(arg1, arg2);"
+         , "}"
+         , "void hs_bindgen_ca6920acb1e64cad ("
+         , "  signed int arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  (lithon_SDL_LogVerbose)(arg1, arg2);"
+         , "}"
+         , "void hs_bindgen_4974933fe657d7e9 ("
+         , "  signed int arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  (lithon_SDL_LogDebug)(arg1, arg2);"
+         , "}"
+         , "void hs_bindgen_fe8c851bf2e61192 ("
+         , "  signed int arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  (lithon_SDL_LogInfo)(arg1, arg2);"
+         , "}"
+         , "void hs_bindgen_0319cb2ab6ab63fe ("
+         , "  signed int arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  (lithon_SDL_LogWarn)(arg1, arg2);"
+         , "}"
+         , "void hs_bindgen_2d4be7c76c8e7b9f ("
+         , "  signed int arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  (lithon_SDL_LogError)(arg1, arg2);"
+         , "}"
+         , "void hs_bindgen_32798034ebddbe4a ("
+         , "  signed int arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  (lithon_SDL_LogCritical)(arg1, arg2);"
+         , "}"
+         , "void hs_bindgen_fff93b576b3812cd ("
+         , "  signed int arg1,"
+         , "  SDL_LogPriority arg2,"
+         , "  char const *arg3"
+         , ")"
+         , "{"
+         , "  (lithon_SDL_LogMessage)(arg1, arg2, arg3);"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Unsafe_lithon_SDL_Log@
+foreign import ccall unsafe "hs_bindgen_8dfd7b8bce88ad39"
+  hs_bindgen_8dfd7b8bce88ad39_base
+    :: BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Unsafe_lithon_SDL_Log@
+hs_bindgen_8dfd7b8bce88ad39
+  :: PtrConst.PtrConst BG.CChar
+  -> IO ()
+hs_bindgen_8dfd7b8bce88ad39 =
+  \x0 ->
+    hs_bindgen_8dfd7b8bce88ad39_base (BG.toFFIType x0)
+
+-- | Log a message with SDL_LOG_CATEGORY_APPLICATION and SDL_LOG_PRIORITY_INFO.
+--
+--     A fixed-arity shim over the variadic SDL_Log: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_LogMessage
+--
+--     [C declaration]: @lithon_SDL_Log@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 39:24@
+lithon_SDL_Log
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+lithon_SDL_Log = hs_bindgen_8dfd7b8bce88ad39
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Unsafe_lithon_SDL_LogTrace@
+foreign import ccall unsafe "hs_bindgen_a7827e45bd90cb5f"
+  hs_bindgen_a7827e45bd90cb5f_base
+    :: BG.CInt
+    -> BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Unsafe_lithon_SDL_LogTrace@
+hs_bindgen_a7827e45bd90cb5f
+  :: BG.CInt
+  -> PtrConst.PtrConst BG.CChar
+  -> IO ()
+hs_bindgen_a7827e45bd90cb5f =
+  \x0 ->
+    \x1 ->
+      hs_bindgen_a7827e45bd90cb5f_base (BG.toFFIType x0) (BG.toFFIType x1)
+
+-- | Log a message with SDL_LOG_PRIORITY_TRACE.
+--
+--     A fixed-arity shim over the variadic SDL_LogTrace: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_LogMessage
+--
+--     [C declaration]: @lithon_SDL_LogTrace@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 60:24@
+lithon_SDL_LogTrace
+  :: BG.CInt
+  -- ^
+  --
+  --           [@category@]: the category of the message.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+lithon_SDL_LogTrace = hs_bindgen_a7827e45bd90cb5f
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Unsafe_lithon_SDL_LogVerbose@
+foreign import ccall unsafe "hs_bindgen_ca6920acb1e64cad"
+  hs_bindgen_ca6920acb1e64cad_base
+    :: BG.CInt
+    -> BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Unsafe_lithon_SDL_LogVerbose@
+hs_bindgen_ca6920acb1e64cad
+  :: BG.CInt
+  -> PtrConst.PtrConst BG.CChar
+  -> IO ()
+hs_bindgen_ca6920acb1e64cad =
+  \x0 ->
+    \x1 ->
+      hs_bindgen_ca6920acb1e64cad_base (BG.toFFIType x0) (BG.toFFIType x1)
+
+-- | Log a message with SDL_LOG_PRIORITY_VERBOSE.
+--
+--     A fixed-arity shim over the variadic SDL_LogVerbose: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_LogMessage
+--
+--     [C declaration]: @lithon_SDL_LogVerbose@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 81:24@
+lithon_SDL_LogVerbose
+  :: BG.CInt
+  -- ^
+  --
+  --           [@category@]: the category of the message.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+lithon_SDL_LogVerbose = hs_bindgen_ca6920acb1e64cad
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Unsafe_lithon_SDL_LogDebug@
+foreign import ccall unsafe "hs_bindgen_4974933fe657d7e9"
+  hs_bindgen_4974933fe657d7e9_base
+    :: BG.CInt
+    -> BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Unsafe_lithon_SDL_LogDebug@
+hs_bindgen_4974933fe657d7e9
+  :: BG.CInt
+  -> PtrConst.PtrConst BG.CChar
+  -> IO ()
+hs_bindgen_4974933fe657d7e9 =
+  \x0 ->
+    \x1 ->
+      hs_bindgen_4974933fe657d7e9_base (BG.toFFIType x0) (BG.toFFIType x1)
+
+-- | Log a message with SDL_LOG_PRIORITY_DEBUG.
+--
+--     A fixed-arity shim over the variadic SDL_LogDebug: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_LogMessage
+--
+--     [C declaration]: @lithon_SDL_LogDebug@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 102:24@
+lithon_SDL_LogDebug
+  :: BG.CInt
+  -- ^
+  --
+  --           [@category@]: the category of the message.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+lithon_SDL_LogDebug = hs_bindgen_4974933fe657d7e9
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Unsafe_lithon_SDL_LogInfo@
+foreign import ccall unsafe "hs_bindgen_fe8c851bf2e61192"
+  hs_bindgen_fe8c851bf2e61192_base
+    :: BG.CInt
+    -> BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Unsafe_lithon_SDL_LogInfo@
+hs_bindgen_fe8c851bf2e61192
+  :: BG.CInt
+  -> PtrConst.PtrConst BG.CChar
+  -> IO ()
+hs_bindgen_fe8c851bf2e61192 =
+  \x0 ->
+    \x1 ->
+      hs_bindgen_fe8c851bf2e61192_base (BG.toFFIType x0) (BG.toFFIType x1)
+
+-- | Log a message with SDL_LOG_PRIORITY_INFO.
+--
+--     A fixed-arity shim over the variadic SDL_LogInfo: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_LogMessage
+--
+--     [C declaration]: @lithon_SDL_LogInfo@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 123:24@
+lithon_SDL_LogInfo
+  :: BG.CInt
+  -- ^
+  --
+  --           [@category@]: the category of the message.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+lithon_SDL_LogInfo = hs_bindgen_fe8c851bf2e61192
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Unsafe_lithon_SDL_LogWarn@
+foreign import ccall unsafe "hs_bindgen_0319cb2ab6ab63fe"
+  hs_bindgen_0319cb2ab6ab63fe_base
+    :: BG.CInt
+    -> BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Unsafe_lithon_SDL_LogWarn@
+hs_bindgen_0319cb2ab6ab63fe
+  :: BG.CInt
+  -> PtrConst.PtrConst BG.CChar
+  -> IO ()
+hs_bindgen_0319cb2ab6ab63fe =
+  \x0 ->
+    \x1 ->
+      hs_bindgen_0319cb2ab6ab63fe_base (BG.toFFIType x0) (BG.toFFIType x1)
+
+-- | Log a message with SDL_LOG_PRIORITY_WARN.
+--
+--     A fixed-arity shim over the variadic SDL_LogWarn: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_LogMessage
+--
+--     [C declaration]: @lithon_SDL_LogWarn@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 144:24@
+lithon_SDL_LogWarn
+  :: BG.CInt
+  -- ^
+  --
+  --           [@category@]: the category of the message.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+lithon_SDL_LogWarn = hs_bindgen_0319cb2ab6ab63fe
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Unsafe_lithon_SDL_LogError@
+foreign import ccall unsafe "hs_bindgen_2d4be7c76c8e7b9f"
+  hs_bindgen_2d4be7c76c8e7b9f_base
+    :: BG.CInt
+    -> BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Unsafe_lithon_SDL_LogError@
+hs_bindgen_2d4be7c76c8e7b9f
+  :: BG.CInt
+  -> PtrConst.PtrConst BG.CChar
+  -> IO ()
+hs_bindgen_2d4be7c76c8e7b9f =
+  \x0 ->
+    \x1 ->
+      hs_bindgen_2d4be7c76c8e7b9f_base (BG.toFFIType x0) (BG.toFFIType x1)
+
+-- | Log a message with SDL_LOG_PRIORITY_ERROR.
+--
+--     A fixed-arity shim over the variadic SDL_LogError: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_LogMessage
+--
+--     [C declaration]: @lithon_SDL_LogError@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 165:24@
+lithon_SDL_LogError
+  :: BG.CInt
+  -- ^
+  --
+  --           [@category@]: the category of the message.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+lithon_SDL_LogError = hs_bindgen_2d4be7c76c8e7b9f
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Unsafe_lithon_SDL_LogCritical@
+foreign import ccall unsafe "hs_bindgen_32798034ebddbe4a"
+  hs_bindgen_32798034ebddbe4a_base
+    :: BG.CInt
+    -> BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Unsafe_lithon_SDL_LogCritical@
+hs_bindgen_32798034ebddbe4a
+  :: BG.CInt
+  -> PtrConst.PtrConst BG.CChar
+  -> IO ()
+hs_bindgen_32798034ebddbe4a =
+  \x0 ->
+    \x1 ->
+      hs_bindgen_32798034ebddbe4a_base (BG.toFFIType x0) (BG.toFFIType x1)
+
+-- | Log a message with SDL_LOG_PRIORITY_CRITICAL.
+--
+--     A fixed-arity shim over the variadic SDL_LogCritical: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_LogMessage
+--
+--     [C declaration]: @lithon_SDL_LogCritical@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 186:24@
+lithon_SDL_LogCritical
+  :: BG.CInt
+  -- ^
+  --
+  --           [@category@]: the category of the message.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+lithon_SDL_LogCritical = hs_bindgen_32798034ebddbe4a
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Unsafe_lithon_SDL_LogMessage@
+foreign import ccall unsafe "hs_bindgen_fff93b576b3812cd"
+  hs_bindgen_fff93b576b3812cd_base
+    :: BG.CInt
+    -> HsBindgen.Runtime.Support.CUInt
+    -> BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.LogShims_Unsafe_lithon_SDL_LogMessage@
+hs_bindgen_fff93b576b3812cd
+  :: BG.CInt
+  -> SDL3.Sys.Bindgen.Log.SDL_LogPriority
+  -> PtrConst.PtrConst BG.CChar
+  -> IO ()
+hs_bindgen_fff93b576b3812cd =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        hs_bindgen_fff93b576b3812cd_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2)
+
+-- | Log a message with the specified category and priority.
+--
+--     A fixed-arity shim over the variadic SDL_LogMessage: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_SetLogOutputFunction, SDL_SetLogPriority
+--
+--     [C declaration]: @lithon_SDL_LogMessage@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 209:24@
+lithon_SDL_LogMessage
+  :: BG.CInt
+  -- ^
+  --
+  --           [@category@]: the category of the message.
+  -> SDL3.Sys.Bindgen.Log.SDL_LogPriority
+  -- ^
+  --
+  --           [@priority@]: the priority of the message.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+lithon_SDL_LogMessage = hs_bindgen_fff93b576b3812cd
diff --git a/src/SDL3/Sys/Bindgen/Main.hs b/src/SDL3/Sys/Bindgen/Main.hs
--- a/src/SDL3/Sys/Bindgen/Main.hs
+++ b/src/SDL3/Sys/Bindgen/Main.hs
@@ -4,6 +4,7 @@
 {-# LANGUAGE DuplicateRecordFields #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE MagicHash #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
@@ -12,6 +13,7 @@
 {-# LANGUAGE TypeOperators #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 module SDL3.Sys.Bindgen.Main (
   SDL3.Sys.Bindgen.Main.SDL_main_func_Aux (..),
@@ -19,6 +21,8 @@
 )
 where
 
+import Prelude (Eq, IO, Ord, Show, fmap, type (~))
+
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.IncompleteArray qualified as IA
 import HsBindgen.Runtime.IsArray qualified as IsA
@@ -33,13 +37,12 @@
   { unwrap :: BG.CInt -> BG.Ptr (IsA.Elem (IA.IncompleteArray (BG.Ptr BG.CChar))) -> IO BG.CInt
   }
   deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
 
 -- __unique:__ @toSDL_main_func_Aux@
 foreign import ccall safe "wrapper"
   hs_bindgen_637d4c26522acb68_base
-    :: (BG.Int32 -> BG.Ptr BG.Void -> IO BG.Int32)
-    -> IO (BG.FunPtr (BG.Int32 -> BG.Ptr BG.Void -> IO BG.Int32))
+    :: (BG.CInt -> BG.Ptr BG.Void -> IO BG.CInt)
+    -> IO (BG.FunPtr (BG.CInt -> BG.Ptr BG.Void -> IO BG.CInt))
 
 -- __unique:__ @toSDL_main_func_Aux@
 hs_bindgen_637d4c26522acb68
@@ -47,15 +50,22 @@
   -> IO (BG.FunPtr SDL_main_func_Aux)
 hs_bindgen_637d4c26522acb68 =
   \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_637d4c26522acb68_base (BG.toFFIType fun0))
+    fmap
+      BG.castFunPtr
+      ( hs_bindgen_637d4c26522acb68_base
+          ( \x1 ->
+              \x2 ->
+                fmap BG.toFFIType (BG.getField @"unwrap" fun0 (BG.fromFFIType x1) (BG.fromFFIType x2))
+          )
+      )
 
 -- __unique:__ @fromSDL_main_func_Aux@
 foreign import ccall safe "dynamic"
   hs_bindgen_7875a01662c70189_base
-    :: BG.FunPtr (BG.Int32 -> BG.Ptr BG.Void -> IO BG.Int32)
-    -> BG.Int32
+    :: BG.FunPtr (BG.CInt -> BG.Ptr BG.Void -> IO BG.CInt)
+    -> BG.CInt
     -> BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @fromSDL_main_func_Aux@
 hs_bindgen_7875a01662c70189
@@ -63,7 +73,13 @@
   -> SDL_main_func_Aux
 hs_bindgen_7875a01662c70189 =
   \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_7875a01662c70189_base (BG.castFunPtrToFFIType funPtr0))
+    SDL_main_func_Aux
+      ( \x1 ->
+          \x2 ->
+            fmap
+              BG.fromFFIType
+              (hs_bindgen_7875a01662c70189_base (BG.castFunPtr funPtr0) (BG.toFFIType x1) (BG.toFFIType x2))
+      )
 
 instance BG.ToFunPtr SDL_main_func_Aux where
   toFunPtr = hs_bindgen_637d4c26522acb68
diff --git a/src/SDL3/Sys/Bindgen/Main/FunPtr.hs b/src/SDL3/Sys/Bindgen/Main/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Main/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Main/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Main.FunPtr (
@@ -10,6 +12,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.IncompleteArray qualified as IA
 import HsBindgen.Runtime.IsArray qualified as IsA
 import HsBindgen.Runtime.Support qualified as BG
@@ -20,6 +24,9 @@
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
          [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
          , "#include <SDL3/SDL_main.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Main_get_SDL_SetMainReady */"
          , "__attribute__ ((const))"
@@ -69,7 +76,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Main_get_SDL_SetMainReady@
 hs_bindgen_a748be6c08507093 :: IO (BG.FunPtr (IO ()))
 hs_bindgen_a748be6c08507093 =
-  BG.fromFFIType hs_bindgen_a748be6c08507093_base
+  fmap BG.fromFFIType hs_bindgen_a748be6c08507093_base
 
 {-# NOINLINE sDL_SetMainReady #-}
 
@@ -105,7 +112,7 @@
            )
        )
 hs_bindgen_9ddd66f3bccdd116 =
-  BG.fromFFIType hs_bindgen_9ddd66f3bccdd116_base
+  fmap BG.fromFFIType hs_bindgen_9ddd66f3bccdd116_base
 
 {-# NOINLINE sDL_RunApp #-}
 
@@ -160,7 +167,7 @@
            )
        )
 hs_bindgen_50b435e689e12498 =
-  BG.fromFFIType hs_bindgen_50b435e689e12498_base
+  fmap BG.fromFFIType hs_bindgen_50b435e689e12498_base
 
 {-# NOINLINE sDL_EnterAppMainCallbacks #-}
 
@@ -210,7 +217,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Main_get_SDL_GDKSuspendComplete@
 hs_bindgen_07ea6ee797596218 :: IO (BG.FunPtr (IO ()))
 hs_bindgen_07ea6ee797596218 =
-  BG.fromFFIType hs_bindgen_07ea6ee797596218_base
+  fmap BG.fromFFIType hs_bindgen_07ea6ee797596218_base
 
 {-# NOINLINE sDL_GDKSuspendComplete #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Main/Safe.hs b/src/SDL3/Sys/Bindgen/Main/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Main/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Main/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Main.Safe (
@@ -10,8 +12,11 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.IncompleteArray qualified as IA
 import HsBindgen.Runtime.IsArray qualified as IsA
+import HsBindgen.Runtime.Support qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Init qualified
@@ -20,6 +25,9 @@
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
          [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
          , "#include <SDL3/SDL_main.h>"
          , "void hs_bindgen_1c56a59892e2463e (void)"
          , "{"
@@ -61,7 +69,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Main_Safe_SDL_SetMainReady@
 hs_bindgen_1c56a59892e2463e :: IO ()
 hs_bindgen_1c56a59892e2463e =
-  BG.fromFFIType hs_bindgen_1c56a59892e2463e_base
+  hs_bindgen_1c56a59892e2463e_base
 
 -- | Circumvent failure of SDL_Init() when not using @SDL_main()@ as an entry point.
 --
@@ -80,11 +88,11 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Main_Safe_SDL_RunApp@
 foreign import ccall safe "hs_bindgen_1b6974d956741083"
   hs_bindgen_1b6974d956741083_base
-    :: BG.Int32
+    :: BG.CInt
     -> BG.Ptr BG.Void
     -> BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Main_Safe_SDL_RunApp@
 hs_bindgen_1b6974d956741083
@@ -94,7 +102,18 @@
   -> BG.Ptr BG.Void
   -> IO BG.CInt
 hs_bindgen_1b6974d956741083 =
-  BG.fromFFIType hs_bindgen_1b6974d956741083_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_1b6974d956741083_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Initializes and launches an SDL application, by doing platform-specific initialization before calling your mainFunction and cleanups after it returns, if that is needed for a specific platform, otherwise it just calls mainFunction.
 --
@@ -132,13 +151,13 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Main_Safe_SDL_EnterAppMainCallbacks@
 foreign import ccall safe "hs_bindgen_656ed4ab2c6b8347"
   hs_bindgen_656ed4ab2c6b8347_base
-    :: BG.Int32
+    :: BG.CInt
     -> BG.Ptr BG.Void
-    -> BG.FunPtr BG.Void
-    -> BG.FunPtr BG.Void
-    -> BG.FunPtr BG.Void
-    -> BG.FunPtr BG.Void
-    -> IO BG.Int32
+    -> HsBindgen.Runtime.Support.FunPtrVoid
+    -> HsBindgen.Runtime.Support.FunPtrVoid
+    -> HsBindgen.Runtime.Support.FunPtrVoid
+    -> HsBindgen.Runtime.Support.FunPtrVoid
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Main_Safe_SDL_EnterAppMainCallbacks@
 hs_bindgen_656ed4ab2c6b8347
@@ -150,7 +169,22 @@
   -> SDL3.Sys.Bindgen.Init.SDL_AppQuit_func
   -> IO BG.CInt
 hs_bindgen_656ed4ab2c6b8347 =
-  BG.fromFFIType hs_bindgen_656ed4ab2c6b8347_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_656ed4ab2c6b8347_base
+                    (BG.toFFIType x0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                    (BG.toFFIType x4)
+                    (BG.toFFIType x5)
+                )
 
 -- | An entry point for SDL\'s use in SDL_MAIN_USE_CALLBACKS.
 --
@@ -202,7 +236,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Main_Safe_SDL_GDKSuspendComplete@
 hs_bindgen_265bcc9d378e1bc4 :: IO ()
 hs_bindgen_265bcc9d378e1bc4 =
-  BG.fromFFIType hs_bindgen_265bcc9d378e1bc4_base
+  hs_bindgen_265bcc9d378e1bc4_base
 
 -- | Callback from the application to let the suspend continue.
 --
diff --git a/src/SDL3/Sys/Bindgen/Main/Unsafe.hs b/src/SDL3/Sys/Bindgen/Main/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Main/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Main/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Main.Unsafe (
@@ -10,8 +12,11 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.IncompleteArray qualified as IA
 import HsBindgen.Runtime.IsArray qualified as IsA
+import HsBindgen.Runtime.Support qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Init qualified
@@ -20,6 +25,9 @@
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
          [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
          , "#include <SDL3/SDL_main.h>"
          , "void hs_bindgen_330c7ba17652a449 (void)"
          , "{"
@@ -61,7 +69,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Main_Unsafe_SDL_SetMainReady@
 hs_bindgen_330c7ba17652a449 :: IO ()
 hs_bindgen_330c7ba17652a449 =
-  BG.fromFFIType hs_bindgen_330c7ba17652a449_base
+  hs_bindgen_330c7ba17652a449_base
 
 -- | Circumvent failure of SDL_Init() when not using @SDL_main()@ as an entry point.
 --
@@ -80,11 +88,11 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Main_Unsafe_SDL_RunApp@
 foreign import ccall unsafe "hs_bindgen_76e1bdcf20b82e65"
   hs_bindgen_76e1bdcf20b82e65_base
-    :: BG.Int32
+    :: BG.CInt
     -> BG.Ptr BG.Void
     -> BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Main_Unsafe_SDL_RunApp@
 hs_bindgen_76e1bdcf20b82e65
@@ -94,7 +102,18 @@
   -> BG.Ptr BG.Void
   -> IO BG.CInt
 hs_bindgen_76e1bdcf20b82e65 =
-  BG.fromFFIType hs_bindgen_76e1bdcf20b82e65_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_76e1bdcf20b82e65_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Initializes and launches an SDL application, by doing platform-specific initialization before calling your mainFunction and cleanups after it returns, if that is needed for a specific platform, otherwise it just calls mainFunction.
 --
@@ -132,13 +151,13 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Main_Unsafe_SDL_EnterAppMainCallbacks@
 foreign import ccall unsafe "hs_bindgen_471713b022799202"
   hs_bindgen_471713b022799202_base
-    :: BG.Int32
+    :: BG.CInt
     -> BG.Ptr BG.Void
-    -> BG.FunPtr BG.Void
-    -> BG.FunPtr BG.Void
-    -> BG.FunPtr BG.Void
-    -> BG.FunPtr BG.Void
-    -> IO BG.Int32
+    -> HsBindgen.Runtime.Support.FunPtrVoid
+    -> HsBindgen.Runtime.Support.FunPtrVoid
+    -> HsBindgen.Runtime.Support.FunPtrVoid
+    -> HsBindgen.Runtime.Support.FunPtrVoid
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Main_Unsafe_SDL_EnterAppMainCallbacks@
 hs_bindgen_471713b022799202
@@ -150,7 +169,22 @@
   -> SDL3.Sys.Bindgen.Init.SDL_AppQuit_func
   -> IO BG.CInt
 hs_bindgen_471713b022799202 =
-  BG.fromFFIType hs_bindgen_471713b022799202_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_471713b022799202_base
+                    (BG.toFFIType x0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                    (BG.toFFIType x4)
+                    (BG.toFFIType x5)
+                )
 
 -- | An entry point for SDL\'s use in SDL_MAIN_USE_CALLBACKS.
 --
@@ -202,7 +236,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Main_Unsafe_SDL_GDKSuspendComplete@
 hs_bindgen_9f3d69665a0be341 :: IO ()
 hs_bindgen_9f3d69665a0be341 =
-  BG.fromFFIType hs_bindgen_9f3d69665a0be341_base
+  hs_bindgen_9f3d69665a0be341_base
 
 -- | Callback from the application to let the suspend continue.
 --
diff --git a/src/SDL3/Sys/Bindgen/Messagebox.hs b/src/SDL3/Sys/Bindgen/Messagebox.hs
--- a/src/SDL3/Sys/Bindgen/Messagebox.hs
+++ b/src/SDL3/Sys/Bindgen/Messagebox.hs
@@ -17,6 +17,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | SDL offers a simple message box API, which is useful for simple alerts, such as informing the user when something fatal happens at startup without the need to build a UI for it (or informing the user /before/ your UI is ready).
 --
@@ -51,11 +52,29 @@
 )
 where
 
+import Prelude (
+  Bounded,
+  Enum,
+  Eq,
+  Int,
+  Integral,
+  Num,
+  Ord,
+  Read,
+  Real,
+  Show,
+  pure,
+  (<*>),
+  (>>),
+  type (~),
+ )
+
 import HsBindgen.Runtime.CEnum qualified as CEnum
 import HsBindgen.Runtime.ConstantArray qualified as CA
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.Marshal qualified as Marshal
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Struct qualified as Struct
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField
 import SDL3.Sys.Bindgen.Stdinc qualified
@@ -252,6 +271,12 @@
   instance
     BG.Storable SDL_MessageBoxButtonData
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_MessageBoxButtonData
+  instance
+    Struct.IsStruct SDL_MessageBoxButtonData
+
+-- | [C declaration]: @flags@, defined at @SDL3\/SDL_messagebox.h 84:31@
 instance
   (ty ~ SDL_MessageBoxButtonFlags)
   => BG.CompatHasField.HasField "flags" SDL_MessageBoxButtonData ty
@@ -280,6 +305,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | User defined button id (value returned via SDL_ShowMessageBox)
+--
+--     [C declaration]: @buttonID@, defined at @SDL3\/SDL_messagebox.h 85:9@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "buttonID" SDL_MessageBoxButtonData ty
@@ -308,6 +336,9 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | The UTF-8 button text
+--
+--     [C declaration]: @text@, defined at @SDL3\/SDL_messagebox.h 86:17@
 instance
   (ty ~ PtrConst.PtrConst BG.CChar)
   => BG.CompatHasField.HasField "text" SDL_MessageBoxButtonData ty
@@ -376,6 +407,12 @@
 
 deriving via Marshal.EquivStorable SDL_MessageBoxColor instance BG.Storable SDL_MessageBoxColor
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_MessageBoxColor
+  instance
+    Struct.IsStruct SDL_MessageBoxColor
+
+-- | [C declaration]: @r@, defined at @SDL3\/SDL_messagebox.h 96:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "r" SDL_MessageBoxColor ty
@@ -400,6 +437,7 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | [C declaration]: @g@, defined at @SDL3\/SDL_messagebox.h 96:14@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "g" SDL_MessageBoxColor ty
@@ -424,6 +462,7 @@
 
   offset# = \_ -> \_ -> 1
 
+-- | [C declaration]: @b@, defined at @SDL3\/SDL_messagebox.h 96:17@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "b" SDL_MessageBoxColor ty
@@ -611,6 +650,12 @@
   instance
     BG.Storable SDL_MessageBoxColorScheme
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_MessageBoxColorScheme
+  instance
+    Struct.IsStruct SDL_MessageBoxColorScheme
+
+-- | [C declaration]: @colors@, defined at @SDL3\/SDL_messagebox.h 120:25@
 instance
   (ty ~ CA.ConstantArray 5 SDL_MessageBoxColor)
   => BG.CompatHasField.HasField "colors" SDL_MessageBoxColorScheme ty
@@ -706,6 +751,12 @@
 
 deriving via Marshal.EquivStorable SDL_MessageBoxData instance BG.Storable SDL_MessageBoxData
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_MessageBoxData
+  instance
+    Struct.IsStruct SDL_MessageBoxData
+
+-- | [C declaration]: @flags@, defined at @SDL3\/SDL_messagebox.h 130:25@
 instance
   (ty ~ SDL_MessageBoxFlags)
   => BG.CompatHasField.HasField "flags" SDL_MessageBoxData ty
@@ -738,6 +789,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | Parent window, can be NULL
+--
+--     [C declaration]: @window@, defined at @SDL3\/SDL_messagebox.h 131:17@
 instance
   (ty ~ BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window)
   => BG.CompatHasField.HasField "window" SDL_MessageBoxData ty
@@ -770,6 +824,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | UTF-8 title
+--
+--     [C declaration]: @title@, defined at @SDL3\/SDL_messagebox.h 132:17@
 instance
   (ty ~ PtrConst.PtrConst BG.CChar)
   => BG.CompatHasField.HasField "title" SDL_MessageBoxData ty
@@ -802,6 +859,9 @@
 
   offset# = \_ -> \_ -> 16
 
+-- | UTF-8 message text
+--
+--     [C declaration]: @message@, defined at @SDL3\/SDL_messagebox.h 133:17@
 instance
   (ty ~ PtrConst.PtrConst BG.CChar)
   => BG.CompatHasField.HasField "message" SDL_MessageBoxData ty
@@ -834,6 +894,7 @@
 
   offset# = \_ -> \_ -> 24
 
+-- | [C declaration]: @numbuttons@, defined at @SDL3\/SDL_messagebox.h 135:9@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "numbuttons" SDL_MessageBoxData ty
@@ -866,6 +927,7 @@
 
   offset# = \_ -> \_ -> 32
 
+-- | [C declaration]: @buttons@, defined at @SDL3\/SDL_messagebox.h 136:37@
 instance
   (ty ~ PtrConst.PtrConst SDL_MessageBoxButtonData)
   => BG.CompatHasField.HasField "buttons" SDL_MessageBoxData ty
@@ -898,6 +960,9 @@
 
   offset# = \_ -> \_ -> 40
 
+-- | 'SDL_MessageBoxColorScheme', can be NULL to use system settings
+--
+--     [C declaration]: @colorScheme@, defined at @SDL3\/SDL_messagebox.h 138:38@
 instance
   (ty ~ PtrConst.PtrConst SDL_MessageBoxColorScheme)
   => BG.CompatHasField.HasField "colorScheme" SDL_MessageBoxData ty
diff --git a/src/SDL3/Sys/Bindgen/Messagebox/FunPtr.hs b/src/SDL3/Sys/Bindgen/Messagebox/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Messagebox/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Messagebox/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Messagebox.FunPtr (
@@ -8,6 +10,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -16,7 +20,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_messagebox.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_messagebox.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Messagebox_get_SDL_ShowMessageBox */"
          , "__attribute__ ((const))"
          , "_Bool (*hs_bindgen_fdad2a984a763ae0 (void)) ("
@@ -50,7 +58,7 @@
 hs_bindgen_fdad2a984a763ae0
   :: IO (BG.FunPtr (PtrConst.PtrConst SDL_MessageBoxData -> BG.Ptr BG.CInt -> IO BG.CBool))
 hs_bindgen_fdad2a984a763ae0 =
-  BG.fromFFIType hs_bindgen_fdad2a984a763ae0_base
+  fmap BG.fromFFIType hs_bindgen_fdad2a984a763ae0_base
 
 {-# NOINLINE sDL_ShowMessageBox #-}
 
@@ -101,7 +109,7 @@
            )
        )
 hs_bindgen_059be268606e6ea4 =
-  BG.fromFFIType hs_bindgen_059be268606e6ea4_base
+  fmap BG.fromFFIType hs_bindgen_059be268606e6ea4_base
 
 {-# NOINLINE sDL_ShowSimpleMessageBox #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Messagebox/Safe.hs b/src/SDL3/Sys/Bindgen/Messagebox/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Messagebox/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Messagebox/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Messagebox.Safe (
@@ -8,6 +10,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -16,7 +21,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_messagebox.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_messagebox.h>"
          , "_Bool hs_bindgen_5fad9b7ef25350c1 ("
          , "  SDL_MessageBoxData const *arg1,"
          , "  signed int *arg2"
@@ -42,7 +51,7 @@
   hs_bindgen_5fad9b7ef25350c1_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Messagebox_Safe_SDL_ShowMessageBox@
 hs_bindgen_5fad9b7ef25350c1
@@ -50,7 +59,9 @@
   -> BG.Ptr BG.CInt
   -> IO BG.CBool
 hs_bindgen_5fad9b7ef25350c1 =
-  BG.fromFFIType hs_bindgen_5fad9b7ef25350c1_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_5fad9b7ef25350c1_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Create a modal message box.
 --
@@ -88,11 +99,11 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Messagebox_Safe_SDL_ShowSimpleMessageBox@
 foreign import ccall safe "hs_bindgen_3ea30834607f7eea"
   hs_bindgen_3ea30834607f7eea_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Messagebox_Safe_SDL_ShowSimpleMessageBox@
 hs_bindgen_3ea30834607f7eea
@@ -102,7 +113,18 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
   -> IO BG.CBool
 hs_bindgen_3ea30834607f7eea =
-  BG.fromFFIType hs_bindgen_3ea30834607f7eea_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_3ea30834607f7eea_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Display a simple modal message box.
 --
diff --git a/src/SDL3/Sys/Bindgen/Messagebox/Unsafe.hs b/src/SDL3/Sys/Bindgen/Messagebox/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Messagebox/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Messagebox/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Messagebox.Unsafe (
@@ -8,6 +10,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -16,7 +21,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_messagebox.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_messagebox.h>"
          , "_Bool hs_bindgen_6ca41526aad99745 ("
          , "  SDL_MessageBoxData const *arg1,"
          , "  signed int *arg2"
@@ -42,7 +51,7 @@
   hs_bindgen_6ca41526aad99745_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Messagebox_Unsafe_SDL_ShowMessageBox@
 hs_bindgen_6ca41526aad99745
@@ -50,7 +59,9 @@
   -> BG.Ptr BG.CInt
   -> IO BG.CBool
 hs_bindgen_6ca41526aad99745 =
-  BG.fromFFIType hs_bindgen_6ca41526aad99745_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_6ca41526aad99745_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Create a modal message box.
 --
@@ -88,11 +99,11 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Messagebox_Unsafe_SDL_ShowSimpleMessageBox@
 foreign import ccall unsafe "hs_bindgen_e2947f00c756e1c7"
   hs_bindgen_e2947f00c756e1c7_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Messagebox_Unsafe_SDL_ShowSimpleMessageBox@
 hs_bindgen_e2947f00c756e1c7
@@ -102,7 +113,18 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
   -> IO BG.CBool
 hs_bindgen_e2947f00c756e1c7 =
-  BG.fromFFIType hs_bindgen_e2947f00c756e1c7_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_e2947f00c756e1c7_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Display a simple modal message box.
 --
diff --git a/src/SDL3/Sys/Bindgen/Metal.hs b/src/SDL3/Sys/Bindgen/Metal.hs
--- a/src/SDL3/Sys/Bindgen/Metal.hs
+++ b/src/SDL3/Sys/Bindgen/Metal.hs
@@ -12,6 +12,7 @@
 {-# LANGUAGE TypeOperators #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | Functions to creating Metal layers and views on SDL windows.
 --
@@ -22,6 +23,8 @@
   SDL3.Sys.Bindgen.Metal.SDL_MetalView (..),
 )
 where
+
+import Prelude (Eq, Ord, Show, type (~))
 
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.Marshal qualified as Marshal
diff --git a/src/SDL3/Sys/Bindgen/Metal/FunPtr.hs b/src/SDL3/Sys/Bindgen/Metal/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Metal/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Metal/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Metal.FunPtr (
@@ -9,6 +11,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Metal
@@ -16,7 +20,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_metal.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_metal.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Metal_get_SDL_Metal_CreateView */"
          , "__attribute__ ((const))"
          , "SDL_MetalView (*hs_bindgen_05e876f492f6e504 (void)) ("
@@ -54,7 +62,7 @@
 hs_bindgen_05e876f492f6e504
   :: IO (BG.FunPtr (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window -> IO SDL_MetalView))
 hs_bindgen_05e876f492f6e504 =
-  BG.fromFFIType hs_bindgen_05e876f492f6e504_base
+  fmap BG.fromFFIType hs_bindgen_05e876f492f6e504_base
 
 {-# NOINLINE sDL_Metal_CreateView #-}
 
@@ -87,7 +95,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Metal_get_SDL_Metal_DestroyView@
 hs_bindgen_459e45a952bb1737 :: IO (BG.FunPtr (SDL_MetalView -> IO ()))
 hs_bindgen_459e45a952bb1737 =
-  BG.fromFFIType hs_bindgen_459e45a952bb1737_base
+  fmap BG.fromFFIType hs_bindgen_459e45a952bb1737_base
 
 {-# NOINLINE sDL_Metal_DestroyView #-}
 
@@ -116,7 +124,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Metal_get_SDL_Metal_GetLayer@
 hs_bindgen_7141fdaf243ea8b9 :: IO (BG.FunPtr (SDL_MetalView -> IO (BG.Ptr BG.Void)))
 hs_bindgen_7141fdaf243ea8b9 =
-  BG.fromFFIType hs_bindgen_7141fdaf243ea8b9_base
+  fmap BG.fromFFIType hs_bindgen_7141fdaf243ea8b9_base
 
 {-# NOINLINE sDL_Metal_GetLayer #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Metal/Safe.hs b/src/SDL3/Sys/Bindgen/Metal/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Metal/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Metal/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Metal.Safe (
@@ -9,6 +11,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Metal
@@ -16,7 +20,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_metal.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_metal.h>"
          , "SDL_MetalView hs_bindgen_04ce5ab1408c911d ("
          , "  SDL_Window *arg1"
          , ")"
@@ -50,7 +58,8 @@
   :: BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
   -> IO SDL_MetalView
 hs_bindgen_04ce5ab1408c911d =
-  BG.fromFFIType hs_bindgen_04ce5ab1408c911d_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_04ce5ab1408c911d_base (BG.toFFIType x0))
 
 -- | Create a CAMetalLayer-backed NSView\/UIView and attach it to the specified window.
 --
@@ -86,7 +95,8 @@
   :: SDL_MetalView
   -> IO ()
 hs_bindgen_b00215ead799e6c0 =
-  BG.fromFFIType hs_bindgen_b00215ead799e6c0_base
+  \x0 ->
+    hs_bindgen_b00215ead799e6c0_base (BG.toFFIType x0)
 
 -- | Destroy an existing 'SDL_MetalView' object.
 --
@@ -118,7 +128,8 @@
   :: SDL_MetalView
   -> IO (BG.Ptr BG.Void)
 hs_bindgen_4ce54bd94800c4e9 =
-  BG.fromFFIType hs_bindgen_4ce54bd94800c4e9_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_4ce54bd94800c4e9_base (BG.toFFIType x0))
 
 -- | Get a pointer to the backing CAMetalLayer for the given view.
 --
diff --git a/src/SDL3/Sys/Bindgen/Metal/Unsafe.hs b/src/SDL3/Sys/Bindgen/Metal/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Metal/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Metal/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Metal.Unsafe (
@@ -9,6 +11,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Metal
@@ -16,7 +20,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_metal.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_metal.h>"
          , "SDL_MetalView hs_bindgen_8451a59271a15560 ("
          , "  SDL_Window *arg1"
          , ")"
@@ -50,7 +58,8 @@
   :: BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
   -> IO SDL_MetalView
 hs_bindgen_8451a59271a15560 =
-  BG.fromFFIType hs_bindgen_8451a59271a15560_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_8451a59271a15560_base (BG.toFFIType x0))
 
 -- | Create a CAMetalLayer-backed NSView\/UIView and attach it to the specified window.
 --
@@ -86,7 +95,8 @@
   :: SDL_MetalView
   -> IO ()
 hs_bindgen_f80d8baf242eee62 =
-  BG.fromFFIType hs_bindgen_f80d8baf242eee62_base
+  \x0 ->
+    hs_bindgen_f80d8baf242eee62_base (BG.toFFIType x0)
 
 -- | Destroy an existing 'SDL_MetalView' object.
 --
@@ -118,7 +128,8 @@
   :: SDL_MetalView
   -> IO (BG.Ptr BG.Void)
 hs_bindgen_d6bd9b15880590e0 =
-  BG.fromFFIType hs_bindgen_d6bd9b15880590e0_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d6bd9b15880590e0_base (BG.toFFIType x0))
 
 -- | Get a pointer to the backing CAMetalLayer for the given view.
 --
diff --git a/src/SDL3/Sys/Bindgen/Misc/FunPtr.hs b/src/SDL3/Sys/Bindgen/Misc/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Misc/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Misc/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Misc.FunPtr (
@@ -7,13 +9,19 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_misc.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_misc.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Misc_get_SDL_OpenURL */"
          , "__attribute__ ((const))"
          , "_Bool (*hs_bindgen_4c967d8f61448acb (void)) ("
@@ -34,7 +42,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Misc_get_SDL_OpenURL@
 hs_bindgen_4c967d8f61448acb :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO BG.CBool))
 hs_bindgen_4c967d8f61448acb =
-  BG.fromFFIType hs_bindgen_4c967d8f61448acb_base
+  fmap BG.fromFFIType hs_bindgen_4c967d8f61448acb_base
 
 {-# NOINLINE sDL_OpenURL #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Misc/Safe.hs b/src/SDL3/Sys/Bindgen/Misc/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Misc/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Misc/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Misc.Safe (
@@ -7,13 +9,19 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_misc.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_misc.h>"
          , "_Bool hs_bindgen_b3f3010b7eba15e0 ("
          , "  char const *arg1"
          , ")"
@@ -28,14 +36,15 @@
 foreign import ccall safe "hs_bindgen_b3f3010b7eba15e0"
   hs_bindgen_b3f3010b7eba15e0_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Misc_Safe_SDL_OpenURL@
 hs_bindgen_b3f3010b7eba15e0
   :: PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_b3f3010b7eba15e0 =
-  BG.fromFFIType hs_bindgen_b3f3010b7eba15e0_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_b3f3010b7eba15e0_base (BG.toFFIType x0))
 
 -- | [C declaration]: @SDL_OpenURL@, defined at @SDL3\/SDL_misc.h 72:34@
 sDL_OpenURL
diff --git a/src/SDL3/Sys/Bindgen/Misc/Unsafe.hs b/src/SDL3/Sys/Bindgen/Misc/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Misc/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Misc/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Misc.Unsafe (
@@ -7,13 +9,19 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_misc.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_misc.h>"
          , "_Bool hs_bindgen_25f6c968529203db ("
          , "  char const *arg1"
          , ")"
@@ -28,14 +36,15 @@
 foreign import ccall unsafe "hs_bindgen_25f6c968529203db"
   hs_bindgen_25f6c968529203db_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Misc_Unsafe_SDL_OpenURL@
 hs_bindgen_25f6c968529203db
   :: PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_25f6c968529203db =
-  BG.fromFFIType hs_bindgen_25f6c968529203db_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_25f6c968529203db_base (BG.toFFIType x0))
 
 -- | [C declaration]: @SDL_OpenURL@, defined at @SDL3\/SDL_misc.h 72:34@
 sDL_OpenURL
diff --git a/src/SDL3/Sys/Bindgen/Mouse.hs b/src/SDL3/Sys/Bindgen/Mouse.hs
--- a/src/SDL3/Sys/Bindgen/Mouse.hs
+++ b/src/SDL3/Sys/Bindgen/Mouse.hs
@@ -7,6 +7,7 @@
 {-# LANGUAGE ExplicitForAll #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE MagicHash #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
@@ -18,6 +19,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | Any GUI application has to deal with the mouse, and SDL provides functions to manage mouse input and the displayed cursor.
 --
@@ -82,10 +84,31 @@
 )
 where
 
+import Prelude (
+  Bounded,
+  Enum,
+  Eq,
+  IO,
+  Int,
+  Integral,
+  Num,
+  Ord,
+  Read,
+  Real,
+  Show,
+  fmap,
+  pure,
+  (<*>),
+  (>>),
+  type (~),
+ )
+
 import C.Expr.HostPlatform qualified
 import HsBindgen.Runtime.CEnum qualified as CEnum
 import HsBindgen.Runtime.HasCField qualified as HasCField
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.Marshal qualified as Marshal
+import HsBindgen.Runtime.Struct qualified as Struct
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField
 import SDL3.Sys.Bindgen.Stdinc qualified
@@ -538,6 +561,14 @@
 
 deriving via Marshal.EquivStorable SDL_CursorFrameInfo instance BG.Storable SDL_CursorFrameInfo
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_CursorFrameInfo
+  instance
+    Struct.IsStruct SDL_CursorFrameInfo
+
+-- | The surface data for this frame
+--
+--     [C declaration]: @surface@, defined at @SDL3\/SDL_mouse.h 140:18@
 instance
   (ty ~ BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface)
   => BG.CompatHasField.HasField "surface" SDL_CursorFrameInfo ty
@@ -562,6 +593,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The frame duration in milliseconds (a duration of 0 is infinite)
+--
+--     [C declaration]: @duration@, defined at @SDL3\/SDL_mouse.h 141:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "duration" SDL_CursorFrameInfo ty
@@ -713,15 +747,14 @@
       -> IO ()
   }
   deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
 
 -- __unique:__ @toSDL_MouseMotionTransformCallback_Aux@
 foreign import ccall safe "wrapper"
   hs_bindgen_3e4a2d15fbbe81d6_base
     :: ( BG.Ptr BG.Void
-         -> BG.Word64
+         -> HsBindgen.Runtime.LibC.Word64
          -> BG.Ptr BG.Void
-         -> BG.Word32
+         -> HsBindgen.Runtime.LibC.Word32
          -> BG.Ptr BG.Void
          -> BG.Ptr BG.Void
          -> IO ()
@@ -729,9 +762,9 @@
     -> IO
          ( BG.FunPtr
              ( BG.Ptr BG.Void
-               -> BG.Word64
+               -> HsBindgen.Runtime.LibC.Word64
                -> BG.Ptr BG.Void
-               -> BG.Word32
+               -> HsBindgen.Runtime.LibC.Word32
                -> BG.Ptr BG.Void
                -> BG.Ptr BG.Void
                -> IO ()
@@ -744,24 +777,42 @@
   -> IO (BG.FunPtr SDL_MouseMotionTransformCallback_Aux)
 hs_bindgen_3e4a2d15fbbe81d6 =
   \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_3e4a2d15fbbe81d6_base (BG.toFFIType fun0))
+    fmap
+      BG.castFunPtr
+      ( hs_bindgen_3e4a2d15fbbe81d6_base
+          ( \x1 ->
+              \x2 ->
+                \x3 ->
+                  \x4 ->
+                    \x5 ->
+                      \x6 ->
+                        BG.getField @"unwrap"
+                          fun0
+                          (BG.fromFFIType x1)
+                          (BG.fromFFIType x2)
+                          (BG.fromFFIType x3)
+                          (BG.fromFFIType x4)
+                          (BG.fromFFIType x5)
+                          (BG.fromFFIType x6)
+          )
+      )
 
 -- __unique:__ @fromSDL_MouseMotionTransformCallback_Aux@
 foreign import ccall safe "dynamic"
   hs_bindgen_97a29d76d0ffd06f_base
     :: BG.FunPtr
          ( BG.Ptr BG.Void
-           -> BG.Word64
+           -> HsBindgen.Runtime.LibC.Word64
            -> BG.Ptr BG.Void
-           -> BG.Word32
+           -> HsBindgen.Runtime.LibC.Word32
            -> BG.Ptr BG.Void
            -> BG.Ptr BG.Void
            -> IO ()
          )
     -> BG.Ptr BG.Void
-    -> BG.Word64
+    -> HsBindgen.Runtime.LibC.Word64
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> IO ()
@@ -772,7 +823,22 @@
   -> SDL_MouseMotionTransformCallback_Aux
 hs_bindgen_97a29d76d0ffd06f =
   \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_97a29d76d0ffd06f_base (BG.castFunPtrToFFIType funPtr0))
+    SDL_MouseMotionTransformCallback_Aux
+      ( \x1 ->
+          \x2 ->
+            \x3 ->
+              \x4 ->
+                \x5 ->
+                  \x6 ->
+                    hs_bindgen_97a29d76d0ffd06f_base
+                      (BG.castFunPtr funPtr0)
+                      (BG.toFFIType x1)
+                      (BG.toFFIType x2)
+                      (BG.toFFIType x3)
+                      (BG.toFFIType x4)
+                      (BG.toFFIType x5)
+                      (BG.toFFIType x6)
+      )
 
 instance BG.ToFunPtr SDL_MouseMotionTransformCallback_Aux where
   toFunPtr = hs_bindgen_3e4a2d15fbbe81d6
diff --git a/src/SDL3/Sys/Bindgen/Mouse/FunPtr.hs b/src/SDL3/Sys/Bindgen/Mouse/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Mouse/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Mouse/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Mouse.FunPtr (
@@ -30,6 +32,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -40,7 +44,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_mouse.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_mouse.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_get_SDL_HasMouse */"
          , "__attribute__ ((const))"
          , "_Bool (*hs_bindgen_808ad945705f4e48 (void)) (void)"
@@ -271,7 +279,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_get_SDL_HasMouse@
 hs_bindgen_808ad945705f4e48 :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_808ad945705f4e48 =
-  BG.fromFFIType hs_bindgen_808ad945705f4e48_base
+  fmap BG.fromFFIType hs_bindgen_808ad945705f4e48_base
 
 {-# NOINLINE sDL_HasMouse #-}
 
@@ -298,7 +306,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_get_SDL_GetMice@
 hs_bindgen_ebefa78305745bc0 :: IO (BG.FunPtr (BG.Ptr BG.CInt -> IO (BG.Ptr SDL_MouseID)))
 hs_bindgen_ebefa78305745bc0 =
-  BG.fromFFIType hs_bindgen_ebefa78305745bc0_base
+  fmap BG.fromFFIType hs_bindgen_ebefa78305745bc0_base
 
 {-# NOINLINE sDL_GetMice #-}
 
@@ -329,7 +337,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_get_SDL_GetMouseNameForID@
 hs_bindgen_cd3906ba4b6319e7 :: IO (BG.FunPtr (SDL_MouseID -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_cd3906ba4b6319e7 =
-  BG.fromFFIType hs_bindgen_cd3906ba4b6319e7_base
+  fmap BG.fromFFIType hs_bindgen_cd3906ba4b6319e7_base
 
 {-# NOINLINE sDL_GetMouseNameForID #-}
 
@@ -360,7 +368,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_get_SDL_GetMouseFocus@
 hs_bindgen_b1cca0ecf584dbce :: IO (BG.FunPtr (IO (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window)))
 hs_bindgen_b1cca0ecf584dbce =
-  BG.fromFFIType hs_bindgen_b1cca0ecf584dbce_base
+  fmap BG.fromFFIType hs_bindgen_b1cca0ecf584dbce_base
 
 {-# NOINLINE sDL_GetMouseFocus #-}
 
@@ -386,7 +394,7 @@
 hs_bindgen_cd78db7ca1b4380a
   :: IO (BG.FunPtr (BG.Ptr BG.CFloat -> BG.Ptr BG.CFloat -> IO SDL_MouseButtonFlags))
 hs_bindgen_cd78db7ca1b4380a =
-  BG.fromFFIType hs_bindgen_cd78db7ca1b4380a_base
+  fmap BG.fromFFIType hs_bindgen_cd78db7ca1b4380a_base
 
 {-# NOINLINE sDL_GetMouseState #-}
 
@@ -426,7 +434,7 @@
 hs_bindgen_8ad222945a494193
   :: IO (BG.FunPtr (BG.Ptr BG.CFloat -> BG.Ptr BG.CFloat -> IO SDL_MouseButtonFlags))
 hs_bindgen_8ad222945a494193 =
-  BG.fromFFIType hs_bindgen_8ad222945a494193_base
+  fmap BG.fromFFIType hs_bindgen_8ad222945a494193_base
 
 {-# NOINLINE sDL_GetGlobalMouseState #-}
 
@@ -467,7 +475,7 @@
 hs_bindgen_c09b770b28617678
   :: IO (BG.FunPtr (BG.Ptr BG.CFloat -> BG.Ptr BG.CFloat -> IO SDL_MouseButtonFlags))
 hs_bindgen_c09b770b28617678 =
-  BG.fromFFIType hs_bindgen_c09b770b28617678_base
+  fmap BG.fromFFIType hs_bindgen_c09b770b28617678_base
 
 {-# NOINLINE sDL_GetRelativeMouseState #-}
 
@@ -508,7 +516,7 @@
 hs_bindgen_e0aa89262c23f11d
   :: IO (BG.FunPtr (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window -> BG.CFloat -> BG.CFloat -> IO ()))
 hs_bindgen_e0aa89262c23f11d =
-  BG.fromFFIType hs_bindgen_e0aa89262c23f11d_base
+  fmap BG.fromFFIType hs_bindgen_e0aa89262c23f11d_base
 
 {-# NOINLINE sDL_WarpMouseInWindow #-}
 
@@ -544,7 +552,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_get_SDL_WarpMouseGlobal@
 hs_bindgen_a6c8da14823bf99f :: IO (BG.FunPtr (BG.CFloat -> BG.CFloat -> IO BG.CBool))
 hs_bindgen_a6c8da14823bf99f =
-  BG.fromFFIType hs_bindgen_a6c8da14823bf99f_base
+  fmap BG.fromFFIType hs_bindgen_a6c8da14823bf99f_base
 
 {-# NOINLINE sDL_WarpMouseGlobal #-}
 
@@ -582,7 +590,7 @@
 hs_bindgen_e75ba6290fb7b58a
   :: IO (BG.FunPtr (SDL_MouseMotionTransformCallback -> BG.Ptr BG.Void -> IO BG.CBool))
 hs_bindgen_e75ba6290fb7b58a =
-  BG.fromFFIType hs_bindgen_e75ba6290fb7b58a_base
+  fmap BG.fromFFIType hs_bindgen_e75ba6290fb7b58a_base
 
 {-# NOINLINE sDL_SetRelativeMouseTransform #-}
 
@@ -615,7 +623,7 @@
 hs_bindgen_5b077ae9a298496b
   :: IO (BG.FunPtr (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window -> BG.CBool -> IO BG.CBool))
 hs_bindgen_5b077ae9a298496b =
-  BG.fromFFIType hs_bindgen_5b077ae9a298496b_base
+  fmap BG.fromFFIType hs_bindgen_5b077ae9a298496b_base
 
 {-# NOINLINE sDL_SetWindowRelativeMouseMode #-}
 
@@ -654,7 +662,7 @@
 hs_bindgen_46446683507069cd
   :: IO (BG.FunPtr (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window -> IO BG.CBool))
 hs_bindgen_46446683507069cd =
-  BG.fromFFIType hs_bindgen_46446683507069cd_base
+  fmap BG.fromFFIType hs_bindgen_46446683507069cd_base
 
 {-# NOINLINE sDL_GetWindowRelativeMouseMode #-}
 
@@ -684,7 +692,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_get_SDL_CaptureMouse@
 hs_bindgen_a6ebcff1379c54e6 :: IO (BG.FunPtr (BG.CBool -> IO BG.CBool))
 hs_bindgen_a6ebcff1379c54e6 =
-  BG.fromFFIType hs_bindgen_a6ebcff1379c54e6_base
+  fmap BG.fromFFIType hs_bindgen_a6ebcff1379c54e6_base
 
 {-# NOINLINE sDL_CaptureMouse #-}
 
@@ -734,7 +742,7 @@
            )
        )
 hs_bindgen_3f017d38c4a98259 =
-  BG.fromFFIType hs_bindgen_3f017d38c4a98259_base
+  fmap BG.fromFFIType hs_bindgen_3f017d38c4a98259_base
 
 {-# NOINLINE sDL_CreateCursor #-}
 
@@ -806,7 +814,7 @@
            (BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface -> BG.CInt -> BG.CInt -> IO (BG.Ptr SDL_Cursor))
        )
 hs_bindgen_9741ddd9d73dea35 =
-  BG.fromFFIType hs_bindgen_9741ddd9d73dea35_base
+  fmap BG.fromFFIType hs_bindgen_9741ddd9d73dea35_base
 
 {-# NOINLINE sDL_CreateColorCursor #-}
 
@@ -845,7 +853,7 @@
   :: IO
        (BG.FunPtr (BG.Ptr SDL_CursorFrameInfo -> BG.CInt -> BG.CInt -> BG.CInt -> IO (BG.Ptr SDL_Cursor)))
 hs_bindgen_5a53bab7f1d0dd41 =
-  BG.fromFFIType hs_bindgen_5a53bab7f1d0dd41_base
+  fmap BG.fromFFIType hs_bindgen_5a53bab7f1d0dd41_base
 
 {-# NOINLINE sDL_CreateAnimatedCursor #-}
 
@@ -889,7 +897,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_get_SDL_CreateSystemCursor@
 hs_bindgen_98115455fed12c20 :: IO (BG.FunPtr (SDL_SystemCursor -> IO (BG.Ptr SDL_Cursor)))
 hs_bindgen_98115455fed12c20 =
-  BG.fromFFIType hs_bindgen_98115455fed12c20_base
+  fmap BG.fromFFIType hs_bindgen_98115455fed12c20_base
 
 {-# NOINLINE sDL_CreateSystemCursor #-}
 
@@ -918,7 +926,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_get_SDL_SetCursor@
 hs_bindgen_7f9d9e943410eac0 :: IO (BG.FunPtr (BG.Ptr SDL_Cursor -> IO BG.CBool))
 hs_bindgen_7f9d9e943410eac0 =
-  BG.fromFFIType hs_bindgen_7f9d9e943410eac0_base
+  fmap BG.fromFFIType hs_bindgen_7f9d9e943410eac0_base
 
 {-# NOINLINE sDL_SetCursor #-}
 
@@ -949,7 +957,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_get_SDL_GetCursor@
 hs_bindgen_ddffa3c703f2160c :: IO (BG.FunPtr (IO (BG.Ptr SDL_Cursor)))
 hs_bindgen_ddffa3c703f2160c =
-  BG.fromFFIType hs_bindgen_ddffa3c703f2160c_base
+  fmap BG.fromFFIType hs_bindgen_ddffa3c703f2160c_base
 
 {-# NOINLINE sDL_GetCursor #-}
 
@@ -978,7 +986,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_get_SDL_GetDefaultCursor@
 hs_bindgen_3cea96283579f3f7 :: IO (BG.FunPtr (IO (BG.Ptr SDL_Cursor)))
 hs_bindgen_3cea96283579f3f7 =
-  BG.fromFFIType hs_bindgen_3cea96283579f3f7_base
+  fmap BG.fromFFIType hs_bindgen_3cea96283579f3f7_base
 
 {-# NOINLINE sDL_GetDefaultCursor #-}
 
@@ -1005,7 +1013,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_get_SDL_DestroyCursor@
 hs_bindgen_cccc019b7e8bc17b :: IO (BG.FunPtr (BG.Ptr SDL_Cursor -> IO ()))
 hs_bindgen_cccc019b7e8bc17b =
-  BG.fromFFIType hs_bindgen_cccc019b7e8bc17b_base
+  fmap BG.fromFFIType hs_bindgen_cccc019b7e8bc17b_base
 
 {-# NOINLINE sDL_DestroyCursor #-}
 
@@ -1034,7 +1042,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_get_SDL_ShowCursor@
 hs_bindgen_fa1d352535cdb7a2 :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_fa1d352535cdb7a2 =
-  BG.fromFFIType hs_bindgen_fa1d352535cdb7a2_base
+  fmap BG.fromFFIType hs_bindgen_fa1d352535cdb7a2_base
 
 {-# NOINLINE sDL_ShowCursor #-}
 
@@ -1061,7 +1069,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_get_SDL_HideCursor@
 hs_bindgen_d90c7f4cd007f484 :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_d90c7f4cd007f484 =
-  BG.fromFFIType hs_bindgen_d90c7f4cd007f484_base
+  fmap BG.fromFFIType hs_bindgen_d90c7f4cd007f484_base
 
 {-# NOINLINE sDL_HideCursor #-}
 
@@ -1088,7 +1096,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_get_SDL_CursorVisible@
 hs_bindgen_7ae5464b38889e15 :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_7ae5464b38889e15 =
-  BG.fromFFIType hs_bindgen_7ae5464b38889e15_base
+  fmap BG.fromFFIType hs_bindgen_7ae5464b38889e15_base
 
 {-# NOINLINE sDL_CursorVisible #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Mouse/Safe.hs b/src/SDL3/Sys/Bindgen/Mouse/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Mouse/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Mouse/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Mouse.Safe (
@@ -30,6 +32,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -40,7 +45,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_mouse.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_mouse.h>"
          , "_Bool hs_bindgen_c5f87eb6a615a43b (void)"
          , "{"
          , "  return (SDL_HasMouse)();"
@@ -218,12 +227,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Safe_SDL_HasMouse@
 foreign import ccall safe "hs_bindgen_c5f87eb6a615a43b"
   hs_bindgen_c5f87eb6a615a43b_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Safe_SDL_HasMouse@
 hs_bindgen_c5f87eb6a615a43b :: IO BG.CBool
 hs_bindgen_c5f87eb6a615a43b =
-  BG.fromFFIType hs_bindgen_c5f87eb6a615a43b_base
+  fmap BG.fromFFIType hs_bindgen_c5f87eb6a615a43b_base
 
 -- | Return whether a mouse is currently connected.
 --
@@ -250,7 +259,8 @@
   :: BG.Ptr BG.CInt
   -> IO (BG.Ptr SDL_MouseID)
 hs_bindgen_b5ddc524dd09ed59 =
-  BG.fromFFIType hs_bindgen_b5ddc524dd09ed59_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_b5ddc524dd09ed59_base (BG.toFFIType x0))
 
 -- | Get a list of currently connected mice.
 --
@@ -276,7 +286,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Safe_SDL_GetMouseNameForID@
 foreign import ccall safe "hs_bindgen_5f9df08d34babce6"
   hs_bindgen_5f9df08d34babce6_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Safe_SDL_GetMouseNameForID@
@@ -284,7 +294,8 @@
   :: SDL_MouseID
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_5f9df08d34babce6 =
-  BG.fromFFIType hs_bindgen_5f9df08d34babce6_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_5f9df08d34babce6_base (BG.toFFIType x0))
 
 -- | Get the name of a mouse.
 --
@@ -315,7 +326,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Safe_SDL_GetMouseFocus@
 hs_bindgen_d663c2bc45028535 :: IO (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window)
 hs_bindgen_d663c2bc45028535 =
-  BG.fromFFIType hs_bindgen_d663c2bc45028535_base
+  fmap BG.fromFFIType hs_bindgen_d663c2bc45028535_base
 
 -- | Get the window which currently has mouse focus.
 --
@@ -334,7 +345,7 @@
   hs_bindgen_ea9a965df89a99a0_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Safe_SDL_GetMouseState@
 hs_bindgen_ea9a965df89a99a0
@@ -342,7 +353,9 @@
   -> BG.Ptr BG.CFloat
   -> IO SDL_MouseButtonFlags
 hs_bindgen_ea9a965df89a99a0 =
-  BG.fromFFIType hs_bindgen_ea9a965df89a99a0_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_ea9a965df89a99a0_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Query SDL\'s cache for the synchronous mouse button state and the window-relative SDL-cursor position.
 --
@@ -380,7 +393,7 @@
   hs_bindgen_10d90c46febd8700_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Safe_SDL_GetGlobalMouseState@
 hs_bindgen_10d90c46febd8700
@@ -388,7 +401,9 @@
   -> BG.Ptr BG.CFloat
   -> IO SDL_MouseButtonFlags
 hs_bindgen_10d90c46febd8700 =
-  BG.fromFFIType hs_bindgen_10d90c46febd8700_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_10d90c46febd8700_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Query the platform for the asynchronous mouse button state and the desktop-relative platform-cursor position.
 --
@@ -426,7 +441,7 @@
   hs_bindgen_b0dfdde07e2521d8_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Safe_SDL_GetRelativeMouseState@
 hs_bindgen_b0dfdde07e2521d8
@@ -434,7 +449,9 @@
   -> BG.Ptr BG.CFloat
   -> IO SDL_MouseButtonFlags
 hs_bindgen_b0dfdde07e2521d8 =
-  BG.fromFFIType hs_bindgen_b0dfdde07e2521d8_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_b0dfdde07e2521d8_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Query SDL\'s cache for the synchronous mouse button state and accumulated mouse delta since last call.
 --
@@ -472,8 +489,8 @@
 foreign import ccall safe "hs_bindgen_0eb4d6e5e240c8df"
   hs_bindgen_0eb4d6e5e240c8df_base
     :: BG.Ptr BG.Void
-    -> Float
-    -> Float
+    -> BG.CFloat
+    -> BG.CFloat
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Safe_SDL_WarpMouseInWindow@
@@ -483,7 +500,10 @@
   -> BG.CFloat
   -> IO ()
 hs_bindgen_0eb4d6e5e240c8df =
-  BG.fromFFIType hs_bindgen_0eb4d6e5e240c8df_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        hs_bindgen_0eb4d6e5e240c8df_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2)
 
 -- | Move the mouse cursor to the given position within the window.
 --
@@ -517,9 +537,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Safe_SDL_WarpMouseGlobal@
 foreign import ccall safe "hs_bindgen_f03dc8593d130e68"
   hs_bindgen_f03dc8593d130e68_base
-    :: Float
-    -> Float
-    -> IO BG.Word8
+    :: BG.CFloat
+    -> BG.CFloat
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Safe_SDL_WarpMouseGlobal@
 hs_bindgen_f03dc8593d130e68
@@ -527,7 +547,9 @@
   -> BG.CFloat
   -> IO BG.CBool
 hs_bindgen_f03dc8593d130e68 =
-  BG.fromFFIType hs_bindgen_f03dc8593d130e68_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_f03dc8593d130e68_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Move the mouse to the given position in global screen space.
 --
@@ -563,7 +585,7 @@
   hs_bindgen_c18f7adda4cf4b0b_base
     :: BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Safe_SDL_SetRelativeMouseTransform@
 hs_bindgen_c18f7adda4cf4b0b
@@ -571,7 +593,9 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_c18f7adda4cf4b0b =
-  BG.fromFFIType hs_bindgen_c18f7adda4cf4b0b_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_c18f7adda4cf4b0b_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set a user-defined function by which to transform relative mouse inputs.
 --
@@ -601,8 +625,8 @@
 foreign import ccall safe "hs_bindgen_ebfc8396f7c8dfc1"
   hs_bindgen_ebfc8396f7c8dfc1_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Safe_SDL_SetWindowRelativeMouseMode@
 hs_bindgen_ebfc8396f7c8dfc1
@@ -610,7 +634,9 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_ebfc8396f7c8dfc1 =
-  BG.fromFFIType hs_bindgen_ebfc8396f7c8dfc1_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_ebfc8396f7c8dfc1_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set relative mouse mode for a window.
 --
@@ -646,14 +672,15 @@
 foreign import ccall safe "hs_bindgen_c122318f49f37c28"
   hs_bindgen_c122318f49f37c28_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Safe_SDL_GetWindowRelativeMouseMode@
 hs_bindgen_c122318f49f37c28
   :: BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
   -> IO BG.CBool
 hs_bindgen_c122318f49f37c28 =
-  BG.fromFFIType hs_bindgen_c122318f49f37c28_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c122318f49f37c28_base (BG.toFFIType x0))
 
 -- | Query whether relative mouse mode is enabled for a window.
 --
@@ -678,15 +705,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Safe_SDL_CaptureMouse@
 foreign import ccall safe "hs_bindgen_ba2a652c2d22d4f9"
   hs_bindgen_ba2a652c2d22d4f9_base
-    :: BG.Word8
-    -> IO BG.Word8
+    :: BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Safe_SDL_CaptureMouse@
 hs_bindgen_ba2a652c2d22d4f9
   :: BG.CBool
   -> IO BG.CBool
 hs_bindgen_ba2a652c2d22d4f9 =
-  BG.fromFFIType hs_bindgen_ba2a652c2d22d4f9_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_ba2a652c2d22d4f9_base (BG.toFFIType x0))
 
 -- | Capture the mouse and to track input outside an SDL window.
 --
@@ -722,10 +750,10 @@
   hs_bindgen_8aa3978a09ad477f_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> BG.Int32
-    -> BG.Int32
+    -> BG.CInt
+    -> BG.CInt
+    -> BG.CInt
+    -> BG.CInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Safe_SDL_CreateCursor@
@@ -738,7 +766,22 @@
   -> BG.CInt
   -> IO (BG.Ptr SDL_Cursor)
 hs_bindgen_8aa3978a09ad477f =
-  BG.fromFFIType hs_bindgen_8aa3978a09ad477f_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_8aa3978a09ad477f_base
+                    (BG.toFFIType x0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                    (BG.toFFIType x4)
+                    (BG.toFFIType x5)
+                )
 
 -- | Create a cursor using the specified bitmap data and mask (in MSB format).
 --
@@ -803,8 +846,8 @@
 foreign import ccall safe "hs_bindgen_1af9c26d315c2409"
   hs_bindgen_1af9c26d315c2409_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
+    -> BG.CInt
+    -> BG.CInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Safe_SDL_CreateColorCursor@
@@ -814,7 +857,12 @@
   -> BG.CInt
   -> IO (BG.Ptr SDL_Cursor)
 hs_bindgen_1af9c26d315c2409 =
-  BG.fromFFIType hs_bindgen_1af9c26d315c2409_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_1af9c26d315c2409_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Create a color cursor.
 --
@@ -849,9 +897,9 @@
 foreign import ccall safe "hs_bindgen_9a5f9b18f58c86ff"
   hs_bindgen_9a5f9b18f58c86ff_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> BG.Int32
+    -> BG.CInt
+    -> BG.CInt
+    -> BG.CInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Safe_SDL_CreateAnimatedCursor@
@@ -862,7 +910,18 @@
   -> BG.CInt
   -> IO (BG.Ptr SDL_Cursor)
 hs_bindgen_9a5f9b18f58c86ff =
-  BG.fromFFIType hs_bindgen_9a5f9b18f58c86ff_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_9a5f9b18f58c86ff_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Create an animated color cursor.
 --
@@ -907,7 +966,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Safe_SDL_CreateSystemCursor@
 foreign import ccall safe "hs_bindgen_9c5496f4b40d0ce6"
   hs_bindgen_9c5496f4b40d0ce6_base
-    :: BG.Word32
+    :: BG.CUInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Safe_SDL_CreateSystemCursor@
@@ -915,7 +974,8 @@
   :: SDL_SystemCursor
   -> IO (BG.Ptr SDL_Cursor)
 hs_bindgen_9c5496f4b40d0ce6 =
-  BG.fromFFIType hs_bindgen_9c5496f4b40d0ce6_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_9c5496f4b40d0ce6_base (BG.toFFIType x0))
 
 -- | Create a system cursor.
 --
@@ -940,14 +1000,15 @@
 foreign import ccall safe "hs_bindgen_3b39298a9bf3a79f"
   hs_bindgen_3b39298a9bf3a79f_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Safe_SDL_SetCursor@
 hs_bindgen_3b39298a9bf3a79f
   :: BG.Ptr SDL_Cursor
   -> IO BG.CBool
 hs_bindgen_3b39298a9bf3a79f =
-  BG.fromFFIType hs_bindgen_3b39298a9bf3a79f_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3b39298a9bf3a79f_base (BG.toFFIType x0))
 
 -- | Set the active cursor.
 --
@@ -978,7 +1039,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Safe_SDL_GetCursor@
 hs_bindgen_0ad270dac1fad234 :: IO (BG.Ptr SDL_Cursor)
 hs_bindgen_0ad270dac1fad234 =
-  BG.fromFFIType hs_bindgen_0ad270dac1fad234_base
+  fmap BG.fromFFIType hs_bindgen_0ad270dac1fad234_base
 
 -- | Get the active cursor.
 --
@@ -1004,7 +1065,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Safe_SDL_GetDefaultCursor@
 hs_bindgen_eba07747bd0a11f2 :: IO (BG.Ptr SDL_Cursor)
 hs_bindgen_eba07747bd0a11f2 =
-  BG.fromFFIType hs_bindgen_eba07747bd0a11f2_base
+  fmap BG.fromFFIType hs_bindgen_eba07747bd0a11f2_base
 
 -- | Get the default cursor.
 --
@@ -1031,7 +1092,8 @@
   :: BG.Ptr SDL_Cursor
   -> IO ()
 hs_bindgen_c88c0b977a69ed2a =
-  BG.fromFFIType hs_bindgen_c88c0b977a69ed2a_base
+  \x0 ->
+    hs_bindgen_c88c0b977a69ed2a_base (BG.toFFIType x0)
 
 -- | Free a previously-created cursor.
 --
@@ -1055,12 +1117,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Safe_SDL_ShowCursor@
 foreign import ccall safe "hs_bindgen_2dbfefec61405524"
   hs_bindgen_2dbfefec61405524_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Safe_SDL_ShowCursor@
 hs_bindgen_2dbfefec61405524 :: IO BG.CBool
 hs_bindgen_2dbfefec61405524 =
-  BG.fromFFIType hs_bindgen_2dbfefec61405524_base
+  fmap BG.fromFFIType hs_bindgen_2dbfefec61405524_base
 
 -- | Show the cursor.
 --
@@ -1079,12 +1141,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Safe_SDL_HideCursor@
 foreign import ccall safe "hs_bindgen_40414e63ec7f7a75"
   hs_bindgen_40414e63ec7f7a75_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Safe_SDL_HideCursor@
 hs_bindgen_40414e63ec7f7a75 :: IO BG.CBool
 hs_bindgen_40414e63ec7f7a75 =
-  BG.fromFFIType hs_bindgen_40414e63ec7f7a75_base
+  fmap BG.fromFFIType hs_bindgen_40414e63ec7f7a75_base
 
 -- | Hide the cursor.
 --
@@ -1103,12 +1165,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Safe_SDL_CursorVisible@
 foreign import ccall safe "hs_bindgen_3414c4fe925fe000"
   hs_bindgen_3414c4fe925fe000_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Safe_SDL_CursorVisible@
 hs_bindgen_3414c4fe925fe000 :: IO BG.CBool
 hs_bindgen_3414c4fe925fe000 =
-  BG.fromFFIType hs_bindgen_3414c4fe925fe000_base
+  fmap BG.fromFFIType hs_bindgen_3414c4fe925fe000_base
 
 -- | Return whether the cursor is currently being shown.
 --
diff --git a/src/SDL3/Sys/Bindgen/Mouse/Unsafe.hs b/src/SDL3/Sys/Bindgen/Mouse/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Mouse/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Mouse/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Mouse.Unsafe (
@@ -30,6 +32,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -40,7 +45,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_mouse.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_mouse.h>"
          , "_Bool hs_bindgen_769b74d7836fe340 (void)"
          , "{"
          , "  return (SDL_HasMouse)();"
@@ -218,12 +227,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Unsafe_SDL_HasMouse@
 foreign import ccall unsafe "hs_bindgen_769b74d7836fe340"
   hs_bindgen_769b74d7836fe340_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Unsafe_SDL_HasMouse@
 hs_bindgen_769b74d7836fe340 :: IO BG.CBool
 hs_bindgen_769b74d7836fe340 =
-  BG.fromFFIType hs_bindgen_769b74d7836fe340_base
+  fmap BG.fromFFIType hs_bindgen_769b74d7836fe340_base
 
 -- | Return whether a mouse is currently connected.
 --
@@ -250,7 +259,8 @@
   :: BG.Ptr BG.CInt
   -> IO (BG.Ptr SDL_MouseID)
 hs_bindgen_a1009b511ca2df84 =
-  BG.fromFFIType hs_bindgen_a1009b511ca2df84_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a1009b511ca2df84_base (BG.toFFIType x0))
 
 -- | Get a list of currently connected mice.
 --
@@ -276,7 +286,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Unsafe_SDL_GetMouseNameForID@
 foreign import ccall unsafe "hs_bindgen_47cea9780ae3c106"
   hs_bindgen_47cea9780ae3c106_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Unsafe_SDL_GetMouseNameForID@
@@ -284,7 +294,8 @@
   :: SDL_MouseID
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_47cea9780ae3c106 =
-  BG.fromFFIType hs_bindgen_47cea9780ae3c106_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_47cea9780ae3c106_base (BG.toFFIType x0))
 
 -- | Get the name of a mouse.
 --
@@ -315,7 +326,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Unsafe_SDL_GetMouseFocus@
 hs_bindgen_053bab05e16f443e :: IO (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window)
 hs_bindgen_053bab05e16f443e =
-  BG.fromFFIType hs_bindgen_053bab05e16f443e_base
+  fmap BG.fromFFIType hs_bindgen_053bab05e16f443e_base
 
 -- | Get the window which currently has mouse focus.
 --
@@ -334,7 +345,7 @@
   hs_bindgen_f18a766f4a177029_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Unsafe_SDL_GetMouseState@
 hs_bindgen_f18a766f4a177029
@@ -342,7 +353,9 @@
   -> BG.Ptr BG.CFloat
   -> IO SDL_MouseButtonFlags
 hs_bindgen_f18a766f4a177029 =
-  BG.fromFFIType hs_bindgen_f18a766f4a177029_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_f18a766f4a177029_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Query SDL\'s cache for the synchronous mouse button state and the window-relative SDL-cursor position.
 --
@@ -380,7 +393,7 @@
   hs_bindgen_4b743c0e1b7fc8fc_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Unsafe_SDL_GetGlobalMouseState@
 hs_bindgen_4b743c0e1b7fc8fc
@@ -388,7 +401,9 @@
   -> BG.Ptr BG.CFloat
   -> IO SDL_MouseButtonFlags
 hs_bindgen_4b743c0e1b7fc8fc =
-  BG.fromFFIType hs_bindgen_4b743c0e1b7fc8fc_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_4b743c0e1b7fc8fc_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Query the platform for the asynchronous mouse button state and the desktop-relative platform-cursor position.
 --
@@ -426,7 +441,7 @@
   hs_bindgen_d841c68d1482079a_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Unsafe_SDL_GetRelativeMouseState@
 hs_bindgen_d841c68d1482079a
@@ -434,7 +449,9 @@
   -> BG.Ptr BG.CFloat
   -> IO SDL_MouseButtonFlags
 hs_bindgen_d841c68d1482079a =
-  BG.fromFFIType hs_bindgen_d841c68d1482079a_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_d841c68d1482079a_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Query SDL\'s cache for the synchronous mouse button state and accumulated mouse delta since last call.
 --
@@ -472,8 +489,8 @@
 foreign import ccall unsafe "hs_bindgen_0b73aa8f6d98f018"
   hs_bindgen_0b73aa8f6d98f018_base
     :: BG.Ptr BG.Void
-    -> Float
-    -> Float
+    -> BG.CFloat
+    -> BG.CFloat
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Unsafe_SDL_WarpMouseInWindow@
@@ -483,7 +500,10 @@
   -> BG.CFloat
   -> IO ()
 hs_bindgen_0b73aa8f6d98f018 =
-  BG.fromFFIType hs_bindgen_0b73aa8f6d98f018_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        hs_bindgen_0b73aa8f6d98f018_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2)
 
 -- | Move the mouse cursor to the given position within the window.
 --
@@ -517,9 +537,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Unsafe_SDL_WarpMouseGlobal@
 foreign import ccall unsafe "hs_bindgen_42c0ada5af2a75a6"
   hs_bindgen_42c0ada5af2a75a6_base
-    :: Float
-    -> Float
-    -> IO BG.Word8
+    :: BG.CFloat
+    -> BG.CFloat
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Unsafe_SDL_WarpMouseGlobal@
 hs_bindgen_42c0ada5af2a75a6
@@ -527,7 +547,9 @@
   -> BG.CFloat
   -> IO BG.CBool
 hs_bindgen_42c0ada5af2a75a6 =
-  BG.fromFFIType hs_bindgen_42c0ada5af2a75a6_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_42c0ada5af2a75a6_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Move the mouse to the given position in global screen space.
 --
@@ -563,7 +585,7 @@
   hs_bindgen_3431374e48384d8c_base
     :: BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Unsafe_SDL_SetRelativeMouseTransform@
 hs_bindgen_3431374e48384d8c
@@ -571,7 +593,9 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_3431374e48384d8c =
-  BG.fromFFIType hs_bindgen_3431374e48384d8c_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_3431374e48384d8c_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set a user-defined function by which to transform relative mouse inputs.
 --
@@ -601,8 +625,8 @@
 foreign import ccall unsafe "hs_bindgen_df14f3a2272073d3"
   hs_bindgen_df14f3a2272073d3_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Unsafe_SDL_SetWindowRelativeMouseMode@
 hs_bindgen_df14f3a2272073d3
@@ -610,7 +634,9 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_df14f3a2272073d3 =
-  BG.fromFFIType hs_bindgen_df14f3a2272073d3_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_df14f3a2272073d3_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set relative mouse mode for a window.
 --
@@ -646,14 +672,15 @@
 foreign import ccall unsafe "hs_bindgen_60e1427dc7059277"
   hs_bindgen_60e1427dc7059277_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Unsafe_SDL_GetWindowRelativeMouseMode@
 hs_bindgen_60e1427dc7059277
   :: BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
   -> IO BG.CBool
 hs_bindgen_60e1427dc7059277 =
-  BG.fromFFIType hs_bindgen_60e1427dc7059277_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_60e1427dc7059277_base (BG.toFFIType x0))
 
 -- | Query whether relative mouse mode is enabled for a window.
 --
@@ -678,15 +705,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Unsafe_SDL_CaptureMouse@
 foreign import ccall unsafe "hs_bindgen_61b615e5f17d45b5"
   hs_bindgen_61b615e5f17d45b5_base
-    :: BG.Word8
-    -> IO BG.Word8
+    :: BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Unsafe_SDL_CaptureMouse@
 hs_bindgen_61b615e5f17d45b5
   :: BG.CBool
   -> IO BG.CBool
 hs_bindgen_61b615e5f17d45b5 =
-  BG.fromFFIType hs_bindgen_61b615e5f17d45b5_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_61b615e5f17d45b5_base (BG.toFFIType x0))
 
 -- | Capture the mouse and to track input outside an SDL window.
 --
@@ -722,10 +750,10 @@
   hs_bindgen_14364d58f2a5fb7e_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> BG.Int32
-    -> BG.Int32
+    -> BG.CInt
+    -> BG.CInt
+    -> BG.CInt
+    -> BG.CInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Unsafe_SDL_CreateCursor@
@@ -738,7 +766,22 @@
   -> BG.CInt
   -> IO (BG.Ptr SDL_Cursor)
 hs_bindgen_14364d58f2a5fb7e =
-  BG.fromFFIType hs_bindgen_14364d58f2a5fb7e_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_14364d58f2a5fb7e_base
+                    (BG.toFFIType x0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                    (BG.toFFIType x4)
+                    (BG.toFFIType x5)
+                )
 
 -- | Create a cursor using the specified bitmap data and mask (in MSB format).
 --
@@ -803,8 +846,8 @@
 foreign import ccall unsafe "hs_bindgen_fa20cf5972b0b3ea"
   hs_bindgen_fa20cf5972b0b3ea_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
+    -> BG.CInt
+    -> BG.CInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Unsafe_SDL_CreateColorCursor@
@@ -814,7 +857,12 @@
   -> BG.CInt
   -> IO (BG.Ptr SDL_Cursor)
 hs_bindgen_fa20cf5972b0b3ea =
-  BG.fromFFIType hs_bindgen_fa20cf5972b0b3ea_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_fa20cf5972b0b3ea_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Create a color cursor.
 --
@@ -849,9 +897,9 @@
 foreign import ccall unsafe "hs_bindgen_d361ef168725ef94"
   hs_bindgen_d361ef168725ef94_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> BG.Int32
+    -> BG.CInt
+    -> BG.CInt
+    -> BG.CInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Unsafe_SDL_CreateAnimatedCursor@
@@ -862,7 +910,18 @@
   -> BG.CInt
   -> IO (BG.Ptr SDL_Cursor)
 hs_bindgen_d361ef168725ef94 =
-  BG.fromFFIType hs_bindgen_d361ef168725ef94_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_d361ef168725ef94_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Create an animated color cursor.
 --
@@ -907,7 +966,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Unsafe_SDL_CreateSystemCursor@
 foreign import ccall unsafe "hs_bindgen_c34ca154a7bf13af"
   hs_bindgen_c34ca154a7bf13af_base
-    :: BG.Word32
+    :: BG.CUInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Unsafe_SDL_CreateSystemCursor@
@@ -915,7 +974,8 @@
   :: SDL_SystemCursor
   -> IO (BG.Ptr SDL_Cursor)
 hs_bindgen_c34ca154a7bf13af =
-  BG.fromFFIType hs_bindgen_c34ca154a7bf13af_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c34ca154a7bf13af_base (BG.toFFIType x0))
 
 -- | Create a system cursor.
 --
@@ -940,14 +1000,15 @@
 foreign import ccall unsafe "hs_bindgen_c79cfea2c2a40f90"
   hs_bindgen_c79cfea2c2a40f90_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Unsafe_SDL_SetCursor@
 hs_bindgen_c79cfea2c2a40f90
   :: BG.Ptr SDL_Cursor
   -> IO BG.CBool
 hs_bindgen_c79cfea2c2a40f90 =
-  BG.fromFFIType hs_bindgen_c79cfea2c2a40f90_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c79cfea2c2a40f90_base (BG.toFFIType x0))
 
 -- | Set the active cursor.
 --
@@ -978,7 +1039,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Unsafe_SDL_GetCursor@
 hs_bindgen_9e2eefba89a09501 :: IO (BG.Ptr SDL_Cursor)
 hs_bindgen_9e2eefba89a09501 =
-  BG.fromFFIType hs_bindgen_9e2eefba89a09501_base
+  fmap BG.fromFFIType hs_bindgen_9e2eefba89a09501_base
 
 -- | Get the active cursor.
 --
@@ -1004,7 +1065,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Unsafe_SDL_GetDefaultCursor@
 hs_bindgen_b81cd185a7b75943 :: IO (BG.Ptr SDL_Cursor)
 hs_bindgen_b81cd185a7b75943 =
-  BG.fromFFIType hs_bindgen_b81cd185a7b75943_base
+  fmap BG.fromFFIType hs_bindgen_b81cd185a7b75943_base
 
 -- | Get the default cursor.
 --
@@ -1031,7 +1092,8 @@
   :: BG.Ptr SDL_Cursor
   -> IO ()
 hs_bindgen_fd4d057091dc9dcc =
-  BG.fromFFIType hs_bindgen_fd4d057091dc9dcc_base
+  \x0 ->
+    hs_bindgen_fd4d057091dc9dcc_base (BG.toFFIType x0)
 
 -- | Free a previously-created cursor.
 --
@@ -1055,12 +1117,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Unsafe_SDL_ShowCursor@
 foreign import ccall unsafe "hs_bindgen_79db044ed9d49e1d"
   hs_bindgen_79db044ed9d49e1d_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Unsafe_SDL_ShowCursor@
 hs_bindgen_79db044ed9d49e1d :: IO BG.CBool
 hs_bindgen_79db044ed9d49e1d =
-  BG.fromFFIType hs_bindgen_79db044ed9d49e1d_base
+  fmap BG.fromFFIType hs_bindgen_79db044ed9d49e1d_base
 
 -- | Show the cursor.
 --
@@ -1079,12 +1141,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Unsafe_SDL_HideCursor@
 foreign import ccall unsafe "hs_bindgen_f07aff8d3a047b77"
   hs_bindgen_f07aff8d3a047b77_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Unsafe_SDL_HideCursor@
 hs_bindgen_f07aff8d3a047b77 :: IO BG.CBool
 hs_bindgen_f07aff8d3a047b77 =
-  BG.fromFFIType hs_bindgen_f07aff8d3a047b77_base
+  fmap BG.fromFFIType hs_bindgen_f07aff8d3a047b77_base
 
 -- | Hide the cursor.
 --
@@ -1103,12 +1165,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Unsafe_SDL_CursorVisible@
 foreign import ccall unsafe "hs_bindgen_1d7b9f91212450ba"
   hs_bindgen_1d7b9f91212450ba_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mouse_Unsafe_SDL_CursorVisible@
 hs_bindgen_1d7b9f91212450ba :: IO BG.CBool
 hs_bindgen_1d7b9f91212450ba =
-  BG.fromFFIType hs_bindgen_1d7b9f91212450ba_base
+  fmap BG.fromFFIType hs_bindgen_1d7b9f91212450ba_base
 
 -- | Return whether the cursor is currently being shown.
 --
diff --git a/src/SDL3/Sys/Bindgen/Mutex.hs b/src/SDL3/Sys/Bindgen/Mutex.hs
--- a/src/SDL3/Sys/Bindgen/Mutex.hs
+++ b/src/SDL3/Sys/Bindgen/Mutex.hs
@@ -17,6 +17,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 module SDL3.Sys.Bindgen.Mutex (
   SDL3.Sys.Bindgen.Mutex.SDL_Mutex,
@@ -32,9 +33,12 @@
 )
 where
 
+import Prelude (Eq, Int, Ord, Read, Show, pure, (<*>), (>>), type (~))
+
 import HsBindgen.Runtime.CEnum qualified as CEnum
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.Marshal qualified as Marshal
+import HsBindgen.Runtime.Struct qualified as Struct
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField
 import SDL3.Sys.Bindgen.Atomic qualified
@@ -293,6 +297,9 @@
 
 deriving via Marshal.EquivStorable SDL_InitState instance BG.Storable SDL_InitState
 
+deriving via Struct.IsStructViaReadRaw SDL_InitState instance Struct.IsStruct SDL_InitState
+
+-- | [C declaration]: @status@, defined at @SDL3\/SDL_mutex.h 1041:19@
 instance
   (ty ~ SDL3.Sys.Bindgen.Atomic.SDL_AtomicInt)
   => BG.CompatHasField.HasField "status" SDL_InitState ty
@@ -321,6 +328,7 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | [C declaration]: @thread@, defined at @SDL3\/SDL_mutex.h 1042:18@
 instance
   (ty ~ SDL3.Sys.Bindgen.Thread.SDL_ThreadID)
   => BG.CompatHasField.HasField "thread" SDL_InitState ty
@@ -349,6 +357,7 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | [C declaration]: @reserved@, defined at @SDL3\/SDL_mutex.h 1043:11@
 instance
   (ty ~ BG.Ptr BG.Void)
   => BG.CompatHasField.HasField "reserved" SDL_InitState ty
diff --git a/src/SDL3/Sys/Bindgen/Mutex/FunPtr.hs b/src/SDL3/Sys/Bindgen/Mutex/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Mutex/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Mutex/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Mutex.FunPtr (
@@ -34,6 +36,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Mutex
@@ -41,7 +45,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_mutex.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_mutex.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_get_SDL_CreateMutex */"
          , "__attribute__ ((const))"
          , "SDL_Mutex *(*hs_bindgen_95a099535000d13d (void)) (void)"
@@ -277,7 +285,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_get_SDL_CreateMutex@
 hs_bindgen_95a099535000d13d :: IO (BG.FunPtr (IO (BG.Ptr SDL_Mutex)))
 hs_bindgen_95a099535000d13d =
-  BG.fromFFIType hs_bindgen_95a099535000d13d_base
+  fmap BG.fromFFIType hs_bindgen_95a099535000d13d_base
 
 {-# NOINLINE sDL_CreateMutex #-}
 
@@ -310,7 +318,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_get_SDL_LockMutex@
 hs_bindgen_df61bce804eff3b2 :: IO (BG.FunPtr (BG.Ptr SDL_Mutex -> IO ()))
 hs_bindgen_df61bce804eff3b2 =
-  BG.fromFFIType hs_bindgen_df61bce804eff3b2_base
+  fmap BG.fromFFIType hs_bindgen_df61bce804eff3b2_base
 
 {-# NOINLINE sDL_LockMutex #-}
 
@@ -343,7 +351,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_get_SDL_TryLockMutex@
 hs_bindgen_45c6ae563e57d83e :: IO (BG.FunPtr (BG.Ptr SDL_Mutex -> IO BG.CBool))
 hs_bindgen_45c6ae563e57d83e =
-  BG.fromFFIType hs_bindgen_45c6ae563e57d83e_base
+  fmap BG.fromFFIType hs_bindgen_45c6ae563e57d83e_base
 
 {-# NOINLINE sDL_TryLockMutex #-}
 
@@ -378,7 +386,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_get_SDL_UnlockMutex@
 hs_bindgen_279301ff47dc6a1f :: IO (BG.FunPtr (BG.Ptr SDL_Mutex -> IO ()))
 hs_bindgen_279301ff47dc6a1f =
-  BG.fromFFIType hs_bindgen_279301ff47dc6a1f_base
+  fmap BG.fromFFIType hs_bindgen_279301ff47dc6a1f_base
 
 {-# NOINLINE sDL_UnlockMutex #-}
 
@@ -409,7 +417,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_get_SDL_DestroyMutex@
 hs_bindgen_41ed6e14b48302a3 :: IO (BG.FunPtr (BG.Ptr SDL_Mutex -> IO ()))
 hs_bindgen_41ed6e14b48302a3 =
-  BG.fromFFIType hs_bindgen_41ed6e14b48302a3_base
+  fmap BG.fromFFIType hs_bindgen_41ed6e14b48302a3_base
 
 {-# NOINLINE sDL_DestroyMutex #-}
 
@@ -438,7 +446,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_get_SDL_CreateRWLock@
 hs_bindgen_3eb0c1367593e404 :: IO (BG.FunPtr (IO (BG.Ptr SDL_RWLock)))
 hs_bindgen_3eb0c1367593e404 =
-  BG.fromFFIType hs_bindgen_3eb0c1367593e404_base
+  fmap BG.fromFFIType hs_bindgen_3eb0c1367593e404_base
 
 {-# NOINLINE sDL_CreateRWLock #-}
 
@@ -475,7 +483,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_get_SDL_LockRWLockForReading@
 hs_bindgen_1d6189a38a9e5f28 :: IO (BG.FunPtr (BG.Ptr SDL_RWLock -> IO ()))
 hs_bindgen_1d6189a38a9e5f28 =
-  BG.fromFFIType hs_bindgen_1d6189a38a9e5f28_base
+  fmap BG.fromFFIType hs_bindgen_1d6189a38a9e5f28_base
 
 {-# NOINLINE sDL_LockRWLockForReading #-}
 
@@ -512,7 +520,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_get_SDL_LockRWLockForWriting@
 hs_bindgen_badbac25bb2ac3e5 :: IO (BG.FunPtr (BG.Ptr SDL_RWLock -> IO ()))
 hs_bindgen_badbac25bb2ac3e5 =
-  BG.fromFFIType hs_bindgen_badbac25bb2ac3e5_base
+  fmap BG.fromFFIType hs_bindgen_badbac25bb2ac3e5_base
 
 {-# NOINLINE sDL_LockRWLockForWriting #-}
 
@@ -547,7 +555,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_get_SDL_TryLockRWLockForReading@
 hs_bindgen_1e5ea8850474c50f :: IO (BG.FunPtr (BG.Ptr SDL_RWLock -> IO BG.CBool))
 hs_bindgen_1e5ea8850474c50f =
-  BG.fromFFIType hs_bindgen_1e5ea8850474c50f_base
+  fmap BG.fromFFIType hs_bindgen_1e5ea8850474c50f_base
 
 {-# NOINLINE sDL_TryLockRWLockForReading #-}
 
@@ -584,7 +592,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_get_SDL_TryLockRWLockForWriting@
 hs_bindgen_a11f0d78039b31a7 :: IO (BG.FunPtr (BG.Ptr SDL_RWLock -> IO BG.CBool))
 hs_bindgen_a11f0d78039b31a7 =
-  BG.fromFFIType hs_bindgen_a11f0d78039b31a7_base
+  fmap BG.fromFFIType hs_bindgen_a11f0d78039b31a7_base
 
 {-# NOINLINE sDL_TryLockRWLockForWriting #-}
 
@@ -623,7 +631,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_get_SDL_UnlockRWLock@
 hs_bindgen_769c3da328a63de5 :: IO (BG.FunPtr (BG.Ptr SDL_RWLock -> IO ()))
 hs_bindgen_769c3da328a63de5 =
-  BG.fromFFIType hs_bindgen_769c3da328a63de5_base
+  fmap BG.fromFFIType hs_bindgen_769c3da328a63de5_base
 
 {-# NOINLINE sDL_UnlockRWLock #-}
 
@@ -656,7 +664,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_get_SDL_DestroyRWLock@
 hs_bindgen_7a7492595f34e502 :: IO (BG.FunPtr (BG.Ptr SDL_RWLock -> IO ()))
 hs_bindgen_7a7492595f34e502 =
-  BG.fromFFIType hs_bindgen_7a7492595f34e502_base
+  fmap BG.fromFFIType hs_bindgen_7a7492595f34e502_base
 
 {-# NOINLINE sDL_DestroyRWLock #-}
 
@@ -686,7 +694,7 @@
 hs_bindgen_22509b0bb44ec2c1
   :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO (BG.Ptr SDL_Semaphore)))
 hs_bindgen_22509b0bb44ec2c1 =
-  BG.fromFFIType hs_bindgen_22509b0bb44ec2c1_base
+  fmap BG.fromFFIType hs_bindgen_22509b0bb44ec2c1_base
 
 {-# NOINLINE sDL_CreateSemaphore #-}
 
@@ -717,7 +725,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_get_SDL_DestroySemaphore@
 hs_bindgen_1f077a5303df061a :: IO (BG.FunPtr (BG.Ptr SDL_Semaphore -> IO ()))
 hs_bindgen_1f077a5303df061a =
-  BG.fromFFIType hs_bindgen_1f077a5303df061a_base
+  fmap BG.fromFFIType hs_bindgen_1f077a5303df061a_base
 
 {-# NOINLINE sDL_DestroySemaphore #-}
 
@@ -746,7 +754,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_get_SDL_WaitSemaphore@
 hs_bindgen_91a2349e7496eeae :: IO (BG.FunPtr (BG.Ptr SDL_Semaphore -> IO ()))
 hs_bindgen_91a2349e7496eeae =
-  BG.fromFFIType hs_bindgen_91a2349e7496eeae_base
+  fmap BG.fromFFIType hs_bindgen_91a2349e7496eeae_base
 
 {-# NOINLINE sDL_WaitSemaphore #-}
 
@@ -777,7 +785,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_get_SDL_TryWaitSemaphore@
 hs_bindgen_81872972bd3486d3 :: IO (BG.FunPtr (BG.Ptr SDL_Semaphore -> IO BG.CBool))
 hs_bindgen_81872972bd3486d3 =
-  BG.fromFFIType hs_bindgen_81872972bd3486d3_base
+  fmap BG.fromFFIType hs_bindgen_81872972bd3486d3_base
 
 {-# NOINLINE sDL_TryWaitSemaphore #-}
 
@@ -809,7 +817,7 @@
 hs_bindgen_0a26128dc146ea69
   :: IO (BG.FunPtr (BG.Ptr SDL_Semaphore -> SDL3.Sys.Bindgen.Stdinc.Sint32 -> IO BG.CBool))
 hs_bindgen_0a26128dc146ea69 =
-  BG.fromFFIType hs_bindgen_0a26128dc146ea69_base
+  fmap BG.fromFFIType hs_bindgen_0a26128dc146ea69_base
 
 {-# NOINLINE sDL_WaitSemaphoreTimeout #-}
 
@@ -843,7 +851,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_get_SDL_SignalSemaphore@
 hs_bindgen_9af09ce180d458b9 :: IO (BG.FunPtr (BG.Ptr SDL_Semaphore -> IO ()))
 hs_bindgen_9af09ce180d458b9 =
-  BG.fromFFIType hs_bindgen_9af09ce180d458b9_base
+  fmap BG.fromFFIType hs_bindgen_9af09ce180d458b9_base
 
 {-# NOINLINE sDL_SignalSemaphore #-}
 
@@ -871,7 +879,7 @@
 hs_bindgen_5ee888052e9adc81
   :: IO (BG.FunPtr (BG.Ptr SDL_Semaphore -> IO SDL3.Sys.Bindgen.Stdinc.Uint32))
 hs_bindgen_5ee888052e9adc81 =
-  BG.fromFFIType hs_bindgen_5ee888052e9adc81_base
+  fmap BG.fromFFIType hs_bindgen_5ee888052e9adc81_base
 
 {-# NOINLINE sDL_GetSemaphoreValue #-}
 
@@ -898,7 +906,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_get_SDL_CreateCondition@
 hs_bindgen_07cf0a76ca2c83d0 :: IO (BG.FunPtr (IO (BG.Ptr SDL_Condition)))
 hs_bindgen_07cf0a76ca2c83d0 =
-  BG.fromFFIType hs_bindgen_07cf0a76ca2c83d0_base
+  fmap BG.fromFFIType hs_bindgen_07cf0a76ca2c83d0_base
 
 {-# NOINLINE sDL_CreateCondition #-}
 
@@ -925,7 +933,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_get_SDL_DestroyCondition@
 hs_bindgen_99bba06553492457 :: IO (BG.FunPtr (BG.Ptr SDL_Condition -> IO ()))
 hs_bindgen_99bba06553492457 =
-  BG.fromFFIType hs_bindgen_99bba06553492457_base
+  fmap BG.fromFFIType hs_bindgen_99bba06553492457_base
 
 {-# NOINLINE sDL_DestroyCondition #-}
 
@@ -952,7 +960,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_get_SDL_SignalCondition@
 hs_bindgen_a9b4bfe1c85d2caa :: IO (BG.FunPtr (BG.Ptr SDL_Condition -> IO ()))
 hs_bindgen_a9b4bfe1c85d2caa =
-  BG.fromFFIType hs_bindgen_a9b4bfe1c85d2caa_base
+  fmap BG.fromFFIType hs_bindgen_a9b4bfe1c85d2caa_base
 
 {-# NOINLINE sDL_SignalCondition #-}
 
@@ -979,7 +987,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_get_SDL_BroadcastCondition@
 hs_bindgen_26d1393d70aa1e21 :: IO (BG.FunPtr (BG.Ptr SDL_Condition -> IO ()))
 hs_bindgen_26d1393d70aa1e21 =
-  BG.fromFFIType hs_bindgen_26d1393d70aa1e21_base
+  fmap BG.fromFFIType hs_bindgen_26d1393d70aa1e21_base
 
 {-# NOINLINE sDL_BroadcastCondition #-}
 
@@ -1006,7 +1014,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_get_SDL_WaitCondition@
 hs_bindgen_5c1581c6a748ae80 :: IO (BG.FunPtr (BG.Ptr SDL_Condition -> BG.Ptr SDL_Mutex -> IO ()))
 hs_bindgen_5c1581c6a748ae80 =
-  BG.fromFFIType hs_bindgen_5c1581c6a748ae80_base
+  fmap BG.fromFFIType hs_bindgen_5c1581c6a748ae80_base
 
 {-# NOINLINE sDL_WaitCondition #-}
 
@@ -1045,7 +1053,7 @@
            (BG.Ptr SDL_Condition -> BG.Ptr SDL_Mutex -> SDL3.Sys.Bindgen.Stdinc.Sint32 -> IO BG.CBool)
        )
 hs_bindgen_0498ed88d8c2daca =
-  BG.fromFFIType hs_bindgen_0498ed88d8c2daca_base
+  fmap BG.fromFFIType hs_bindgen_0498ed88d8c2daca_base
 
 {-# NOINLINE sDL_WaitConditionTimeout #-}
 
@@ -1084,7 +1092,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_get_SDL_ShouldInit@
 hs_bindgen_4da27525ce560809 :: IO (BG.FunPtr (BG.Ptr SDL_InitState -> IO BG.CBool))
 hs_bindgen_4da27525ce560809 =
-  BG.fromFFIType hs_bindgen_4da27525ce560809_base
+  fmap BG.fromFFIType hs_bindgen_4da27525ce560809_base
 
 {-# NOINLINE sDL_ShouldInit #-}
 
@@ -1117,7 +1125,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_get_SDL_ShouldQuit@
 hs_bindgen_6877992dc5bc2120 :: IO (BG.FunPtr (BG.Ptr SDL_InitState -> IO BG.CBool))
 hs_bindgen_6877992dc5bc2120 =
-  BG.fromFFIType hs_bindgen_6877992dc5bc2120_base
+  fmap BG.fromFFIType hs_bindgen_6877992dc5bc2120_base
 
 {-# NOINLINE sDL_ShouldQuit #-}
 
@@ -1150,7 +1158,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_get_SDL_SetInitialized@
 hs_bindgen_d08e1c271251d0d2 :: IO (BG.FunPtr (BG.Ptr SDL_InitState -> BG.CBool -> IO ()))
 hs_bindgen_d08e1c271251d0d2 =
-  BG.fromFFIType hs_bindgen_d08e1c271251d0d2_base
+  fmap BG.fromFFIType hs_bindgen_d08e1c271251d0d2_base
 
 {-# NOINLINE sDL_SetInitialized #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Mutex/Safe.hs b/src/SDL3/Sys/Bindgen/Mutex/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Mutex/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Mutex/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Mutex.Safe (
@@ -34,6 +36,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Mutex
@@ -41,7 +46,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_mutex.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_mutex.h>"
          , "SDL_Mutex *hs_bindgen_8e29ae5aabbda111 (void)"
          , "{"
          , "  return (SDL_CreateMutex)();"
@@ -221,7 +230,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_Safe_SDL_CreateMutex@
 hs_bindgen_8e29ae5aabbda111 :: IO (BG.Ptr SDL_Mutex)
 hs_bindgen_8e29ae5aabbda111 =
-  BG.fromFFIType hs_bindgen_8e29ae5aabbda111_base
+  fmap BG.fromFFIType hs_bindgen_8e29ae5aabbda111_base
 
 -- | Create a new mutex.
 --
@@ -254,7 +263,8 @@
   :: BG.Ptr SDL_Mutex
   -> IO ()
 hs_bindgen_ee717c25894777dd =
-  BG.fromFFIType hs_bindgen_ee717c25894777dd_base
+  \x0 ->
+    hs_bindgen_ee717c25894777dd_base (BG.toFFIType x0)
 
 -- | Lock the mutex.
 --
@@ -283,14 +293,15 @@
 foreign import ccall safe "hs_bindgen_08c66a65371e794c"
   hs_bindgen_08c66a65371e794c_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_Safe_SDL_TryLockMutex@
 hs_bindgen_08c66a65371e794c
   :: BG.Ptr SDL_Mutex
   -> IO BG.CBool
 hs_bindgen_08c66a65371e794c =
-  BG.fromFFIType hs_bindgen_08c66a65371e794c_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_08c66a65371e794c_base (BG.toFFIType x0))
 
 -- | Try to lock a mutex without blocking.
 --
@@ -328,7 +339,8 @@
   :: BG.Ptr SDL_Mutex
   -> IO ()
 hs_bindgen_0080eb2473efd4c0 =
-  BG.fromFFIType hs_bindgen_0080eb2473efd4c0_base
+  \x0 ->
+    hs_bindgen_0080eb2473efd4c0_base (BG.toFFIType x0)
 
 -- | Unlock the mutex.
 --
@@ -362,7 +374,8 @@
   :: BG.Ptr SDL_Mutex
   -> IO ()
 hs_bindgen_0848f2dbc2ab9299 =
-  BG.fromFFIType hs_bindgen_0848f2dbc2ab9299_base
+  \x0 ->
+    hs_bindgen_0848f2dbc2ab9299_base (BG.toFFIType x0)
 
 -- | Destroy a mutex created with @SDL_CreateMutex()@.
 --
@@ -391,7 +404,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_Safe_SDL_CreateRWLock@
 hs_bindgen_305069c9512cb61a :: IO (BG.Ptr SDL_RWLock)
 hs_bindgen_305069c9512cb61a =
-  BG.fromFFIType hs_bindgen_305069c9512cb61a_base
+  fmap BG.fromFFIType hs_bindgen_305069c9512cb61a_base
 
 -- | Create a new read\/write lock.
 --
@@ -428,7 +441,8 @@
   :: BG.Ptr SDL_RWLock
   -> IO ()
 hs_bindgen_88156cb9c069d7ae =
-  BG.fromFFIType hs_bindgen_88156cb9c069d7ae_base
+  \x0 ->
+    hs_bindgen_88156cb9c069d7ae_base (BG.toFFIType x0)
 
 -- | Lock the read\/write lock for /read only/ operations.
 --
@@ -469,7 +483,8 @@
   :: BG.Ptr SDL_RWLock
   -> IO ()
 hs_bindgen_65b1a554927b8f99 =
-  BG.fromFFIType hs_bindgen_65b1a554927b8f99_base
+  \x0 ->
+    hs_bindgen_65b1a554927b8f99_base (BG.toFFIType x0)
 
 -- | Lock the read\/write lock for /write/ operations.
 --
@@ -501,14 +516,15 @@
 foreign import ccall safe "hs_bindgen_287956a25f4fabba"
   hs_bindgen_287956a25f4fabba_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_Safe_SDL_TryLockRWLockForReading@
 hs_bindgen_287956a25f4fabba
   :: BG.Ptr SDL_RWLock
   -> IO BG.CBool
 hs_bindgen_287956a25f4fabba =
-  BG.fromFFIType hs_bindgen_287956a25f4fabba_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_287956a25f4fabba_base (BG.toFFIType x0))
 
 -- | Try to lock a read\/write lock /for reading/ without blocking.
 --
@@ -542,14 +558,15 @@
 foreign import ccall safe "hs_bindgen_99a3ed9a28ed75f7"
   hs_bindgen_99a3ed9a28ed75f7_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_Safe_SDL_TryLockRWLockForWriting@
 hs_bindgen_99a3ed9a28ed75f7
   :: BG.Ptr SDL_RWLock
   -> IO BG.CBool
 hs_bindgen_99a3ed9a28ed75f7 =
-  BG.fromFFIType hs_bindgen_99a3ed9a28ed75f7_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_99a3ed9a28ed75f7_base (BG.toFFIType x0))
 
 -- | Try to lock a read\/write lock /for writing/ without blocking.
 --
@@ -592,7 +609,8 @@
   :: BG.Ptr SDL_RWLock
   -> IO ()
 hs_bindgen_c9284c30c938f332 =
-  BG.fromFFIType hs_bindgen_c9284c30c938f332_base
+  \x0 ->
+    hs_bindgen_c9284c30c938f332_base (BG.toFFIType x0)
 
 -- | Unlock the read\/write lock.
 --
@@ -628,7 +646,8 @@
   :: BG.Ptr SDL_RWLock
   -> IO ()
 hs_bindgen_743dbdcc7c185970 =
-  BG.fromFFIType hs_bindgen_743dbdcc7c185970_base
+  \x0 ->
+    hs_bindgen_743dbdcc7c185970_base (BG.toFFIType x0)
 
 -- | Destroy a read\/write lock created with @SDL_CreateRWLock()@.
 --
@@ -652,7 +671,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_Safe_SDL_CreateSemaphore@
 foreign import ccall safe "hs_bindgen_d1200eed8ae4acf8"
   hs_bindgen_d1200eed8ae4acf8_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_Safe_SDL_CreateSemaphore@
@@ -660,7 +679,8 @@
   :: SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO (BG.Ptr SDL_Semaphore)
 hs_bindgen_d1200eed8ae4acf8 =
-  BG.fromFFIType hs_bindgen_d1200eed8ae4acf8_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d1200eed8ae4acf8_base (BG.toFFIType x0))
 
 -- | Create a semaphore.
 --
@@ -694,7 +714,8 @@
   :: BG.Ptr SDL_Semaphore
   -> IO ()
 hs_bindgen_d167c0d86f5bfae4 =
-  BG.fromFFIType hs_bindgen_d167c0d86f5bfae4_base
+  \x0 ->
+    hs_bindgen_d167c0d86f5bfae4_base (BG.toFFIType x0)
 
 -- | Destroy a semaphore.
 --
@@ -726,7 +747,8 @@
   :: BG.Ptr SDL_Semaphore
   -> IO ()
 hs_bindgen_0c536dc844c53556 =
-  BG.fromFFIType hs_bindgen_0c536dc844c53556_base
+  \x0 ->
+    hs_bindgen_0c536dc844c53556_base (BG.toFFIType x0)
 
 -- | Wait until a semaphore has a positive value and then decrements it.
 --
@@ -753,14 +775,15 @@
 foreign import ccall safe "hs_bindgen_8460788ee6bb642a"
   hs_bindgen_8460788ee6bb642a_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_Safe_SDL_TryWaitSemaphore@
 hs_bindgen_8460788ee6bb642a
   :: BG.Ptr SDL_Semaphore
   -> IO BG.CBool
 hs_bindgen_8460788ee6bb642a =
-  BG.fromFFIType hs_bindgen_8460788ee6bb642a_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_8460788ee6bb642a_base (BG.toFFIType x0))
 
 -- | See if a semaphore has a positive value and decrement it if it does.
 --
@@ -787,8 +810,8 @@
 foreign import ccall safe "hs_bindgen_73158966e18c69df"
   hs_bindgen_73158966e18c69df_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Int32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_Safe_SDL_WaitSemaphoreTimeout@
 hs_bindgen_73158966e18c69df
@@ -796,7 +819,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Sint32
   -> IO BG.CBool
 hs_bindgen_73158966e18c69df =
-  BG.fromFFIType hs_bindgen_73158966e18c69df_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_73158966e18c69df_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Wait until a semaphore has a positive value and then decrements it.
 --
@@ -835,7 +860,8 @@
   :: BG.Ptr SDL_Semaphore
   -> IO ()
 hs_bindgen_ad3ea5b998b9b02a =
-  BG.fromFFIType hs_bindgen_ad3ea5b998b9b02a_base
+  \x0 ->
+    hs_bindgen_ad3ea5b998b9b02a_base (BG.toFFIType x0)
 
 -- | Atomically increment a semaphore\'s value and wake waiting threads.
 --
@@ -858,14 +884,15 @@
 foreign import ccall safe "hs_bindgen_d7d8abceae459dc4"
   hs_bindgen_d7d8abceae459dc4_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_Safe_SDL_GetSemaphoreValue@
 hs_bindgen_d7d8abceae459dc4
   :: BG.Ptr SDL_Semaphore
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
 hs_bindgen_d7d8abceae459dc4 =
-  BG.fromFFIType hs_bindgen_d7d8abceae459dc4_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d7d8abceae459dc4_base (BG.toFFIType x0))
 
 -- | Get the current value of a semaphore.
 --
@@ -892,7 +919,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_Safe_SDL_CreateCondition@
 hs_bindgen_f051c9d83065c51e :: IO (BG.Ptr SDL_Condition)
 hs_bindgen_f051c9d83065c51e =
-  BG.fromFFIType hs_bindgen_f051c9d83065c51e_base
+  fmap BG.fromFFIType hs_bindgen_f051c9d83065c51e_base
 
 -- | Create a condition variable.
 --
@@ -919,7 +946,8 @@
   :: BG.Ptr SDL_Condition
   -> IO ()
 hs_bindgen_284001adc7a8e944 =
-  BG.fromFFIType hs_bindgen_284001adc7a8e944_base
+  \x0 ->
+    hs_bindgen_284001adc7a8e944_base (BG.toFFIType x0)
 
 -- | Destroy a condition variable.
 --
@@ -949,7 +977,8 @@
   :: BG.Ptr SDL_Condition
   -> IO ()
 hs_bindgen_8e6408554c791aa2 =
-  BG.fromFFIType hs_bindgen_8e6408554c791aa2_base
+  \x0 ->
+    hs_bindgen_8e6408554c791aa2_base (BG.toFFIType x0)
 
 -- | Restart one of the threads that are waiting on the condition variable.
 --
@@ -979,7 +1008,8 @@
   :: BG.Ptr SDL_Condition
   -> IO ()
 hs_bindgen_1377f08bc73a7c85 =
-  BG.fromFFIType hs_bindgen_1377f08bc73a7c85_base
+  \x0 ->
+    hs_bindgen_1377f08bc73a7c85_base (BG.toFFIType x0)
 
 -- | Restart all threads that are waiting on the condition variable.
 --
@@ -1011,7 +1041,9 @@
   -> BG.Ptr SDL_Mutex
   -> IO ()
 hs_bindgen_2c9c00769b6253d6 =
-  BG.fromFFIType hs_bindgen_2c9c00769b6253d6_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_2c9c00769b6253d6_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Wait until a condition variable is signaled.
 --
@@ -1045,8 +1077,8 @@
   hs_bindgen_158c5dc74b7f6a6d_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Int32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_Safe_SDL_WaitConditionTimeout@
 hs_bindgen_158c5dc74b7f6a6d
@@ -1055,7 +1087,12 @@
   -> SDL3.Sys.Bindgen.Stdinc.Sint32
   -> IO BG.CBool
 hs_bindgen_158c5dc74b7f6a6d =
-  BG.fromFFIType hs_bindgen_158c5dc74b7f6a6d_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_158c5dc74b7f6a6d_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Wait until a condition variable is signaled or a certain time has passed.
 --
@@ -1093,14 +1130,15 @@
 foreign import ccall safe "hs_bindgen_c32bbe3119c28451"
   hs_bindgen_c32bbe3119c28451_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_Safe_SDL_ShouldInit@
 hs_bindgen_c32bbe3119c28451
   :: BG.Ptr SDL_InitState
   -> IO BG.CBool
 hs_bindgen_c32bbe3119c28451 =
-  BG.fromFFIType hs_bindgen_c32bbe3119c28451_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c32bbe3119c28451_base (BG.toFFIType x0))
 
 -- | Return whether initialization should be done.
 --
@@ -1129,14 +1167,15 @@
 foreign import ccall safe "hs_bindgen_edbe1140979f28da"
   hs_bindgen_edbe1140979f28da_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_Safe_SDL_ShouldQuit@
 hs_bindgen_edbe1140979f28da
   :: BG.Ptr SDL_InitState
   -> IO BG.CBool
 hs_bindgen_edbe1140979f28da =
-  BG.fromFFIType hs_bindgen_edbe1140979f28da_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_edbe1140979f28da_base (BG.toFFIType x0))
 
 -- | Return whether cleanup should be done.
 --
@@ -1165,7 +1204,7 @@
 foreign import ccall safe "hs_bindgen_5708550ac643317a"
   hs_bindgen_5708550ac643317a_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
+    -> BG.CBool
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_Safe_SDL_SetInitialized@
@@ -1174,7 +1213,9 @@
   -> BG.CBool
   -> IO ()
 hs_bindgen_5708550ac643317a =
-  BG.fromFFIType hs_bindgen_5708550ac643317a_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_5708550ac643317a_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Finish an initialization state transition.
 --
diff --git a/src/SDL3/Sys/Bindgen/Mutex/Unsafe.hs b/src/SDL3/Sys/Bindgen/Mutex/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Mutex/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Mutex/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Mutex.Unsafe (
@@ -34,6 +36,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Mutex
@@ -41,7 +46,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_mutex.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_mutex.h>"
          , "SDL_Mutex *hs_bindgen_c526869dd474f9d4 (void)"
          , "{"
          , "  return (SDL_CreateMutex)();"
@@ -221,7 +230,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_Unsafe_SDL_CreateMutex@
 hs_bindgen_c526869dd474f9d4 :: IO (BG.Ptr SDL_Mutex)
 hs_bindgen_c526869dd474f9d4 =
-  BG.fromFFIType hs_bindgen_c526869dd474f9d4_base
+  fmap BG.fromFFIType hs_bindgen_c526869dd474f9d4_base
 
 -- | Create a new mutex.
 --
@@ -254,7 +263,8 @@
   :: BG.Ptr SDL_Mutex
   -> IO ()
 hs_bindgen_3700147c7f8f729d =
-  BG.fromFFIType hs_bindgen_3700147c7f8f729d_base
+  \x0 ->
+    hs_bindgen_3700147c7f8f729d_base (BG.toFFIType x0)
 
 -- | Lock the mutex.
 --
@@ -283,14 +293,15 @@
 foreign import ccall unsafe "hs_bindgen_46125d4a3eea4802"
   hs_bindgen_46125d4a3eea4802_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_Unsafe_SDL_TryLockMutex@
 hs_bindgen_46125d4a3eea4802
   :: BG.Ptr SDL_Mutex
   -> IO BG.CBool
 hs_bindgen_46125d4a3eea4802 =
-  BG.fromFFIType hs_bindgen_46125d4a3eea4802_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_46125d4a3eea4802_base (BG.toFFIType x0))
 
 -- | Try to lock a mutex without blocking.
 --
@@ -328,7 +339,8 @@
   :: BG.Ptr SDL_Mutex
   -> IO ()
 hs_bindgen_0947f4d603ee7345 =
-  BG.fromFFIType hs_bindgen_0947f4d603ee7345_base
+  \x0 ->
+    hs_bindgen_0947f4d603ee7345_base (BG.toFFIType x0)
 
 -- | Unlock the mutex.
 --
@@ -362,7 +374,8 @@
   :: BG.Ptr SDL_Mutex
   -> IO ()
 hs_bindgen_f4951f4ff69bde3a =
-  BG.fromFFIType hs_bindgen_f4951f4ff69bde3a_base
+  \x0 ->
+    hs_bindgen_f4951f4ff69bde3a_base (BG.toFFIType x0)
 
 -- | Destroy a mutex created with @SDL_CreateMutex()@.
 --
@@ -391,7 +404,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_Unsafe_SDL_CreateRWLock@
 hs_bindgen_7a80d9026c567dd4 :: IO (BG.Ptr SDL_RWLock)
 hs_bindgen_7a80d9026c567dd4 =
-  BG.fromFFIType hs_bindgen_7a80d9026c567dd4_base
+  fmap BG.fromFFIType hs_bindgen_7a80d9026c567dd4_base
 
 -- | Create a new read\/write lock.
 --
@@ -428,7 +441,8 @@
   :: BG.Ptr SDL_RWLock
   -> IO ()
 hs_bindgen_6a42779577fc290d =
-  BG.fromFFIType hs_bindgen_6a42779577fc290d_base
+  \x0 ->
+    hs_bindgen_6a42779577fc290d_base (BG.toFFIType x0)
 
 -- | Lock the read\/write lock for /read only/ operations.
 --
@@ -469,7 +483,8 @@
   :: BG.Ptr SDL_RWLock
   -> IO ()
 hs_bindgen_df143e5de220a8d0 =
-  BG.fromFFIType hs_bindgen_df143e5de220a8d0_base
+  \x0 ->
+    hs_bindgen_df143e5de220a8d0_base (BG.toFFIType x0)
 
 -- | Lock the read\/write lock for /write/ operations.
 --
@@ -501,14 +516,15 @@
 foreign import ccall unsafe "hs_bindgen_fcc7e529a0e7c238"
   hs_bindgen_fcc7e529a0e7c238_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_Unsafe_SDL_TryLockRWLockForReading@
 hs_bindgen_fcc7e529a0e7c238
   :: BG.Ptr SDL_RWLock
   -> IO BG.CBool
 hs_bindgen_fcc7e529a0e7c238 =
-  BG.fromFFIType hs_bindgen_fcc7e529a0e7c238_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_fcc7e529a0e7c238_base (BG.toFFIType x0))
 
 -- | Try to lock a read\/write lock /for reading/ without blocking.
 --
@@ -542,14 +558,15 @@
 foreign import ccall unsafe "hs_bindgen_b8810b0a6bd09cc6"
   hs_bindgen_b8810b0a6bd09cc6_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_Unsafe_SDL_TryLockRWLockForWriting@
 hs_bindgen_b8810b0a6bd09cc6
   :: BG.Ptr SDL_RWLock
   -> IO BG.CBool
 hs_bindgen_b8810b0a6bd09cc6 =
-  BG.fromFFIType hs_bindgen_b8810b0a6bd09cc6_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_b8810b0a6bd09cc6_base (BG.toFFIType x0))
 
 -- | Try to lock a read\/write lock /for writing/ without blocking.
 --
@@ -592,7 +609,8 @@
   :: BG.Ptr SDL_RWLock
   -> IO ()
 hs_bindgen_3379d27c22a5ec46 =
-  BG.fromFFIType hs_bindgen_3379d27c22a5ec46_base
+  \x0 ->
+    hs_bindgen_3379d27c22a5ec46_base (BG.toFFIType x0)
 
 -- | Unlock the read\/write lock.
 --
@@ -628,7 +646,8 @@
   :: BG.Ptr SDL_RWLock
   -> IO ()
 hs_bindgen_c72e9a81eddb5a8a =
-  BG.fromFFIType hs_bindgen_c72e9a81eddb5a8a_base
+  \x0 ->
+    hs_bindgen_c72e9a81eddb5a8a_base (BG.toFFIType x0)
 
 -- | Destroy a read\/write lock created with @SDL_CreateRWLock()@.
 --
@@ -652,7 +671,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_Unsafe_SDL_CreateSemaphore@
 foreign import ccall unsafe "hs_bindgen_17068e34f72e4ea1"
   hs_bindgen_17068e34f72e4ea1_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_Unsafe_SDL_CreateSemaphore@
@@ -660,7 +679,8 @@
   :: SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO (BG.Ptr SDL_Semaphore)
 hs_bindgen_17068e34f72e4ea1 =
-  BG.fromFFIType hs_bindgen_17068e34f72e4ea1_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_17068e34f72e4ea1_base (BG.toFFIType x0))
 
 -- | Create a semaphore.
 --
@@ -694,7 +714,8 @@
   :: BG.Ptr SDL_Semaphore
   -> IO ()
 hs_bindgen_b5060ff95a24fd36 =
-  BG.fromFFIType hs_bindgen_b5060ff95a24fd36_base
+  \x0 ->
+    hs_bindgen_b5060ff95a24fd36_base (BG.toFFIType x0)
 
 -- | Destroy a semaphore.
 --
@@ -726,7 +747,8 @@
   :: BG.Ptr SDL_Semaphore
   -> IO ()
 hs_bindgen_28840d65574eb2f8 =
-  BG.fromFFIType hs_bindgen_28840d65574eb2f8_base
+  \x0 ->
+    hs_bindgen_28840d65574eb2f8_base (BG.toFFIType x0)
 
 -- | Wait until a semaphore has a positive value and then decrements it.
 --
@@ -753,14 +775,15 @@
 foreign import ccall unsafe "hs_bindgen_3fa09279680cdc12"
   hs_bindgen_3fa09279680cdc12_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_Unsafe_SDL_TryWaitSemaphore@
 hs_bindgen_3fa09279680cdc12
   :: BG.Ptr SDL_Semaphore
   -> IO BG.CBool
 hs_bindgen_3fa09279680cdc12 =
-  BG.fromFFIType hs_bindgen_3fa09279680cdc12_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3fa09279680cdc12_base (BG.toFFIType x0))
 
 -- | See if a semaphore has a positive value and decrement it if it does.
 --
@@ -787,8 +810,8 @@
 foreign import ccall unsafe "hs_bindgen_c5019385fbe72f83"
   hs_bindgen_c5019385fbe72f83_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Int32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_Unsafe_SDL_WaitSemaphoreTimeout@
 hs_bindgen_c5019385fbe72f83
@@ -796,7 +819,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Sint32
   -> IO BG.CBool
 hs_bindgen_c5019385fbe72f83 =
-  BG.fromFFIType hs_bindgen_c5019385fbe72f83_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_c5019385fbe72f83_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Wait until a semaphore has a positive value and then decrements it.
 --
@@ -835,7 +860,8 @@
   :: BG.Ptr SDL_Semaphore
   -> IO ()
 hs_bindgen_03c7b146c352e907 =
-  BG.fromFFIType hs_bindgen_03c7b146c352e907_base
+  \x0 ->
+    hs_bindgen_03c7b146c352e907_base (BG.toFFIType x0)
 
 -- | Atomically increment a semaphore\'s value and wake waiting threads.
 --
@@ -858,14 +884,15 @@
 foreign import ccall unsafe "hs_bindgen_94229d10afd1d48d"
   hs_bindgen_94229d10afd1d48d_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_Unsafe_SDL_GetSemaphoreValue@
 hs_bindgen_94229d10afd1d48d
   :: BG.Ptr SDL_Semaphore
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
 hs_bindgen_94229d10afd1d48d =
-  BG.fromFFIType hs_bindgen_94229d10afd1d48d_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_94229d10afd1d48d_base (BG.toFFIType x0))
 
 -- | Get the current value of a semaphore.
 --
@@ -892,7 +919,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_Unsafe_SDL_CreateCondition@
 hs_bindgen_ddf6e8ed9edaee07 :: IO (BG.Ptr SDL_Condition)
 hs_bindgen_ddf6e8ed9edaee07 =
-  BG.fromFFIType hs_bindgen_ddf6e8ed9edaee07_base
+  fmap BG.fromFFIType hs_bindgen_ddf6e8ed9edaee07_base
 
 -- | Create a condition variable.
 --
@@ -919,7 +946,8 @@
   :: BG.Ptr SDL_Condition
   -> IO ()
 hs_bindgen_6951d0b3aefa0348 =
-  BG.fromFFIType hs_bindgen_6951d0b3aefa0348_base
+  \x0 ->
+    hs_bindgen_6951d0b3aefa0348_base (BG.toFFIType x0)
 
 -- | Destroy a condition variable.
 --
@@ -949,7 +977,8 @@
   :: BG.Ptr SDL_Condition
   -> IO ()
 hs_bindgen_0e1403265e307285 =
-  BG.fromFFIType hs_bindgen_0e1403265e307285_base
+  \x0 ->
+    hs_bindgen_0e1403265e307285_base (BG.toFFIType x0)
 
 -- | Restart one of the threads that are waiting on the condition variable.
 --
@@ -979,7 +1008,8 @@
   :: BG.Ptr SDL_Condition
   -> IO ()
 hs_bindgen_5a23b56ab9c6eb57 =
-  BG.fromFFIType hs_bindgen_5a23b56ab9c6eb57_base
+  \x0 ->
+    hs_bindgen_5a23b56ab9c6eb57_base (BG.toFFIType x0)
 
 -- | Restart all threads that are waiting on the condition variable.
 --
@@ -1011,7 +1041,9 @@
   -> BG.Ptr SDL_Mutex
   -> IO ()
 hs_bindgen_eb793a971cc6840d =
-  BG.fromFFIType hs_bindgen_eb793a971cc6840d_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_eb793a971cc6840d_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Wait until a condition variable is signaled.
 --
@@ -1045,8 +1077,8 @@
   hs_bindgen_77c7f6d44aa07f68_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Int32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_Unsafe_SDL_WaitConditionTimeout@
 hs_bindgen_77c7f6d44aa07f68
@@ -1055,7 +1087,12 @@
   -> SDL3.Sys.Bindgen.Stdinc.Sint32
   -> IO BG.CBool
 hs_bindgen_77c7f6d44aa07f68 =
-  BG.fromFFIType hs_bindgen_77c7f6d44aa07f68_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_77c7f6d44aa07f68_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Wait until a condition variable is signaled or a certain time has passed.
 --
@@ -1093,14 +1130,15 @@
 foreign import ccall unsafe "hs_bindgen_75dd9a6c786ad592"
   hs_bindgen_75dd9a6c786ad592_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_Unsafe_SDL_ShouldInit@
 hs_bindgen_75dd9a6c786ad592
   :: BG.Ptr SDL_InitState
   -> IO BG.CBool
 hs_bindgen_75dd9a6c786ad592 =
-  BG.fromFFIType hs_bindgen_75dd9a6c786ad592_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_75dd9a6c786ad592_base (BG.toFFIType x0))
 
 -- | Return whether initialization should be done.
 --
@@ -1129,14 +1167,15 @@
 foreign import ccall unsafe "hs_bindgen_8bafd17a9cf1a409"
   hs_bindgen_8bafd17a9cf1a409_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_Unsafe_SDL_ShouldQuit@
 hs_bindgen_8bafd17a9cf1a409
   :: BG.Ptr SDL_InitState
   -> IO BG.CBool
 hs_bindgen_8bafd17a9cf1a409 =
-  BG.fromFFIType hs_bindgen_8bafd17a9cf1a409_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_8bafd17a9cf1a409_base (BG.toFFIType x0))
 
 -- | Return whether cleanup should be done.
 --
@@ -1165,7 +1204,7 @@
 foreign import ccall unsafe "hs_bindgen_5586c698b54b7f33"
   hs_bindgen_5586c698b54b7f33_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
+    -> BG.CBool
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Mutex_Unsafe_SDL_SetInitialized@
@@ -1174,7 +1213,9 @@
   -> BG.CBool
   -> IO ()
 hs_bindgen_5586c698b54b7f33 =
-  BG.fromFFIType hs_bindgen_5586c698b54b7f33_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_5586c698b54b7f33_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Finish an initialization state transition.
 --
diff --git a/src/SDL3/Sys/Bindgen/Pen.hs b/src/SDL3/Sys/Bindgen/Pen.hs
--- a/src/SDL3/Sys/Bindgen/Pen.hs
+++ b/src/SDL3/Sys/Bindgen/Pen.hs
@@ -17,6 +17,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | SDL pen event handling.
 --
@@ -74,6 +75,8 @@
   pattern SDL3.Sys.Bindgen.Pen.SDL_PEN_DEVICE_TYPE_INDIRECT,
 )
 where
+
+import Prelude (Bounded, Enum, Eq, Int, Integral, Num, Ord, Read, Real, Show, pure, (<*>), type (~))
 
 import C.Expr.HostPlatform qualified
 import HsBindgen.Runtime.CEnum qualified as CEnum
diff --git a/src/SDL3/Sys/Bindgen/Pen/FunPtr.hs b/src/SDL3/Sys/Bindgen/Pen/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Pen/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Pen/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Pen.FunPtr (
@@ -7,13 +9,19 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Pen
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_pen.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_pen.h>"
          , "#include <SDL3/SDL_version.h>"
          , "#include <SDL3/SDL_error.h>"
          , "#include <SDL3/SDL_version.h>"
@@ -44,7 +52,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pen_get_SDL_GetPenDeviceType@
 hs_bindgen_bcd57304ca37ccf0 :: IO (BG.FunPtr (SDL_PenID -> IO SDL_PenDeviceType))
 hs_bindgen_bcd57304ca37ccf0 =
-  BG.fromFFIType hs_bindgen_bcd57304ca37ccf0_base
+  fmap BG.fromFFIType hs_bindgen_bcd57304ca37ccf0_base
 
 {-# NOINLINE sDL_GetPenDeviceType #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Pen/Safe.hs b/src/SDL3/Sys/Bindgen/Pen/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Pen/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Pen/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Pen.Safe (
@@ -7,13 +9,20 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Pen
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_pen.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_pen.h>"
          , "#include <SDL3/SDL_version.h>"
          , "#include <SDL3/SDL_error.h>"
          , "#include <SDL3/SDL_version.h>"
@@ -37,15 +46,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pen_Safe_SDL_GetPenDeviceType@
 foreign import ccall safe "hs_bindgen_051a74548d70e8b1"
   hs_bindgen_051a74548d70e8b1_base
-    :: BG.Word32
-    -> IO BG.Int32
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pen_Safe_SDL_GetPenDeviceType@
 hs_bindgen_051a74548d70e8b1
   :: SDL_PenID
   -> IO SDL_PenDeviceType
 hs_bindgen_051a74548d70e8b1 =
-  BG.fromFFIType hs_bindgen_051a74548d70e8b1_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_051a74548d70e8b1_base (BG.toFFIType x0))
 
 -- | Get the device type of the given pen.
 --
diff --git a/src/SDL3/Sys/Bindgen/Pen/Unsafe.hs b/src/SDL3/Sys/Bindgen/Pen/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Pen/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Pen/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Pen.Unsafe (
@@ -7,13 +9,20 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Pen
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_pen.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_pen.h>"
          , "#include <SDL3/SDL_version.h>"
          , "#include <SDL3/SDL_error.h>"
          , "#include <SDL3/SDL_version.h>"
@@ -37,15 +46,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pen_Unsafe_SDL_GetPenDeviceType@
 foreign import ccall unsafe "hs_bindgen_c3c39a594724cad9"
   hs_bindgen_c3c39a594724cad9_base
-    :: BG.Word32
-    -> IO BG.Int32
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pen_Unsafe_SDL_GetPenDeviceType@
 hs_bindgen_c3c39a594724cad9
   :: SDL_PenID
   -> IO SDL_PenDeviceType
 hs_bindgen_c3c39a594724cad9 =
-  BG.fromFFIType hs_bindgen_c3c39a594724cad9_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c3c39a594724cad9_base (BG.toFFIType x0))
 
 -- | Get the device type of the given pen.
 --
diff --git a/src/SDL3/Sys/Bindgen/Pixels.hs b/src/SDL3/Sys/Bindgen/Pixels.hs
--- a/src/SDL3/Sys/Bindgen/Pixels.hs
+++ b/src/SDL3/Sys/Bindgen/Pixels.hs
@@ -17,6 +17,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | SDL offers facilities for pixel management.
 --
@@ -270,11 +271,14 @@
 )
 where
 
+import Prelude (Eq, Int, Ord, Read, Show, pure, (<*>), (>>), type (~))
+
 import C.Expr.HostPlatform qualified
 import HsBindgen.Runtime.CEnum qualified as CEnum
 import HsBindgen.Runtime.ConstantArray qualified as CA
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.Marshal qualified as Marshal
+import HsBindgen.Runtime.Struct qualified as Struct
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField
 import SDL3.Sys.Bindgen.Stdinc qualified
@@ -2789,6 +2793,9 @@
 
 deriving via Marshal.EquivStorable SDL_Color instance BG.Storable SDL_Color
 
+deriving via Struct.IsStructViaReadRaw SDL_Color instance Struct.IsStruct SDL_Color
+
+-- | [C declaration]: @r@, defined at @SDL3\/SDL_pixels.h 1114:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "r" SDL_Color ty
@@ -2818,6 +2825,7 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | [C declaration]: @g@, defined at @SDL3\/SDL_pixels.h 1115:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "g" SDL_Color ty
@@ -2847,6 +2855,7 @@
 
   offset# = \_ -> \_ -> 1
 
+-- | [C declaration]: @b@, defined at @SDL3\/SDL_pixels.h 1116:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "b" SDL_Color ty
@@ -2876,6 +2885,7 @@
 
   offset# = \_ -> \_ -> 2
 
+-- | [C declaration]: @a@, defined at @SDL3\/SDL_pixels.h 1117:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "a" SDL_Color ty
@@ -2949,6 +2959,9 @@
 
 deriving via Marshal.EquivStorable SDL_FColor instance BG.Storable SDL_FColor
 
+deriving via Struct.IsStructViaReadRaw SDL_FColor instance Struct.IsStruct SDL_FColor
+
+-- | [C declaration]: @r@, defined at @SDL3\/SDL_pixels.h 1128:11@
 instance (ty ~ BG.CFloat) => BG.CompatHasField.HasField "r" SDL_FColor ty where
   hasField =
     \x0 ->
@@ -2973,6 +2986,7 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | [C declaration]: @g@, defined at @SDL3\/SDL_pixels.h 1129:11@
 instance (ty ~ BG.CFloat) => BG.CompatHasField.HasField "g" SDL_FColor ty where
   hasField =
     \x0 ->
@@ -2997,6 +3011,7 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | [C declaration]: @b@, defined at @SDL3\/SDL_pixels.h 1130:11@
 instance (ty ~ BG.CFloat) => BG.CompatHasField.HasField "b" SDL_FColor ty where
   hasField =
     \x0 ->
@@ -3021,6 +3036,7 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | [C declaration]: @a@, defined at @SDL3\/SDL_pixels.h 1131:11@
 instance (ty ~ BG.CFloat) => BG.CompatHasField.HasField "a" SDL_FColor ty where
   hasField =
     \x0 ->
@@ -3099,6 +3115,11 @@
 
 deriving via Marshal.EquivStorable SDL_Palette instance BG.Storable SDL_Palette
 
+deriving via Struct.IsStructViaReadRaw SDL_Palette instance Struct.IsStruct SDL_Palette
+
+-- | number of elements in @colors@.
+--
+--     [C declaration]: @ncolors@, defined at @SDL3\/SDL_pixels.h 1143:9@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "ncolors" SDL_Palette ty
@@ -3126,6 +3147,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | an array of colors, @ncolors@ long.
+--
+--     [C declaration]: @colors@, defined at @SDL3\/SDL_pixels.h 1144:16@
 instance
   (ty ~ BG.Ptr SDL_Color)
   => BG.CompatHasField.HasField "colors" SDL_Palette ty
@@ -3155,6 +3179,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | internal use only, do not touch.
+--
+--     [C declaration]: @version@, defined at @SDL3\/SDL_pixels.h 1145:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "version" SDL_Palette ty
@@ -3184,6 +3211,9 @@
 
   offset# = \_ -> \_ -> 16
 
+-- | internal use only, do not touch.
+--
+--     [C declaration]: @refcount@, defined at @SDL3\/SDL_pixels.h 1146:9@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "refcount" SDL_Palette ty
@@ -3322,6 +3352,12 @@
   instance
     BG.Storable SDL_PixelFormatDetails
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_PixelFormatDetails
+  instance
+    Struct.IsStruct SDL_PixelFormatDetails
+
+-- | [C declaration]: @format@, defined at @SDL3\/SDL_pixels.h 1156:21@
 instance
   (ty ~ SDL_PixelFormat)
   => BG.CompatHasField.HasField "format" SDL_PixelFormatDetails ty
@@ -3363,6 +3399,7 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | [C declaration]: @bits_per_pixel@, defined at @SDL3\/SDL_pixels.h 1157:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "bits_per_pixel" SDL_PixelFormatDetails ty
@@ -3405,6 +3442,7 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | [C declaration]: @bytes_per_pixel@, defined at @SDL3\/SDL_pixels.h 1158:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "bytes_per_pixel" SDL_PixelFormatDetails ty
@@ -3447,6 +3485,7 @@
 
   offset# = \_ -> \_ -> 5
 
+-- | [C declaration]: @padding@, defined at @SDL3\/SDL_pixels.h 1159:11@
 instance
   (ty ~ CA.ConstantArray 2 SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "padding" SDL_PixelFormatDetails ty
@@ -3488,6 +3527,7 @@
 
   offset# = \_ -> \_ -> 6
 
+-- | [C declaration]: @Rmask@, defined at @SDL3\/SDL_pixels.h 1160:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "rmask" SDL_PixelFormatDetails ty
@@ -3529,6 +3569,7 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | [C declaration]: @Gmask@, defined at @SDL3\/SDL_pixels.h 1161:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "gmask" SDL_PixelFormatDetails ty
@@ -3570,6 +3611,7 @@
 
   offset# = \_ -> \_ -> 12
 
+-- | [C declaration]: @Bmask@, defined at @SDL3\/SDL_pixels.h 1162:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "bmask" SDL_PixelFormatDetails ty
@@ -3611,6 +3653,7 @@
 
   offset# = \_ -> \_ -> 16
 
+-- | [C declaration]: @Amask@, defined at @SDL3\/SDL_pixels.h 1163:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "amask" SDL_PixelFormatDetails ty
@@ -3652,6 +3695,7 @@
 
   offset# = \_ -> \_ -> 20
 
+-- | [C declaration]: @Rbits@, defined at @SDL3\/SDL_pixels.h 1164:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "rbits" SDL_PixelFormatDetails ty
@@ -3693,6 +3737,7 @@
 
   offset# = \_ -> \_ -> 24
 
+-- | [C declaration]: @Gbits@, defined at @SDL3\/SDL_pixels.h 1165:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "gbits" SDL_PixelFormatDetails ty
@@ -3734,6 +3779,7 @@
 
   offset# = \_ -> \_ -> 25
 
+-- | [C declaration]: @Bbits@, defined at @SDL3\/SDL_pixels.h 1166:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "bbits" SDL_PixelFormatDetails ty
@@ -3775,6 +3821,7 @@
 
   offset# = \_ -> \_ -> 26
 
+-- | [C declaration]: @Abits@, defined at @SDL3\/SDL_pixels.h 1167:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "abits" SDL_PixelFormatDetails ty
@@ -3816,6 +3863,7 @@
 
   offset# = \_ -> \_ -> 27
 
+-- | [C declaration]: @Rshift@, defined at @SDL3\/SDL_pixels.h 1168:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "rshift" SDL_PixelFormatDetails ty
@@ -3857,6 +3905,7 @@
 
   offset# = \_ -> \_ -> 28
 
+-- | [C declaration]: @Gshift@, defined at @SDL3\/SDL_pixels.h 1169:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "gshift" SDL_PixelFormatDetails ty
@@ -3898,6 +3947,7 @@
 
   offset# = \_ -> \_ -> 29
 
+-- | [C declaration]: @Bshift@, defined at @SDL3\/SDL_pixels.h 1170:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "bshift" SDL_PixelFormatDetails ty
@@ -3939,6 +3989,7 @@
 
   offset# = \_ -> \_ -> 30
 
+-- | [C declaration]: @Ashift@, defined at @SDL3\/SDL_pixels.h 1171:11@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint8)
   => BG.CompatHasField.HasField "ashift" SDL_PixelFormatDetails ty
diff --git a/src/SDL3/Sys/Bindgen/Pixels/FunPtr.hs b/src/SDL3/Sys/Bindgen/Pixels/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Pixels/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Pixels/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Pixels.FunPtr (
@@ -17,6 +19,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -25,7 +29,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_pixels.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_pixels.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Pixels_get_SDL_GetPixelFormatName */"
          , "__attribute__ ((const))"
          , "char const *(*hs_bindgen_eb0ec2b0946d454a (void)) ("
@@ -158,7 +166,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pixels_get_SDL_GetPixelFormatName@
 hs_bindgen_eb0ec2b0946d454a :: IO (BG.FunPtr (SDL_PixelFormat -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_eb0ec2b0946d454a =
-  BG.fromFFIType hs_bindgen_eb0ec2b0946d454a_base
+  fmap BG.fromFFIType hs_bindgen_eb0ec2b0946d454a_base
 
 {-# NOINLINE sDL_GetPixelFormatName #-}
 
@@ -196,7 +204,7 @@
            )
        )
 hs_bindgen_f958323c6387c975 =
-  BG.fromFFIType hs_bindgen_f958323c6387c975_base
+  fmap BG.fromFFIType hs_bindgen_f958323c6387c975_base
 
 {-# NOINLINE sDL_GetMasksForPixelFormat #-}
 
@@ -254,7 +262,7 @@
            )
        )
 hs_bindgen_e5bd7b32ad9023dc =
-  BG.fromFFIType hs_bindgen_e5bd7b32ad9023dc_base
+  fmap BG.fromFFIType hs_bindgen_e5bd7b32ad9023dc_base
 
 {-# NOINLINE sDL_GetPixelFormatForMasks #-}
 
@@ -302,7 +310,7 @@
 hs_bindgen_b5dfc5cc5c17c070
   :: IO (BG.FunPtr (SDL_PixelFormat -> IO (PtrConst.PtrConst SDL_PixelFormatDetails)))
 hs_bindgen_b5dfc5cc5c17c070 =
-  BG.fromFFIType hs_bindgen_b5dfc5cc5c17c070_base
+  fmap BG.fromFFIType hs_bindgen_b5dfc5cc5c17c070_base
 
 {-# NOINLINE sDL_GetPixelFormatDetails #-}
 
@@ -332,7 +340,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pixels_get_SDL_CreatePalette@
 hs_bindgen_27546d5c6729ae26 :: IO (BG.FunPtr (BG.CInt -> IO (BG.Ptr SDL_Palette)))
 hs_bindgen_27546d5c6729ae26 =
-  BG.fromFFIType hs_bindgen_27546d5c6729ae26_base
+  fmap BG.fromFFIType hs_bindgen_27546d5c6729ae26_base
 
 {-# NOINLINE sDL_CreatePalette #-}
 
@@ -365,7 +373,7 @@
   :: IO
        (BG.FunPtr (BG.Ptr SDL_Palette -> PtrConst.PtrConst SDL_Color -> BG.CInt -> BG.CInt -> IO BG.CBool))
 hs_bindgen_34f70d79b2ac1637 =
-  BG.fromFFIType hs_bindgen_34f70d79b2ac1637_base
+  fmap BG.fromFFIType hs_bindgen_34f70d79b2ac1637_base
 
 {-# NOINLINE sDL_SetPaletteColors #-}
 
@@ -399,7 +407,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pixels_get_SDL_DestroyPalette@
 hs_bindgen_51f2b11ef08b8f0d :: IO (BG.FunPtr (BG.Ptr SDL_Palette -> IO ()))
 hs_bindgen_51f2b11ef08b8f0d =
-  BG.fromFFIType hs_bindgen_51f2b11ef08b8f0d_base
+  fmap BG.fromFFIType hs_bindgen_51f2b11ef08b8f0d_base
 
 {-# NOINLINE sDL_DestroyPalette #-}
 
@@ -436,7 +444,7 @@
            )
        )
 hs_bindgen_71913f7d8c1eefe0 =
-  BG.fromFFIType hs_bindgen_71913f7d8c1eefe0_base
+  fmap BG.fromFFIType hs_bindgen_71913f7d8c1eefe0_base
 
 {-# NOINLINE sDL_MapRGB #-}
 
@@ -500,7 +508,7 @@
            )
        )
 hs_bindgen_357ad77f90e40db5 =
-  BG.fromFFIType hs_bindgen_357ad77f90e40db5_base
+  fmap BG.fromFFIType hs_bindgen_357ad77f90e40db5_base
 
 {-# NOINLINE sDL_MapRGBA #-}
 
@@ -567,7 +575,7 @@
            )
        )
 hs_bindgen_b718a2f4b5ae6cf0 =
-  BG.fromFFIType hs_bindgen_b718a2f4b5ae6cf0_base
+  fmap BG.fromFFIType hs_bindgen_b718a2f4b5ae6cf0_base
 
 {-# NOINLINE sDL_GetRGB #-}
 
@@ -627,7 +635,7 @@
            )
        )
 hs_bindgen_9f1939763a4ba969 =
-  BG.fromFFIType hs_bindgen_9f1939763a4ba969_base
+  fmap BG.fromFFIType hs_bindgen_9f1939763a4ba969_base
 
 {-# NOINLINE sDL_GetRGBA #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Pixels/Safe.hs b/src/SDL3/Sys/Bindgen/Pixels/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Pixels/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Pixels/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Pixels.Safe (
@@ -17,6 +19,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -25,7 +30,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_pixels.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_pixels.h>"
          , "char const *hs_bindgen_2b62d5600ae602f5 ("
          , "  SDL_PixelFormat arg1"
          , ")"
@@ -131,7 +140,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pixels_Safe_SDL_GetPixelFormatName@
 foreign import ccall safe "hs_bindgen_2b62d5600ae602f5"
   hs_bindgen_2b62d5600ae602f5_base
-    :: BG.Word32
+    :: BG.CUInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pixels_Safe_SDL_GetPixelFormatName@
@@ -139,7 +148,8 @@
   :: SDL_PixelFormat
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_2b62d5600ae602f5 =
-  BG.fromFFIType hs_bindgen_2b62d5600ae602f5_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_2b62d5600ae602f5_base (BG.toFFIType x0))
 
 -- | Get the human readable name of a pixel format.
 --
@@ -161,13 +171,13 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pixels_Safe_SDL_GetMasksForPixelFormat@
 foreign import ccall safe "hs_bindgen_29ba238b8cb85c9d"
   hs_bindgen_29ba238b8cb85c9d_base
-    :: BG.Word32
+    :: BG.CUInt
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pixels_Safe_SDL_GetMasksForPixelFormat@
 hs_bindgen_29ba238b8cb85c9d
@@ -179,7 +189,22 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_29ba238b8cb85c9d =
-  BG.fromFFIType hs_bindgen_29ba238b8cb85c9d_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_29ba238b8cb85c9d_base
+                    (BG.toFFIType x0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                    (BG.toFFIType x4)
+                    (BG.toFFIType x5)
+                )
 
 -- | Convert one of the enumerated pixel formats to a bpp value and RGBA masks.
 --
@@ -224,12 +249,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pixels_Safe_SDL_GetPixelFormatForMasks@
 foreign import ccall safe "hs_bindgen_34711b04d6421f67"
   hs_bindgen_34711b04d6421f67_base
-    :: BG.Int32
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Word32
-    -> IO BG.Word32
+    :: BG.CInt
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pixels_Safe_SDL_GetPixelFormatForMasks@
 hs_bindgen_34711b04d6421f67
@@ -240,7 +265,20 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO SDL_PixelFormat
 hs_bindgen_34711b04d6421f67 =
-  BG.fromFFIType hs_bindgen_34711b04d6421f67_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_34711b04d6421f67_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Convert a bpp value and RGBA masks to an enumerated pixel format.
 --
@@ -283,7 +321,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pixels_Safe_SDL_GetPixelFormatDetails@
 foreign import ccall safe "hs_bindgen_4112185e47f9577f"
   hs_bindgen_4112185e47f9577f_base
-    :: BG.Word32
+    :: BG.CUInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pixels_Safe_SDL_GetPixelFormatDetails@
@@ -291,7 +329,8 @@
   :: SDL_PixelFormat
   -> IO (PtrConst.PtrConst SDL_PixelFormatDetails)
 hs_bindgen_4112185e47f9577f =
-  BG.fromFFIType hs_bindgen_4112185e47f9577f_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_4112185e47f9577f_base (BG.toFFIType x0))
 
 -- | Create an 'SDL_PixelFormatDetails' structure corresponding to a pixel format.
 --
@@ -316,7 +355,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pixels_Safe_SDL_CreatePalette@
 foreign import ccall safe "hs_bindgen_4619b4a327b9cf94"
   hs_bindgen_4619b4a327b9cf94_base
-    :: BG.Int32
+    :: BG.CInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pixels_Safe_SDL_CreatePalette@
@@ -324,7 +363,8 @@
   :: BG.CInt
   -> IO (BG.Ptr SDL_Palette)
 hs_bindgen_4619b4a327b9cf94 =
-  BG.fromFFIType hs_bindgen_4619b4a327b9cf94_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_4619b4a327b9cf94_base (BG.toFFIType x0))
 
 -- | Create a palette structure with the specified number of color entries.
 --
@@ -352,9 +392,9 @@
   hs_bindgen_e629f58dcd1a6db5_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pixels_Safe_SDL_SetPaletteColors@
 hs_bindgen_e629f58dcd1a6db5
@@ -364,7 +404,18 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_e629f58dcd1a6db5 =
-  BG.fromFFIType hs_bindgen_e629f58dcd1a6db5_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_e629f58dcd1a6db5_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Set a range of colors in a palette.
 --
@@ -406,7 +457,8 @@
   :: BG.Ptr SDL_Palette
   -> IO ()
 hs_bindgen_e593348e8aff0b78 =
-  BG.fromFFIType hs_bindgen_e593348e8aff0b78_base
+  \x0 ->
+    hs_bindgen_e593348e8aff0b78_base (BG.toFFIType x0)
 
 -- | Free a palette created with @SDL_CreatePalette()@.
 --
@@ -430,10 +482,10 @@
   hs_bindgen_37bc20a6b313ac41_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word8
-    -> BG.Word8
-    -> BG.Word8
-    -> IO BG.Word32
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pixels_Safe_SDL_MapRGB@
 hs_bindgen_37bc20a6b313ac41
@@ -444,7 +496,20 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
 hs_bindgen_37bc20a6b313ac41 =
-  BG.fromFFIType hs_bindgen_37bc20a6b313ac41_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_37bc20a6b313ac41_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Map an RGB triple to an opaque pixel value for a given pixel format.
 --
@@ -494,11 +559,11 @@
   hs_bindgen_3fecde9ee209df97_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word8
-    -> BG.Word8
-    -> BG.Word8
-    -> BG.Word8
-    -> IO BG.Word32
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pixels_Safe_SDL_MapRGBA@
 hs_bindgen_3fecde9ee209df97
@@ -510,7 +575,22 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
 hs_bindgen_3fecde9ee209df97 =
-  BG.fromFFIType hs_bindgen_3fecde9ee209df97_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_3fecde9ee209df97_base
+                    (BG.toFFIType x0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                    (BG.toFFIType x4)
+                    (BG.toFFIType x5)
+                )
 
 -- | Map an RGBA quadruple to a pixel value for a given pixel format.
 --
@@ -562,7 +642,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pixels_Safe_SDL_GetRGB@
 foreign import ccall safe "hs_bindgen_da0c576777e026d9"
   hs_bindgen_da0c576777e026d9_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
@@ -580,7 +660,19 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO ()
 hs_bindgen_da0c576777e026d9 =
-  BG.fromFFIType hs_bindgen_da0c576777e026d9_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              hs_bindgen_da0c576777e026d9_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+                (BG.toFFIType x4)
+                (BG.toFFIType x5)
 
 -- | Get RGB values from a pixel in the specified format.
 --
@@ -624,7 +716,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pixels_Safe_SDL_GetRGBA@
 foreign import ccall safe "hs_bindgen_9ace50541bcd4e41"
   hs_bindgen_9ace50541bcd4e41_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
@@ -644,7 +736,21 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO ()
 hs_bindgen_9ace50541bcd4e41 =
-  BG.fromFFIType hs_bindgen_9ace50541bcd4e41_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                hs_bindgen_9ace50541bcd4e41_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+                  (BG.toFFIType x5)
+                  (BG.toFFIType x6)
 
 -- | Get RGBA values from a pixel in the specified format.
 --
diff --git a/src/SDL3/Sys/Bindgen/Pixels/Unsafe.hs b/src/SDL3/Sys/Bindgen/Pixels/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Pixels/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Pixels/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Pixels.Unsafe (
@@ -17,6 +19,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -25,7 +30,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_pixels.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_pixels.h>"
          , "char const *hs_bindgen_8fbe065b3c4d8879 ("
          , "  SDL_PixelFormat arg1"
          , ")"
@@ -131,7 +140,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pixels_Unsafe_SDL_GetPixelFormatName@
 foreign import ccall unsafe "hs_bindgen_8fbe065b3c4d8879"
   hs_bindgen_8fbe065b3c4d8879_base
-    :: BG.Word32
+    :: BG.CUInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pixels_Unsafe_SDL_GetPixelFormatName@
@@ -139,7 +148,8 @@
   :: SDL_PixelFormat
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_8fbe065b3c4d8879 =
-  BG.fromFFIType hs_bindgen_8fbe065b3c4d8879_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_8fbe065b3c4d8879_base (BG.toFFIType x0))
 
 -- | Get the human readable name of a pixel format.
 --
@@ -161,13 +171,13 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pixels_Unsafe_SDL_GetMasksForPixelFormat@
 foreign import ccall unsafe "hs_bindgen_8f634ab31e40ca98"
   hs_bindgen_8f634ab31e40ca98_base
-    :: BG.Word32
+    :: BG.CUInt
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pixels_Unsafe_SDL_GetMasksForPixelFormat@
 hs_bindgen_8f634ab31e40ca98
@@ -179,7 +189,22 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_8f634ab31e40ca98 =
-  BG.fromFFIType hs_bindgen_8f634ab31e40ca98_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_8f634ab31e40ca98_base
+                    (BG.toFFIType x0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                    (BG.toFFIType x4)
+                    (BG.toFFIType x5)
+                )
 
 -- | Convert one of the enumerated pixel formats to a bpp value and RGBA masks.
 --
@@ -224,12 +249,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pixels_Unsafe_SDL_GetPixelFormatForMasks@
 foreign import ccall unsafe "hs_bindgen_e7620db26f444473"
   hs_bindgen_e7620db26f444473_base
-    :: BG.Int32
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Word32
-    -> IO BG.Word32
+    :: BG.CInt
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pixels_Unsafe_SDL_GetPixelFormatForMasks@
 hs_bindgen_e7620db26f444473
@@ -240,7 +265,20 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO SDL_PixelFormat
 hs_bindgen_e7620db26f444473 =
-  BG.fromFFIType hs_bindgen_e7620db26f444473_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_e7620db26f444473_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Convert a bpp value and RGBA masks to an enumerated pixel format.
 --
@@ -283,7 +321,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pixels_Unsafe_SDL_GetPixelFormatDetails@
 foreign import ccall unsafe "hs_bindgen_d5b09ce14a5ee6cb"
   hs_bindgen_d5b09ce14a5ee6cb_base
-    :: BG.Word32
+    :: BG.CUInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pixels_Unsafe_SDL_GetPixelFormatDetails@
@@ -291,7 +329,8 @@
   :: SDL_PixelFormat
   -> IO (PtrConst.PtrConst SDL_PixelFormatDetails)
 hs_bindgen_d5b09ce14a5ee6cb =
-  BG.fromFFIType hs_bindgen_d5b09ce14a5ee6cb_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d5b09ce14a5ee6cb_base (BG.toFFIType x0))
 
 -- | Create an 'SDL_PixelFormatDetails' structure corresponding to a pixel format.
 --
@@ -316,7 +355,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pixels_Unsafe_SDL_CreatePalette@
 foreign import ccall unsafe "hs_bindgen_b247627517d074a6"
   hs_bindgen_b247627517d074a6_base
-    :: BG.Int32
+    :: BG.CInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pixels_Unsafe_SDL_CreatePalette@
@@ -324,7 +363,8 @@
   :: BG.CInt
   -> IO (BG.Ptr SDL_Palette)
 hs_bindgen_b247627517d074a6 =
-  BG.fromFFIType hs_bindgen_b247627517d074a6_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_b247627517d074a6_base (BG.toFFIType x0))
 
 -- | Create a palette structure with the specified number of color entries.
 --
@@ -352,9 +392,9 @@
   hs_bindgen_1db50350d55a3029_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pixels_Unsafe_SDL_SetPaletteColors@
 hs_bindgen_1db50350d55a3029
@@ -364,7 +404,18 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_1db50350d55a3029 =
-  BG.fromFFIType hs_bindgen_1db50350d55a3029_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_1db50350d55a3029_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Set a range of colors in a palette.
 --
@@ -406,7 +457,8 @@
   :: BG.Ptr SDL_Palette
   -> IO ()
 hs_bindgen_0c5b20ec2209c5f8 =
-  BG.fromFFIType hs_bindgen_0c5b20ec2209c5f8_base
+  \x0 ->
+    hs_bindgen_0c5b20ec2209c5f8_base (BG.toFFIType x0)
 
 -- | Free a palette created with @SDL_CreatePalette()@.
 --
@@ -430,10 +482,10 @@
   hs_bindgen_69237948f17500f6_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word8
-    -> BG.Word8
-    -> BG.Word8
-    -> IO BG.Word32
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pixels_Unsafe_SDL_MapRGB@
 hs_bindgen_69237948f17500f6
@@ -444,7 +496,20 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
 hs_bindgen_69237948f17500f6 =
-  BG.fromFFIType hs_bindgen_69237948f17500f6_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_69237948f17500f6_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Map an RGB triple to an opaque pixel value for a given pixel format.
 --
@@ -494,11 +559,11 @@
   hs_bindgen_b496c5a642029802_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word8
-    -> BG.Word8
-    -> BG.Word8
-    -> BG.Word8
-    -> IO BG.Word32
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pixels_Unsafe_SDL_MapRGBA@
 hs_bindgen_b496c5a642029802
@@ -510,7 +575,22 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
 hs_bindgen_b496c5a642029802 =
-  BG.fromFFIType hs_bindgen_b496c5a642029802_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_b496c5a642029802_base
+                    (BG.toFFIType x0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                    (BG.toFFIType x4)
+                    (BG.toFFIType x5)
+                )
 
 -- | Map an RGBA quadruple to a pixel value for a given pixel format.
 --
@@ -562,7 +642,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pixels_Unsafe_SDL_GetRGB@
 foreign import ccall unsafe "hs_bindgen_39f53a47a31a2bfc"
   hs_bindgen_39f53a47a31a2bfc_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
@@ -580,7 +660,19 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO ()
 hs_bindgen_39f53a47a31a2bfc =
-  BG.fromFFIType hs_bindgen_39f53a47a31a2bfc_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              hs_bindgen_39f53a47a31a2bfc_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+                (BG.toFFIType x4)
+                (BG.toFFIType x5)
 
 -- | Get RGB values from a pixel in the specified format.
 --
@@ -624,7 +716,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Pixels_Unsafe_SDL_GetRGBA@
 foreign import ccall unsafe "hs_bindgen_5ce2e49df4845c32"
   hs_bindgen_5ce2e49df4845c32_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
@@ -644,7 +736,21 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO ()
 hs_bindgen_5ce2e49df4845c32 =
-  BG.fromFFIType hs_bindgen_5ce2e49df4845c32_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                hs_bindgen_5ce2e49df4845c32_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+                  (BG.toFFIType x5)
+                  (BG.toFFIType x6)
 
 -- | Get RGBA values from a pixel in the specified format.
 --
diff --git a/src/SDL3/Sys/Bindgen/PixelsShims/FunPtr.hs b/src/SDL3/Sys/Bindgen/PixelsShims/FunPtr.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/PixelsShims/FunPtr.hs
@@ -0,0 +1,973 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.PixelsShims.FunPtr (
+  SDL3.Sys.Bindgen.PixelsShims.FunPtr.lithon_SDL_DEFINE_PIXELFOURCC,
+  SDL3.Sys.Bindgen.PixelsShims.FunPtr.lithon_SDL_BITSPERPIXEL,
+  SDL3.Sys.Bindgen.PixelsShims.FunPtr.lithon_SDL_BYTESPERPIXEL,
+  SDL3.Sys.Bindgen.PixelsShims.FunPtr.lithon_SDL_ISPIXELFORMAT_INDEXED,
+  SDL3.Sys.Bindgen.PixelsShims.FunPtr.lithon_SDL_ISPIXELFORMAT_PACKED,
+  SDL3.Sys.Bindgen.PixelsShims.FunPtr.lithon_SDL_ISPIXELFORMAT_ARRAY,
+  SDL3.Sys.Bindgen.PixelsShims.FunPtr.lithon_SDL_ISPIXELFORMAT_10BIT,
+  SDL3.Sys.Bindgen.PixelsShims.FunPtr.lithon_SDL_ISPIXELFORMAT_FLOAT,
+  SDL3.Sys.Bindgen.PixelsShims.FunPtr.lithon_SDL_ISPIXELFORMAT_ALPHA,
+  SDL3.Sys.Bindgen.PixelsShims.FunPtr.lithon_SDL_ISPIXELFORMAT_FOURCC,
+  SDL3.Sys.Bindgen.PixelsShims.FunPtr.lithon_SDL_DEFINE_COLORSPACE,
+  SDL3.Sys.Bindgen.PixelsShims.FunPtr.lithon_SDL_COLORSPACETYPE,
+  SDL3.Sys.Bindgen.PixelsShims.FunPtr.lithon_SDL_COLORSPACERANGE,
+  SDL3.Sys.Bindgen.PixelsShims.FunPtr.lithon_SDL_COLORSPACECHROMA,
+  SDL3.Sys.Bindgen.PixelsShims.FunPtr.lithon_SDL_COLORSPACEPRIMARIES,
+  SDL3.Sys.Bindgen.PixelsShims.FunPtr.lithon_SDL_COLORSPACETRANSFER,
+  SDL3.Sys.Bindgen.PixelsShims.FunPtr.lithon_SDL_COLORSPACEMATRIX,
+  SDL3.Sys.Bindgen.PixelsShims.FunPtr.lithon_SDL_ISCOLORSPACE_MATRIX_BT601,
+  SDL3.Sys.Bindgen.PixelsShims.FunPtr.lithon_SDL_ISCOLORSPACE_MATRIX_BT709,
+  SDL3.Sys.Bindgen.PixelsShims.FunPtr.lithon_SDL_ISCOLORSPACE_MATRIX_BT2020_NCL,
+  SDL3.Sys.Bindgen.PixelsShims.FunPtr.lithon_SDL_ISCOLORSPACE_LIMITED_RANGE,
+  SDL3.Sys.Bindgen.PixelsShims.FunPtr.lithon_SDL_ISCOLORSPACE_FULL_RANGE,
+)
+where
+
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+import SDL3.Sys.Bindgen.Pixels qualified
+import SDL3.Sys.Bindgen.Stdinc qualified
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <sdl3-bindgen-sys/SDL_pixels_shims.h>"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_DEFINE_PIXELFOURCC */"
+         , "__attribute__ ((const))"
+         , "SDL_PixelFormat (*hs_bindgen_75756731ebd56d6c (void)) ("
+         , "  Uint8 arg1,"
+         , "  Uint8 arg2,"
+         , "  Uint8 arg3,"
+         , "  Uint8 arg4"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_DEFINE_PIXELFOURCC;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_BITSPERPIXEL */"
+         , "__attribute__ ((const))"
+         , "signed int (*hs_bindgen_a8b5b5932ddbfc3b (void)) ("
+         , "  SDL_PixelFormat arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_BITSPERPIXEL;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_BYTESPERPIXEL */"
+         , "__attribute__ ((const))"
+         , "signed int (*hs_bindgen_fef9e1bbde9ec790 (void)) ("
+         , "  SDL_PixelFormat arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_BYTESPERPIXEL;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISPIXELFORMAT_INDEXED */"
+         , "__attribute__ ((const))"
+         , "_Bool (*hs_bindgen_b117a24f410fe873 (void)) ("
+         , "  SDL_PixelFormat arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_ISPIXELFORMAT_INDEXED;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISPIXELFORMAT_PACKED */"
+         , "__attribute__ ((const))"
+         , "_Bool (*hs_bindgen_9046eeb0267300bc (void)) ("
+         , "  SDL_PixelFormat arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_ISPIXELFORMAT_PACKED;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISPIXELFORMAT_ARRAY */"
+         , "__attribute__ ((const))"
+         , "_Bool (*hs_bindgen_5c10de6b0f11eb45 (void)) ("
+         , "  SDL_PixelFormat arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_ISPIXELFORMAT_ARRAY;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISPIXELFORMAT_10BIT */"
+         , "__attribute__ ((const))"
+         , "_Bool (*hs_bindgen_f7e465ad660e31bf (void)) ("
+         , "  SDL_PixelFormat arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_ISPIXELFORMAT_10BIT;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISPIXELFORMAT_FLOAT */"
+         , "__attribute__ ((const))"
+         , "_Bool (*hs_bindgen_032856c3c3b017c5 (void)) ("
+         , "  SDL_PixelFormat arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_ISPIXELFORMAT_FLOAT;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISPIXELFORMAT_ALPHA */"
+         , "__attribute__ ((const))"
+         , "_Bool (*hs_bindgen_6c426e1aa20f7341 (void)) ("
+         , "  SDL_PixelFormat arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_ISPIXELFORMAT_ALPHA;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISPIXELFORMAT_FOURCC */"
+         , "__attribute__ ((const))"
+         , "_Bool (*hs_bindgen_d08bb623c3ebc165 (void)) ("
+         , "  SDL_PixelFormat arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_ISPIXELFORMAT_FOURCC;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_DEFINE_COLORSPACE */"
+         , "__attribute__ ((const))"
+         , "SDL_Colorspace (*hs_bindgen_e6f658b2c26218e1 (void)) ("
+         , "  SDL_ColorType arg1,"
+         , "  SDL_ColorRange arg2,"
+         , "  SDL_ColorPrimaries arg3,"
+         , "  SDL_TransferCharacteristics arg4,"
+         , "  SDL_MatrixCoefficients arg5,"
+         , "  SDL_ChromaLocation arg6"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_DEFINE_COLORSPACE;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_COLORSPACETYPE */"
+         , "__attribute__ ((const))"
+         , "SDL_ColorType (*hs_bindgen_eec66aaad367649c (void)) ("
+         , "  SDL_Colorspace arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_COLORSPACETYPE;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_COLORSPACERANGE */"
+         , "__attribute__ ((const))"
+         , "SDL_ColorRange (*hs_bindgen_80876d9836c72ca7 (void)) ("
+         , "  SDL_Colorspace arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_COLORSPACERANGE;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_COLORSPACECHROMA */"
+         , "__attribute__ ((const))"
+         , "SDL_ChromaLocation (*hs_bindgen_72559431bdc72d6f (void)) ("
+         , "  SDL_Colorspace arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_COLORSPACECHROMA;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_COLORSPACEPRIMARIES */"
+         , "__attribute__ ((const))"
+         , "SDL_ColorPrimaries (*hs_bindgen_38530fb5411bf69a (void)) ("
+         , "  SDL_Colorspace arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_COLORSPACEPRIMARIES;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_COLORSPACETRANSFER */"
+         , "__attribute__ ((const))"
+         , "SDL_TransferCharacteristics (*hs_bindgen_9d66e990e02b39a2 (void)) ("
+         , "  SDL_Colorspace arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_COLORSPACETRANSFER;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_COLORSPACEMATRIX */"
+         , "__attribute__ ((const))"
+         , "SDL_MatrixCoefficients (*hs_bindgen_94623bcc9daaa8ee (void)) ("
+         , "  SDL_Colorspace arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_COLORSPACEMATRIX;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISCOLORSPACE_MATRIX_BT601 */"
+         , "__attribute__ ((const))"
+         , "_Bool (*hs_bindgen_23ed6403a69ca0bf (void)) ("
+         , "  SDL_Colorspace arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_ISCOLORSPACE_MATRIX_BT601;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISCOLORSPACE_MATRIX_BT709 */"
+         , "__attribute__ ((const))"
+         , "_Bool (*hs_bindgen_46d1d547630c76e0 (void)) ("
+         , "  SDL_Colorspace arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_ISCOLORSPACE_MATRIX_BT709;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISCOLORSPACE_MATRIX_BT2020_NCL */"
+         , "__attribute__ ((const))"
+         , "_Bool (*hs_bindgen_bdde99e14eee3d4d (void)) ("
+         , "  SDL_Colorspace arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_ISCOLORSPACE_MATRIX_BT2020_NCL;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISCOLORSPACE_LIMITED_RANGE */"
+         , "__attribute__ ((const))"
+         , "_Bool (*hs_bindgen_7383ccedffa9acae (void)) ("
+         , "  SDL_Colorspace arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_ISCOLORSPACE_LIMITED_RANGE;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISCOLORSPACE_FULL_RANGE */"
+         , "__attribute__ ((const))"
+         , "_Bool (*hs_bindgen_2304b4d429bcb1a4 (void)) ("
+         , "  SDL_Colorspace arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_ISCOLORSPACE_FULL_RANGE;"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_DEFINE_PIXELFOURCC@
+foreign import ccall unsafe "hs_bindgen_75756731ebd56d6c"
+  hs_bindgen_75756731ebd56d6c_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_DEFINE_PIXELFOURCC@
+hs_bindgen_75756731ebd56d6c
+  :: IO
+       ( BG.FunPtr
+           ( SDL3.Sys.Bindgen.Stdinc.Uint8
+             -> SDL3.Sys.Bindgen.Stdinc.Uint8
+             -> SDL3.Sys.Bindgen.Stdinc.Uint8
+             -> SDL3.Sys.Bindgen.Stdinc.Uint8
+             -> IO SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+           )
+       )
+hs_bindgen_75756731ebd56d6c =
+  fmap BG.fromFFIType hs_bindgen_75756731ebd56d6c_base
+
+{-# NOINLINE lithon_SDL_DEFINE_PIXELFOURCC #-}
+
+-- | Define a custom FourCC pixel format.
+--
+--     The SDL_DEFINE_PIXELFOURCC macro as a function. SDL_PIXELFORMAT_YV12, for example, is the code of the characters Y, V, 1, 2.
+--
+--     [@a@]: the first character of the FourCC code.
+--
+--     [@b@]: the second character of the FourCC code.
+--
+--     [@c@]: the third character of the FourCC code.
+--
+--     [@d@]: the fourth character of the FourCC code.
+--
+--     [Returns]: a format value in the style of SDL_PixelFormat.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_FOURCC
+--
+--     [C declaration]: @lithon_SDL_DEFINE_PIXELFOURCC@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 42:35@
+lithon_SDL_DEFINE_PIXELFOURCC
+  :: BG.FunPtr
+       ( SDL3.Sys.Bindgen.Stdinc.Uint8
+         -> SDL3.Sys.Bindgen.Stdinc.Uint8
+         -> SDL3.Sys.Bindgen.Stdinc.Uint8
+         -> SDL3.Sys.Bindgen.Stdinc.Uint8
+         -> IO SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+       )
+lithon_SDL_DEFINE_PIXELFOURCC =
+  BG.unsafePerformIO hs_bindgen_75756731ebd56d6c
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_BITSPERPIXEL@
+foreign import ccall unsafe "hs_bindgen_a8b5b5932ddbfc3b"
+  hs_bindgen_a8b5b5932ddbfc3b_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_BITSPERPIXEL@
+hs_bindgen_a8b5b5932ddbfc3b
+  :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat -> IO BG.CInt))
+hs_bindgen_a8b5b5932ddbfc3b =
+  fmap BG.fromFFIType hs_bindgen_a8b5b5932ddbfc3b_base
+
+{-# NOINLINE lithon_SDL_BITSPERPIXEL #-}
+
+-- | Determine an SDL_PixelFormat\'s bits per pixel.
+--
+--     The SDL_BITSPERPIXEL macro as a function. FourCC formats report zero here, as it rarely makes sense to measure them per-pixel.
+--
+--     [@format@]: an SDL_PixelFormat to check.
+--
+--     [Returns]: the bits-per-pixel of @format@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_BYTESPERPIXEL
+--
+--     [C declaration]: @lithon_SDL_BITSPERPIXEL@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 62:23@
+lithon_SDL_BITSPERPIXEL :: BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat -> IO BG.CInt)
+lithon_SDL_BITSPERPIXEL =
+  BG.unsafePerformIO hs_bindgen_a8b5b5932ddbfc3b
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_BYTESPERPIXEL@
+foreign import ccall unsafe "hs_bindgen_fef9e1bbde9ec790"
+  hs_bindgen_fef9e1bbde9ec790_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_BYTESPERPIXEL@
+hs_bindgen_fef9e1bbde9ec790
+  :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat -> IO BG.CInt))
+hs_bindgen_fef9e1bbde9ec790 =
+  fmap BG.fromFFIType hs_bindgen_fef9e1bbde9ec790_base
+
+{-# NOINLINE lithon_SDL_BYTESPERPIXEL #-}
+
+-- | Determine an SDL_PixelFormat\'s bytes per pixel.
+--
+--     The SDL_BYTESPERPIXEL macro as a function. FourCC formats do their best here, but many of them don\'t have a meaningful measurement of bytes per pixel.
+--
+--     [@format@]: an SDL_PixelFormat to check.
+--
+--     [Returns]: the bytes-per-pixel of @format@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_BITSPERPIXEL
+--
+--     [C declaration]: @lithon_SDL_BYTESPERPIXEL@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 83:23@
+lithon_SDL_BYTESPERPIXEL :: BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat -> IO BG.CInt)
+lithon_SDL_BYTESPERPIXEL =
+  BG.unsafePerformIO hs_bindgen_fef9e1bbde9ec790
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISPIXELFORMAT_INDEXED@
+foreign import ccall unsafe "hs_bindgen_b117a24f410fe873"
+  hs_bindgen_b117a24f410fe873_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISPIXELFORMAT_INDEXED@
+hs_bindgen_b117a24f410fe873
+  :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat -> IO BG.CBool))
+hs_bindgen_b117a24f410fe873 =
+  fmap BG.fromFFIType hs_bindgen_b117a24f410fe873_base
+
+{-# NOINLINE lithon_SDL_ISPIXELFORMAT_INDEXED #-}
+
+-- | Determine if an SDL_PixelFormat is an indexed format.
+--
+--     The SDL_ISPIXELFORMAT_INDEXED macro as a function.
+--
+--     [@format@]: an SDL_PixelFormat to check.
+--
+--     [Returns]: true if the format is indexed, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISPIXELFORMAT_INDEXED@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 100:24@
+lithon_SDL_ISPIXELFORMAT_INDEXED
+  :: BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat -> IO BG.CBool)
+lithon_SDL_ISPIXELFORMAT_INDEXED =
+  BG.unsafePerformIO hs_bindgen_b117a24f410fe873
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISPIXELFORMAT_PACKED@
+foreign import ccall unsafe "hs_bindgen_9046eeb0267300bc"
+  hs_bindgen_9046eeb0267300bc_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISPIXELFORMAT_PACKED@
+hs_bindgen_9046eeb0267300bc
+  :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat -> IO BG.CBool))
+hs_bindgen_9046eeb0267300bc =
+  fmap BG.fromFFIType hs_bindgen_9046eeb0267300bc_base
+
+{-# NOINLINE lithon_SDL_ISPIXELFORMAT_PACKED #-}
+
+-- | Determine if an SDL_PixelFormat is a packed format.
+--
+--     The SDL_ISPIXELFORMAT_PACKED macro as a function.
+--
+--     [@format@]: an SDL_PixelFormat to check.
+--
+--     [Returns]: true if the format is packed, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISPIXELFORMAT_PACKED@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 117:24@
+lithon_SDL_ISPIXELFORMAT_PACKED
+  :: BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat -> IO BG.CBool)
+lithon_SDL_ISPIXELFORMAT_PACKED =
+  BG.unsafePerformIO hs_bindgen_9046eeb0267300bc
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISPIXELFORMAT_ARRAY@
+foreign import ccall unsafe "hs_bindgen_5c10de6b0f11eb45"
+  hs_bindgen_5c10de6b0f11eb45_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISPIXELFORMAT_ARRAY@
+hs_bindgen_5c10de6b0f11eb45
+  :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat -> IO BG.CBool))
+hs_bindgen_5c10de6b0f11eb45 =
+  fmap BG.fromFFIType hs_bindgen_5c10de6b0f11eb45_base
+
+{-# NOINLINE lithon_SDL_ISPIXELFORMAT_ARRAY #-}
+
+-- | Determine if an SDL_PixelFormat is an array format.
+--
+--     The SDL_ISPIXELFORMAT_ARRAY macro as a function.
+--
+--     [@format@]: an SDL_PixelFormat to check.
+--
+--     [Returns]: true if the format is an array, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISPIXELFORMAT_ARRAY@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 134:24@
+lithon_SDL_ISPIXELFORMAT_ARRAY :: BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat -> IO BG.CBool)
+lithon_SDL_ISPIXELFORMAT_ARRAY =
+  BG.unsafePerformIO hs_bindgen_5c10de6b0f11eb45
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISPIXELFORMAT_10BIT@
+foreign import ccall unsafe "hs_bindgen_f7e465ad660e31bf"
+  hs_bindgen_f7e465ad660e31bf_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISPIXELFORMAT_10BIT@
+hs_bindgen_f7e465ad660e31bf
+  :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat -> IO BG.CBool))
+hs_bindgen_f7e465ad660e31bf =
+  fmap BG.fromFFIType hs_bindgen_f7e465ad660e31bf_base
+
+{-# NOINLINE lithon_SDL_ISPIXELFORMAT_10BIT #-}
+
+-- | Determine if an SDL_PixelFormat is a 10-bit format.
+--
+--     The SDL_ISPIXELFORMAT_10BIT macro as a function.
+--
+--     [@format@]: an SDL_PixelFormat to check.
+--
+--     [Returns]: true if the format is 10-bit, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISPIXELFORMAT_10BIT@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 151:24@
+lithon_SDL_ISPIXELFORMAT_10BIT :: BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat -> IO BG.CBool)
+lithon_SDL_ISPIXELFORMAT_10BIT =
+  BG.unsafePerformIO hs_bindgen_f7e465ad660e31bf
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISPIXELFORMAT_FLOAT@
+foreign import ccall unsafe "hs_bindgen_032856c3c3b017c5"
+  hs_bindgen_032856c3c3b017c5_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISPIXELFORMAT_FLOAT@
+hs_bindgen_032856c3c3b017c5
+  :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat -> IO BG.CBool))
+hs_bindgen_032856c3c3b017c5 =
+  fmap BG.fromFFIType hs_bindgen_032856c3c3b017c5_base
+
+{-# NOINLINE lithon_SDL_ISPIXELFORMAT_FLOAT #-}
+
+-- | Determine if an SDL_PixelFormat is a floating point format.
+--
+--     The SDL_ISPIXELFORMAT_FLOAT macro as a function.
+--
+--     [@format@]: an SDL_PixelFormat to check.
+--
+--     [Returns]: true if the format is a floating point, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISPIXELFORMAT_FLOAT@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 168:24@
+lithon_SDL_ISPIXELFORMAT_FLOAT :: BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat -> IO BG.CBool)
+lithon_SDL_ISPIXELFORMAT_FLOAT =
+  BG.unsafePerformIO hs_bindgen_032856c3c3b017c5
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISPIXELFORMAT_ALPHA@
+foreign import ccall unsafe "hs_bindgen_6c426e1aa20f7341"
+  hs_bindgen_6c426e1aa20f7341_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISPIXELFORMAT_ALPHA@
+hs_bindgen_6c426e1aa20f7341
+  :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat -> IO BG.CBool))
+hs_bindgen_6c426e1aa20f7341 =
+  fmap BG.fromFFIType hs_bindgen_6c426e1aa20f7341_base
+
+{-# NOINLINE lithon_SDL_ISPIXELFORMAT_ALPHA #-}
+
+-- | Determine if an SDL_PixelFormat has an alpha channel.
+--
+--     The SDL_ISPIXELFORMAT_ALPHA macro as a function.
+--
+--     [@format@]: an SDL_PixelFormat to check.
+--
+--     [Returns]: true if the format has alpha, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISPIXELFORMAT_ALPHA@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 185:24@
+lithon_SDL_ISPIXELFORMAT_ALPHA :: BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat -> IO BG.CBool)
+lithon_SDL_ISPIXELFORMAT_ALPHA =
+  BG.unsafePerformIO hs_bindgen_6c426e1aa20f7341
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISPIXELFORMAT_FOURCC@
+foreign import ccall unsafe "hs_bindgen_d08bb623c3ebc165"
+  hs_bindgen_d08bb623c3ebc165_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISPIXELFORMAT_FOURCC@
+hs_bindgen_d08bb623c3ebc165
+  :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat -> IO BG.CBool))
+hs_bindgen_d08bb623c3ebc165 =
+  fmap BG.fromFFIType hs_bindgen_d08bb623c3ebc165_base
+
+{-# NOINLINE lithon_SDL_ISPIXELFORMAT_FOURCC #-}
+
+-- | Determine if an SDL_PixelFormat is a \"FourCC\" format.
+--
+--     The SDL_ISPIXELFORMAT_FOURCC macro as a function. This covers custom and other unusual formats.
+--
+--     [@format@]: an SDL_PixelFormat to check.
+--
+--     [Returns]: true if the format is a FourCC format, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISPIXELFORMAT_FOURCC@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 202:24@
+lithon_SDL_ISPIXELFORMAT_FOURCC
+  :: BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat -> IO BG.CBool)
+lithon_SDL_ISPIXELFORMAT_FOURCC =
+  BG.unsafePerformIO hs_bindgen_d08bb623c3ebc165
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_DEFINE_COLORSPACE@
+foreign import ccall unsafe "hs_bindgen_e6f658b2c26218e1"
+  hs_bindgen_e6f658b2c26218e1_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_DEFINE_COLORSPACE@
+hs_bindgen_e6f658b2c26218e1
+  :: IO
+       ( BG.FunPtr
+           ( SDL3.Sys.Bindgen.Pixels.SDL_ColorType
+             -> SDL3.Sys.Bindgen.Pixels.SDL_ColorRange
+             -> SDL3.Sys.Bindgen.Pixels.SDL_ColorPrimaries
+             -> SDL3.Sys.Bindgen.Pixels.SDL_TransferCharacteristics
+             -> SDL3.Sys.Bindgen.Pixels.SDL_MatrixCoefficients
+             -> SDL3.Sys.Bindgen.Pixels.SDL_ChromaLocation
+             -> IO SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+           )
+       )
+hs_bindgen_e6f658b2c26218e1 =
+  fmap BG.fromFFIType hs_bindgen_e6f658b2c26218e1_base
+
+{-# NOINLINE lithon_SDL_DEFINE_COLORSPACE #-}
+
+-- | Define a custom colorspace.
+--
+--     The SDL_DEFINE_COLORSPACE macro as a function.
+--
+--     [@type@]: the type of the new format.
+--
+--     [@range@]: the range of the new format.
+--
+--     [@primaries@]: the primaries of the new format.
+--
+--     [@transfer@]: the transfer characteristics of the new format.
+--
+--     [@matrix@]: the matrix coefficients of the new format.
+--
+--     [@chroma@]: the chroma sample location of the new format.
+--
+--     [Returns]: a format value in the style of SDL_Colorspace.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_DEFINE_COLORSPACE@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 224:34@
+lithon_SDL_DEFINE_COLORSPACE
+  :: BG.FunPtr
+       ( SDL3.Sys.Bindgen.Pixels.SDL_ColorType
+         -> SDL3.Sys.Bindgen.Pixels.SDL_ColorRange
+         -> SDL3.Sys.Bindgen.Pixels.SDL_ColorPrimaries
+         -> SDL3.Sys.Bindgen.Pixels.SDL_TransferCharacteristics
+         -> SDL3.Sys.Bindgen.Pixels.SDL_MatrixCoefficients
+         -> SDL3.Sys.Bindgen.Pixels.SDL_ChromaLocation
+         -> IO SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+       )
+lithon_SDL_DEFINE_COLORSPACE =
+  BG.unsafePerformIO hs_bindgen_e6f658b2c26218e1
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_COLORSPACETYPE@
+foreign import ccall unsafe "hs_bindgen_eec66aaad367649c"
+  hs_bindgen_eec66aaad367649c_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_COLORSPACETYPE@
+hs_bindgen_eec66aaad367649c
+  :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_Colorspace -> IO SDL3.Sys.Bindgen.Pixels.SDL_ColorType))
+hs_bindgen_eec66aaad367649c =
+  fmap BG.fromFFIType hs_bindgen_eec66aaad367649c_base
+
+{-# NOINLINE lithon_SDL_COLORSPACETYPE #-}
+
+-- | Retrieve the type of an SDL_Colorspace.
+--
+--     The SDL_COLORSPACETYPE macro as a function.
+--
+--     [@cspace@]: an SDL_Colorspace to check.
+--
+--     [Returns]: the SDL_ColorType of @cspace@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_COLORSPACETYPE@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 241:33@
+lithon_SDL_COLORSPACETYPE
+  :: BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_Colorspace -> IO SDL3.Sys.Bindgen.Pixels.SDL_ColorType)
+lithon_SDL_COLORSPACETYPE =
+  BG.unsafePerformIO hs_bindgen_eec66aaad367649c
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_COLORSPACERANGE@
+foreign import ccall unsafe "hs_bindgen_80876d9836c72ca7"
+  hs_bindgen_80876d9836c72ca7_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_COLORSPACERANGE@
+hs_bindgen_80876d9836c72ca7
+  :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_Colorspace -> IO SDL3.Sys.Bindgen.Pixels.SDL_ColorRange))
+hs_bindgen_80876d9836c72ca7 =
+  fmap BG.fromFFIType hs_bindgen_80876d9836c72ca7_base
+
+{-# NOINLINE lithon_SDL_COLORSPACERANGE #-}
+
+-- | Retrieve the range of an SDL_Colorspace.
+--
+--     The SDL_COLORSPACERANGE macro as a function.
+--
+--     [@cspace@]: an SDL_Colorspace to check.
+--
+--     [Returns]: the SDL_ColorRange of @cspace@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_COLORSPACERANGE@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 258:34@
+lithon_SDL_COLORSPACERANGE
+  :: BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_Colorspace -> IO SDL3.Sys.Bindgen.Pixels.SDL_ColorRange)
+lithon_SDL_COLORSPACERANGE =
+  BG.unsafePerformIO hs_bindgen_80876d9836c72ca7
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_COLORSPACECHROMA@
+foreign import ccall unsafe "hs_bindgen_72559431bdc72d6f"
+  hs_bindgen_72559431bdc72d6f_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_COLORSPACECHROMA@
+hs_bindgen_72559431bdc72d6f
+  :: IO
+       (BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_Colorspace -> IO SDL3.Sys.Bindgen.Pixels.SDL_ChromaLocation))
+hs_bindgen_72559431bdc72d6f =
+  fmap BG.fromFFIType hs_bindgen_72559431bdc72d6f_base
+
+{-# NOINLINE lithon_SDL_COLORSPACECHROMA #-}
+
+-- | Retrieve the chroma sample location of an SDL_Colorspace.
+--
+--     The SDL_COLORSPACECHROMA macro as a function.
+--
+--     [@cspace@]: an SDL_Colorspace to check.
+--
+--     [Returns]: the SDL_ChromaLocation of @cspace@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_COLORSPACECHROMA@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 275:38@
+lithon_SDL_COLORSPACECHROMA
+  :: BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_Colorspace -> IO SDL3.Sys.Bindgen.Pixels.SDL_ChromaLocation)
+lithon_SDL_COLORSPACECHROMA =
+  BG.unsafePerformIO hs_bindgen_72559431bdc72d6f
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_COLORSPACEPRIMARIES@
+foreign import ccall unsafe "hs_bindgen_38530fb5411bf69a"
+  hs_bindgen_38530fb5411bf69a_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_COLORSPACEPRIMARIES@
+hs_bindgen_38530fb5411bf69a
+  :: IO
+       (BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_Colorspace -> IO SDL3.Sys.Bindgen.Pixels.SDL_ColorPrimaries))
+hs_bindgen_38530fb5411bf69a =
+  fmap BG.fromFFIType hs_bindgen_38530fb5411bf69a_base
+
+{-# NOINLINE lithon_SDL_COLORSPACEPRIMARIES #-}
+
+-- | Retrieve the primaries of an SDL_Colorspace.
+--
+--     The SDL_COLORSPACEPRIMARIES macro as a function.
+--
+--     [@cspace@]: an SDL_Colorspace to check.
+--
+--     [Returns]: the SDL_ColorPrimaries of @cspace@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_COLORSPACEPRIMARIES@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 292:38@
+lithon_SDL_COLORSPACEPRIMARIES
+  :: BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_Colorspace -> IO SDL3.Sys.Bindgen.Pixels.SDL_ColorPrimaries)
+lithon_SDL_COLORSPACEPRIMARIES =
+  BG.unsafePerformIO hs_bindgen_38530fb5411bf69a
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_COLORSPACETRANSFER@
+foreign import ccall unsafe "hs_bindgen_9d66e990e02b39a2"
+  hs_bindgen_9d66e990e02b39a2_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_COLORSPACETRANSFER@
+hs_bindgen_9d66e990e02b39a2
+  :: IO
+       ( BG.FunPtr
+           (SDL3.Sys.Bindgen.Pixels.SDL_Colorspace -> IO SDL3.Sys.Bindgen.Pixels.SDL_TransferCharacteristics)
+       )
+hs_bindgen_9d66e990e02b39a2 =
+  fmap BG.fromFFIType hs_bindgen_9d66e990e02b39a2_base
+
+{-# NOINLINE lithon_SDL_COLORSPACETRANSFER #-}
+
+-- | Retrieve the transfer characteristics of an SDL_Colorspace.
+--
+--     The SDL_COLORSPACETRANSFER macro as a function.
+--
+--     [@cspace@]: an SDL_Colorspace to check.
+--
+--     [Returns]: the SDL_TransferCharacteristics of @cspace@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_COLORSPACETRANSFER@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 309:47@
+lithon_SDL_COLORSPACETRANSFER
+  :: BG.FunPtr
+       (SDL3.Sys.Bindgen.Pixels.SDL_Colorspace -> IO SDL3.Sys.Bindgen.Pixels.SDL_TransferCharacteristics)
+lithon_SDL_COLORSPACETRANSFER =
+  BG.unsafePerformIO hs_bindgen_9d66e990e02b39a2
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_COLORSPACEMATRIX@
+foreign import ccall unsafe "hs_bindgen_94623bcc9daaa8ee"
+  hs_bindgen_94623bcc9daaa8ee_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_COLORSPACEMATRIX@
+hs_bindgen_94623bcc9daaa8ee
+  :: IO
+       ( BG.FunPtr
+           (SDL3.Sys.Bindgen.Pixels.SDL_Colorspace -> IO SDL3.Sys.Bindgen.Pixels.SDL_MatrixCoefficients)
+       )
+hs_bindgen_94623bcc9daaa8ee =
+  fmap BG.fromFFIType hs_bindgen_94623bcc9daaa8ee_base
+
+{-# NOINLINE lithon_SDL_COLORSPACEMATRIX #-}
+
+-- | Retrieve the matrix coefficients of an SDL_Colorspace.
+--
+--     The SDL_COLORSPACEMATRIX macro as a function.
+--
+--     [@cspace@]: an SDL_Colorspace to check.
+--
+--     [Returns]: the SDL_MatrixCoefficients of @cspace@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_COLORSPACEMATRIX@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 326:42@
+lithon_SDL_COLORSPACEMATRIX
+  :: BG.FunPtr
+       (SDL3.Sys.Bindgen.Pixels.SDL_Colorspace -> IO SDL3.Sys.Bindgen.Pixels.SDL_MatrixCoefficients)
+lithon_SDL_COLORSPACEMATRIX =
+  BG.unsafePerformIO hs_bindgen_94623bcc9daaa8ee
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISCOLORSPACE_MATRIX_BT601@
+foreign import ccall unsafe "hs_bindgen_23ed6403a69ca0bf"
+  hs_bindgen_23ed6403a69ca0bf_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISCOLORSPACE_MATRIX_BT601@
+hs_bindgen_23ed6403a69ca0bf
+  :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_Colorspace -> IO BG.CBool))
+hs_bindgen_23ed6403a69ca0bf =
+  fmap BG.fromFFIType hs_bindgen_23ed6403a69ca0bf_base
+
+{-# NOINLINE lithon_SDL_ISCOLORSPACE_MATRIX_BT601 #-}
+
+-- | Determine if an SDL_Colorspace uses BT601 (or BT470BG) matrix coefficients.
+--
+--     The SDL_ISCOLORSPACE_MATRIX_BT601 macro as a function.
+--
+--     [@cspace@]: an SDL_Colorspace to check.
+--
+--     [Returns]: true if BT601 or BT470BG, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISCOLORSPACE_MATRIX_BT601@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 343:24@
+lithon_SDL_ISCOLORSPACE_MATRIX_BT601
+  :: BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_Colorspace -> IO BG.CBool)
+lithon_SDL_ISCOLORSPACE_MATRIX_BT601 =
+  BG.unsafePerformIO hs_bindgen_23ed6403a69ca0bf
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISCOLORSPACE_MATRIX_BT709@
+foreign import ccall unsafe "hs_bindgen_46d1d547630c76e0"
+  hs_bindgen_46d1d547630c76e0_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISCOLORSPACE_MATRIX_BT709@
+hs_bindgen_46d1d547630c76e0
+  :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_Colorspace -> IO BG.CBool))
+hs_bindgen_46d1d547630c76e0 =
+  fmap BG.fromFFIType hs_bindgen_46d1d547630c76e0_base
+
+{-# NOINLINE lithon_SDL_ISCOLORSPACE_MATRIX_BT709 #-}
+
+-- | Determine if an SDL_Colorspace uses BT709 matrix coefficients.
+--
+--     The SDL_ISCOLORSPACE_MATRIX_BT709 macro as a function.
+--
+--     [@cspace@]: an SDL_Colorspace to check.
+--
+--     [Returns]: true if BT709, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISCOLORSPACE_MATRIX_BT709@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 360:24@
+lithon_SDL_ISCOLORSPACE_MATRIX_BT709
+  :: BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_Colorspace -> IO BG.CBool)
+lithon_SDL_ISCOLORSPACE_MATRIX_BT709 =
+  BG.unsafePerformIO hs_bindgen_46d1d547630c76e0
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISCOLORSPACE_MATRIX_BT2020_NCL@
+foreign import ccall unsafe "hs_bindgen_bdde99e14eee3d4d"
+  hs_bindgen_bdde99e14eee3d4d_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISCOLORSPACE_MATRIX_BT2020_NCL@
+hs_bindgen_bdde99e14eee3d4d
+  :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_Colorspace -> IO BG.CBool))
+hs_bindgen_bdde99e14eee3d4d =
+  fmap BG.fromFFIType hs_bindgen_bdde99e14eee3d4d_base
+
+{-# NOINLINE lithon_SDL_ISCOLORSPACE_MATRIX_BT2020_NCL #-}
+
+-- | Determine if an SDL_Colorspace uses BT2020_NCL matrix coefficients.
+--
+--     The SDL_ISCOLORSPACE_MATRIX_BT2020_NCL macro as a function.
+--
+--     [@cspace@]: an SDL_Colorspace to check.
+--
+--     [Returns]: true if BT2020_NCL, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISCOLORSPACE_MATRIX_BT2020_NCL@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 377:24@
+lithon_SDL_ISCOLORSPACE_MATRIX_BT2020_NCL
+  :: BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_Colorspace -> IO BG.CBool)
+lithon_SDL_ISCOLORSPACE_MATRIX_BT2020_NCL =
+  BG.unsafePerformIO hs_bindgen_bdde99e14eee3d4d
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISCOLORSPACE_LIMITED_RANGE@
+foreign import ccall unsafe "hs_bindgen_7383ccedffa9acae"
+  hs_bindgen_7383ccedffa9acae_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISCOLORSPACE_LIMITED_RANGE@
+hs_bindgen_7383ccedffa9acae
+  :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_Colorspace -> IO BG.CBool))
+hs_bindgen_7383ccedffa9acae =
+  fmap BG.fromFFIType hs_bindgen_7383ccedffa9acae_base
+
+{-# NOINLINE lithon_SDL_ISCOLORSPACE_LIMITED_RANGE #-}
+
+-- | Determine if an SDL_Colorspace has a limited range.
+--
+--     The SDL_ISCOLORSPACE_LIMITED_RANGE macro as a function.
+--
+--     [@cspace@]: an SDL_Colorspace to check.
+--
+--     [Returns]: true if limited range, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISCOLORSPACE_LIMITED_RANGE@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 394:24@
+lithon_SDL_ISCOLORSPACE_LIMITED_RANGE
+  :: BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_Colorspace -> IO BG.CBool)
+lithon_SDL_ISCOLORSPACE_LIMITED_RANGE =
+  BG.unsafePerformIO hs_bindgen_7383ccedffa9acae
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISCOLORSPACE_FULL_RANGE@
+foreign import ccall unsafe "hs_bindgen_2304b4d429bcb1a4"
+  hs_bindgen_2304b4d429bcb1a4_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_get_lithon_SDL_ISCOLORSPACE_FULL_RANGE@
+hs_bindgen_2304b4d429bcb1a4
+  :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_Colorspace -> IO BG.CBool))
+hs_bindgen_2304b4d429bcb1a4 =
+  fmap BG.fromFFIType hs_bindgen_2304b4d429bcb1a4_base
+
+{-# NOINLINE lithon_SDL_ISCOLORSPACE_FULL_RANGE #-}
+
+-- | Determine if an SDL_Colorspace has a full range.
+--
+--     The SDL_ISCOLORSPACE_FULL_RANGE macro as a function.
+--
+--     [@cspace@]: an SDL_Colorspace to check.
+--
+--     [Returns]: true if full range, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISCOLORSPACE_FULL_RANGE@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 411:24@
+lithon_SDL_ISCOLORSPACE_FULL_RANGE
+  :: BG.FunPtr (SDL3.Sys.Bindgen.Pixels.SDL_Colorspace -> IO BG.CBool)
+lithon_SDL_ISCOLORSPACE_FULL_RANGE =
+  BG.unsafePerformIO hs_bindgen_2304b4d429bcb1a4
diff --git a/src/SDL3/Sys/Bindgen/PixelsShims/Safe.hs b/src/SDL3/Sys/Bindgen/PixelsShims/Safe.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/PixelsShims/Safe.hs
@@ -0,0 +1,1016 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.PixelsShims.Safe (
+  SDL3.Sys.Bindgen.PixelsShims.Safe.lithon_SDL_DEFINE_PIXELFOURCC,
+  SDL3.Sys.Bindgen.PixelsShims.Safe.lithon_SDL_BITSPERPIXEL,
+  SDL3.Sys.Bindgen.PixelsShims.Safe.lithon_SDL_BYTESPERPIXEL,
+  SDL3.Sys.Bindgen.PixelsShims.Safe.lithon_SDL_ISPIXELFORMAT_INDEXED,
+  SDL3.Sys.Bindgen.PixelsShims.Safe.lithon_SDL_ISPIXELFORMAT_PACKED,
+  SDL3.Sys.Bindgen.PixelsShims.Safe.lithon_SDL_ISPIXELFORMAT_ARRAY,
+  SDL3.Sys.Bindgen.PixelsShims.Safe.lithon_SDL_ISPIXELFORMAT_10BIT,
+  SDL3.Sys.Bindgen.PixelsShims.Safe.lithon_SDL_ISPIXELFORMAT_FLOAT,
+  SDL3.Sys.Bindgen.PixelsShims.Safe.lithon_SDL_ISPIXELFORMAT_ALPHA,
+  SDL3.Sys.Bindgen.PixelsShims.Safe.lithon_SDL_ISPIXELFORMAT_FOURCC,
+  SDL3.Sys.Bindgen.PixelsShims.Safe.lithon_SDL_DEFINE_COLORSPACE,
+  SDL3.Sys.Bindgen.PixelsShims.Safe.lithon_SDL_COLORSPACETYPE,
+  SDL3.Sys.Bindgen.PixelsShims.Safe.lithon_SDL_COLORSPACERANGE,
+  SDL3.Sys.Bindgen.PixelsShims.Safe.lithon_SDL_COLORSPACECHROMA,
+  SDL3.Sys.Bindgen.PixelsShims.Safe.lithon_SDL_COLORSPACEPRIMARIES,
+  SDL3.Sys.Bindgen.PixelsShims.Safe.lithon_SDL_COLORSPACETRANSFER,
+  SDL3.Sys.Bindgen.PixelsShims.Safe.lithon_SDL_COLORSPACEMATRIX,
+  SDL3.Sys.Bindgen.PixelsShims.Safe.lithon_SDL_ISCOLORSPACE_MATRIX_BT601,
+  SDL3.Sys.Bindgen.PixelsShims.Safe.lithon_SDL_ISCOLORSPACE_MATRIX_BT709,
+  SDL3.Sys.Bindgen.PixelsShims.Safe.lithon_SDL_ISCOLORSPACE_MATRIX_BT2020_NCL,
+  SDL3.Sys.Bindgen.PixelsShims.Safe.lithon_SDL_ISCOLORSPACE_LIMITED_RANGE,
+  SDL3.Sys.Bindgen.PixelsShims.Safe.lithon_SDL_ISCOLORSPACE_FULL_RANGE,
+)
+where
+
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
+import HsBindgen.Runtime.Support qualified
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+import SDL3.Sys.Bindgen.Pixels qualified
+import SDL3.Sys.Bindgen.Stdinc qualified
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <sdl3-bindgen-sys/SDL_pixels_shims.h>"
+         , "SDL_PixelFormat hs_bindgen_b192cab03764c2e1 ("
+         , "  Uint8 arg1,"
+         , "  Uint8 arg2,"
+         , "  Uint8 arg3,"
+         , "  Uint8 arg4"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_DEFINE_PIXELFOURCC)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "signed int hs_bindgen_a4f0abcc506bf978 ("
+         , "  SDL_PixelFormat arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_BITSPERPIXEL)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_5c131eaf309c200d ("
+         , "  SDL_PixelFormat arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_BYTESPERPIXEL)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_be1aaf19c177faf2 ("
+         , "  SDL_PixelFormat arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_ISPIXELFORMAT_INDEXED)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_19c89928e52fe240 ("
+         , "  SDL_PixelFormat arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_ISPIXELFORMAT_PACKED)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_8a6130d233a9455e ("
+         , "  SDL_PixelFormat arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_ISPIXELFORMAT_ARRAY)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_a0f8823663ad05ab ("
+         , "  SDL_PixelFormat arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_ISPIXELFORMAT_10BIT)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_81c9e9e4c06f4a78 ("
+         , "  SDL_PixelFormat arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_ISPIXELFORMAT_FLOAT)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_df30b4ff6241b8b6 ("
+         , "  SDL_PixelFormat arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_ISPIXELFORMAT_ALPHA)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_a7acd220c6e54cbc ("
+         , "  SDL_PixelFormat arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_ISPIXELFORMAT_FOURCC)(arg1);"
+         , "}"
+         , "SDL_Colorspace hs_bindgen_bf76f3e21f5375a4 ("
+         , "  SDL_ColorType arg1,"
+         , "  SDL_ColorRange arg2,"
+         , "  SDL_ColorPrimaries arg3,"
+         , "  SDL_TransferCharacteristics arg4,"
+         , "  SDL_MatrixCoefficients arg5,"
+         , "  SDL_ChromaLocation arg6"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_DEFINE_COLORSPACE)(arg1, arg2, arg3, arg4, arg5, arg6);"
+         , "}"
+         , "SDL_ColorType hs_bindgen_abcb71a974a5118e ("
+         , "  SDL_Colorspace arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_COLORSPACETYPE)(arg1);"
+         , "}"
+         , "SDL_ColorRange hs_bindgen_b404db6ea9c956f4 ("
+         , "  SDL_Colorspace arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_COLORSPACERANGE)(arg1);"
+         , "}"
+         , "SDL_ChromaLocation hs_bindgen_85a8a2787cfde705 ("
+         , "  SDL_Colorspace arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_COLORSPACECHROMA)(arg1);"
+         , "}"
+         , "SDL_ColorPrimaries hs_bindgen_c0cba15c17cb33a3 ("
+         , "  SDL_Colorspace arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_COLORSPACEPRIMARIES)(arg1);"
+         , "}"
+         , "SDL_TransferCharacteristics hs_bindgen_1766e3533e88fef4 ("
+         , "  SDL_Colorspace arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_COLORSPACETRANSFER)(arg1);"
+         , "}"
+         , "SDL_MatrixCoefficients hs_bindgen_90bb9f433edfb41b ("
+         , "  SDL_Colorspace arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_COLORSPACEMATRIX)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_75755e542106ef65 ("
+         , "  SDL_Colorspace arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_ISCOLORSPACE_MATRIX_BT601)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_247507d4bca66916 ("
+         , "  SDL_Colorspace arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_ISCOLORSPACE_MATRIX_BT709)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_216b6dfca1726094 ("
+         , "  SDL_Colorspace arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_ISCOLORSPACE_MATRIX_BT2020_NCL)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_216de31f27dc949d ("
+         , "  SDL_Colorspace arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_ISCOLORSPACE_LIMITED_RANGE)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_1809e1c7eb4f1879 ("
+         , "  SDL_Colorspace arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_ISCOLORSPACE_FULL_RANGE)(arg1);"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_DEFINE_PIXELFOURCC@
+foreign import ccall safe "hs_bindgen_b192cab03764c2e1"
+  hs_bindgen_b192cab03764c2e1_base
+    :: HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> IO HsBindgen.Runtime.Support.CUInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_DEFINE_PIXELFOURCC@
+hs_bindgen_b192cab03764c2e1
+  :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+hs_bindgen_b192cab03764c2e1 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_b192cab03764c2e1_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Define a custom FourCC pixel format.
+--
+--     The SDL_DEFINE_PIXELFOURCC macro as a function. SDL_PIXELFORMAT_YV12, for example, is the code of the characters Y, V, 1, 2.
+--
+--     [Returns]: a format value in the style of SDL_PixelFormat.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_FOURCC
+--
+--     [C declaration]: @lithon_SDL_DEFINE_PIXELFOURCC@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 42:35@
+lithon_SDL_DEFINE_PIXELFOURCC
+  :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@a@]: the first character of the FourCC code.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@b@]: the second character of the FourCC code.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@c@]: the third character of the FourCC code.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@d@]: the fourth character of the FourCC code.
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+lithon_SDL_DEFINE_PIXELFOURCC =
+  hs_bindgen_b192cab03764c2e1
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_BITSPERPIXEL@
+foreign import ccall safe "hs_bindgen_a4f0abcc506bf978"
+  hs_bindgen_a4f0abcc506bf978_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_BITSPERPIXEL@
+hs_bindgen_a4f0abcc506bf978
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -> IO BG.CInt
+hs_bindgen_a4f0abcc506bf978 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a4f0abcc506bf978_base (BG.toFFIType x0))
+
+-- | Determine an SDL_PixelFormat\'s bits per pixel.
+--
+--     The SDL_BITSPERPIXEL macro as a function. FourCC formats report zero here, as it rarely makes sense to measure them per-pixel.
+--
+--     [Returns]: the bits-per-pixel of @format@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_BYTESPERPIXEL
+--
+--     [C declaration]: @lithon_SDL_BITSPERPIXEL@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 62:23@
+lithon_SDL_BITSPERPIXEL
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -- ^
+  --
+  --           [@format@]: an SDL_PixelFormat to check.
+  -> IO BG.CInt
+lithon_SDL_BITSPERPIXEL = hs_bindgen_a4f0abcc506bf978
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_BYTESPERPIXEL@
+foreign import ccall safe "hs_bindgen_5c131eaf309c200d"
+  hs_bindgen_5c131eaf309c200d_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_BYTESPERPIXEL@
+hs_bindgen_5c131eaf309c200d
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -> IO BG.CInt
+hs_bindgen_5c131eaf309c200d =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_5c131eaf309c200d_base (BG.toFFIType x0))
+
+-- | Determine an SDL_PixelFormat\'s bytes per pixel.
+--
+--     The SDL_BYTESPERPIXEL macro as a function. FourCC formats do their best here, but many of them don\'t have a meaningful measurement of bytes per pixel.
+--
+--     [Returns]: the bytes-per-pixel of @format@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_BITSPERPIXEL
+--
+--     [C declaration]: @lithon_SDL_BYTESPERPIXEL@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 83:23@
+lithon_SDL_BYTESPERPIXEL
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -- ^
+  --
+  --           [@format@]: an SDL_PixelFormat to check.
+  -> IO BG.CInt
+lithon_SDL_BYTESPERPIXEL =
+  hs_bindgen_5c131eaf309c200d
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_ISPIXELFORMAT_INDEXED@
+foreign import ccall safe "hs_bindgen_be1aaf19c177faf2"
+  hs_bindgen_be1aaf19c177faf2_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_ISPIXELFORMAT_INDEXED@
+hs_bindgen_be1aaf19c177faf2
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -> IO BG.CBool
+hs_bindgen_be1aaf19c177faf2 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_be1aaf19c177faf2_base (BG.toFFIType x0))
+
+-- | Determine if an SDL_PixelFormat is an indexed format.
+--
+--     The SDL_ISPIXELFORMAT_INDEXED macro as a function.
+--
+--     [Returns]: true if the format is indexed, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISPIXELFORMAT_INDEXED@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 100:24@
+lithon_SDL_ISPIXELFORMAT_INDEXED
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -- ^
+  --
+  --           [@format@]: an SDL_PixelFormat to check.
+  -> IO BG.CBool
+lithon_SDL_ISPIXELFORMAT_INDEXED =
+  hs_bindgen_be1aaf19c177faf2
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_ISPIXELFORMAT_PACKED@
+foreign import ccall safe "hs_bindgen_19c89928e52fe240"
+  hs_bindgen_19c89928e52fe240_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_ISPIXELFORMAT_PACKED@
+hs_bindgen_19c89928e52fe240
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -> IO BG.CBool
+hs_bindgen_19c89928e52fe240 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_19c89928e52fe240_base (BG.toFFIType x0))
+
+-- | Determine if an SDL_PixelFormat is a packed format.
+--
+--     The SDL_ISPIXELFORMAT_PACKED macro as a function.
+--
+--     [Returns]: true if the format is packed, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISPIXELFORMAT_PACKED@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 117:24@
+lithon_SDL_ISPIXELFORMAT_PACKED
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -- ^
+  --
+  --           [@format@]: an SDL_PixelFormat to check.
+  -> IO BG.CBool
+lithon_SDL_ISPIXELFORMAT_PACKED =
+  hs_bindgen_19c89928e52fe240
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_ISPIXELFORMAT_ARRAY@
+foreign import ccall safe "hs_bindgen_8a6130d233a9455e"
+  hs_bindgen_8a6130d233a9455e_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_ISPIXELFORMAT_ARRAY@
+hs_bindgen_8a6130d233a9455e
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -> IO BG.CBool
+hs_bindgen_8a6130d233a9455e =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_8a6130d233a9455e_base (BG.toFFIType x0))
+
+-- | Determine if an SDL_PixelFormat is an array format.
+--
+--     The SDL_ISPIXELFORMAT_ARRAY macro as a function.
+--
+--     [Returns]: true if the format is an array, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISPIXELFORMAT_ARRAY@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 134:24@
+lithon_SDL_ISPIXELFORMAT_ARRAY
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -- ^
+  --
+  --           [@format@]: an SDL_PixelFormat to check.
+  -> IO BG.CBool
+lithon_SDL_ISPIXELFORMAT_ARRAY =
+  hs_bindgen_8a6130d233a9455e
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_ISPIXELFORMAT_10BIT@
+foreign import ccall safe "hs_bindgen_a0f8823663ad05ab"
+  hs_bindgen_a0f8823663ad05ab_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_ISPIXELFORMAT_10BIT@
+hs_bindgen_a0f8823663ad05ab
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -> IO BG.CBool
+hs_bindgen_a0f8823663ad05ab =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a0f8823663ad05ab_base (BG.toFFIType x0))
+
+-- | Determine if an SDL_PixelFormat is a 10-bit format.
+--
+--     The SDL_ISPIXELFORMAT_10BIT macro as a function.
+--
+--     [Returns]: true if the format is 10-bit, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISPIXELFORMAT_10BIT@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 151:24@
+lithon_SDL_ISPIXELFORMAT_10BIT
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -- ^
+  --
+  --           [@format@]: an SDL_PixelFormat to check.
+  -> IO BG.CBool
+lithon_SDL_ISPIXELFORMAT_10BIT =
+  hs_bindgen_a0f8823663ad05ab
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_ISPIXELFORMAT_FLOAT@
+foreign import ccall safe "hs_bindgen_81c9e9e4c06f4a78"
+  hs_bindgen_81c9e9e4c06f4a78_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_ISPIXELFORMAT_FLOAT@
+hs_bindgen_81c9e9e4c06f4a78
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -> IO BG.CBool
+hs_bindgen_81c9e9e4c06f4a78 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_81c9e9e4c06f4a78_base (BG.toFFIType x0))
+
+-- | Determine if an SDL_PixelFormat is a floating point format.
+--
+--     The SDL_ISPIXELFORMAT_FLOAT macro as a function.
+--
+--     [Returns]: true if the format is a floating point, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISPIXELFORMAT_FLOAT@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 168:24@
+lithon_SDL_ISPIXELFORMAT_FLOAT
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -- ^
+  --
+  --           [@format@]: an SDL_PixelFormat to check.
+  -> IO BG.CBool
+lithon_SDL_ISPIXELFORMAT_FLOAT =
+  hs_bindgen_81c9e9e4c06f4a78
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_ISPIXELFORMAT_ALPHA@
+foreign import ccall safe "hs_bindgen_df30b4ff6241b8b6"
+  hs_bindgen_df30b4ff6241b8b6_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_ISPIXELFORMAT_ALPHA@
+hs_bindgen_df30b4ff6241b8b6
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -> IO BG.CBool
+hs_bindgen_df30b4ff6241b8b6 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_df30b4ff6241b8b6_base (BG.toFFIType x0))
+
+-- | Determine if an SDL_PixelFormat has an alpha channel.
+--
+--     The SDL_ISPIXELFORMAT_ALPHA macro as a function.
+--
+--     [Returns]: true if the format has alpha, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISPIXELFORMAT_ALPHA@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 185:24@
+lithon_SDL_ISPIXELFORMAT_ALPHA
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -- ^
+  --
+  --           [@format@]: an SDL_PixelFormat to check.
+  -> IO BG.CBool
+lithon_SDL_ISPIXELFORMAT_ALPHA =
+  hs_bindgen_df30b4ff6241b8b6
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_ISPIXELFORMAT_FOURCC@
+foreign import ccall safe "hs_bindgen_a7acd220c6e54cbc"
+  hs_bindgen_a7acd220c6e54cbc_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_ISPIXELFORMAT_FOURCC@
+hs_bindgen_a7acd220c6e54cbc
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -> IO BG.CBool
+hs_bindgen_a7acd220c6e54cbc =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a7acd220c6e54cbc_base (BG.toFFIType x0))
+
+-- | Determine if an SDL_PixelFormat is a \"FourCC\" format.
+--
+--     The SDL_ISPIXELFORMAT_FOURCC macro as a function. This covers custom and other unusual formats.
+--
+--     [Returns]: true if the format is a FourCC format, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISPIXELFORMAT_FOURCC@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 202:24@
+lithon_SDL_ISPIXELFORMAT_FOURCC
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -- ^
+  --
+  --           [@format@]: an SDL_PixelFormat to check.
+  -> IO BG.CBool
+lithon_SDL_ISPIXELFORMAT_FOURCC =
+  hs_bindgen_a7acd220c6e54cbc
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_DEFINE_COLORSPACE@
+foreign import ccall safe "hs_bindgen_bf76f3e21f5375a4"
+  hs_bindgen_bf76f3e21f5375a4_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> HsBindgen.Runtime.Support.CUInt
+    -> HsBindgen.Runtime.Support.CUInt
+    -> HsBindgen.Runtime.Support.CUInt
+    -> HsBindgen.Runtime.Support.CUInt
+    -> HsBindgen.Runtime.Support.CUInt
+    -> IO HsBindgen.Runtime.Support.CUInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_DEFINE_COLORSPACE@
+hs_bindgen_bf76f3e21f5375a4
+  :: SDL3.Sys.Bindgen.Pixels.SDL_ColorType
+  -> SDL3.Sys.Bindgen.Pixels.SDL_ColorRange
+  -> SDL3.Sys.Bindgen.Pixels.SDL_ColorPrimaries
+  -> SDL3.Sys.Bindgen.Pixels.SDL_TransferCharacteristics
+  -> SDL3.Sys.Bindgen.Pixels.SDL_MatrixCoefficients
+  -> SDL3.Sys.Bindgen.Pixels.SDL_ChromaLocation
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+hs_bindgen_bf76f3e21f5375a4 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_bf76f3e21f5375a4_base
+                    (BG.toFFIType x0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                    (BG.toFFIType x4)
+                    (BG.toFFIType x5)
+                )
+
+-- | Define a custom colorspace.
+--
+--     The SDL_DEFINE_COLORSPACE macro as a function.
+--
+--     [Returns]: a format value in the style of SDL_Colorspace.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_DEFINE_COLORSPACE@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 224:34@
+lithon_SDL_DEFINE_COLORSPACE
+  :: SDL3.Sys.Bindgen.Pixels.SDL_ColorType
+  -- ^
+  --
+  --           [@type@]: the type of the new format.
+  -> SDL3.Sys.Bindgen.Pixels.SDL_ColorRange
+  -- ^
+  --
+  --           [@range@]: the range of the new format.
+  -> SDL3.Sys.Bindgen.Pixels.SDL_ColorPrimaries
+  -- ^
+  --
+  --           [@primaries@]: the primaries of the new format.
+  -> SDL3.Sys.Bindgen.Pixels.SDL_TransferCharacteristics
+  -- ^
+  --
+  --           [@transfer@]: the transfer characteristics of the new format.
+  -> SDL3.Sys.Bindgen.Pixels.SDL_MatrixCoefficients
+  -- ^
+  --
+  --           [@matrix@]: the matrix coefficients of the new format.
+  -> SDL3.Sys.Bindgen.Pixels.SDL_ChromaLocation
+  -- ^
+  --
+  --           [@chroma@]: the chroma sample location of the new format.
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+lithon_SDL_DEFINE_COLORSPACE =
+  hs_bindgen_bf76f3e21f5375a4
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_COLORSPACETYPE@
+foreign import ccall safe "hs_bindgen_abcb71a974a5118e"
+  hs_bindgen_abcb71a974a5118e_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO HsBindgen.Runtime.Support.CUInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_COLORSPACETYPE@
+hs_bindgen_abcb71a974a5118e
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_ColorType
+hs_bindgen_abcb71a974a5118e =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_abcb71a974a5118e_base (BG.toFFIType x0))
+
+-- | Retrieve the type of an SDL_Colorspace.
+--
+--     The SDL_COLORSPACETYPE macro as a function.
+--
+--     [Returns]: the SDL_ColorType of @cspace@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_COLORSPACETYPE@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 241:33@
+lithon_SDL_COLORSPACETYPE
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -- ^
+  --
+  --           [@cspace@]: an SDL_Colorspace to check.
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_ColorType
+lithon_SDL_COLORSPACETYPE =
+  hs_bindgen_abcb71a974a5118e
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_COLORSPACERANGE@
+foreign import ccall safe "hs_bindgen_b404db6ea9c956f4"
+  hs_bindgen_b404db6ea9c956f4_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO HsBindgen.Runtime.Support.CUInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_COLORSPACERANGE@
+hs_bindgen_b404db6ea9c956f4
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_ColorRange
+hs_bindgen_b404db6ea9c956f4 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_b404db6ea9c956f4_base (BG.toFFIType x0))
+
+-- | Retrieve the range of an SDL_Colorspace.
+--
+--     The SDL_COLORSPACERANGE macro as a function.
+--
+--     [Returns]: the SDL_ColorRange of @cspace@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_COLORSPACERANGE@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 258:34@
+lithon_SDL_COLORSPACERANGE
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -- ^
+  --
+  --           [@cspace@]: an SDL_Colorspace to check.
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_ColorRange
+lithon_SDL_COLORSPACERANGE =
+  hs_bindgen_b404db6ea9c956f4
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_COLORSPACECHROMA@
+foreign import ccall safe "hs_bindgen_85a8a2787cfde705"
+  hs_bindgen_85a8a2787cfde705_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO HsBindgen.Runtime.Support.CUInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_COLORSPACECHROMA@
+hs_bindgen_85a8a2787cfde705
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_ChromaLocation
+hs_bindgen_85a8a2787cfde705 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_85a8a2787cfde705_base (BG.toFFIType x0))
+
+-- | Retrieve the chroma sample location of an SDL_Colorspace.
+--
+--     The SDL_COLORSPACECHROMA macro as a function.
+--
+--     [Returns]: the SDL_ChromaLocation of @cspace@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_COLORSPACECHROMA@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 275:38@
+lithon_SDL_COLORSPACECHROMA
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -- ^
+  --
+  --           [@cspace@]: an SDL_Colorspace to check.
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_ChromaLocation
+lithon_SDL_COLORSPACECHROMA =
+  hs_bindgen_85a8a2787cfde705
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_COLORSPACEPRIMARIES@
+foreign import ccall safe "hs_bindgen_c0cba15c17cb33a3"
+  hs_bindgen_c0cba15c17cb33a3_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO HsBindgen.Runtime.Support.CUInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_COLORSPACEPRIMARIES@
+hs_bindgen_c0cba15c17cb33a3
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_ColorPrimaries
+hs_bindgen_c0cba15c17cb33a3 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c0cba15c17cb33a3_base (BG.toFFIType x0))
+
+-- | Retrieve the primaries of an SDL_Colorspace.
+--
+--     The SDL_COLORSPACEPRIMARIES macro as a function.
+--
+--     [Returns]: the SDL_ColorPrimaries of @cspace@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_COLORSPACEPRIMARIES@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 292:38@
+lithon_SDL_COLORSPACEPRIMARIES
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -- ^
+  --
+  --           [@cspace@]: an SDL_Colorspace to check.
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_ColorPrimaries
+lithon_SDL_COLORSPACEPRIMARIES =
+  hs_bindgen_c0cba15c17cb33a3
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_COLORSPACETRANSFER@
+foreign import ccall safe "hs_bindgen_1766e3533e88fef4"
+  hs_bindgen_1766e3533e88fef4_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO HsBindgen.Runtime.Support.CUInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_COLORSPACETRANSFER@
+hs_bindgen_1766e3533e88fef4
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_TransferCharacteristics
+hs_bindgen_1766e3533e88fef4 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_1766e3533e88fef4_base (BG.toFFIType x0))
+
+-- | Retrieve the transfer characteristics of an SDL_Colorspace.
+--
+--     The SDL_COLORSPACETRANSFER macro as a function.
+--
+--     [Returns]: the SDL_TransferCharacteristics of @cspace@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_COLORSPACETRANSFER@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 309:47@
+lithon_SDL_COLORSPACETRANSFER
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -- ^
+  --
+  --           [@cspace@]: an SDL_Colorspace to check.
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_TransferCharacteristics
+lithon_SDL_COLORSPACETRANSFER =
+  hs_bindgen_1766e3533e88fef4
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_COLORSPACEMATRIX@
+foreign import ccall safe "hs_bindgen_90bb9f433edfb41b"
+  hs_bindgen_90bb9f433edfb41b_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO HsBindgen.Runtime.Support.CUInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_COLORSPACEMATRIX@
+hs_bindgen_90bb9f433edfb41b
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_MatrixCoefficients
+hs_bindgen_90bb9f433edfb41b =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_90bb9f433edfb41b_base (BG.toFFIType x0))
+
+-- | Retrieve the matrix coefficients of an SDL_Colorspace.
+--
+--     The SDL_COLORSPACEMATRIX macro as a function.
+--
+--     [Returns]: the SDL_MatrixCoefficients of @cspace@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_COLORSPACEMATRIX@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 326:42@
+lithon_SDL_COLORSPACEMATRIX
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -- ^
+  --
+  --           [@cspace@]: an SDL_Colorspace to check.
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_MatrixCoefficients
+lithon_SDL_COLORSPACEMATRIX =
+  hs_bindgen_90bb9f433edfb41b
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_ISCOLORSPACE_MATRIX_BT601@
+foreign import ccall safe "hs_bindgen_75755e542106ef65"
+  hs_bindgen_75755e542106ef65_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_ISCOLORSPACE_MATRIX_BT601@
+hs_bindgen_75755e542106ef65
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -> IO BG.CBool
+hs_bindgen_75755e542106ef65 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_75755e542106ef65_base (BG.toFFIType x0))
+
+-- | Determine if an SDL_Colorspace uses BT601 (or BT470BG) matrix coefficients.
+--
+--     The SDL_ISCOLORSPACE_MATRIX_BT601 macro as a function.
+--
+--     [Returns]: true if BT601 or BT470BG, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISCOLORSPACE_MATRIX_BT601@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 343:24@
+lithon_SDL_ISCOLORSPACE_MATRIX_BT601
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -- ^
+  --
+  --           [@cspace@]: an SDL_Colorspace to check.
+  -> IO BG.CBool
+lithon_SDL_ISCOLORSPACE_MATRIX_BT601 =
+  hs_bindgen_75755e542106ef65
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_ISCOLORSPACE_MATRIX_BT709@
+foreign import ccall safe "hs_bindgen_247507d4bca66916"
+  hs_bindgen_247507d4bca66916_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_ISCOLORSPACE_MATRIX_BT709@
+hs_bindgen_247507d4bca66916
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -> IO BG.CBool
+hs_bindgen_247507d4bca66916 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_247507d4bca66916_base (BG.toFFIType x0))
+
+-- | Determine if an SDL_Colorspace uses BT709 matrix coefficients.
+--
+--     The SDL_ISCOLORSPACE_MATRIX_BT709 macro as a function.
+--
+--     [Returns]: true if BT709, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISCOLORSPACE_MATRIX_BT709@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 360:24@
+lithon_SDL_ISCOLORSPACE_MATRIX_BT709
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -- ^
+  --
+  --           [@cspace@]: an SDL_Colorspace to check.
+  -> IO BG.CBool
+lithon_SDL_ISCOLORSPACE_MATRIX_BT709 =
+  hs_bindgen_247507d4bca66916
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_ISCOLORSPACE_MATRIX_BT2020_NCL@
+foreign import ccall safe "hs_bindgen_216b6dfca1726094"
+  hs_bindgen_216b6dfca1726094_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_ISCOLORSPACE_MATRIX_BT2020_NCL@
+hs_bindgen_216b6dfca1726094
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -> IO BG.CBool
+hs_bindgen_216b6dfca1726094 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_216b6dfca1726094_base (BG.toFFIType x0))
+
+-- | Determine if an SDL_Colorspace uses BT2020_NCL matrix coefficients.
+--
+--     The SDL_ISCOLORSPACE_MATRIX_BT2020_NCL macro as a function.
+--
+--     [Returns]: true if BT2020_NCL, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISCOLORSPACE_MATRIX_BT2020_NCL@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 377:24@
+lithon_SDL_ISCOLORSPACE_MATRIX_BT2020_NCL
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -- ^
+  --
+  --           [@cspace@]: an SDL_Colorspace to check.
+  -> IO BG.CBool
+lithon_SDL_ISCOLORSPACE_MATRIX_BT2020_NCL =
+  hs_bindgen_216b6dfca1726094
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_ISCOLORSPACE_LIMITED_RANGE@
+foreign import ccall safe "hs_bindgen_216de31f27dc949d"
+  hs_bindgen_216de31f27dc949d_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_ISCOLORSPACE_LIMITED_RANGE@
+hs_bindgen_216de31f27dc949d
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -> IO BG.CBool
+hs_bindgen_216de31f27dc949d =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_216de31f27dc949d_base (BG.toFFIType x0))
+
+-- | Determine if an SDL_Colorspace has a limited range.
+--
+--     The SDL_ISCOLORSPACE_LIMITED_RANGE macro as a function.
+--
+--     [Returns]: true if limited range, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISCOLORSPACE_LIMITED_RANGE@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 394:24@
+lithon_SDL_ISCOLORSPACE_LIMITED_RANGE
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -- ^
+  --
+  --           [@cspace@]: an SDL_Colorspace to check.
+  -> IO BG.CBool
+lithon_SDL_ISCOLORSPACE_LIMITED_RANGE =
+  hs_bindgen_216de31f27dc949d
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_ISCOLORSPACE_FULL_RANGE@
+foreign import ccall safe "hs_bindgen_1809e1c7eb4f1879"
+  hs_bindgen_1809e1c7eb4f1879_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Safe_lithon_SDL_ISCOLORSPACE_FULL_RANGE@
+hs_bindgen_1809e1c7eb4f1879
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -> IO BG.CBool
+hs_bindgen_1809e1c7eb4f1879 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_1809e1c7eb4f1879_base (BG.toFFIType x0))
+
+-- | Determine if an SDL_Colorspace has a full range.
+--
+--     The SDL_ISCOLORSPACE_FULL_RANGE macro as a function.
+--
+--     [Returns]: true if full range, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISCOLORSPACE_FULL_RANGE@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 411:24@
+lithon_SDL_ISCOLORSPACE_FULL_RANGE
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -- ^
+  --
+  --           [@cspace@]: an SDL_Colorspace to check.
+  -> IO BG.CBool
+lithon_SDL_ISCOLORSPACE_FULL_RANGE =
+  hs_bindgen_1809e1c7eb4f1879
diff --git a/src/SDL3/Sys/Bindgen/PixelsShims/Unsafe.hs b/src/SDL3/Sys/Bindgen/PixelsShims/Unsafe.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/PixelsShims/Unsafe.hs
@@ -0,0 +1,1016 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.PixelsShims.Unsafe (
+  SDL3.Sys.Bindgen.PixelsShims.Unsafe.lithon_SDL_DEFINE_PIXELFOURCC,
+  SDL3.Sys.Bindgen.PixelsShims.Unsafe.lithon_SDL_BITSPERPIXEL,
+  SDL3.Sys.Bindgen.PixelsShims.Unsafe.lithon_SDL_BYTESPERPIXEL,
+  SDL3.Sys.Bindgen.PixelsShims.Unsafe.lithon_SDL_ISPIXELFORMAT_INDEXED,
+  SDL3.Sys.Bindgen.PixelsShims.Unsafe.lithon_SDL_ISPIXELFORMAT_PACKED,
+  SDL3.Sys.Bindgen.PixelsShims.Unsafe.lithon_SDL_ISPIXELFORMAT_ARRAY,
+  SDL3.Sys.Bindgen.PixelsShims.Unsafe.lithon_SDL_ISPIXELFORMAT_10BIT,
+  SDL3.Sys.Bindgen.PixelsShims.Unsafe.lithon_SDL_ISPIXELFORMAT_FLOAT,
+  SDL3.Sys.Bindgen.PixelsShims.Unsafe.lithon_SDL_ISPIXELFORMAT_ALPHA,
+  SDL3.Sys.Bindgen.PixelsShims.Unsafe.lithon_SDL_ISPIXELFORMAT_FOURCC,
+  SDL3.Sys.Bindgen.PixelsShims.Unsafe.lithon_SDL_DEFINE_COLORSPACE,
+  SDL3.Sys.Bindgen.PixelsShims.Unsafe.lithon_SDL_COLORSPACETYPE,
+  SDL3.Sys.Bindgen.PixelsShims.Unsafe.lithon_SDL_COLORSPACERANGE,
+  SDL3.Sys.Bindgen.PixelsShims.Unsafe.lithon_SDL_COLORSPACECHROMA,
+  SDL3.Sys.Bindgen.PixelsShims.Unsafe.lithon_SDL_COLORSPACEPRIMARIES,
+  SDL3.Sys.Bindgen.PixelsShims.Unsafe.lithon_SDL_COLORSPACETRANSFER,
+  SDL3.Sys.Bindgen.PixelsShims.Unsafe.lithon_SDL_COLORSPACEMATRIX,
+  SDL3.Sys.Bindgen.PixelsShims.Unsafe.lithon_SDL_ISCOLORSPACE_MATRIX_BT601,
+  SDL3.Sys.Bindgen.PixelsShims.Unsafe.lithon_SDL_ISCOLORSPACE_MATRIX_BT709,
+  SDL3.Sys.Bindgen.PixelsShims.Unsafe.lithon_SDL_ISCOLORSPACE_MATRIX_BT2020_NCL,
+  SDL3.Sys.Bindgen.PixelsShims.Unsafe.lithon_SDL_ISCOLORSPACE_LIMITED_RANGE,
+  SDL3.Sys.Bindgen.PixelsShims.Unsafe.lithon_SDL_ISCOLORSPACE_FULL_RANGE,
+)
+where
+
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
+import HsBindgen.Runtime.Support qualified
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+import SDL3.Sys.Bindgen.Pixels qualified
+import SDL3.Sys.Bindgen.Stdinc qualified
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <sdl3-bindgen-sys/SDL_pixels_shims.h>"
+         , "SDL_PixelFormat hs_bindgen_b6e6cb421f9536a7 ("
+         , "  Uint8 arg1,"
+         , "  Uint8 arg2,"
+         , "  Uint8 arg3,"
+         , "  Uint8 arg4"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_DEFINE_PIXELFOURCC)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "signed int hs_bindgen_6c13695713ec0ffc ("
+         , "  SDL_PixelFormat arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_BITSPERPIXEL)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_78294c7e466d4e61 ("
+         , "  SDL_PixelFormat arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_BYTESPERPIXEL)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_40831dbbe85827ad ("
+         , "  SDL_PixelFormat arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_ISPIXELFORMAT_INDEXED)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_3191f42e67c57e54 ("
+         , "  SDL_PixelFormat arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_ISPIXELFORMAT_PACKED)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_2af2538eef4f8f23 ("
+         , "  SDL_PixelFormat arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_ISPIXELFORMAT_ARRAY)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_25a896e932f35d03 ("
+         , "  SDL_PixelFormat arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_ISPIXELFORMAT_10BIT)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_1d30d459694eed17 ("
+         , "  SDL_PixelFormat arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_ISPIXELFORMAT_FLOAT)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_951237ce12a1e45a ("
+         , "  SDL_PixelFormat arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_ISPIXELFORMAT_ALPHA)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_d6030f63e3286fbf ("
+         , "  SDL_PixelFormat arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_ISPIXELFORMAT_FOURCC)(arg1);"
+         , "}"
+         , "SDL_Colorspace hs_bindgen_e61501a2d4c0130e ("
+         , "  SDL_ColorType arg1,"
+         , "  SDL_ColorRange arg2,"
+         , "  SDL_ColorPrimaries arg3,"
+         , "  SDL_TransferCharacteristics arg4,"
+         , "  SDL_MatrixCoefficients arg5,"
+         , "  SDL_ChromaLocation arg6"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_DEFINE_COLORSPACE)(arg1, arg2, arg3, arg4, arg5, arg6);"
+         , "}"
+         , "SDL_ColorType hs_bindgen_646ed96900ed3b90 ("
+         , "  SDL_Colorspace arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_COLORSPACETYPE)(arg1);"
+         , "}"
+         , "SDL_ColorRange hs_bindgen_de34abf61cebd94a ("
+         , "  SDL_Colorspace arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_COLORSPACERANGE)(arg1);"
+         , "}"
+         , "SDL_ChromaLocation hs_bindgen_ad210a069d48c258 ("
+         , "  SDL_Colorspace arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_COLORSPACECHROMA)(arg1);"
+         , "}"
+         , "SDL_ColorPrimaries hs_bindgen_401d8436f07a0cfa ("
+         , "  SDL_Colorspace arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_COLORSPACEPRIMARIES)(arg1);"
+         , "}"
+         , "SDL_TransferCharacteristics hs_bindgen_d81b18369780307b ("
+         , "  SDL_Colorspace arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_COLORSPACETRANSFER)(arg1);"
+         , "}"
+         , "SDL_MatrixCoefficients hs_bindgen_4d7197f1caf18127 ("
+         , "  SDL_Colorspace arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_COLORSPACEMATRIX)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_4c093d1641e16c6f ("
+         , "  SDL_Colorspace arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_ISCOLORSPACE_MATRIX_BT601)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_5e1ce396f70643b8 ("
+         , "  SDL_Colorspace arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_ISCOLORSPACE_MATRIX_BT709)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_53b7a5205ff2c3a7 ("
+         , "  SDL_Colorspace arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_ISCOLORSPACE_MATRIX_BT2020_NCL)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_cdcead323f5c37eb ("
+         , "  SDL_Colorspace arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_ISCOLORSPACE_LIMITED_RANGE)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_2e5c63551f830e6e ("
+         , "  SDL_Colorspace arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_ISCOLORSPACE_FULL_RANGE)(arg1);"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_DEFINE_PIXELFOURCC@
+foreign import ccall unsafe "hs_bindgen_b6e6cb421f9536a7"
+  hs_bindgen_b6e6cb421f9536a7_base
+    :: HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> IO HsBindgen.Runtime.Support.CUInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_DEFINE_PIXELFOURCC@
+hs_bindgen_b6e6cb421f9536a7
+  :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+hs_bindgen_b6e6cb421f9536a7 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_b6e6cb421f9536a7_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Define a custom FourCC pixel format.
+--
+--     The SDL_DEFINE_PIXELFOURCC macro as a function. SDL_PIXELFORMAT_YV12, for example, is the code of the characters Y, V, 1, 2.
+--
+--     [Returns]: a format value in the style of SDL_PixelFormat.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_FOURCC
+--
+--     [C declaration]: @lithon_SDL_DEFINE_PIXELFOURCC@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 42:35@
+lithon_SDL_DEFINE_PIXELFOURCC
+  :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@a@]: the first character of the FourCC code.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@b@]: the second character of the FourCC code.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@c@]: the third character of the FourCC code.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@d@]: the fourth character of the FourCC code.
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+lithon_SDL_DEFINE_PIXELFOURCC =
+  hs_bindgen_b6e6cb421f9536a7
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_BITSPERPIXEL@
+foreign import ccall unsafe "hs_bindgen_6c13695713ec0ffc"
+  hs_bindgen_6c13695713ec0ffc_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_BITSPERPIXEL@
+hs_bindgen_6c13695713ec0ffc
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -> IO BG.CInt
+hs_bindgen_6c13695713ec0ffc =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_6c13695713ec0ffc_base (BG.toFFIType x0))
+
+-- | Determine an SDL_PixelFormat\'s bits per pixel.
+--
+--     The SDL_BITSPERPIXEL macro as a function. FourCC formats report zero here, as it rarely makes sense to measure them per-pixel.
+--
+--     [Returns]: the bits-per-pixel of @format@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_BYTESPERPIXEL
+--
+--     [C declaration]: @lithon_SDL_BITSPERPIXEL@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 62:23@
+lithon_SDL_BITSPERPIXEL
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -- ^
+  --
+  --           [@format@]: an SDL_PixelFormat to check.
+  -> IO BG.CInt
+lithon_SDL_BITSPERPIXEL = hs_bindgen_6c13695713ec0ffc
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_BYTESPERPIXEL@
+foreign import ccall unsafe "hs_bindgen_78294c7e466d4e61"
+  hs_bindgen_78294c7e466d4e61_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_BYTESPERPIXEL@
+hs_bindgen_78294c7e466d4e61
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -> IO BG.CInt
+hs_bindgen_78294c7e466d4e61 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_78294c7e466d4e61_base (BG.toFFIType x0))
+
+-- | Determine an SDL_PixelFormat\'s bytes per pixel.
+--
+--     The SDL_BYTESPERPIXEL macro as a function. FourCC formats do their best here, but many of them don\'t have a meaningful measurement of bytes per pixel.
+--
+--     [Returns]: the bytes-per-pixel of @format@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_BITSPERPIXEL
+--
+--     [C declaration]: @lithon_SDL_BYTESPERPIXEL@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 83:23@
+lithon_SDL_BYTESPERPIXEL
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -- ^
+  --
+  --           [@format@]: an SDL_PixelFormat to check.
+  -> IO BG.CInt
+lithon_SDL_BYTESPERPIXEL =
+  hs_bindgen_78294c7e466d4e61
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_ISPIXELFORMAT_INDEXED@
+foreign import ccall unsafe "hs_bindgen_40831dbbe85827ad"
+  hs_bindgen_40831dbbe85827ad_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_ISPIXELFORMAT_INDEXED@
+hs_bindgen_40831dbbe85827ad
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -> IO BG.CBool
+hs_bindgen_40831dbbe85827ad =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_40831dbbe85827ad_base (BG.toFFIType x0))
+
+-- | Determine if an SDL_PixelFormat is an indexed format.
+--
+--     The SDL_ISPIXELFORMAT_INDEXED macro as a function.
+--
+--     [Returns]: true if the format is indexed, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISPIXELFORMAT_INDEXED@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 100:24@
+lithon_SDL_ISPIXELFORMAT_INDEXED
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -- ^
+  --
+  --           [@format@]: an SDL_PixelFormat to check.
+  -> IO BG.CBool
+lithon_SDL_ISPIXELFORMAT_INDEXED =
+  hs_bindgen_40831dbbe85827ad
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_ISPIXELFORMAT_PACKED@
+foreign import ccall unsafe "hs_bindgen_3191f42e67c57e54"
+  hs_bindgen_3191f42e67c57e54_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_ISPIXELFORMAT_PACKED@
+hs_bindgen_3191f42e67c57e54
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -> IO BG.CBool
+hs_bindgen_3191f42e67c57e54 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3191f42e67c57e54_base (BG.toFFIType x0))
+
+-- | Determine if an SDL_PixelFormat is a packed format.
+--
+--     The SDL_ISPIXELFORMAT_PACKED macro as a function.
+--
+--     [Returns]: true if the format is packed, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISPIXELFORMAT_PACKED@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 117:24@
+lithon_SDL_ISPIXELFORMAT_PACKED
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -- ^
+  --
+  --           [@format@]: an SDL_PixelFormat to check.
+  -> IO BG.CBool
+lithon_SDL_ISPIXELFORMAT_PACKED =
+  hs_bindgen_3191f42e67c57e54
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_ISPIXELFORMAT_ARRAY@
+foreign import ccall unsafe "hs_bindgen_2af2538eef4f8f23"
+  hs_bindgen_2af2538eef4f8f23_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_ISPIXELFORMAT_ARRAY@
+hs_bindgen_2af2538eef4f8f23
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -> IO BG.CBool
+hs_bindgen_2af2538eef4f8f23 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_2af2538eef4f8f23_base (BG.toFFIType x0))
+
+-- | Determine if an SDL_PixelFormat is an array format.
+--
+--     The SDL_ISPIXELFORMAT_ARRAY macro as a function.
+--
+--     [Returns]: true if the format is an array, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISPIXELFORMAT_ARRAY@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 134:24@
+lithon_SDL_ISPIXELFORMAT_ARRAY
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -- ^
+  --
+  --           [@format@]: an SDL_PixelFormat to check.
+  -> IO BG.CBool
+lithon_SDL_ISPIXELFORMAT_ARRAY =
+  hs_bindgen_2af2538eef4f8f23
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_ISPIXELFORMAT_10BIT@
+foreign import ccall unsafe "hs_bindgen_25a896e932f35d03"
+  hs_bindgen_25a896e932f35d03_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_ISPIXELFORMAT_10BIT@
+hs_bindgen_25a896e932f35d03
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -> IO BG.CBool
+hs_bindgen_25a896e932f35d03 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_25a896e932f35d03_base (BG.toFFIType x0))
+
+-- | Determine if an SDL_PixelFormat is a 10-bit format.
+--
+--     The SDL_ISPIXELFORMAT_10BIT macro as a function.
+--
+--     [Returns]: true if the format is 10-bit, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISPIXELFORMAT_10BIT@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 151:24@
+lithon_SDL_ISPIXELFORMAT_10BIT
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -- ^
+  --
+  --           [@format@]: an SDL_PixelFormat to check.
+  -> IO BG.CBool
+lithon_SDL_ISPIXELFORMAT_10BIT =
+  hs_bindgen_25a896e932f35d03
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_ISPIXELFORMAT_FLOAT@
+foreign import ccall unsafe "hs_bindgen_1d30d459694eed17"
+  hs_bindgen_1d30d459694eed17_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_ISPIXELFORMAT_FLOAT@
+hs_bindgen_1d30d459694eed17
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -> IO BG.CBool
+hs_bindgen_1d30d459694eed17 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_1d30d459694eed17_base (BG.toFFIType x0))
+
+-- | Determine if an SDL_PixelFormat is a floating point format.
+--
+--     The SDL_ISPIXELFORMAT_FLOAT macro as a function.
+--
+--     [Returns]: true if the format is a floating point, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISPIXELFORMAT_FLOAT@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 168:24@
+lithon_SDL_ISPIXELFORMAT_FLOAT
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -- ^
+  --
+  --           [@format@]: an SDL_PixelFormat to check.
+  -> IO BG.CBool
+lithon_SDL_ISPIXELFORMAT_FLOAT =
+  hs_bindgen_1d30d459694eed17
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_ISPIXELFORMAT_ALPHA@
+foreign import ccall unsafe "hs_bindgen_951237ce12a1e45a"
+  hs_bindgen_951237ce12a1e45a_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_ISPIXELFORMAT_ALPHA@
+hs_bindgen_951237ce12a1e45a
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -> IO BG.CBool
+hs_bindgen_951237ce12a1e45a =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_951237ce12a1e45a_base (BG.toFFIType x0))
+
+-- | Determine if an SDL_PixelFormat has an alpha channel.
+--
+--     The SDL_ISPIXELFORMAT_ALPHA macro as a function.
+--
+--     [Returns]: true if the format has alpha, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISPIXELFORMAT_ALPHA@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 185:24@
+lithon_SDL_ISPIXELFORMAT_ALPHA
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -- ^
+  --
+  --           [@format@]: an SDL_PixelFormat to check.
+  -> IO BG.CBool
+lithon_SDL_ISPIXELFORMAT_ALPHA =
+  hs_bindgen_951237ce12a1e45a
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_ISPIXELFORMAT_FOURCC@
+foreign import ccall unsafe "hs_bindgen_d6030f63e3286fbf"
+  hs_bindgen_d6030f63e3286fbf_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_ISPIXELFORMAT_FOURCC@
+hs_bindgen_d6030f63e3286fbf
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -> IO BG.CBool
+hs_bindgen_d6030f63e3286fbf =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d6030f63e3286fbf_base (BG.toFFIType x0))
+
+-- | Determine if an SDL_PixelFormat is a \"FourCC\" format.
+--
+--     The SDL_ISPIXELFORMAT_FOURCC macro as a function. This covers custom and other unusual formats.
+--
+--     [Returns]: true if the format is a FourCC format, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISPIXELFORMAT_FOURCC@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 202:24@
+lithon_SDL_ISPIXELFORMAT_FOURCC
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -- ^
+  --
+  --           [@format@]: an SDL_PixelFormat to check.
+  -> IO BG.CBool
+lithon_SDL_ISPIXELFORMAT_FOURCC =
+  hs_bindgen_d6030f63e3286fbf
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_DEFINE_COLORSPACE@
+foreign import ccall unsafe "hs_bindgen_e61501a2d4c0130e"
+  hs_bindgen_e61501a2d4c0130e_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> HsBindgen.Runtime.Support.CUInt
+    -> HsBindgen.Runtime.Support.CUInt
+    -> HsBindgen.Runtime.Support.CUInt
+    -> HsBindgen.Runtime.Support.CUInt
+    -> HsBindgen.Runtime.Support.CUInt
+    -> IO HsBindgen.Runtime.Support.CUInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_DEFINE_COLORSPACE@
+hs_bindgen_e61501a2d4c0130e
+  :: SDL3.Sys.Bindgen.Pixels.SDL_ColorType
+  -> SDL3.Sys.Bindgen.Pixels.SDL_ColorRange
+  -> SDL3.Sys.Bindgen.Pixels.SDL_ColorPrimaries
+  -> SDL3.Sys.Bindgen.Pixels.SDL_TransferCharacteristics
+  -> SDL3.Sys.Bindgen.Pixels.SDL_MatrixCoefficients
+  -> SDL3.Sys.Bindgen.Pixels.SDL_ChromaLocation
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+hs_bindgen_e61501a2d4c0130e =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_e61501a2d4c0130e_base
+                    (BG.toFFIType x0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                    (BG.toFFIType x4)
+                    (BG.toFFIType x5)
+                )
+
+-- | Define a custom colorspace.
+--
+--     The SDL_DEFINE_COLORSPACE macro as a function.
+--
+--     [Returns]: a format value in the style of SDL_Colorspace.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_DEFINE_COLORSPACE@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 224:34@
+lithon_SDL_DEFINE_COLORSPACE
+  :: SDL3.Sys.Bindgen.Pixels.SDL_ColorType
+  -- ^
+  --
+  --           [@type@]: the type of the new format.
+  -> SDL3.Sys.Bindgen.Pixels.SDL_ColorRange
+  -- ^
+  --
+  --           [@range@]: the range of the new format.
+  -> SDL3.Sys.Bindgen.Pixels.SDL_ColorPrimaries
+  -- ^
+  --
+  --           [@primaries@]: the primaries of the new format.
+  -> SDL3.Sys.Bindgen.Pixels.SDL_TransferCharacteristics
+  -- ^
+  --
+  --           [@transfer@]: the transfer characteristics of the new format.
+  -> SDL3.Sys.Bindgen.Pixels.SDL_MatrixCoefficients
+  -- ^
+  --
+  --           [@matrix@]: the matrix coefficients of the new format.
+  -> SDL3.Sys.Bindgen.Pixels.SDL_ChromaLocation
+  -- ^
+  --
+  --           [@chroma@]: the chroma sample location of the new format.
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+lithon_SDL_DEFINE_COLORSPACE =
+  hs_bindgen_e61501a2d4c0130e
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_COLORSPACETYPE@
+foreign import ccall unsafe "hs_bindgen_646ed96900ed3b90"
+  hs_bindgen_646ed96900ed3b90_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO HsBindgen.Runtime.Support.CUInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_COLORSPACETYPE@
+hs_bindgen_646ed96900ed3b90
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_ColorType
+hs_bindgen_646ed96900ed3b90 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_646ed96900ed3b90_base (BG.toFFIType x0))
+
+-- | Retrieve the type of an SDL_Colorspace.
+--
+--     The SDL_COLORSPACETYPE macro as a function.
+--
+--     [Returns]: the SDL_ColorType of @cspace@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_COLORSPACETYPE@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 241:33@
+lithon_SDL_COLORSPACETYPE
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -- ^
+  --
+  --           [@cspace@]: an SDL_Colorspace to check.
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_ColorType
+lithon_SDL_COLORSPACETYPE =
+  hs_bindgen_646ed96900ed3b90
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_COLORSPACERANGE@
+foreign import ccall unsafe "hs_bindgen_de34abf61cebd94a"
+  hs_bindgen_de34abf61cebd94a_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO HsBindgen.Runtime.Support.CUInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_COLORSPACERANGE@
+hs_bindgen_de34abf61cebd94a
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_ColorRange
+hs_bindgen_de34abf61cebd94a =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_de34abf61cebd94a_base (BG.toFFIType x0))
+
+-- | Retrieve the range of an SDL_Colorspace.
+--
+--     The SDL_COLORSPACERANGE macro as a function.
+--
+--     [Returns]: the SDL_ColorRange of @cspace@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_COLORSPACERANGE@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 258:34@
+lithon_SDL_COLORSPACERANGE
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -- ^
+  --
+  --           [@cspace@]: an SDL_Colorspace to check.
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_ColorRange
+lithon_SDL_COLORSPACERANGE =
+  hs_bindgen_de34abf61cebd94a
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_COLORSPACECHROMA@
+foreign import ccall unsafe "hs_bindgen_ad210a069d48c258"
+  hs_bindgen_ad210a069d48c258_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO HsBindgen.Runtime.Support.CUInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_COLORSPACECHROMA@
+hs_bindgen_ad210a069d48c258
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_ChromaLocation
+hs_bindgen_ad210a069d48c258 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_ad210a069d48c258_base (BG.toFFIType x0))
+
+-- | Retrieve the chroma sample location of an SDL_Colorspace.
+--
+--     The SDL_COLORSPACECHROMA macro as a function.
+--
+--     [Returns]: the SDL_ChromaLocation of @cspace@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_COLORSPACECHROMA@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 275:38@
+lithon_SDL_COLORSPACECHROMA
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -- ^
+  --
+  --           [@cspace@]: an SDL_Colorspace to check.
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_ChromaLocation
+lithon_SDL_COLORSPACECHROMA =
+  hs_bindgen_ad210a069d48c258
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_COLORSPACEPRIMARIES@
+foreign import ccall unsafe "hs_bindgen_401d8436f07a0cfa"
+  hs_bindgen_401d8436f07a0cfa_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO HsBindgen.Runtime.Support.CUInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_COLORSPACEPRIMARIES@
+hs_bindgen_401d8436f07a0cfa
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_ColorPrimaries
+hs_bindgen_401d8436f07a0cfa =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_401d8436f07a0cfa_base (BG.toFFIType x0))
+
+-- | Retrieve the primaries of an SDL_Colorspace.
+--
+--     The SDL_COLORSPACEPRIMARIES macro as a function.
+--
+--     [Returns]: the SDL_ColorPrimaries of @cspace@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_COLORSPACEPRIMARIES@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 292:38@
+lithon_SDL_COLORSPACEPRIMARIES
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -- ^
+  --
+  --           [@cspace@]: an SDL_Colorspace to check.
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_ColorPrimaries
+lithon_SDL_COLORSPACEPRIMARIES =
+  hs_bindgen_401d8436f07a0cfa
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_COLORSPACETRANSFER@
+foreign import ccall unsafe "hs_bindgen_d81b18369780307b"
+  hs_bindgen_d81b18369780307b_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO HsBindgen.Runtime.Support.CUInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_COLORSPACETRANSFER@
+hs_bindgen_d81b18369780307b
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_TransferCharacteristics
+hs_bindgen_d81b18369780307b =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d81b18369780307b_base (BG.toFFIType x0))
+
+-- | Retrieve the transfer characteristics of an SDL_Colorspace.
+--
+--     The SDL_COLORSPACETRANSFER macro as a function.
+--
+--     [Returns]: the SDL_TransferCharacteristics of @cspace@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_COLORSPACETRANSFER@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 309:47@
+lithon_SDL_COLORSPACETRANSFER
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -- ^
+  --
+  --           [@cspace@]: an SDL_Colorspace to check.
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_TransferCharacteristics
+lithon_SDL_COLORSPACETRANSFER =
+  hs_bindgen_d81b18369780307b
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_COLORSPACEMATRIX@
+foreign import ccall unsafe "hs_bindgen_4d7197f1caf18127"
+  hs_bindgen_4d7197f1caf18127_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO HsBindgen.Runtime.Support.CUInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_COLORSPACEMATRIX@
+hs_bindgen_4d7197f1caf18127
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_MatrixCoefficients
+hs_bindgen_4d7197f1caf18127 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_4d7197f1caf18127_base (BG.toFFIType x0))
+
+-- | Retrieve the matrix coefficients of an SDL_Colorspace.
+--
+--     The SDL_COLORSPACEMATRIX macro as a function.
+--
+--     [Returns]: the SDL_MatrixCoefficients of @cspace@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_COLORSPACEMATRIX@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 326:42@
+lithon_SDL_COLORSPACEMATRIX
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -- ^
+  --
+  --           [@cspace@]: an SDL_Colorspace to check.
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_MatrixCoefficients
+lithon_SDL_COLORSPACEMATRIX =
+  hs_bindgen_4d7197f1caf18127
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_ISCOLORSPACE_MATRIX_BT601@
+foreign import ccall unsafe "hs_bindgen_4c093d1641e16c6f"
+  hs_bindgen_4c093d1641e16c6f_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_ISCOLORSPACE_MATRIX_BT601@
+hs_bindgen_4c093d1641e16c6f
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -> IO BG.CBool
+hs_bindgen_4c093d1641e16c6f =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_4c093d1641e16c6f_base (BG.toFFIType x0))
+
+-- | Determine if an SDL_Colorspace uses BT601 (or BT470BG) matrix coefficients.
+--
+--     The SDL_ISCOLORSPACE_MATRIX_BT601 macro as a function.
+--
+--     [Returns]: true if BT601 or BT470BG, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISCOLORSPACE_MATRIX_BT601@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 343:24@
+lithon_SDL_ISCOLORSPACE_MATRIX_BT601
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -- ^
+  --
+  --           [@cspace@]: an SDL_Colorspace to check.
+  -> IO BG.CBool
+lithon_SDL_ISCOLORSPACE_MATRIX_BT601 =
+  hs_bindgen_4c093d1641e16c6f
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_ISCOLORSPACE_MATRIX_BT709@
+foreign import ccall unsafe "hs_bindgen_5e1ce396f70643b8"
+  hs_bindgen_5e1ce396f70643b8_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_ISCOLORSPACE_MATRIX_BT709@
+hs_bindgen_5e1ce396f70643b8
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -> IO BG.CBool
+hs_bindgen_5e1ce396f70643b8 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_5e1ce396f70643b8_base (BG.toFFIType x0))
+
+-- | Determine if an SDL_Colorspace uses BT709 matrix coefficients.
+--
+--     The SDL_ISCOLORSPACE_MATRIX_BT709 macro as a function.
+--
+--     [Returns]: true if BT709, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISCOLORSPACE_MATRIX_BT709@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 360:24@
+lithon_SDL_ISCOLORSPACE_MATRIX_BT709
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -- ^
+  --
+  --           [@cspace@]: an SDL_Colorspace to check.
+  -> IO BG.CBool
+lithon_SDL_ISCOLORSPACE_MATRIX_BT709 =
+  hs_bindgen_5e1ce396f70643b8
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_ISCOLORSPACE_MATRIX_BT2020_NCL@
+foreign import ccall unsafe "hs_bindgen_53b7a5205ff2c3a7"
+  hs_bindgen_53b7a5205ff2c3a7_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_ISCOLORSPACE_MATRIX_BT2020_NCL@
+hs_bindgen_53b7a5205ff2c3a7
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -> IO BG.CBool
+hs_bindgen_53b7a5205ff2c3a7 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_53b7a5205ff2c3a7_base (BG.toFFIType x0))
+
+-- | Determine if an SDL_Colorspace uses BT2020_NCL matrix coefficients.
+--
+--     The SDL_ISCOLORSPACE_MATRIX_BT2020_NCL macro as a function.
+--
+--     [Returns]: true if BT2020_NCL, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISCOLORSPACE_MATRIX_BT2020_NCL@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 377:24@
+lithon_SDL_ISCOLORSPACE_MATRIX_BT2020_NCL
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -- ^
+  --
+  --           [@cspace@]: an SDL_Colorspace to check.
+  -> IO BG.CBool
+lithon_SDL_ISCOLORSPACE_MATRIX_BT2020_NCL =
+  hs_bindgen_53b7a5205ff2c3a7
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_ISCOLORSPACE_LIMITED_RANGE@
+foreign import ccall unsafe "hs_bindgen_cdcead323f5c37eb"
+  hs_bindgen_cdcead323f5c37eb_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_ISCOLORSPACE_LIMITED_RANGE@
+hs_bindgen_cdcead323f5c37eb
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -> IO BG.CBool
+hs_bindgen_cdcead323f5c37eb =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_cdcead323f5c37eb_base (BG.toFFIType x0))
+
+-- | Determine if an SDL_Colorspace has a limited range.
+--
+--     The SDL_ISCOLORSPACE_LIMITED_RANGE macro as a function.
+--
+--     [Returns]: true if limited range, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISCOLORSPACE_LIMITED_RANGE@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 394:24@
+lithon_SDL_ISCOLORSPACE_LIMITED_RANGE
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -- ^
+  --
+  --           [@cspace@]: an SDL_Colorspace to check.
+  -> IO BG.CBool
+lithon_SDL_ISCOLORSPACE_LIMITED_RANGE =
+  hs_bindgen_cdcead323f5c37eb
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_ISCOLORSPACE_FULL_RANGE@
+foreign import ccall unsafe "hs_bindgen_2e5c63551f830e6e"
+  hs_bindgen_2e5c63551f830e6e_base
+    :: HsBindgen.Runtime.Support.CUInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.PixelsShims_Unsafe_lithon_SDL_ISCOLORSPACE_FULL_RANGE@
+hs_bindgen_2e5c63551f830e6e
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -> IO BG.CBool
+hs_bindgen_2e5c63551f830e6e =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_2e5c63551f830e6e_base (BG.toFFIType x0))
+
+-- | Determine if an SDL_Colorspace has a full range.
+--
+--     The SDL_ISCOLORSPACE_FULL_RANGE macro as a function.
+--
+--     [Returns]: true if full range, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_ISCOLORSPACE_FULL_RANGE@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 411:24@
+lithon_SDL_ISCOLORSPACE_FULL_RANGE
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -- ^
+  --
+  --           [@cspace@]: an SDL_Colorspace to check.
+  -> IO BG.CBool
+lithon_SDL_ISCOLORSPACE_FULL_RANGE =
+  hs_bindgen_2e5c63551f830e6e
diff --git a/src/SDL3/Sys/Bindgen/Platform/FunPtr.hs b/src/SDL3/Sys/Bindgen/Platform/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Platform/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Platform/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Platform.FunPtr (
@@ -7,13 +9,19 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_platform.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_platform.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Platform_get_SDL_GetPlatform */"
          , "__attribute__ ((const))"
          , "char const *(*hs_bindgen_77c6464e30daf2fd (void)) (void)"
@@ -32,7 +40,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Platform_get_SDL_GetPlatform@
 hs_bindgen_77c6464e30daf2fd :: IO (BG.FunPtr (IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_77c6464e30daf2fd =
-  BG.fromFFIType hs_bindgen_77c6464e30daf2fd_base
+  fmap BG.fromFFIType hs_bindgen_77c6464e30daf2fd_base
 
 {-# NOINLINE sDL_GetPlatform #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Platform/Safe.hs b/src/SDL3/Sys/Bindgen/Platform/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Platform/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Platform/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Platform.Safe (
@@ -7,13 +9,19 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_platform.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_platform.h>"
          , "char const *hs_bindgen_837ad9031649e009 (void)"
          , "{"
          , "  return (SDL_GetPlatform)();"
@@ -30,7 +38,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Platform_Safe_SDL_GetPlatform@
 hs_bindgen_837ad9031649e009 :: IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_837ad9031649e009 =
-  BG.fromFFIType hs_bindgen_837ad9031649e009_base
+  fmap BG.fromFFIType hs_bindgen_837ad9031649e009_base
 
 -- | [C declaration]: @SDL_GetPlatform@, defined at @SDL3\/SDL_platform.h 58:42@
 sDL_GetPlatform :: IO (PtrConst.PtrConst BG.CChar)
diff --git a/src/SDL3/Sys/Bindgen/Platform/Unsafe.hs b/src/SDL3/Sys/Bindgen/Platform/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Platform/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Platform/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Platform.Unsafe (
@@ -7,13 +9,19 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_platform.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_platform.h>"
          , "char const *hs_bindgen_6a11aa5547a2bc81 (void)"
          , "{"
          , "  return (SDL_GetPlatform)();"
@@ -30,7 +38,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Platform_Unsafe_SDL_GetPlatform@
 hs_bindgen_6a11aa5547a2bc81 :: IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_6a11aa5547a2bc81 =
-  BG.fromFFIType hs_bindgen_6a11aa5547a2bc81_base
+  fmap BG.fromFFIType hs_bindgen_6a11aa5547a2bc81_base
 
 -- | [C declaration]: @SDL_GetPlatform@, defined at @SDL3\/SDL_platform.h 58:42@
 sDL_GetPlatform :: IO (PtrConst.PtrConst BG.CChar)
diff --git a/src/SDL3/Sys/Bindgen/PlatformDefines.hs b/src/SDL3/Sys/Bindgen/PlatformDefines.hs
--- a/src/SDL3/Sys/Bindgen/PlatformDefines.hs
+++ b/src/SDL3/Sys/Bindgen/PlatformDefines.hs
@@ -1,5 +1,6 @@
 {-# LANGUAGE ExplicitForAll #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 module SDL3.Sys.Bindgen.PlatformDefines (
   SDL3.Sys.Bindgen.PlatformDefines.sDL_PLATFORM_LINUX,
diff --git a/src/SDL3/Sys/Bindgen/Power.hs b/src/SDL3/Sys/Bindgen/Power.hs
--- a/src/SDL3/Sys/Bindgen/Power.hs
+++ b/src/SDL3/Sys/Bindgen/Power.hs
@@ -16,6 +16,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | SDL power management routines.
 --
@@ -36,6 +37,8 @@
   pattern SDL3.Sys.Bindgen.Power.SDL_POWERSTATE_CHARGED,
 )
 where
+
+import Prelude (Eq, Int, Ord, Read, Show, pure, (<*>), type (~))
 
 import HsBindgen.Runtime.CEnum qualified as CEnum
 import HsBindgen.Runtime.HasCField qualified as HasCField
diff --git a/src/SDL3/Sys/Bindgen/Power/FunPtr.hs b/src/SDL3/Sys/Bindgen/Power/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Power/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Power/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Power.FunPtr (
@@ -7,13 +9,19 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Power
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_power.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_power.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Power_get_SDL_GetPowerInfo */"
          , "__attribute__ ((const))"
          , "SDL_PowerState (*hs_bindgen_ccc542a5396280c2 (void)) ("
@@ -36,7 +44,7 @@
 hs_bindgen_ccc542a5396280c2
   :: IO (BG.FunPtr (BG.Ptr BG.CInt -> BG.Ptr BG.CInt -> IO SDL_PowerState))
 hs_bindgen_ccc542a5396280c2 =
-  BG.fromFFIType hs_bindgen_ccc542a5396280c2_base
+  fmap BG.fromFFIType hs_bindgen_ccc542a5396280c2_base
 
 {-# NOINLINE sDL_GetPowerInfo #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Power/Safe.hs b/src/SDL3/Sys/Bindgen/Power/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Power/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Power/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Power.Safe (
@@ -7,13 +9,19 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Power
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_power.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_power.h>"
          , "SDL_PowerState hs_bindgen_d43ded70ea4a92e6 ("
          , "  signed int *arg1,"
          , "  signed int *arg2"
@@ -30,7 +38,7 @@
   hs_bindgen_d43ded70ea4a92e6_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Power_Safe_SDL_GetPowerInfo@
 hs_bindgen_d43ded70ea4a92e6
@@ -38,7 +46,9 @@
   -> BG.Ptr BG.CInt
   -> IO SDL_PowerState
 hs_bindgen_d43ded70ea4a92e6 =
-  BG.fromFFIType hs_bindgen_d43ded70ea4a92e6_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_d43ded70ea4a92e6_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the current power supply details.
 --
diff --git a/src/SDL3/Sys/Bindgen/Power/Unsafe.hs b/src/SDL3/Sys/Bindgen/Power/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Power/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Power/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Power.Unsafe (
@@ -7,13 +9,19 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Power
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_power.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_power.h>"
          , "SDL_PowerState hs_bindgen_abe28022c5038f4a ("
          , "  signed int *arg1,"
          , "  signed int *arg2"
@@ -30,7 +38,7 @@
   hs_bindgen_abe28022c5038f4a_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Power_Unsafe_SDL_GetPowerInfo@
 hs_bindgen_abe28022c5038f4a
@@ -38,7 +46,9 @@
   -> BG.Ptr BG.CInt
   -> IO SDL_PowerState
 hs_bindgen_abe28022c5038f4a =
-  BG.fromFFIType hs_bindgen_abe28022c5038f4a_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_abe28022c5038f4a_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the current power supply details.
 --
diff --git a/src/SDL3/Sys/Bindgen/Process.hs b/src/SDL3/Sys/Bindgen/Process.hs
--- a/src/SDL3/Sys/Bindgen/Process.hs
+++ b/src/SDL3/Sys/Bindgen/Process.hs
@@ -18,6 +18,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | Process control support.
 --
@@ -58,6 +59,8 @@
   SDL3.Sys.Bindgen.Process.sDL_PROP_PROCESS_BACKGROUND_BOOLEAN,
 )
 where
+
+import Prelude (Eq, Int, Ord, Read, Show, pure, (<*>), type (~))
 
 import HsBindgen.Runtime.CEnum qualified as CEnum
 import HsBindgen.Runtime.HasCField qualified as HasCField
diff --git a/src/SDL3/Sys/Bindgen/Process/FunPtr.hs b/src/SDL3/Sys/Bindgen/Process/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Process/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Process/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Process.FunPtr (
@@ -15,6 +17,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
@@ -25,7 +29,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_process.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_process.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Process_get_SDL_CreateProcess */"
          , "__attribute__ ((const))"
          , "SDL_Process *(*hs_bindgen_da17b0b856594376 (void)) ("
@@ -118,7 +126,7 @@
   :: IO
        (BG.FunPtr (PtrConst.PtrConst (PtrConst.PtrConst BG.CChar) -> BG.CBool -> IO (BG.Ptr SDL_Process)))
 hs_bindgen_da17b0b856594376 =
-  BG.fromFFIType hs_bindgen_da17b0b856594376_base
+  fmap BG.fromFFIType hs_bindgen_da17b0b856594376_base
 
 {-# NOINLINE sDL_CreateProcess #-}
 
@@ -161,7 +169,7 @@
 hs_bindgen_ca2af0d478f65779
   :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Properties.SDL_PropertiesID -> IO (BG.Ptr SDL_Process)))
 hs_bindgen_ca2af0d478f65779 =
-  BG.fromFFIType hs_bindgen_ca2af0d478f65779_base
+  fmap BG.fromFFIType hs_bindgen_ca2af0d478f65779_base
 
 {-# NOINLINE sDL_CreateProcessWithProperties #-}
 
@@ -220,7 +228,7 @@
 hs_bindgen_122575617d2f970a
   :: IO (BG.FunPtr (BG.Ptr SDL_Process -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID))
 hs_bindgen_122575617d2f970a =
-  BG.fromFFIType hs_bindgen_122575617d2f970a_base
+  fmap BG.fromFFIType hs_bindgen_122575617d2f970a_base
 
 {-# NOINLINE sDL_GetProcessProperties #-}
 
@@ -266,7 +274,7 @@
            (BG.Ptr SDL_Process -> BG.Ptr HsBindgen.Runtime.LibC.CSize -> BG.Ptr BG.CInt -> IO (BG.Ptr BG.Void))
        )
 hs_bindgen_366550f8901941a0 =
-  BG.fromFFIType hs_bindgen_366550f8901941a0_base
+  fmap BG.fromFFIType hs_bindgen_366550f8901941a0_base
 
 {-# NOINLINE sDL_ReadProcess #-}
 
@@ -308,7 +316,7 @@
 hs_bindgen_6503613b26c58999
   :: IO (BG.FunPtr (BG.Ptr SDL_Process -> IO (BG.Ptr SDL3.Sys.Bindgen.Iostream.SDL_IOStream)))
 hs_bindgen_6503613b26c58999 =
-  BG.fromFFIType hs_bindgen_6503613b26c58999_base
+  fmap BG.fromFFIType hs_bindgen_6503613b26c58999_base
 
 {-# NOINLINE sDL_GetProcessInput #-}
 
@@ -343,7 +351,7 @@
 hs_bindgen_d9e2688fce87583b
   :: IO (BG.FunPtr (BG.Ptr SDL_Process -> IO (BG.Ptr SDL3.Sys.Bindgen.Iostream.SDL_IOStream)))
 hs_bindgen_d9e2688fce87583b =
-  BG.fromFFIType hs_bindgen_d9e2688fce87583b_base
+  fmap BG.fromFFIType hs_bindgen_d9e2688fce87583b_base
 
 {-# NOINLINE sDL_GetProcessOutput #-}
 
@@ -377,7 +385,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Process_get_SDL_KillProcess@
 hs_bindgen_66935b63f947a265 :: IO (BG.FunPtr (BG.Ptr SDL_Process -> BG.CBool -> IO BG.CBool))
 hs_bindgen_66935b63f947a265 =
-  BG.fromFFIType hs_bindgen_66935b63f947a265_base
+  fmap BG.fromFFIType hs_bindgen_66935b63f947a265_base
 
 {-# NOINLINE sDL_KillProcess #-}
 
@@ -409,7 +417,7 @@
 hs_bindgen_7ea62b336c3f5c4c
   :: IO (BG.FunPtr (BG.Ptr SDL_Process -> BG.CBool -> BG.Ptr BG.CInt -> IO BG.CBool))
 hs_bindgen_7ea62b336c3f5c4c =
-  BG.fromFFIType hs_bindgen_7ea62b336c3f5c4c_base
+  fmap BG.fromFFIType hs_bindgen_7ea62b336c3f5c4c_base
 
 {-# NOINLINE sDL_WaitProcess #-}
 
@@ -448,7 +456,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Process_get_SDL_DestroyProcess@
 hs_bindgen_c5cffc00b0da9028 :: IO (BG.FunPtr (BG.Ptr SDL_Process -> IO ()))
 hs_bindgen_c5cffc00b0da9028 =
-  BG.fromFFIType hs_bindgen_c5cffc00b0da9028_base
+  fmap BG.fromFFIType hs_bindgen_c5cffc00b0da9028_base
 
 {-# NOINLINE sDL_DestroyProcess #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Process/Safe.hs b/src/SDL3/Sys/Bindgen/Process/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Process/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Process/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Process.Safe (
@@ -15,6 +17,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
@@ -25,7 +29,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_process.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_process.h>"
          , "SDL_Process *hs_bindgen_e9112645fd8bb3e7 ("
          , "  char const *const *arg1,"
          , "  _Bool arg2"
@@ -94,7 +102,7 @@
 foreign import ccall safe "hs_bindgen_e9112645fd8bb3e7"
   hs_bindgen_e9112645fd8bb3e7_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
+    -> BG.CBool
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Process_Safe_SDL_CreateProcess@
@@ -103,7 +111,9 @@
   -> BG.CBool
   -> IO (BG.Ptr SDL_Process)
 hs_bindgen_e9112645fd8bb3e7 =
-  BG.fromFFIType hs_bindgen_e9112645fd8bb3e7_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_e9112645fd8bb3e7_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Create a new process.
 --
@@ -141,7 +151,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Process_Safe_SDL_CreateProcessWithProperties@
 foreign import ccall safe "hs_bindgen_4f99e30fc1a0d086"
   hs_bindgen_4f99e30fc1a0d086_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Process_Safe_SDL_CreateProcessWithProperties@
@@ -149,7 +159,8 @@
   :: SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
   -> IO (BG.Ptr SDL_Process)
 hs_bindgen_4f99e30fc1a0d086 =
-  BG.fromFFIType hs_bindgen_4f99e30fc1a0d086_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_4f99e30fc1a0d086_base (BG.toFFIType x0))
 
 -- | Create a new process with the specified properties.
 --
@@ -203,14 +214,15 @@
 foreign import ccall safe "hs_bindgen_761eafcfd938f5f3"
   hs_bindgen_761eafcfd938f5f3_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Process_Safe_SDL_GetProcessProperties@
 hs_bindgen_761eafcfd938f5f3
   :: BG.Ptr SDL_Process
   -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
 hs_bindgen_761eafcfd938f5f3 =
-  BG.fromFFIType hs_bindgen_761eafcfd938f5f3_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_761eafcfd938f5f3_base (BG.toFFIType x0))
 
 -- | Get the properties associated with a process.
 --
@@ -259,7 +271,12 @@
   -> BG.Ptr BG.CInt
   -> IO (BG.Ptr BG.Void)
 hs_bindgen_2cc49ec5272098a4 =
-  BG.fromFFIType hs_bindgen_2cc49ec5272098a4_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_2cc49ec5272098a4_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Read all the output from a process.
 --
@@ -305,7 +322,8 @@
   :: BG.Ptr SDL_Process
   -> IO (BG.Ptr SDL3.Sys.Bindgen.Iostream.SDL_IOStream)
 hs_bindgen_0f1c12a4756fb56e =
-  BG.fromFFIType hs_bindgen_0f1c12a4756fb56e_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_0f1c12a4756fb56e_base (BG.toFFIType x0))
 
 -- | Get the SDL_IOStream associated with process standard input.
 --
@@ -341,7 +359,8 @@
   :: BG.Ptr SDL_Process
   -> IO (BG.Ptr SDL3.Sys.Bindgen.Iostream.SDL_IOStream)
 hs_bindgen_3e1d1e2fdc78eb7a =
-  BG.fromFFIType hs_bindgen_3e1d1e2fdc78eb7a_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3e1d1e2fdc78eb7a_base (BG.toFFIType x0))
 
 -- | Get the SDL_IOStream associated with process standard output.
 --
@@ -370,8 +389,8 @@
 foreign import ccall safe "hs_bindgen_b1711a43b4568e6a"
   hs_bindgen_b1711a43b4568e6a_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Process_Safe_SDL_KillProcess@
 hs_bindgen_b1711a43b4568e6a
@@ -379,7 +398,9 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_b1711a43b4568e6a =
-  BG.fromFFIType hs_bindgen_b1711a43b4568e6a_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_b1711a43b4568e6a_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Stop a process.
 --
@@ -408,9 +429,9 @@
 foreign import ccall safe "hs_bindgen_35fc3739c88d9909"
   hs_bindgen_35fc3739c88d9909_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
+    -> BG.CBool
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Process_Safe_SDL_WaitProcess@
 hs_bindgen_35fc3739c88d9909
@@ -419,7 +440,12 @@
   -> BG.Ptr BG.CInt
   -> IO BG.CBool
 hs_bindgen_35fc3739c88d9909 =
-  BG.fromFFIType hs_bindgen_35fc3739c88d9909_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_35fc3739c88d9909_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Wait for a process to finish.
 --
@@ -465,7 +491,8 @@
   :: BG.Ptr SDL_Process
   -> IO ()
 hs_bindgen_6754e69c7206382f =
-  BG.fromFFIType hs_bindgen_6754e69c7206382f_base
+  \x0 ->
+    hs_bindgen_6754e69c7206382f_base (BG.toFFIType x0)
 
 -- | Destroy a previously created process object.
 --
diff --git a/src/SDL3/Sys/Bindgen/Process/Unsafe.hs b/src/SDL3/Sys/Bindgen/Process/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Process/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Process/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Process.Unsafe (
@@ -15,6 +17,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
@@ -25,7 +29,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_process.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_process.h>"
          , "SDL_Process *hs_bindgen_78513fa7f22d15d7 ("
          , "  char const *const *arg1,"
          , "  _Bool arg2"
@@ -94,7 +102,7 @@
 foreign import ccall unsafe "hs_bindgen_78513fa7f22d15d7"
   hs_bindgen_78513fa7f22d15d7_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
+    -> BG.CBool
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Process_Unsafe_SDL_CreateProcess@
@@ -103,7 +111,9 @@
   -> BG.CBool
   -> IO (BG.Ptr SDL_Process)
 hs_bindgen_78513fa7f22d15d7 =
-  BG.fromFFIType hs_bindgen_78513fa7f22d15d7_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_78513fa7f22d15d7_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Create a new process.
 --
@@ -141,7 +151,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Process_Unsafe_SDL_CreateProcessWithProperties@
 foreign import ccall unsafe "hs_bindgen_7c44340d0c8ec6ad"
   hs_bindgen_7c44340d0c8ec6ad_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Process_Unsafe_SDL_CreateProcessWithProperties@
@@ -149,7 +159,8 @@
   :: SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
   -> IO (BG.Ptr SDL_Process)
 hs_bindgen_7c44340d0c8ec6ad =
-  BG.fromFFIType hs_bindgen_7c44340d0c8ec6ad_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_7c44340d0c8ec6ad_base (BG.toFFIType x0))
 
 -- | Create a new process with the specified properties.
 --
@@ -203,14 +214,15 @@
 foreign import ccall unsafe "hs_bindgen_9c4ff433837a24fa"
   hs_bindgen_9c4ff433837a24fa_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Process_Unsafe_SDL_GetProcessProperties@
 hs_bindgen_9c4ff433837a24fa
   :: BG.Ptr SDL_Process
   -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
 hs_bindgen_9c4ff433837a24fa =
-  BG.fromFFIType hs_bindgen_9c4ff433837a24fa_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_9c4ff433837a24fa_base (BG.toFFIType x0))
 
 -- | Get the properties associated with a process.
 --
@@ -259,7 +271,12 @@
   -> BG.Ptr BG.CInt
   -> IO (BG.Ptr BG.Void)
 hs_bindgen_b8bb7b72f4eb9fbf =
-  BG.fromFFIType hs_bindgen_b8bb7b72f4eb9fbf_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_b8bb7b72f4eb9fbf_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Read all the output from a process.
 --
@@ -305,7 +322,8 @@
   :: BG.Ptr SDL_Process
   -> IO (BG.Ptr SDL3.Sys.Bindgen.Iostream.SDL_IOStream)
 hs_bindgen_dd51a7420ce5a7f0 =
-  BG.fromFFIType hs_bindgen_dd51a7420ce5a7f0_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_dd51a7420ce5a7f0_base (BG.toFFIType x0))
 
 -- | Get the SDL_IOStream associated with process standard input.
 --
@@ -341,7 +359,8 @@
   :: BG.Ptr SDL_Process
   -> IO (BG.Ptr SDL3.Sys.Bindgen.Iostream.SDL_IOStream)
 hs_bindgen_79cd69dab2697ccc =
-  BG.fromFFIType hs_bindgen_79cd69dab2697ccc_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_79cd69dab2697ccc_base (BG.toFFIType x0))
 
 -- | Get the SDL_IOStream associated with process standard output.
 --
@@ -370,8 +389,8 @@
 foreign import ccall unsafe "hs_bindgen_780e671175a9ada0"
   hs_bindgen_780e671175a9ada0_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Process_Unsafe_SDL_KillProcess@
 hs_bindgen_780e671175a9ada0
@@ -379,7 +398,9 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_780e671175a9ada0 =
-  BG.fromFFIType hs_bindgen_780e671175a9ada0_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_780e671175a9ada0_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Stop a process.
 --
@@ -408,9 +429,9 @@
 foreign import ccall unsafe "hs_bindgen_3fee90eaf94f6b13"
   hs_bindgen_3fee90eaf94f6b13_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
+    -> BG.CBool
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Process_Unsafe_SDL_WaitProcess@
 hs_bindgen_3fee90eaf94f6b13
@@ -419,7 +440,12 @@
   -> BG.Ptr BG.CInt
   -> IO BG.CBool
 hs_bindgen_3fee90eaf94f6b13 =
-  BG.fromFFIType hs_bindgen_3fee90eaf94f6b13_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_3fee90eaf94f6b13_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Wait for a process to finish.
 --
@@ -465,7 +491,8 @@
   :: BG.Ptr SDL_Process
   -> IO ()
 hs_bindgen_c1509b01ba86c9c4 =
-  BG.fromFFIType hs_bindgen_c1509b01ba86c9c4_base
+  \x0 ->
+    hs_bindgen_c1509b01ba86c9c4_base (BG.toFFIType x0)
 
 -- | Destroy a previously created process object.
 --
diff --git a/src/SDL3/Sys/Bindgen/Properties.hs b/src/SDL3/Sys/Bindgen/Properties.hs
--- a/src/SDL3/Sys/Bindgen/Properties.hs
+++ b/src/SDL3/Sys/Bindgen/Properties.hs
@@ -6,6 +6,7 @@
 {-# LANGUAGE ExplicitForAll #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE MagicHash #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
@@ -17,6 +18,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | A property is a variable that can be created and retrieved by name at runtime.
 --
@@ -54,8 +56,27 @@
 )
 where
 
+import Prelude (
+  Bounded,
+  Enum,
+  Eq,
+  IO,
+  Int,
+  Integral,
+  Num,
+  Ord,
+  Read,
+  Real,
+  Show,
+  fmap,
+  pure,
+  (<*>),
+  type (~),
+ )
+
 import HsBindgen.Runtime.CEnum qualified as CEnum
 import HsBindgen.Runtime.HasCField qualified as HasCField
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.Marshal qualified as Marshal
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
@@ -256,7 +277,6 @@
   { unwrap :: BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO ()
   }
   deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
 
 -- __unique:__ @toSDL_CleanupPropertyCallback_Aux@
 foreign import ccall safe "wrapper"
@@ -270,7 +290,14 @@
   -> IO (BG.FunPtr SDL_CleanupPropertyCallback_Aux)
 hs_bindgen_8958b9cfa7a05766 =
   \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_8958b9cfa7a05766_base (BG.toFFIType fun0))
+    fmap
+      BG.castFunPtr
+      ( hs_bindgen_8958b9cfa7a05766_base
+          ( \x1 ->
+              \x2 ->
+                BG.getField @"unwrap" fun0 (BG.fromFFIType x1) (BG.fromFFIType x2)
+          )
+      )
 
 -- __unique:__ @fromSDL_CleanupPropertyCallback_Aux@
 foreign import ccall safe "dynamic"
@@ -286,7 +313,11 @@
   -> SDL_CleanupPropertyCallback_Aux
 hs_bindgen_c4ac4678b65d3d15 =
   \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_c4ac4678b65d3d15_base (BG.castFunPtrToFFIType funPtr0))
+    SDL_CleanupPropertyCallback_Aux
+      ( \x1 ->
+          \x2 ->
+            hs_bindgen_c4ac4678b65d3d15_base (BG.castFunPtr funPtr0) (BG.toFFIType x1) (BG.toFFIType x2)
+      )
 
 instance BG.ToFunPtr SDL_CleanupPropertyCallback_Aux where
   toFunPtr = hs_bindgen_8958b9cfa7a05766
@@ -380,13 +411,12 @@
   { unwrap :: BG.Ptr BG.Void -> SDL_PropertiesID -> PtrConst.PtrConst BG.CChar -> IO ()
   }
   deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
 
 -- __unique:__ @toSDL_EnumeratePropertiesCallback_Aux@
 foreign import ccall safe "wrapper"
   hs_bindgen_b271d6d6058a1326_base
-    :: (BG.Ptr BG.Void -> BG.Word32 -> BG.Ptr BG.Void -> IO ())
-    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.Word32 -> BG.Ptr BG.Void -> IO ()))
+    :: (BG.Ptr BG.Void -> HsBindgen.Runtime.LibC.Word32 -> BG.Ptr BG.Void -> IO ())
+    -> IO (BG.FunPtr (BG.Ptr BG.Void -> HsBindgen.Runtime.LibC.Word32 -> BG.Ptr BG.Void -> IO ()))
 
 -- __unique:__ @toSDL_EnumeratePropertiesCallback_Aux@
 hs_bindgen_b271d6d6058a1326
@@ -394,14 +424,22 @@
   -> IO (BG.FunPtr SDL_EnumeratePropertiesCallback_Aux)
 hs_bindgen_b271d6d6058a1326 =
   \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_b271d6d6058a1326_base (BG.toFFIType fun0))
+    fmap
+      BG.castFunPtr
+      ( hs_bindgen_b271d6d6058a1326_base
+          ( \x1 ->
+              \x2 ->
+                \x3 ->
+                  BG.getField @"unwrap" fun0 (BG.fromFFIType x1) (BG.fromFFIType x2) (BG.fromFFIType x3)
+          )
+      )
 
 -- __unique:__ @fromSDL_EnumeratePropertiesCallback_Aux@
 foreign import ccall safe "dynamic"
   hs_bindgen_89dc6b6814ba4336_base
-    :: BG.FunPtr (BG.Ptr BG.Void -> BG.Word32 -> BG.Ptr BG.Void -> IO ())
+    :: BG.FunPtr (BG.Ptr BG.Void -> HsBindgen.Runtime.LibC.Word32 -> BG.Ptr BG.Void -> IO ())
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> IO ()
 
@@ -411,7 +449,16 @@
   -> SDL_EnumeratePropertiesCallback_Aux
 hs_bindgen_89dc6b6814ba4336 =
   \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_89dc6b6814ba4336_base (BG.castFunPtrToFFIType funPtr0))
+    SDL_EnumeratePropertiesCallback_Aux
+      ( \x1 ->
+          \x2 ->
+            \x3 ->
+              hs_bindgen_89dc6b6814ba4336_base
+                (BG.castFunPtr funPtr0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+      )
 
 instance BG.ToFunPtr SDL_EnumeratePropertiesCallback_Aux where
   toFunPtr = hs_bindgen_b271d6d6058a1326
diff --git a/src/SDL3/Sys/Bindgen/Properties/FunPtr.hs b/src/SDL3/Sys/Bindgen/Properties/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Properties/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Properties/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Properties.FunPtr (
@@ -27,6 +29,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -35,7 +39,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_properties.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_properties.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Properties_get_SDL_GetGlobalProperties */"
          , "__attribute__ ((const))"
          , "SDL_PropertiesID (*hs_bindgen_4541df72a2cb85f8 (void)) (void)"
@@ -242,7 +250,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_get_SDL_GetGlobalProperties@
 hs_bindgen_4541df72a2cb85f8 :: IO (BG.FunPtr (IO SDL_PropertiesID))
 hs_bindgen_4541df72a2cb85f8 =
-  BG.fromFFIType hs_bindgen_4541df72a2cb85f8_base
+  fmap BG.fromFFIType hs_bindgen_4541df72a2cb85f8_base
 
 {-# NOINLINE sDL_GetGlobalProperties #-}
 
@@ -267,7 +275,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_get_SDL_CreateProperties@
 hs_bindgen_92049f9b61449963 :: IO (BG.FunPtr (IO SDL_PropertiesID))
 hs_bindgen_92049f9b61449963 =
-  BG.fromFFIType hs_bindgen_92049f9b61449963_base
+  fmap BG.fromFFIType hs_bindgen_92049f9b61449963_base
 
 {-# NOINLINE sDL_CreateProperties #-}
 
@@ -296,7 +304,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_get_SDL_CopyProperties@
 hs_bindgen_38190d3cf84485c4 :: IO (BG.FunPtr (SDL_PropertiesID -> SDL_PropertiesID -> IO BG.CBool))
 hs_bindgen_38190d3cf84485c4 =
-  BG.fromFFIType hs_bindgen_38190d3cf84485c4_base
+  fmap BG.fromFFIType hs_bindgen_38190d3cf84485c4_base
 
 {-# NOINLINE sDL_CopyProperties #-}
 
@@ -327,7 +335,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_get_SDL_LockProperties@
 hs_bindgen_6ec499eda3697959 :: IO (BG.FunPtr (SDL_PropertiesID -> IO BG.CBool))
 hs_bindgen_6ec499eda3697959 =
-  BG.fromFFIType hs_bindgen_6ec499eda3697959_base
+  fmap BG.fromFFIType hs_bindgen_6ec499eda3697959_base
 
 {-# NOINLINE sDL_LockProperties #-}
 
@@ -360,7 +368,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_get_SDL_UnlockProperties@
 hs_bindgen_9ae8d54eb30e84b4 :: IO (BG.FunPtr (SDL_PropertiesID -> IO ()))
 hs_bindgen_9ae8d54eb30e84b4 =
-  BG.fromFFIType hs_bindgen_9ae8d54eb30e84b4_base
+  fmap BG.fromFFIType hs_bindgen_9ae8d54eb30e84b4_base
 
 {-# NOINLINE sDL_UnlockProperties #-}
 
@@ -397,7 +405,7 @@
            )
        )
 hs_bindgen_94c8b4d65016ddab =
-  BG.fromFFIType hs_bindgen_94c8b4d65016ddab_base
+  fmap BG.fromFFIType hs_bindgen_94c8b4d65016ddab_base
 
 {-# NOINLINE sDL_SetPointerPropertyWithCleanup #-}
 
@@ -447,7 +455,7 @@
 hs_bindgen_30ddc8c86a006598
   :: IO (BG.FunPtr (SDL_PropertiesID -> PtrConst.PtrConst BG.CChar -> BG.Ptr BG.Void -> IO BG.CBool))
 hs_bindgen_30ddc8c86a006598 =
-  BG.fromFFIType hs_bindgen_30ddc8c86a006598_base
+  fmap BG.fromFFIType hs_bindgen_30ddc8c86a006598_base
 
 {-# NOINLINE sDL_SetPointerProperty #-}
 
@@ -485,7 +493,7 @@
            (SDL_PropertiesID -> PtrConst.PtrConst BG.CChar -> PtrConst.PtrConst BG.CChar -> IO BG.CBool)
        )
 hs_bindgen_88fe6ad057838726 =
-  BG.fromFFIType hs_bindgen_88fe6ad057838726_base
+  fmap BG.fromFFIType hs_bindgen_88fe6ad057838726_base
 
 {-# NOINLINE sDL_SetStringProperty #-}
 
@@ -526,7 +534,7 @@
            (SDL_PropertiesID -> PtrConst.PtrConst BG.CChar -> SDL3.Sys.Bindgen.Stdinc.Sint64 -> IO BG.CBool)
        )
 hs_bindgen_00c22270473dd8bf =
-  BG.fromFFIType hs_bindgen_00c22270473dd8bf_base
+  fmap BG.fromFFIType hs_bindgen_00c22270473dd8bf_base
 
 {-# NOINLINE sDL_SetNumberProperty #-}
 
@@ -562,7 +570,7 @@
 hs_bindgen_b49813020974606a
   :: IO (BG.FunPtr (SDL_PropertiesID -> PtrConst.PtrConst BG.CChar -> BG.CFloat -> IO BG.CBool))
 hs_bindgen_b49813020974606a =
-  BG.fromFFIType hs_bindgen_b49813020974606a_base
+  fmap BG.fromFFIType hs_bindgen_b49813020974606a_base
 
 {-# NOINLINE sDL_SetFloatProperty #-}
 
@@ -597,7 +605,7 @@
 hs_bindgen_3d0623558bc4ff3f
   :: IO (BG.FunPtr (SDL_PropertiesID -> PtrConst.PtrConst BG.CChar -> BG.CBool -> IO BG.CBool))
 hs_bindgen_3d0623558bc4ff3f =
-  BG.fromFFIType hs_bindgen_3d0623558bc4ff3f_base
+  fmap BG.fromFFIType hs_bindgen_3d0623558bc4ff3f_base
 
 {-# NOINLINE sDL_SetBooleanProperty #-}
 
@@ -632,7 +640,7 @@
 hs_bindgen_260dc721ec409d1a
   :: IO (BG.FunPtr (SDL_PropertiesID -> PtrConst.PtrConst BG.CChar -> IO BG.CBool))
 hs_bindgen_260dc721ec409d1a =
-  BG.fromFFIType hs_bindgen_260dc721ec409d1a_base
+  fmap BG.fromFFIType hs_bindgen_260dc721ec409d1a_base
 
 {-# NOINLINE sDL_HasProperty #-}
 
@@ -664,7 +672,7 @@
 hs_bindgen_3191a0bffc4788d9
   :: IO (BG.FunPtr (SDL_PropertiesID -> PtrConst.PtrConst BG.CChar -> IO SDL_PropertyType))
 hs_bindgen_3191a0bffc4788d9 =
-  BG.fromFFIType hs_bindgen_3191a0bffc4788d9_base
+  fmap BG.fromFFIType hs_bindgen_3191a0bffc4788d9_base
 
 {-# NOINLINE sDL_GetPropertyType #-}
 
@@ -698,7 +706,7 @@
   :: IO
        (BG.FunPtr (SDL_PropertiesID -> PtrConst.PtrConst BG.CChar -> BG.Ptr BG.Void -> IO (BG.Ptr BG.Void)))
 hs_bindgen_daed4139b3c79d17 =
-  BG.fromFFIType hs_bindgen_daed4139b3c79d17_base
+  fmap BG.fromFFIType hs_bindgen_daed4139b3c79d17_base
 
 {-# NOINLINE sDL_GetPointerProperty #-}
 
@@ -742,7 +750,7 @@
            )
        )
 hs_bindgen_adc8eafafff23d41 =
-  BG.fromFFIType hs_bindgen_adc8eafafff23d41_base
+  fmap BG.fromFFIType hs_bindgen_adc8eafafff23d41_base
 
 {-# NOINLINE sDL_GetStringProperty #-}
 
@@ -789,7 +797,7 @@
            )
        )
 hs_bindgen_16bb2facf7635001 =
-  BG.fromFFIType hs_bindgen_16bb2facf7635001_base
+  fmap BG.fromFFIType hs_bindgen_16bb2facf7635001_base
 
 {-# NOINLINE sDL_GetNumberProperty #-}
 
@@ -831,7 +839,7 @@
 hs_bindgen_661775cfc76e4f5c
   :: IO (BG.FunPtr (SDL_PropertiesID -> PtrConst.PtrConst BG.CChar -> BG.CFloat -> IO BG.CFloat))
 hs_bindgen_661775cfc76e4f5c =
-  BG.fromFFIType hs_bindgen_661775cfc76e4f5c_base
+  fmap BG.fromFFIType hs_bindgen_661775cfc76e4f5c_base
 
 {-# NOINLINE sDL_GetFloatProperty #-}
 
@@ -868,7 +876,7 @@
 hs_bindgen_9161fc8f2af4a306
   :: IO (BG.FunPtr (SDL_PropertiesID -> PtrConst.PtrConst BG.CChar -> BG.CBool -> IO BG.CBool))
 hs_bindgen_9161fc8f2af4a306 =
-  BG.fromFFIType hs_bindgen_9161fc8f2af4a306_base
+  fmap BG.fromFFIType hs_bindgen_9161fc8f2af4a306_base
 
 {-# NOINLINE sDL_GetBooleanProperty #-}
 
@@ -905,7 +913,7 @@
 hs_bindgen_89fcf415f7fa8ee4
   :: IO (BG.FunPtr (SDL_PropertiesID -> PtrConst.PtrConst BG.CChar -> IO BG.CBool))
 hs_bindgen_89fcf415f7fa8ee4 =
-  BG.fromFFIType hs_bindgen_89fcf415f7fa8ee4_base
+  fmap BG.fromFFIType hs_bindgen_89fcf415f7fa8ee4_base
 
 {-# NOINLINE sDL_ClearProperty #-}
 
@@ -936,7 +944,7 @@
   :: IO
        (BG.FunPtr (SDL_PropertiesID -> SDL_EnumeratePropertiesCallback -> BG.Ptr BG.Void -> IO BG.CBool))
 hs_bindgen_816e33716bb87f04 =
-  BG.fromFFIType hs_bindgen_816e33716bb87f04_base
+  fmap BG.fromFFIType hs_bindgen_816e33716bb87f04_base
 
 {-# NOINLINE sDL_EnumerateProperties #-}
 
@@ -970,7 +978,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_get_SDL_DestroyProperties@
 hs_bindgen_2034830c5f638bf5 :: IO (BG.FunPtr (SDL_PropertiesID -> IO ()))
 hs_bindgen_2034830c5f638bf5 =
-  BG.fromFFIType hs_bindgen_2034830c5f638bf5_base
+  fmap BG.fromFFIType hs_bindgen_2034830c5f638bf5_base
 
 {-# NOINLINE sDL_DestroyProperties #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Properties/Safe.hs b/src/SDL3/Sys/Bindgen/Properties/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Properties/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Properties/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Properties.Safe (
@@ -27,6 +29,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -35,7 +40,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_properties.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_properties.h>"
          , "SDL_PropertiesID hs_bindgen_8fc668a59a40a958 (void)"
          , "{"
          , "  return (SDL_GetGlobalProperties)();"
@@ -195,12 +204,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_GetGlobalProperties@
 foreign import ccall safe "hs_bindgen_8fc668a59a40a958"
   hs_bindgen_8fc668a59a40a958_base
-    :: IO BG.Word32
+    :: IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_GetGlobalProperties@
 hs_bindgen_8fc668a59a40a958 :: IO SDL_PropertiesID
 hs_bindgen_8fc668a59a40a958 =
-  BG.fromFFIType hs_bindgen_8fc668a59a40a958_base
+  fmap BG.fromFFIType hs_bindgen_8fc668a59a40a958_base
 
 -- | Get the global SDL properties.
 --
@@ -217,12 +226,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_CreateProperties@
 foreign import ccall safe "hs_bindgen_3ef762138ffcfdfb"
   hs_bindgen_3ef762138ffcfdfb_base
-    :: IO BG.Word32
+    :: IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_CreateProperties@
 hs_bindgen_3ef762138ffcfdfb :: IO SDL_PropertiesID
 hs_bindgen_3ef762138ffcfdfb =
-  BG.fromFFIType hs_bindgen_3ef762138ffcfdfb_base
+  fmap BG.fromFFIType hs_bindgen_3ef762138ffcfdfb_base
 
 -- | Create a group of properties.
 --
@@ -243,9 +252,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_CopyProperties@
 foreign import ccall safe "hs_bindgen_084a47db7cd509f5"
   hs_bindgen_084a47db7cd509f5_base
-    :: BG.Word32
-    -> BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_CopyProperties@
 hs_bindgen_084a47db7cd509f5
@@ -253,7 +262,9 @@
   -> SDL_PropertiesID
   -> IO BG.CBool
 hs_bindgen_084a47db7cd509f5 =
-  BG.fromFFIType hs_bindgen_084a47db7cd509f5_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_084a47db7cd509f5_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Copy a group of properties.
 --
@@ -281,15 +292,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_LockProperties@
 foreign import ccall safe "hs_bindgen_f9f9de53028c2227"
   hs_bindgen_f9f9de53028c2227_base
-    :: BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_LockProperties@
 hs_bindgen_f9f9de53028c2227
   :: SDL_PropertiesID
   -> IO BG.CBool
 hs_bindgen_f9f9de53028c2227 =
-  BG.fromFFIType hs_bindgen_f9f9de53028c2227_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_f9f9de53028c2227_base (BG.toFFIType x0))
 
 -- | Lock a group of properties.
 --
@@ -317,7 +329,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_UnlockProperties@
 foreign import ccall safe "hs_bindgen_97fc1b206325cb6d"
   hs_bindgen_97fc1b206325cb6d_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_UnlockProperties@
@@ -325,7 +337,8 @@
   :: SDL_PropertiesID
   -> IO ()
 hs_bindgen_97fc1b206325cb6d =
-  BG.fromFFIType hs_bindgen_97fc1b206325cb6d_base
+  \x0 ->
+    hs_bindgen_97fc1b206325cb6d_base (BG.toFFIType x0)
 
 -- | Unlock a group of properties.
 --
@@ -347,12 +360,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_SetPointerPropertyWithCleanup@
 foreign import ccall safe "hs_bindgen_5b5795d237d14c15"
   hs_bindgen_5b5795d237d14c15_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_SetPointerPropertyWithCleanup@
 hs_bindgen_5b5795d237d14c15
@@ -363,7 +376,20 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_5b5795d237d14c15 =
-  BG.fromFFIType hs_bindgen_5b5795d237d14c15_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_5b5795d237d14c15_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Set a pointer property in a group of properties with a cleanup function that is called when the property is deleted.
 --
@@ -408,10 +434,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_SetPointerProperty@
 foreign import ccall safe "hs_bindgen_b380a660dcae4e4a"
   hs_bindgen_b380a660dcae4e4a_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_SetPointerProperty@
 hs_bindgen_b380a660dcae4e4a
@@ -420,7 +446,12 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_b380a660dcae4e4a =
-  BG.fromFFIType hs_bindgen_b380a660dcae4e4a_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_b380a660dcae4e4a_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set a pointer property in a group of properties.
 --
@@ -452,10 +483,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_SetStringProperty@
 foreign import ccall safe "hs_bindgen_817765f9d735ba5b"
   hs_bindgen_817765f9d735ba5b_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_SetStringProperty@
 hs_bindgen_817765f9d735ba5b
@@ -464,7 +495,12 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_817765f9d735ba5b =
-  BG.fromFFIType hs_bindgen_817765f9d735ba5b_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_817765f9d735ba5b_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set a string property in a group of properties.
 --
@@ -498,10 +534,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_SetNumberProperty@
 foreign import ccall safe "hs_bindgen_d9526335adcfe092"
   hs_bindgen_d9526335adcfe092_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Int64
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Int64
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_SetNumberProperty@
 hs_bindgen_d9526335adcfe092
@@ -510,7 +546,12 @@
   -> SDL3.Sys.Bindgen.Stdinc.Sint64
   -> IO BG.CBool
 hs_bindgen_d9526335adcfe092 =
-  BG.fromFFIType hs_bindgen_d9526335adcfe092_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_d9526335adcfe092_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set an integer property in a group of properties.
 --
@@ -542,10 +583,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_SetFloatProperty@
 foreign import ccall safe "hs_bindgen_1d60c12e8fc10844"
   hs_bindgen_1d60c12e8fc10844_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> Float
-    -> IO BG.Word8
+    -> BG.CFloat
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_SetFloatProperty@
 hs_bindgen_1d60c12e8fc10844
@@ -554,7 +595,12 @@
   -> BG.CFloat
   -> IO BG.CBool
 hs_bindgen_1d60c12e8fc10844 =
-  BG.fromFFIType hs_bindgen_1d60c12e8fc10844_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_1d60c12e8fc10844_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set a floating point property in a group of properties.
 --
@@ -586,10 +632,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_SetBooleanProperty@
 foreign import ccall safe "hs_bindgen_7fa7d5edc08019af"
   hs_bindgen_7fa7d5edc08019af_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_SetBooleanProperty@
 hs_bindgen_7fa7d5edc08019af
@@ -598,7 +644,12 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_7fa7d5edc08019af =
-  BG.fromFFIType hs_bindgen_7fa7d5edc08019af_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_7fa7d5edc08019af_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set a boolean property in a group of properties.
 --
@@ -630,9 +681,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_HasProperty@
 foreign import ccall safe "hs_bindgen_066c9eebf0adf032"
   hs_bindgen_066c9eebf0adf032_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_HasProperty@
 hs_bindgen_066c9eebf0adf032
@@ -640,7 +691,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_066c9eebf0adf032 =
-  BG.fromFFIType hs_bindgen_066c9eebf0adf032_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_066c9eebf0adf032_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Return whether a property exists in a group of properties.
 --
@@ -668,9 +721,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_GetPropertyType@
 foreign import ccall safe "hs_bindgen_2d83b2660daf1e6b"
   hs_bindgen_2d83b2660daf1e6b_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_GetPropertyType@
 hs_bindgen_2d83b2660daf1e6b
@@ -678,7 +731,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO SDL_PropertyType
 hs_bindgen_2d83b2660daf1e6b =
-  BG.fromFFIType hs_bindgen_2d83b2660daf1e6b_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_2d83b2660daf1e6b_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the type of a property in a group of properties.
 --
@@ -706,7 +761,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_GetPointerProperty@
 foreign import ccall safe "hs_bindgen_65efe810372a76d0"
   hs_bindgen_65efe810372a76d0_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> IO (BG.Ptr BG.Void)
@@ -718,7 +773,12 @@
   -> BG.Ptr BG.Void
   -> IO (BG.Ptr BG.Void)
 hs_bindgen_65efe810372a76d0 =
-  BG.fromFFIType hs_bindgen_65efe810372a76d0_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_65efe810372a76d0_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get a pointer property from a group of properties.
 --
@@ -752,7 +812,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_GetStringProperty@
 foreign import ccall safe "hs_bindgen_4d53ef22e0b50452"
   hs_bindgen_4d53ef22e0b50452_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> IO (BG.Ptr BG.Void)
@@ -764,7 +824,12 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_4d53ef22e0b50452 =
-  BG.fromFFIType hs_bindgen_4d53ef22e0b50452_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_4d53ef22e0b50452_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get a string property from a group of properties.
 --
@@ -796,10 +861,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_GetNumberProperty@
 foreign import ccall safe "hs_bindgen_d53619e1d560068d"
   hs_bindgen_d53619e1d560068d_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Int64
-    -> IO BG.Int64
+    -> HsBindgen.Runtime.LibC.Int64
+    -> IO HsBindgen.Runtime.LibC.Int64
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_GetNumberProperty@
 hs_bindgen_d53619e1d560068d
@@ -808,7 +873,12 @@
   -> SDL3.Sys.Bindgen.Stdinc.Sint64
   -> IO SDL3.Sys.Bindgen.Stdinc.Sint64
 hs_bindgen_d53619e1d560068d =
-  BG.fromFFIType hs_bindgen_d53619e1d560068d_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_d53619e1d560068d_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get a number property from a group of properties.
 --
@@ -842,10 +912,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_GetFloatProperty@
 foreign import ccall safe "hs_bindgen_6e11191bf6b2bbe6"
   hs_bindgen_6e11191bf6b2bbe6_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> Float
-    -> IO Float
+    -> BG.CFloat
+    -> IO BG.CFloat
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_GetFloatProperty@
 hs_bindgen_6e11191bf6b2bbe6
@@ -854,7 +924,12 @@
   -> BG.CFloat
   -> IO BG.CFloat
 hs_bindgen_6e11191bf6b2bbe6 =
-  BG.fromFFIType hs_bindgen_6e11191bf6b2bbe6_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_6e11191bf6b2bbe6_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get a floating point property from a group of properties.
 --
@@ -888,10 +963,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_GetBooleanProperty@
 foreign import ccall safe "hs_bindgen_1ad958c6807eba6d"
   hs_bindgen_1ad958c6807eba6d_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_GetBooleanProperty@
 hs_bindgen_1ad958c6807eba6d
@@ -900,7 +975,12 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_1ad958c6807eba6d =
-  BG.fromFFIType hs_bindgen_1ad958c6807eba6d_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_1ad958c6807eba6d_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get a boolean property from a group of properties.
 --
@@ -934,9 +1014,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_ClearProperty@
 foreign import ccall safe "hs_bindgen_5c29c62c039edbb3"
   hs_bindgen_5c29c62c039edbb3_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_ClearProperty@
 hs_bindgen_5c29c62c039edbb3
@@ -944,7 +1024,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_5c29c62c039edbb3 =
-  BG.fromFFIType hs_bindgen_5c29c62c039edbb3_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_5c29c62c039edbb3_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Clear a property from a group of properties.
 --
@@ -970,10 +1052,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_EnumerateProperties@
 foreign import ccall safe "hs_bindgen_395a072881de9c1b"
   hs_bindgen_395a072881de9c1b_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_EnumerateProperties@
 hs_bindgen_395a072881de9c1b
@@ -982,7 +1064,12 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_395a072881de9c1b =
-  BG.fromFFIType hs_bindgen_395a072881de9c1b_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_395a072881de9c1b_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Enumerate the properties contained in a group of properties.
 --
@@ -1014,7 +1101,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_DestroyProperties@
 foreign import ccall safe "hs_bindgen_fea2c8b90ca0d148"
   hs_bindgen_fea2c8b90ca0d148_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Safe_SDL_DestroyProperties@
@@ -1022,7 +1109,8 @@
   :: SDL_PropertiesID
   -> IO ()
 hs_bindgen_fea2c8b90ca0d148 =
-  BG.fromFFIType hs_bindgen_fea2c8b90ca0d148_base
+  \x0 ->
+    hs_bindgen_fea2c8b90ca0d148_base (BG.toFFIType x0)
 
 -- | Destroy a group of properties.
 --
diff --git a/src/SDL3/Sys/Bindgen/Properties/Unsafe.hs b/src/SDL3/Sys/Bindgen/Properties/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Properties/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Properties/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Properties.Unsafe (
@@ -27,6 +29,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -35,7 +40,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_properties.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_properties.h>"
          , "SDL_PropertiesID hs_bindgen_c42d6db8a32f055e (void)"
          , "{"
          , "  return (SDL_GetGlobalProperties)();"
@@ -195,12 +204,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_GetGlobalProperties@
 foreign import ccall unsafe "hs_bindgen_c42d6db8a32f055e"
   hs_bindgen_c42d6db8a32f055e_base
-    :: IO BG.Word32
+    :: IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_GetGlobalProperties@
 hs_bindgen_c42d6db8a32f055e :: IO SDL_PropertiesID
 hs_bindgen_c42d6db8a32f055e =
-  BG.fromFFIType hs_bindgen_c42d6db8a32f055e_base
+  fmap BG.fromFFIType hs_bindgen_c42d6db8a32f055e_base
 
 -- | Get the global SDL properties.
 --
@@ -217,12 +226,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_CreateProperties@
 foreign import ccall unsafe "hs_bindgen_3df6eaf391028f3a"
   hs_bindgen_3df6eaf391028f3a_base
-    :: IO BG.Word32
+    :: IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_CreateProperties@
 hs_bindgen_3df6eaf391028f3a :: IO SDL_PropertiesID
 hs_bindgen_3df6eaf391028f3a =
-  BG.fromFFIType hs_bindgen_3df6eaf391028f3a_base
+  fmap BG.fromFFIType hs_bindgen_3df6eaf391028f3a_base
 
 -- | Create a group of properties.
 --
@@ -243,9 +252,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_CopyProperties@
 foreign import ccall unsafe "hs_bindgen_ec7346bf04c8fb1f"
   hs_bindgen_ec7346bf04c8fb1f_base
-    :: BG.Word32
-    -> BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_CopyProperties@
 hs_bindgen_ec7346bf04c8fb1f
@@ -253,7 +262,9 @@
   -> SDL_PropertiesID
   -> IO BG.CBool
 hs_bindgen_ec7346bf04c8fb1f =
-  BG.fromFFIType hs_bindgen_ec7346bf04c8fb1f_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_ec7346bf04c8fb1f_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Copy a group of properties.
 --
@@ -281,15 +292,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_LockProperties@
 foreign import ccall unsafe "hs_bindgen_9d2b19ecdcff5a9a"
   hs_bindgen_9d2b19ecdcff5a9a_base
-    :: BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_LockProperties@
 hs_bindgen_9d2b19ecdcff5a9a
   :: SDL_PropertiesID
   -> IO BG.CBool
 hs_bindgen_9d2b19ecdcff5a9a =
-  BG.fromFFIType hs_bindgen_9d2b19ecdcff5a9a_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_9d2b19ecdcff5a9a_base (BG.toFFIType x0))
 
 -- | Lock a group of properties.
 --
@@ -317,7 +329,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_UnlockProperties@
 foreign import ccall unsafe "hs_bindgen_36fc1538f3f888d4"
   hs_bindgen_36fc1538f3f888d4_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_UnlockProperties@
@@ -325,7 +337,8 @@
   :: SDL_PropertiesID
   -> IO ()
 hs_bindgen_36fc1538f3f888d4 =
-  BG.fromFFIType hs_bindgen_36fc1538f3f888d4_base
+  \x0 ->
+    hs_bindgen_36fc1538f3f888d4_base (BG.toFFIType x0)
 
 -- | Unlock a group of properties.
 --
@@ -347,12 +360,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_SetPointerPropertyWithCleanup@
 foreign import ccall unsafe "hs_bindgen_ac9cc1ad6b8fd333"
   hs_bindgen_ac9cc1ad6b8fd333_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_SetPointerPropertyWithCleanup@
 hs_bindgen_ac9cc1ad6b8fd333
@@ -363,7 +376,20 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_ac9cc1ad6b8fd333 =
-  BG.fromFFIType hs_bindgen_ac9cc1ad6b8fd333_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_ac9cc1ad6b8fd333_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Set a pointer property in a group of properties with a cleanup function that is called when the property is deleted.
 --
@@ -408,10 +434,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_SetPointerProperty@
 foreign import ccall unsafe "hs_bindgen_7470d8d3e33299dd"
   hs_bindgen_7470d8d3e33299dd_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_SetPointerProperty@
 hs_bindgen_7470d8d3e33299dd
@@ -420,7 +446,12 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_7470d8d3e33299dd =
-  BG.fromFFIType hs_bindgen_7470d8d3e33299dd_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_7470d8d3e33299dd_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set a pointer property in a group of properties.
 --
@@ -452,10 +483,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_SetStringProperty@
 foreign import ccall unsafe "hs_bindgen_8c4e2fe0b0c344fa"
   hs_bindgen_8c4e2fe0b0c344fa_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_SetStringProperty@
 hs_bindgen_8c4e2fe0b0c344fa
@@ -464,7 +495,12 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_8c4e2fe0b0c344fa =
-  BG.fromFFIType hs_bindgen_8c4e2fe0b0c344fa_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_8c4e2fe0b0c344fa_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set a string property in a group of properties.
 --
@@ -498,10 +534,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_SetNumberProperty@
 foreign import ccall unsafe "hs_bindgen_adbe15832a85614f"
   hs_bindgen_adbe15832a85614f_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Int64
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Int64
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_SetNumberProperty@
 hs_bindgen_adbe15832a85614f
@@ -510,7 +546,12 @@
   -> SDL3.Sys.Bindgen.Stdinc.Sint64
   -> IO BG.CBool
 hs_bindgen_adbe15832a85614f =
-  BG.fromFFIType hs_bindgen_adbe15832a85614f_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_adbe15832a85614f_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set an integer property in a group of properties.
 --
@@ -542,10 +583,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_SetFloatProperty@
 foreign import ccall unsafe "hs_bindgen_cd3f1858894a3c1a"
   hs_bindgen_cd3f1858894a3c1a_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> Float
-    -> IO BG.Word8
+    -> BG.CFloat
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_SetFloatProperty@
 hs_bindgen_cd3f1858894a3c1a
@@ -554,7 +595,12 @@
   -> BG.CFloat
   -> IO BG.CBool
 hs_bindgen_cd3f1858894a3c1a =
-  BG.fromFFIType hs_bindgen_cd3f1858894a3c1a_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_cd3f1858894a3c1a_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set a floating point property in a group of properties.
 --
@@ -586,10 +632,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_SetBooleanProperty@
 foreign import ccall unsafe "hs_bindgen_54a909439447714a"
   hs_bindgen_54a909439447714a_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_SetBooleanProperty@
 hs_bindgen_54a909439447714a
@@ -598,7 +644,12 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_54a909439447714a =
-  BG.fromFFIType hs_bindgen_54a909439447714a_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_54a909439447714a_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set a boolean property in a group of properties.
 --
@@ -630,9 +681,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_HasProperty@
 foreign import ccall unsafe "hs_bindgen_668d738b4f14a372"
   hs_bindgen_668d738b4f14a372_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_HasProperty@
 hs_bindgen_668d738b4f14a372
@@ -640,7 +691,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_668d738b4f14a372 =
-  BG.fromFFIType hs_bindgen_668d738b4f14a372_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_668d738b4f14a372_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Return whether a property exists in a group of properties.
 --
@@ -668,9 +721,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_GetPropertyType@
 foreign import ccall unsafe "hs_bindgen_0dc114a9b956e6b4"
   hs_bindgen_0dc114a9b956e6b4_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_GetPropertyType@
 hs_bindgen_0dc114a9b956e6b4
@@ -678,7 +731,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO SDL_PropertyType
 hs_bindgen_0dc114a9b956e6b4 =
-  BG.fromFFIType hs_bindgen_0dc114a9b956e6b4_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_0dc114a9b956e6b4_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the type of a property in a group of properties.
 --
@@ -706,7 +761,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_GetPointerProperty@
 foreign import ccall unsafe "hs_bindgen_137a3bf658fca01b"
   hs_bindgen_137a3bf658fca01b_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> IO (BG.Ptr BG.Void)
@@ -718,7 +773,12 @@
   -> BG.Ptr BG.Void
   -> IO (BG.Ptr BG.Void)
 hs_bindgen_137a3bf658fca01b =
-  BG.fromFFIType hs_bindgen_137a3bf658fca01b_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_137a3bf658fca01b_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get a pointer property from a group of properties.
 --
@@ -752,7 +812,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_GetStringProperty@
 foreign import ccall unsafe "hs_bindgen_13dfafaed8ef603e"
   hs_bindgen_13dfafaed8ef603e_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> IO (BG.Ptr BG.Void)
@@ -764,7 +824,12 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_13dfafaed8ef603e =
-  BG.fromFFIType hs_bindgen_13dfafaed8ef603e_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_13dfafaed8ef603e_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get a string property from a group of properties.
 --
@@ -796,10 +861,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_GetNumberProperty@
 foreign import ccall unsafe "hs_bindgen_047e09cd4176f3ce"
   hs_bindgen_047e09cd4176f3ce_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Int64
-    -> IO BG.Int64
+    -> HsBindgen.Runtime.LibC.Int64
+    -> IO HsBindgen.Runtime.LibC.Int64
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_GetNumberProperty@
 hs_bindgen_047e09cd4176f3ce
@@ -808,7 +873,12 @@
   -> SDL3.Sys.Bindgen.Stdinc.Sint64
   -> IO SDL3.Sys.Bindgen.Stdinc.Sint64
 hs_bindgen_047e09cd4176f3ce =
-  BG.fromFFIType hs_bindgen_047e09cd4176f3ce_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_047e09cd4176f3ce_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get a number property from a group of properties.
 --
@@ -842,10 +912,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_GetFloatProperty@
 foreign import ccall unsafe "hs_bindgen_54dfc33f97564e4d"
   hs_bindgen_54dfc33f97564e4d_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> Float
-    -> IO Float
+    -> BG.CFloat
+    -> IO BG.CFloat
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_GetFloatProperty@
 hs_bindgen_54dfc33f97564e4d
@@ -854,7 +924,12 @@
   -> BG.CFloat
   -> IO BG.CFloat
 hs_bindgen_54dfc33f97564e4d =
-  BG.fromFFIType hs_bindgen_54dfc33f97564e4d_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_54dfc33f97564e4d_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get a floating point property from a group of properties.
 --
@@ -888,10 +963,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_GetBooleanProperty@
 foreign import ccall unsafe "hs_bindgen_ff205e1f9b9cb233"
   hs_bindgen_ff205e1f9b9cb233_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_GetBooleanProperty@
 hs_bindgen_ff205e1f9b9cb233
@@ -900,7 +975,12 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_ff205e1f9b9cb233 =
-  BG.fromFFIType hs_bindgen_ff205e1f9b9cb233_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_ff205e1f9b9cb233_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get a boolean property from a group of properties.
 --
@@ -934,9 +1014,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_ClearProperty@
 foreign import ccall unsafe "hs_bindgen_2b64b35dcac92b2c"
   hs_bindgen_2b64b35dcac92b2c_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_ClearProperty@
 hs_bindgen_2b64b35dcac92b2c
@@ -944,7 +1024,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_2b64b35dcac92b2c =
-  BG.fromFFIType hs_bindgen_2b64b35dcac92b2c_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_2b64b35dcac92b2c_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Clear a property from a group of properties.
 --
@@ -970,10 +1052,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_EnumerateProperties@
 foreign import ccall unsafe "hs_bindgen_568e06654af8bf56"
   hs_bindgen_568e06654af8bf56_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_EnumerateProperties@
 hs_bindgen_568e06654af8bf56
@@ -982,7 +1064,12 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_568e06654af8bf56 =
-  BG.fromFFIType hs_bindgen_568e06654af8bf56_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_568e06654af8bf56_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Enumerate the properties contained in a group of properties.
 --
@@ -1014,7 +1101,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_DestroyProperties@
 foreign import ccall unsafe "hs_bindgen_eeb9d2ee08b0f608"
   hs_bindgen_eeb9d2ee08b0f608_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Properties_Unsafe_SDL_DestroyProperties@
@@ -1022,7 +1109,8 @@
   :: SDL_PropertiesID
   -> IO ()
 hs_bindgen_eeb9d2ee08b0f608 =
-  BG.fromFFIType hs_bindgen_eeb9d2ee08b0f608_base
+  \x0 ->
+    hs_bindgen_eeb9d2ee08b0f608_base (BG.toFFIType x0)
 
 -- | Destroy a group of properties.
 --
diff --git a/src/SDL3/Sys/Bindgen/Rect.hs b/src/SDL3/Sys/Bindgen/Rect.hs
--- a/src/SDL3/Sys/Bindgen/Rect.hs
+++ b/src/SDL3/Sys/Bindgen/Rect.hs
@@ -13,6 +13,7 @@
 {-# LANGUAGE TypeOperators #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | Some helper functions for managing rectangles and 2D points, in both integer and floating point versions. The structure that defines a point (using integers).
 --
@@ -27,8 +28,11 @@
 )
 where
 
+import Prelude (Eq, Int, Show, pure, (<*>), (>>), type (~))
+
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.Marshal qualified as Marshal
+import HsBindgen.Runtime.Struct qualified as Struct
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField
 
@@ -64,6 +68,9 @@
 
 deriving via Marshal.EquivStorable SDL_Point instance BG.Storable SDL_Point
 
+deriving via Struct.IsStructViaReadRaw SDL_Point instance Struct.IsStruct SDL_Point
+
+-- | [C declaration]: @x@, defined at @SDL3\/SDL_rect.h 51:9@
 instance (ty ~ BG.CInt) => BG.CompatHasField.HasField "x" SDL_Point ty where
   hasField =
     \x0 ->
@@ -80,6 +87,7 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | [C declaration]: @y@, defined at @SDL3\/SDL_rect.h 52:9@
 instance (ty ~ BG.CInt) => BG.CompatHasField.HasField "y" SDL_Point ty where
   hasField =
     \x0 ->
@@ -134,6 +142,9 @@
 
 deriving via Marshal.EquivStorable SDL_FPoint instance BG.Storable SDL_FPoint
 
+deriving via Struct.IsStructViaReadRaw SDL_FPoint instance Struct.IsStruct SDL_FPoint
+
+-- | [C declaration]: @x@, defined at @SDL3\/SDL_rect.h 65:11@
 instance (ty ~ BG.CFloat) => BG.CompatHasField.HasField "x" SDL_FPoint ty where
   hasField =
     \x0 ->
@@ -153,6 +164,7 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | [C declaration]: @y@, defined at @SDL3\/SDL_rect.h 66:11@
 instance (ty ~ BG.CFloat) => BG.CompatHasField.HasField "y" SDL_FPoint ty where
   hasField =
     \x0 ->
@@ -218,6 +230,9 @@
 
 deriving via Marshal.EquivStorable SDL_Rect instance BG.Storable SDL_Rect
 
+deriving via Struct.IsStructViaReadRaw SDL_Rect instance Struct.IsStruct SDL_Rect
+
+-- | [C declaration]: @x@, defined at @SDL3\/SDL_rect.h 85:9@
 instance (ty ~ BG.CInt) => BG.CompatHasField.HasField "x" SDL_Rect ty where
   hasField =
     \x0 ->
@@ -239,6 +254,7 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | [C declaration]: @y@, defined at @SDL3\/SDL_rect.h 85:12@
 instance (ty ~ BG.CInt) => BG.CompatHasField.HasField "y" SDL_Rect ty where
   hasField =
     \x0 ->
@@ -260,6 +276,7 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | [C declaration]: @w@, defined at @SDL3\/SDL_rect.h 86:9@
 instance (ty ~ BG.CInt) => BG.CompatHasField.HasField "w" SDL_Rect ty where
   hasField =
     \x0 ->
@@ -281,6 +298,7 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | [C declaration]: @h@, defined at @SDL3\/SDL_rect.h 86:12@
 instance (ty ~ BG.CInt) => BG.CompatHasField.HasField "h" SDL_Rect ty where
   hasField =
     \x0 ->
@@ -350,6 +368,9 @@
 
 deriving via Marshal.EquivStorable SDL_FRect instance BG.Storable SDL_FRect
 
+deriving via Struct.IsStructViaReadRaw SDL_FRect instance Struct.IsStruct SDL_FRect
+
+-- | [C declaration]: @x@, defined at @SDL3\/SDL_rect.h 111:11@
 instance (ty ~ BG.CFloat) => BG.CompatHasField.HasField "x" SDL_FRect ty where
   hasField =
     \x0 ->
@@ -374,6 +395,7 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | [C declaration]: @y@, defined at @SDL3\/SDL_rect.h 112:11@
 instance (ty ~ BG.CFloat) => BG.CompatHasField.HasField "y" SDL_FRect ty where
   hasField =
     \x0 ->
@@ -398,6 +420,7 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | [C declaration]: @w@, defined at @SDL3\/SDL_rect.h 113:11@
 instance (ty ~ BG.CFloat) => BG.CompatHasField.HasField "w" SDL_FRect ty where
   hasField =
     \x0 ->
@@ -422,6 +445,7 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | [C declaration]: @h@, defined at @SDL3\/SDL_rect.h 114:11@
 instance (ty ~ BG.CFloat) => BG.CompatHasField.HasField "h" SDL_FRect ty where
   hasField =
     \x0 ->
diff --git a/src/SDL3/Sys/Bindgen/Rect/FunPtr.hs b/src/SDL3/Sys/Bindgen/Rect/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Rect/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Rect/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Rect.FunPtr (
@@ -24,6 +26,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -31,7 +35,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_rect.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_rect.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Rect_get_SDL_RectToFRect */"
          , "__attribute__ ((const))"
          , "void (*hs_bindgen_81396927af8995d0 (void)) ("
@@ -220,7 +228,7 @@
 hs_bindgen_81396927af8995d0
   :: IO (BG.FunPtr (PtrConst.PtrConst SDL_Rect -> BG.Ptr SDL_FRect -> IO ()))
 hs_bindgen_81396927af8995d0 =
-  BG.fromFFIType hs_bindgen_81396927af8995d0_base
+  fmap BG.fromFFIType hs_bindgen_81396927af8995d0_base
 
 {-# NOINLINE sDL_RectToFRect #-}
 
@@ -248,7 +256,7 @@
 hs_bindgen_8ad7f125172b6954
   :: IO (BG.FunPtr (PtrConst.PtrConst SDL_Point -> PtrConst.PtrConst SDL_Rect -> IO BG.CBool))
 hs_bindgen_8ad7f125172b6954 =
-  BG.fromFFIType hs_bindgen_8ad7f125172b6954_base
+  fmap BG.fromFFIType hs_bindgen_8ad7f125172b6954_base
 
 {-# NOINLINE sDL_PointInRect #-}
 
@@ -282,7 +290,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_get_SDL_RectEmpty@
 hs_bindgen_423b3dd0cd8e3bd3 :: IO (BG.FunPtr (PtrConst.PtrConst SDL_Rect -> IO BG.CBool))
 hs_bindgen_423b3dd0cd8e3bd3 =
-  BG.fromFFIType hs_bindgen_423b3dd0cd8e3bd3_base
+  fmap BG.fromFFIType hs_bindgen_423b3dd0cd8e3bd3_base
 
 {-# NOINLINE sDL_RectEmpty #-}
 
@@ -314,7 +322,7 @@
 hs_bindgen_8e6916371c8ddba4
   :: IO (BG.FunPtr (PtrConst.PtrConst SDL_Rect -> PtrConst.PtrConst SDL_Rect -> IO BG.CBool))
 hs_bindgen_8e6916371c8ddba4 =
-  BG.fromFFIType hs_bindgen_8e6916371c8ddba4_base
+  fmap BG.fromFFIType hs_bindgen_8e6916371c8ddba4_base
 
 {-# NOINLINE sDL_RectsEqual #-}
 
@@ -349,7 +357,7 @@
 hs_bindgen_e6e10beddc2428e4
   :: IO (BG.FunPtr (PtrConst.PtrConst SDL_Rect -> PtrConst.PtrConst SDL_Rect -> IO BG.CBool))
 hs_bindgen_e6e10beddc2428e4 =
-  BG.fromFFIType hs_bindgen_e6e10beddc2428e4_base
+  fmap BG.fromFFIType hs_bindgen_e6e10beddc2428e4_base
 
 {-# NOINLINE sDL_HasRectIntersection #-}
 
@@ -387,7 +395,7 @@
            (PtrConst.PtrConst SDL_Rect -> PtrConst.PtrConst SDL_Rect -> BG.Ptr SDL_Rect -> IO BG.CBool)
        )
 hs_bindgen_b27ebfc7301ab58a =
-  BG.fromFFIType hs_bindgen_b27ebfc7301ab58a_base
+  fmap BG.fromFFIType hs_bindgen_b27ebfc7301ab58a_base
 
 {-# NOINLINE sDL_GetRectIntersection #-}
 
@@ -428,7 +436,7 @@
            (PtrConst.PtrConst SDL_Rect -> PtrConst.PtrConst SDL_Rect -> BG.Ptr SDL_Rect -> IO BG.CBool)
        )
 hs_bindgen_f2cca914398431e6 =
-  BG.fromFFIType hs_bindgen_f2cca914398431e6_base
+  fmap BG.fromFFIType hs_bindgen_f2cca914398431e6_base
 
 {-# NOINLINE sDL_GetRectUnion #-}
 
@@ -470,7 +478,7 @@
            )
        )
 hs_bindgen_9e30de5a15e6eb56 =
-  BG.fromFFIType hs_bindgen_9e30de5a15e6eb56_base
+  fmap BG.fromFFIType hs_bindgen_9e30de5a15e6eb56_base
 
 {-# NOINLINE sDL_GetRectEnclosingPoints #-}
 
@@ -522,7 +530,7 @@
            )
        )
 hs_bindgen_8fb4c89870de38a5 =
-  BG.fromFFIType hs_bindgen_8fb4c89870de38a5_base
+  fmap BG.fromFFIType hs_bindgen_8fb4c89870de38a5_base
 
 {-# NOINLINE sDL_GetRectAndLineIntersection #-}
 
@@ -568,7 +576,7 @@
 hs_bindgen_092906727716778c
   :: IO (BG.FunPtr (PtrConst.PtrConst SDL_FPoint -> PtrConst.PtrConst SDL_FRect -> IO BG.CBool))
 hs_bindgen_092906727716778c =
-  BG.fromFFIType hs_bindgen_092906727716778c_base
+  fmap BG.fromFFIType hs_bindgen_092906727716778c_base
 
 {-# NOINLINE sDL_PointInRectFloat #-}
 
@@ -602,7 +610,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_get_SDL_RectEmptyFloat@
 hs_bindgen_31feb0e1be2327c4 :: IO (BG.FunPtr (PtrConst.PtrConst SDL_FRect -> IO BG.CBool))
 hs_bindgen_31feb0e1be2327c4 =
-  BG.fromFFIType hs_bindgen_31feb0e1be2327c4_base
+  fmap BG.fromFFIType hs_bindgen_31feb0e1be2327c4_base
 
 {-# NOINLINE sDL_RectEmptyFloat #-}
 
@@ -635,7 +643,7 @@
   :: IO
        (BG.FunPtr (PtrConst.PtrConst SDL_FRect -> PtrConst.PtrConst SDL_FRect -> BG.CFloat -> IO BG.CBool))
 hs_bindgen_3b833d6a0ec61a00 =
-  BG.fromFFIType hs_bindgen_3b833d6a0ec61a00_base
+  fmap BG.fromFFIType hs_bindgen_3b833d6a0ec61a00_base
 
 {-# NOINLINE sDL_RectsEqualEpsilon #-}
 
@@ -674,7 +682,7 @@
 hs_bindgen_6182b7c77941f68d
   :: IO (BG.FunPtr (PtrConst.PtrConst SDL_FRect -> PtrConst.PtrConst SDL_FRect -> IO BG.CBool))
 hs_bindgen_6182b7c77941f68d =
-  BG.fromFFIType hs_bindgen_6182b7c77941f68d_base
+  fmap BG.fromFFIType hs_bindgen_6182b7c77941f68d_base
 
 {-# NOINLINE sDL_RectsEqualFloat #-}
 
@@ -711,7 +719,7 @@
 hs_bindgen_3add038abafa0b81
   :: IO (BG.FunPtr (PtrConst.PtrConst SDL_FRect -> PtrConst.PtrConst SDL_FRect -> IO BG.CBool))
 hs_bindgen_3add038abafa0b81 =
-  BG.fromFFIType hs_bindgen_3add038abafa0b81_base
+  fmap BG.fromFFIType hs_bindgen_3add038abafa0b81_base
 
 {-# NOINLINE sDL_HasRectIntersectionFloat #-}
 
@@ -749,7 +757,7 @@
            (PtrConst.PtrConst SDL_FRect -> PtrConst.PtrConst SDL_FRect -> BG.Ptr SDL_FRect -> IO BG.CBool)
        )
 hs_bindgen_5458db9427cb15c2 =
-  BG.fromFFIType hs_bindgen_5458db9427cb15c2_base
+  fmap BG.fromFFIType hs_bindgen_5458db9427cb15c2_base
 
 {-# NOINLINE sDL_GetRectIntersectionFloat #-}
 
@@ -790,7 +798,7 @@
            (PtrConst.PtrConst SDL_FRect -> PtrConst.PtrConst SDL_FRect -> BG.Ptr SDL_FRect -> IO BG.CBool)
        )
 hs_bindgen_937c1757d8b5c9a9 =
-  BG.fromFFIType hs_bindgen_937c1757d8b5c9a9_base
+  fmap BG.fromFFIType hs_bindgen_937c1757d8b5c9a9_base
 
 {-# NOINLINE sDL_GetRectUnionFloat #-}
 
@@ -832,7 +840,7 @@
            )
        )
 hs_bindgen_09f44777a8ae2968 =
-  BG.fromFFIType hs_bindgen_09f44777a8ae2968_base
+  fmap BG.fromFFIType hs_bindgen_09f44777a8ae2968_base
 
 {-# NOINLINE sDL_GetRectEnclosingPointsFloat #-}
 
@@ -884,7 +892,7 @@
            )
        )
 hs_bindgen_0a7c277ad6063b14 =
-  BG.fromFFIType hs_bindgen_0a7c277ad6063b14_base
+  fmap BG.fromFFIType hs_bindgen_0a7c277ad6063b14_base
 
 {-# NOINLINE sDL_GetRectAndLineIntersectionFloat #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Rect/Safe.hs b/src/SDL3/Sys/Bindgen/Rect/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Rect/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Rect/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Rect.Safe (
@@ -24,6 +26,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -31,7 +35,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_rect.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_rect.h>"
          , "void hs_bindgen_a9f520f11e166938 ("
          , "  SDL_Rect const *arg1,"
          , "  SDL_FRect *arg2"
@@ -188,7 +196,9 @@
   -> BG.Ptr SDL_FRect
   -> IO ()
 hs_bindgen_a9f520f11e166938 =
-  BG.fromFFIType hs_bindgen_a9f520f11e166938_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_a9f520f11e166938_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Convert an 'SDL_Rect' to 'SDL_FRect'
 --
@@ -214,7 +224,7 @@
   hs_bindgen_7c0acf8d07c0c1dd_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_Safe_SDL_PointInRect@
 hs_bindgen_7c0acf8d07c0c1dd
@@ -222,7 +232,9 @@
   -> PtrConst.PtrConst SDL_Rect
   -> IO BG.CBool
 hs_bindgen_7c0acf8d07c0c1dd =
-  BG.fromFFIType hs_bindgen_7c0acf8d07c0c1dd_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_7c0acf8d07c0c1dd_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Determine whether a point resides inside a rectangle.
 --
@@ -253,14 +265,15 @@
 foreign import ccall safe "hs_bindgen_7298326168509737"
   hs_bindgen_7298326168509737_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_Safe_SDL_RectEmpty@
 hs_bindgen_7298326168509737
   :: PtrConst.PtrConst SDL_Rect
   -> IO BG.CBool
 hs_bindgen_7298326168509737 =
-  BG.fromFFIType hs_bindgen_7298326168509737_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_7298326168509737_base (BG.toFFIType x0))
 
 -- | Determine whether a rectangle has no area.
 --
@@ -288,7 +301,7 @@
   hs_bindgen_d40e366324ea8c2f_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_Safe_SDL_RectsEqual@
 hs_bindgen_d40e366324ea8c2f
@@ -296,7 +309,9 @@
   -> PtrConst.PtrConst SDL_Rect
   -> IO BG.CBool
 hs_bindgen_d40e366324ea8c2f =
-  BG.fromFFIType hs_bindgen_d40e366324ea8c2f_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_d40e366324ea8c2f_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Determine whether two rectangles are equal.
 --
@@ -328,7 +343,7 @@
   hs_bindgen_b2eda76752d2c711_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_Safe_SDL_HasRectIntersection@
 hs_bindgen_b2eda76752d2c711
@@ -336,7 +351,9 @@
   -> PtrConst.PtrConst SDL_Rect
   -> IO BG.CBool
 hs_bindgen_b2eda76752d2c711 =
-  BG.fromFFIType hs_bindgen_b2eda76752d2c711_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_b2eda76752d2c711_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Determine whether two rectangles intersect.
 --
@@ -369,7 +386,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_Safe_SDL_GetRectIntersection@
 hs_bindgen_808b8181f3c8f0c7
@@ -378,7 +395,12 @@
   -> BG.Ptr SDL_Rect
   -> IO BG.CBool
 hs_bindgen_808b8181f3c8f0c7 =
-  BG.fromFFIType hs_bindgen_808b8181f3c8f0c7_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_808b8181f3c8f0c7_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Calculate the intersection of two rectangles.
 --
@@ -415,7 +437,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_Safe_SDL_GetRectUnion@
 hs_bindgen_44114d292c0406e2
@@ -424,7 +446,12 @@
   -> BG.Ptr SDL_Rect
   -> IO BG.CBool
 hs_bindgen_44114d292c0406e2 =
-  BG.fromFFIType hs_bindgen_44114d292c0406e2_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_44114d292c0406e2_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Calculate the union of two rectangles.
 --
@@ -455,10 +482,10 @@
 foreign import ccall safe "hs_bindgen_b02c8a352859e75c"
   hs_bindgen_b02c8a352859e75c_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_Safe_SDL_GetRectEnclosingPoints@
 hs_bindgen_b02c8a352859e75c
@@ -468,7 +495,18 @@
   -> BG.Ptr SDL_Rect
   -> IO BG.CBool
 hs_bindgen_b02c8a352859e75c =
-  BG.fromFFIType hs_bindgen_b02c8a352859e75c_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_b02c8a352859e75c_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Calculate a minimal rectangle enclosing a set of points.
 --
@@ -510,7 +548,7 @@
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_Safe_SDL_GetRectAndLineIntersection@
 hs_bindgen_1319bb78d8d2e643
@@ -521,7 +559,20 @@
   -> BG.Ptr BG.CInt
   -> IO BG.CBool
 hs_bindgen_1319bb78d8d2e643 =
-  BG.fromFFIType hs_bindgen_1319bb78d8d2e643_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_1319bb78d8d2e643_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Calculate the intersection of a rectangle and line segment.
 --
@@ -564,7 +615,7 @@
   hs_bindgen_db89e1c0a4060064_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_Safe_SDL_PointInRectFloat@
 hs_bindgen_db89e1c0a4060064
@@ -572,7 +623,9 @@
   -> PtrConst.PtrConst SDL_FRect
   -> IO BG.CBool
 hs_bindgen_db89e1c0a4060064 =
-  BG.fromFFIType hs_bindgen_db89e1c0a4060064_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_db89e1c0a4060064_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Determine whether a point resides inside a floating point rectangle.
 --
@@ -603,14 +656,15 @@
 foreign import ccall safe "hs_bindgen_cf687f22e3772d43"
   hs_bindgen_cf687f22e3772d43_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_Safe_SDL_RectEmptyFloat@
 hs_bindgen_cf687f22e3772d43
   :: PtrConst.PtrConst SDL_FRect
   -> IO BG.CBool
 hs_bindgen_cf687f22e3772d43 =
-  BG.fromFFIType hs_bindgen_cf687f22e3772d43_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_cf687f22e3772d43_base (BG.toFFIType x0))
 
 -- | Determine whether a floating point rectangle takes no space.
 --
@@ -638,8 +692,8 @@
   hs_bindgen_ffb7b7aa2884662e_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> Float
-    -> IO BG.Word8
+    -> BG.CFloat
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_Safe_SDL_RectsEqualEpsilon@
 hs_bindgen_ffb7b7aa2884662e
@@ -648,7 +702,12 @@
   -> BG.CFloat
   -> IO BG.CBool
 hs_bindgen_ffb7b7aa2884662e =
-  BG.fromFFIType hs_bindgen_ffb7b7aa2884662e_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_ffb7b7aa2884662e_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Determine whether two floating point rectangles are equal, within some given epsilon.
 --
@@ -686,7 +745,7 @@
   hs_bindgen_16841c4903715a15_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_Safe_SDL_RectsEqualFloat@
 hs_bindgen_16841c4903715a15
@@ -694,7 +753,9 @@
   -> PtrConst.PtrConst SDL_FRect
   -> IO BG.CBool
 hs_bindgen_16841c4903715a15 =
-  BG.fromFFIType hs_bindgen_16841c4903715a15_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_16841c4903715a15_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Determine whether two floating point rectangles are equal, within a default epsilon.
 --
@@ -728,7 +789,7 @@
   hs_bindgen_4ccee9871e6b2122_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_Safe_SDL_HasRectIntersectionFloat@
 hs_bindgen_4ccee9871e6b2122
@@ -736,7 +797,9 @@
   -> PtrConst.PtrConst SDL_FRect
   -> IO BG.CBool
 hs_bindgen_4ccee9871e6b2122 =
-  BG.fromFFIType hs_bindgen_4ccee9871e6b2122_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_4ccee9871e6b2122_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Determine whether two rectangles intersect with float precision.
 --
@@ -770,7 +833,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_Safe_SDL_GetRectIntersectionFloat@
 hs_bindgen_73c245953e392b8b
@@ -779,7 +842,12 @@
   -> BG.Ptr SDL_FRect
   -> IO BG.CBool
 hs_bindgen_73c245953e392b8b =
-  BG.fromFFIType hs_bindgen_73c245953e392b8b_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_73c245953e392b8b_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Calculate the intersection of two rectangles with float precision.
 --
@@ -817,7 +885,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_Safe_SDL_GetRectUnionFloat@
 hs_bindgen_26df11f6f3486748
@@ -826,7 +894,12 @@
   -> BG.Ptr SDL_FRect
   -> IO BG.CBool
 hs_bindgen_26df11f6f3486748 =
-  BG.fromFFIType hs_bindgen_26df11f6f3486748_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_26df11f6f3486748_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Calculate the union of two rectangles with float precision.
 --
@@ -857,10 +930,10 @@
 foreign import ccall safe "hs_bindgen_c543abfe8b881179"
   hs_bindgen_c543abfe8b881179_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_Safe_SDL_GetRectEnclosingPointsFloat@
 hs_bindgen_c543abfe8b881179
@@ -870,7 +943,18 @@
   -> BG.Ptr SDL_FRect
   -> IO BG.CBool
 hs_bindgen_c543abfe8b881179 =
-  BG.fromFFIType hs_bindgen_c543abfe8b881179_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_c543abfe8b881179_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Calculate a minimal rectangle enclosing a set of points with float precision.
 --
@@ -912,7 +996,7 @@
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_Safe_SDL_GetRectAndLineIntersectionFloat@
 hs_bindgen_274c31df17fcabf9
@@ -923,7 +1007,20 @@
   -> BG.Ptr BG.CFloat
   -> IO BG.CBool
 hs_bindgen_274c31df17fcabf9 =
-  BG.fromFFIType hs_bindgen_274c31df17fcabf9_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_274c31df17fcabf9_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Calculate the intersection of a rectangle and line segment with float precision.
 --
diff --git a/src/SDL3/Sys/Bindgen/Rect/Unsafe.hs b/src/SDL3/Sys/Bindgen/Rect/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Rect/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Rect/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Rect.Unsafe (
@@ -24,6 +26,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -31,7 +35,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_rect.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_rect.h>"
          , "void hs_bindgen_8e106b8f8a5cc9ba ("
          , "  SDL_Rect const *arg1,"
          , "  SDL_FRect *arg2"
@@ -188,7 +196,9 @@
   -> BG.Ptr SDL_FRect
   -> IO ()
 hs_bindgen_8e106b8f8a5cc9ba =
-  BG.fromFFIType hs_bindgen_8e106b8f8a5cc9ba_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_8e106b8f8a5cc9ba_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Convert an 'SDL_Rect' to 'SDL_FRect'
 --
@@ -214,7 +224,7 @@
   hs_bindgen_a98cca13647f2c65_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_Unsafe_SDL_PointInRect@
 hs_bindgen_a98cca13647f2c65
@@ -222,7 +232,9 @@
   -> PtrConst.PtrConst SDL_Rect
   -> IO BG.CBool
 hs_bindgen_a98cca13647f2c65 =
-  BG.fromFFIType hs_bindgen_a98cca13647f2c65_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_a98cca13647f2c65_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Determine whether a point resides inside a rectangle.
 --
@@ -253,14 +265,15 @@
 foreign import ccall unsafe "hs_bindgen_d87d44547ed7b9c1"
   hs_bindgen_d87d44547ed7b9c1_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_Unsafe_SDL_RectEmpty@
 hs_bindgen_d87d44547ed7b9c1
   :: PtrConst.PtrConst SDL_Rect
   -> IO BG.CBool
 hs_bindgen_d87d44547ed7b9c1 =
-  BG.fromFFIType hs_bindgen_d87d44547ed7b9c1_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d87d44547ed7b9c1_base (BG.toFFIType x0))
 
 -- | Determine whether a rectangle has no area.
 --
@@ -288,7 +301,7 @@
   hs_bindgen_27b455f8a1132dc3_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_Unsafe_SDL_RectsEqual@
 hs_bindgen_27b455f8a1132dc3
@@ -296,7 +309,9 @@
   -> PtrConst.PtrConst SDL_Rect
   -> IO BG.CBool
 hs_bindgen_27b455f8a1132dc3 =
-  BG.fromFFIType hs_bindgen_27b455f8a1132dc3_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_27b455f8a1132dc3_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Determine whether two rectangles are equal.
 --
@@ -328,7 +343,7 @@
   hs_bindgen_c41afd18a3fb5214_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_Unsafe_SDL_HasRectIntersection@
 hs_bindgen_c41afd18a3fb5214
@@ -336,7 +351,9 @@
   -> PtrConst.PtrConst SDL_Rect
   -> IO BG.CBool
 hs_bindgen_c41afd18a3fb5214 =
-  BG.fromFFIType hs_bindgen_c41afd18a3fb5214_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_c41afd18a3fb5214_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Determine whether two rectangles intersect.
 --
@@ -369,7 +386,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_Unsafe_SDL_GetRectIntersection@
 hs_bindgen_a35618c178c541bb
@@ -378,7 +395,12 @@
   -> BG.Ptr SDL_Rect
   -> IO BG.CBool
 hs_bindgen_a35618c178c541bb =
-  BG.fromFFIType hs_bindgen_a35618c178c541bb_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_a35618c178c541bb_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Calculate the intersection of two rectangles.
 --
@@ -415,7 +437,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_Unsafe_SDL_GetRectUnion@
 hs_bindgen_fb794a6b5c1e9203
@@ -424,7 +446,12 @@
   -> BG.Ptr SDL_Rect
   -> IO BG.CBool
 hs_bindgen_fb794a6b5c1e9203 =
-  BG.fromFFIType hs_bindgen_fb794a6b5c1e9203_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_fb794a6b5c1e9203_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Calculate the union of two rectangles.
 --
@@ -455,10 +482,10 @@
 foreign import ccall unsafe "hs_bindgen_055ba0fc6b09318a"
   hs_bindgen_055ba0fc6b09318a_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_Unsafe_SDL_GetRectEnclosingPoints@
 hs_bindgen_055ba0fc6b09318a
@@ -468,7 +495,18 @@
   -> BG.Ptr SDL_Rect
   -> IO BG.CBool
 hs_bindgen_055ba0fc6b09318a =
-  BG.fromFFIType hs_bindgen_055ba0fc6b09318a_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_055ba0fc6b09318a_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Calculate a minimal rectangle enclosing a set of points.
 --
@@ -510,7 +548,7 @@
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_Unsafe_SDL_GetRectAndLineIntersection@
 hs_bindgen_959a5cb13535d34f
@@ -521,7 +559,20 @@
   -> BG.Ptr BG.CInt
   -> IO BG.CBool
 hs_bindgen_959a5cb13535d34f =
-  BG.fromFFIType hs_bindgen_959a5cb13535d34f_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_959a5cb13535d34f_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Calculate the intersection of a rectangle and line segment.
 --
@@ -564,7 +615,7 @@
   hs_bindgen_d0a7b5fa03d29582_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_Unsafe_SDL_PointInRectFloat@
 hs_bindgen_d0a7b5fa03d29582
@@ -572,7 +623,9 @@
   -> PtrConst.PtrConst SDL_FRect
   -> IO BG.CBool
 hs_bindgen_d0a7b5fa03d29582 =
-  BG.fromFFIType hs_bindgen_d0a7b5fa03d29582_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_d0a7b5fa03d29582_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Determine whether a point resides inside a floating point rectangle.
 --
@@ -603,14 +656,15 @@
 foreign import ccall unsafe "hs_bindgen_9c321e237166b364"
   hs_bindgen_9c321e237166b364_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_Unsafe_SDL_RectEmptyFloat@
 hs_bindgen_9c321e237166b364
   :: PtrConst.PtrConst SDL_FRect
   -> IO BG.CBool
 hs_bindgen_9c321e237166b364 =
-  BG.fromFFIType hs_bindgen_9c321e237166b364_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_9c321e237166b364_base (BG.toFFIType x0))
 
 -- | Determine whether a floating point rectangle takes no space.
 --
@@ -638,8 +692,8 @@
   hs_bindgen_f80b1d55f3fd3ff0_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> Float
-    -> IO BG.Word8
+    -> BG.CFloat
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_Unsafe_SDL_RectsEqualEpsilon@
 hs_bindgen_f80b1d55f3fd3ff0
@@ -648,7 +702,12 @@
   -> BG.CFloat
   -> IO BG.CBool
 hs_bindgen_f80b1d55f3fd3ff0 =
-  BG.fromFFIType hs_bindgen_f80b1d55f3fd3ff0_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_f80b1d55f3fd3ff0_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Determine whether two floating point rectangles are equal, within some given epsilon.
 --
@@ -686,7 +745,7 @@
   hs_bindgen_ae8860672929d976_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_Unsafe_SDL_RectsEqualFloat@
 hs_bindgen_ae8860672929d976
@@ -694,7 +753,9 @@
   -> PtrConst.PtrConst SDL_FRect
   -> IO BG.CBool
 hs_bindgen_ae8860672929d976 =
-  BG.fromFFIType hs_bindgen_ae8860672929d976_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_ae8860672929d976_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Determine whether two floating point rectangles are equal, within a default epsilon.
 --
@@ -728,7 +789,7 @@
   hs_bindgen_7789d3ed056d9e69_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_Unsafe_SDL_HasRectIntersectionFloat@
 hs_bindgen_7789d3ed056d9e69
@@ -736,7 +797,9 @@
   -> PtrConst.PtrConst SDL_FRect
   -> IO BG.CBool
 hs_bindgen_7789d3ed056d9e69 =
-  BG.fromFFIType hs_bindgen_7789d3ed056d9e69_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_7789d3ed056d9e69_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Determine whether two rectangles intersect with float precision.
 --
@@ -770,7 +833,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_Unsafe_SDL_GetRectIntersectionFloat@
 hs_bindgen_b201a8ca90bb5827
@@ -779,7 +842,12 @@
   -> BG.Ptr SDL_FRect
   -> IO BG.CBool
 hs_bindgen_b201a8ca90bb5827 =
-  BG.fromFFIType hs_bindgen_b201a8ca90bb5827_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_b201a8ca90bb5827_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Calculate the intersection of two rectangles with float precision.
 --
@@ -817,7 +885,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_Unsafe_SDL_GetRectUnionFloat@
 hs_bindgen_acf40b03660f89c9
@@ -826,7 +894,12 @@
   -> BG.Ptr SDL_FRect
   -> IO BG.CBool
 hs_bindgen_acf40b03660f89c9 =
-  BG.fromFFIType hs_bindgen_acf40b03660f89c9_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_acf40b03660f89c9_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Calculate the union of two rectangles with float precision.
 --
@@ -857,10 +930,10 @@
 foreign import ccall unsafe "hs_bindgen_7e56e880d6fe6038"
   hs_bindgen_7e56e880d6fe6038_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_Unsafe_SDL_GetRectEnclosingPointsFloat@
 hs_bindgen_7e56e880d6fe6038
@@ -870,7 +943,18 @@
   -> BG.Ptr SDL_FRect
   -> IO BG.CBool
 hs_bindgen_7e56e880d6fe6038 =
-  BG.fromFFIType hs_bindgen_7e56e880d6fe6038_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_7e56e880d6fe6038_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Calculate a minimal rectangle enclosing a set of points with float precision.
 --
@@ -912,7 +996,7 @@
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Rect_Unsafe_SDL_GetRectAndLineIntersectionFloat@
 hs_bindgen_eea028e78b1eead0
@@ -923,7 +1007,20 @@
   -> BG.Ptr BG.CFloat
   -> IO BG.CBool
 hs_bindgen_eea028e78b1eead0 =
-  BG.fromFFIType hs_bindgen_eea028e78b1eead0_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_eea028e78b1eead0_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Calculate the intersection of a rectangle and line segment with float precision.
 --
diff --git a/src/SDL3/Sys/Bindgen/Render.hs b/src/SDL3/Sys/Bindgen/Render.hs
--- a/src/SDL3/Sys/Bindgen/Render.hs
+++ b/src/SDL3/Sys/Bindgen/Render.hs
@@ -18,6 +18,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | Header file for SDL 2D rendering functions.
 --
@@ -170,11 +171,14 @@
 )
 where
 
+import Prelude (Eq, Int, Ord, Read, Show, pure, (<*>), (>>), type (~))
+
 import C.Expr.HostPlatform qualified
 import HsBindgen.Runtime.CEnum qualified as CEnum
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.Marshal qualified as Marshal
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Struct qualified as Struct
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField
 import SDL3.Sys.Bindgen.Gpu qualified
@@ -242,6 +246,11 @@
 
 deriving via Marshal.EquivStorable SDL_Vertex instance BG.Storable SDL_Vertex
 
+deriving via Struct.IsStructViaReadRaw SDL_Vertex instance Struct.IsStruct SDL_Vertex
+
+-- | Vertex position, in 'SDL_Renderer' coordinates
+--
+--     [C declaration]: @position@, defined at @SDL3\/SDL_render.h 91:16@
 instance
   (ty ~ SDL3.Sys.Bindgen.Rect.SDL_FPoint)
   => BG.CompatHasField.HasField "position" SDL_Vertex ty
@@ -270,6 +279,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | Vertex color
+--
+--     [C declaration]: @color@, defined at @SDL3\/SDL_render.h 92:16@
 instance
   (ty ~ SDL3.Sys.Bindgen.Pixels.SDL_FColor)
   => BG.CompatHasField.HasField "color" SDL_Vertex ty
@@ -298,6 +310,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | Normalized texture coordinates, if needed
+--
+--     [C declaration]: @tex_coord@, defined at @SDL3\/SDL_render.h 93:16@
 instance
   (ty ~ SDL3.Sys.Bindgen.Rect.SDL_FPoint)
   => BG.CompatHasField.HasField "tex_coord" SDL_Vertex ty
@@ -765,6 +780,11 @@
 
 deriving via Marshal.EquivStorable SDL_Texture instance BG.Storable SDL_Texture
 
+deriving via Struct.IsStructViaReadRaw SDL_Texture instance Struct.IsStruct SDL_Texture
+
+-- | The format of the texture, read-only
+--
+--     [C declaration]: @format@, defined at @SDL3\/SDL_render.h 162:21@
 instance
   (ty ~ SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat)
   => BG.CompatHasField.HasField "format" SDL_Texture ty
@@ -794,6 +814,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The width of the texture, read-only.
+--
+--     [C declaration]: @w@, defined at @SDL3\/SDL_render.h 163:9@
 instance (ty ~ BG.CInt) => BG.CompatHasField.HasField "w" SDL_Texture ty where
   hasField =
     \x0 ->
@@ -818,6 +841,9 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | The height of the texture, read-only.
+--
+--     [C declaration]: @h@, defined at @SDL3\/SDL_render.h 164:9@
 instance (ty ~ BG.CInt) => BG.CompatHasField.HasField "h" SDL_Texture ty where
   hasField =
     \x0 ->
@@ -842,6 +868,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | Application reference count, used when freeing texture
+--
+--     [C declaration]: @refcount@, defined at @SDL3\/SDL_render.h 166:9@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "refcount" SDL_Texture ty
@@ -4512,6 +4541,14 @@
   instance
     BG.Storable SDL_GPURenderStateCreateInfo
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_GPURenderStateCreateInfo
+  instance
+    Struct.IsStruct SDL_GPURenderStateCreateInfo
+
+-- | The fragment shader to use when this render state is active
+--
+--     [C declaration]: @fragment_shader@, defined at @SDL3\/SDL_render.h 2931:20@
 instance
   (ty ~ BG.Ptr SDL3.Sys.Bindgen.Gpu.SDL_GPUShader)
   => BG.CompatHasField.HasField "fragment_shader" SDL_GPURenderStateCreateInfo ty
@@ -4546,6 +4583,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The number of additional fragment samplers to bind when this render state is active
+--
+--     [C declaration]: @num_sampler_bindings@, defined at @SDL3\/SDL_render.h 2933:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
   => BG.CompatHasField.HasField "num_sampler_bindings" SDL_GPURenderStateCreateInfo ty
@@ -4580,6 +4620,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | Additional fragment samplers to bind when this render state is active
+--
+--     [C declaration]: @sampler_bindings@, defined at @SDL3\/SDL_render.h 2934:41@
 instance
   (ty ~ PtrConst.PtrConst SDL3.Sys.Bindgen.Gpu.SDL_GPUTextureSamplerBinding)
   => BG.CompatHasField.HasField "sampler_bindings" SDL_GPURenderStateCreateInfo ty
@@ -4614,6 +4657,9 @@
 
   offset# = \_ -> \_ -> 16
 
+-- | The number of storage textures to bind when this render state is active
+--
+--     [C declaration]: @num_storage_textures@, defined at @SDL3\/SDL_render.h 2936:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
   => BG.CompatHasField.HasField "num_storage_textures" SDL_GPURenderStateCreateInfo ty
@@ -4648,6 +4694,9 @@
 
   offset# = \_ -> \_ -> 24
 
+-- | Storage textures to bind when this render state is active
+--
+--     [C declaration]: @storage_textures@, defined at @SDL3\/SDL_render.h 2937:28@
 instance
   (ty ~ PtrConst.PtrConst (BG.Ptr SDL3.Sys.Bindgen.Gpu.SDL_GPUTexture))
   => BG.CompatHasField.HasField "storage_textures" SDL_GPURenderStateCreateInfo ty
@@ -4682,6 +4731,9 @@
 
   offset# = \_ -> \_ -> 32
 
+-- | The number of storage buffers to bind when this render state is active
+--
+--     [C declaration]: @num_storage_buffers@, defined at @SDL3\/SDL_render.h 2939:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Sint32)
   => BG.CompatHasField.HasField "num_storage_buffers" SDL_GPURenderStateCreateInfo ty
@@ -4716,6 +4768,9 @@
 
   offset# = \_ -> \_ -> 40
 
+-- | Storage buffers to bind when this render state is active
+--
+--     [C declaration]: @storage_buffers@, defined at @SDL3\/SDL_render.h 2940:27@
 instance
   (ty ~ PtrConst.PtrConst (BG.Ptr SDL3.Sys.Bindgen.Gpu.SDL_GPUBuffer))
   => BG.CompatHasField.HasField "storage_buffers" SDL_GPURenderStateCreateInfo ty
@@ -4750,6 +4805,9 @@
 
   offset# = \_ -> \_ -> 48
 
+-- | A properties ID for extensions. Should be 0 if no extensions are needed.
+--
+--     [C declaration]: @props@, defined at @SDL3\/SDL_render.h 2942:22@
 instance
   (ty ~ SDL3.Sys.Bindgen.Properties.SDL_PropertiesID)
   => BG.CompatHasField.HasField "props" SDL_GPURenderStateCreateInfo ty
diff --git a/src/SDL3/Sys/Bindgen/Render/FunPtr.hs b/src/SDL3/Sys/Bindgen/Render/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Render/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Render/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Render.FunPtr (
@@ -107,6 +109,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -123,7 +127,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_render.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_render.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Render_get_SDL_GetNumRenderDrivers */"
          , "__attribute__ ((const))"
          , "signed int (*hs_bindgen_39ae05adee57681c (void)) (void)"
@@ -1269,7 +1277,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_get_SDL_GetNumRenderDrivers@
 hs_bindgen_39ae05adee57681c :: IO (BG.FunPtr (IO BG.CInt))
 hs_bindgen_39ae05adee57681c =
-  BG.fromFFIType hs_bindgen_39ae05adee57681c_base
+  fmap BG.fromFFIType hs_bindgen_39ae05adee57681c_base
 
 {-# NOINLINE sDL_GetNumRenderDrivers #-}
 
@@ -1300,7 +1308,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_get_SDL_GetRenderDriver@
 hs_bindgen_5a6cb27af6f3e59c :: IO (BG.FunPtr (BG.CInt -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_5a6cb27af6f3e59c =
-  BG.fromFFIType hs_bindgen_5a6cb27af6f3e59c_base
+  fmap BG.fromFFIType hs_bindgen_5a6cb27af6f3e59c_base
 
 {-# NOINLINE sDL_GetRenderDriver #-}
 
@@ -1344,7 +1352,7 @@
            )
        )
 hs_bindgen_a1e969ca8147cb88 =
-  BG.fromFFIType hs_bindgen_a1e969ca8147cb88_base
+  fmap BG.fromFFIType hs_bindgen_a1e969ca8147cb88_base
 
 {-# NOINLINE sDL_CreateWindowAndRenderer #-}
 
@@ -1396,7 +1404,7 @@
            (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window -> PtrConst.PtrConst BG.CChar -> IO (BG.Ptr SDL_Renderer))
        )
 hs_bindgen_4f8c6f9ab79b5444 =
-  BG.fromFFIType hs_bindgen_4f8c6f9ab79b5444_base
+  fmap BG.fromFFIType hs_bindgen_4f8c6f9ab79b5444_base
 
 {-# NOINLINE sDL_CreateRenderer #-}
 
@@ -1436,7 +1444,7 @@
 hs_bindgen_2136cfcab6da3c79
   :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Properties.SDL_PropertiesID -> IO (BG.Ptr SDL_Renderer)))
 hs_bindgen_2136cfcab6da3c79 =
-  BG.fromFFIType hs_bindgen_2136cfcab6da3c79_base
+  fmap BG.fromFFIType hs_bindgen_2136cfcab6da3c79_base
 
 {-# NOINLINE sDL_CreateRendererWithProperties #-}
 
@@ -1509,7 +1517,7 @@
            )
        )
 hs_bindgen_90489326b8919b3c =
-  BG.fromFFIType hs_bindgen_90489326b8919b3c_base
+  fmap BG.fromFFIType hs_bindgen_90489326b8919b3c_base
 
 {-# NOINLINE sDL_CreateGPURenderer #-}
 
@@ -1550,7 +1558,7 @@
 hs_bindgen_63bae05a63e0c033
   :: IO (BG.FunPtr (BG.Ptr SDL_Renderer -> IO (BG.Ptr SDL3.Sys.Bindgen.Gpu.SDL_GPUDevice)))
 hs_bindgen_63bae05a63e0c033 =
-  BG.fromFFIType hs_bindgen_63bae05a63e0c033_base
+  fmap BG.fromFFIType hs_bindgen_63bae05a63e0c033_base
 
 {-# NOINLINE sDL_GetGPURendererDevice #-}
 
@@ -1579,7 +1587,7 @@
 hs_bindgen_89305e9fc1bdb81a
   :: IO (BG.FunPtr (BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface -> IO (BG.Ptr SDL_Renderer)))
 hs_bindgen_89305e9fc1bdb81a =
-  BG.fromFFIType hs_bindgen_89305e9fc1bdb81a_base
+  fmap BG.fromFFIType hs_bindgen_89305e9fc1bdb81a_base
 
 {-# NOINLINE sDL_CreateSoftwareRenderer #-}
 
@@ -1612,7 +1620,7 @@
 hs_bindgen_8899be36c3b2acbb
   :: IO (BG.FunPtr (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window -> IO (BG.Ptr SDL_Renderer)))
 hs_bindgen_8899be36c3b2acbb =
-  BG.fromFFIType hs_bindgen_8899be36c3b2acbb_base
+  fmap BG.fromFFIType hs_bindgen_8899be36c3b2acbb_base
 
 {-# NOINLINE sDL_GetRenderer #-}
 
@@ -1640,7 +1648,7 @@
 hs_bindgen_d23f46fa0cff05e9
   :: IO (BG.FunPtr (BG.Ptr SDL_Renderer -> IO (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window)))
 hs_bindgen_d23f46fa0cff05e9 =
-  BG.fromFFIType hs_bindgen_d23f46fa0cff05e9_base
+  fmap BG.fromFFIType hs_bindgen_d23f46fa0cff05e9_base
 
 {-# NOINLINE sDL_GetRenderWindow #-}
 
@@ -1669,7 +1677,7 @@
 hs_bindgen_c60e6d89b68b688d
   :: IO (BG.FunPtr (BG.Ptr SDL_Renderer -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_c60e6d89b68b688d =
-  BG.fromFFIType hs_bindgen_c60e6d89b68b688d_base
+  fmap BG.fromFFIType hs_bindgen_c60e6d89b68b688d_base
 
 {-# NOINLINE sDL_GetRendererName #-}
 
@@ -1699,7 +1707,7 @@
 hs_bindgen_e8064380d0ff11a4
   :: IO (BG.FunPtr (BG.Ptr SDL_Renderer -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID))
 hs_bindgen_e8064380d0ff11a4 =
-  BG.fromFFIType hs_bindgen_e8064380d0ff11a4_base
+  fmap BG.fromFFIType hs_bindgen_e8064380d0ff11a4_base
 
 {-# NOINLINE sDL_GetRendererProperties #-}
 
@@ -1790,7 +1798,7 @@
 hs_bindgen_d78ee833847e3e9c
   :: IO (BG.FunPtr (BG.Ptr SDL_Renderer -> BG.Ptr BG.CInt -> BG.Ptr BG.CInt -> IO BG.CBool))
 hs_bindgen_d78ee833847e3e9c =
-  BG.fromFFIType hs_bindgen_d78ee833847e3e9c_base
+  fmap BG.fromFFIType hs_bindgen_d78ee833847e3e9c_base
 
 {-# NOINLINE sDL_GetRenderOutputSize #-}
 
@@ -1829,7 +1837,7 @@
 hs_bindgen_99478979fa574c65
   :: IO (BG.FunPtr (BG.Ptr SDL_Renderer -> BG.Ptr BG.CInt -> BG.Ptr BG.CInt -> IO BG.CBool))
 hs_bindgen_99478979fa574c65 =
-  BG.fromFFIType hs_bindgen_99478979fa574c65_base
+  fmap BG.fromFFIType hs_bindgen_99478979fa574c65_base
 
 {-# NOINLINE sDL_GetCurrentRenderOutputSize #-}
 
@@ -1877,7 +1885,7 @@
            )
        )
 hs_bindgen_4f8be95c455bb5f0 =
-  BG.fromFFIType hs_bindgen_4f8be95c455bb5f0_base
+  fmap BG.fromFFIType hs_bindgen_4f8be95c455bb5f0_base
 
 {-# NOINLINE sDL_CreateTexture #-}
 
@@ -1928,7 +1936,7 @@
            (BG.Ptr SDL_Renderer -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface -> IO (BG.Ptr SDL_Texture))
        )
 hs_bindgen_d3a341064bd4c6fd =
-  BG.fromFFIType hs_bindgen_d3a341064bd4c6fd_base
+  fmap BG.fromFFIType hs_bindgen_d3a341064bd4c6fd_base
 
 {-# NOINLINE sDL_CreateTextureFromSurface #-}
 
@@ -1971,7 +1979,7 @@
            (BG.Ptr SDL_Renderer -> SDL3.Sys.Bindgen.Properties.SDL_PropertiesID -> IO (BG.Ptr SDL_Texture))
        )
 hs_bindgen_36ee6a46f451b373 =
-  BG.fromFFIType hs_bindgen_36ee6a46f451b373_base
+  fmap BG.fromFFIType hs_bindgen_36ee6a46f451b373_base
 
 {-# NOINLINE sDL_CreateTextureWithProperties #-}
 
@@ -2079,7 +2087,7 @@
 hs_bindgen_becfaa2a4bff800b
   :: IO (BG.FunPtr (BG.Ptr SDL_Texture -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID))
 hs_bindgen_becfaa2a4bff800b =
-  BG.fromFFIType hs_bindgen_becfaa2a4bff800b_base
+  fmap BG.fromFFIType hs_bindgen_becfaa2a4bff800b_base
 
 {-# NOINLINE sDL_GetTextureProperties #-}
 
@@ -2181,7 +2189,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_get_SDL_GetRendererFromTexture@
 hs_bindgen_49dcd52c4c1d2b81 :: IO (BG.FunPtr (BG.Ptr SDL_Texture -> IO (BG.Ptr SDL_Renderer)))
 hs_bindgen_49dcd52c4c1d2b81 =
-  BG.fromFFIType hs_bindgen_49dcd52c4c1d2b81_base
+  fmap BG.fromFFIType hs_bindgen_49dcd52c4c1d2b81_base
 
 {-# NOINLINE sDL_GetRendererFromTexture #-}
 
@@ -2209,7 +2217,7 @@
 hs_bindgen_41cc657b23107c65
   :: IO (BG.FunPtr (BG.Ptr SDL_Texture -> BG.Ptr BG.CFloat -> BG.Ptr BG.CFloat -> IO BG.CBool))
 hs_bindgen_41cc657b23107c65 =
-  BG.fromFFIType hs_bindgen_41cc657b23107c65_base
+  fmap BG.fromFFIType hs_bindgen_41cc657b23107c65_base
 
 {-# NOINLINE sDL_GetTextureSize #-}
 
@@ -2242,7 +2250,7 @@
 hs_bindgen_2681f128241fbe43
   :: IO (BG.FunPtr (BG.Ptr SDL_Texture -> BG.Ptr SDL3.Sys.Bindgen.Pixels.SDL_Palette -> IO BG.CBool))
 hs_bindgen_2681f128241fbe43 =
-  BG.fromFFIType hs_bindgen_2681f128241fbe43_base
+  fmap BG.fromFFIType hs_bindgen_2681f128241fbe43_base
 
 {-# NOINLINE sDL_SetTexturePalette #-}
 
@@ -2279,7 +2287,7 @@
 hs_bindgen_5b5998bf3bb63e26
   :: IO (BG.FunPtr (BG.Ptr SDL_Texture -> IO (BG.Ptr SDL3.Sys.Bindgen.Pixels.SDL_Palette)))
 hs_bindgen_5b5998bf3bb63e26 =
-  BG.fromFFIType hs_bindgen_5b5998bf3bb63e26_base
+  fmap BG.fromFFIType hs_bindgen_5b5998bf3bb63e26_base
 
 {-# NOINLINE sDL_GetTexturePalette #-}
 
@@ -2318,7 +2326,7 @@
            )
        )
 hs_bindgen_12df54216376e2f6 =
-  BG.fromFFIType hs_bindgen_12df54216376e2f6_base
+  fmap BG.fromFFIType hs_bindgen_12df54216376e2f6_base
 
 {-# NOINLINE sDL_SetTextureColorMod #-}
 
@@ -2367,7 +2375,7 @@
 hs_bindgen_c199819113902151
   :: IO (BG.FunPtr (BG.Ptr SDL_Texture -> BG.CFloat -> BG.CFloat -> BG.CFloat -> IO BG.CBool))
 hs_bindgen_c199819113902151 =
-  BG.fromFFIType hs_bindgen_c199819113902151_base
+  fmap BG.fromFFIType hs_bindgen_c199819113902151_base
 
 {-# NOINLINE sDL_SetTextureColorModFloat #-}
 
@@ -2418,7 +2426,7 @@
            )
        )
 hs_bindgen_42ffa79ca220e7c4 =
-  BG.fromFFIType hs_bindgen_42ffa79ca220e7c4_base
+  fmap BG.fromFFIType hs_bindgen_42ffa79ca220e7c4_base
 
 {-# NOINLINE sDL_GetTextureColorMod #-}
 
@@ -2464,7 +2472,7 @@
            (BG.Ptr SDL_Texture -> BG.Ptr BG.CFloat -> BG.Ptr BG.CFloat -> BG.Ptr BG.CFloat -> IO BG.CBool)
        )
 hs_bindgen_c18cd7bc6e616874 =
-  BG.fromFFIType hs_bindgen_c18cd7bc6e616874_base
+  fmap BG.fromFFIType hs_bindgen_c18cd7bc6e616874_base
 
 {-# NOINLINE sDL_GetTextureColorModFloat #-}
 
@@ -2502,7 +2510,7 @@
 hs_bindgen_206ed15266a6abc6
   :: IO (BG.FunPtr (BG.Ptr SDL_Texture -> SDL3.Sys.Bindgen.Stdinc.Uint8 -> IO BG.CBool))
 hs_bindgen_206ed15266a6abc6 =
-  BG.fromFFIType hs_bindgen_206ed15266a6abc6_base
+  fmap BG.fromFFIType hs_bindgen_206ed15266a6abc6_base
 
 {-# NOINLINE sDL_SetTextureAlphaMod #-}
 
@@ -2540,7 +2548,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_get_SDL_SetTextureAlphaModFloat@
 hs_bindgen_497b70cfcdb285b3 :: IO (BG.FunPtr (BG.Ptr SDL_Texture -> BG.CFloat -> IO BG.CBool))
 hs_bindgen_497b70cfcdb285b3 =
-  BG.fromFFIType hs_bindgen_497b70cfcdb285b3_base
+  fmap BG.fromFFIType hs_bindgen_497b70cfcdb285b3_base
 
 {-# NOINLINE sDL_SetTextureAlphaModFloat #-}
 
@@ -2578,7 +2586,7 @@
 hs_bindgen_328f278f9cc361c9
   :: IO (BG.FunPtr (BG.Ptr SDL_Texture -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8 -> IO BG.CBool))
 hs_bindgen_328f278f9cc361c9 =
-  BG.fromFFIType hs_bindgen_328f278f9cc361c9_base
+  fmap BG.fromFFIType hs_bindgen_328f278f9cc361c9_base
 
 {-# NOINLINE sDL_GetTextureAlphaMod #-}
 
@@ -2611,7 +2619,7 @@
 hs_bindgen_00ee88c364b7b54b
   :: IO (BG.FunPtr (BG.Ptr SDL_Texture -> BG.Ptr BG.CFloat -> IO BG.CBool))
 hs_bindgen_00ee88c364b7b54b =
-  BG.fromFFIType hs_bindgen_00ee88c364b7b54b_base
+  fmap BG.fromFFIType hs_bindgen_00ee88c364b7b54b_base
 
 {-# NOINLINE sDL_GetTextureAlphaModFloat #-}
 
@@ -2643,7 +2651,7 @@
 hs_bindgen_8b3403b14f9cc34f
   :: IO (BG.FunPtr (BG.Ptr SDL_Texture -> SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode -> IO BG.CBool))
 hs_bindgen_8b3403b14f9cc34f =
-  BG.fromFFIType hs_bindgen_8b3403b14f9cc34f_base
+  fmap BG.fromFFIType hs_bindgen_8b3403b14f9cc34f_base
 
 {-# NOINLINE sDL_SetTextureBlendMode #-}
 
@@ -2681,7 +2689,7 @@
   :: IO
        (BG.FunPtr (BG.Ptr SDL_Texture -> BG.Ptr SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode -> IO BG.CBool))
 hs_bindgen_e63bcb75e534a9b1 =
-  BG.fromFFIType hs_bindgen_e63bcb75e534a9b1_base
+  fmap BG.fromFFIType hs_bindgen_e63bcb75e534a9b1_base
 
 {-# NOINLINE sDL_GetTextureBlendMode #-}
 
@@ -2714,7 +2722,7 @@
 hs_bindgen_b562cc4d76d8ed23
   :: IO (BG.FunPtr (BG.Ptr SDL_Texture -> SDL3.Sys.Bindgen.Surface.SDL_ScaleMode -> IO BG.CBool))
 hs_bindgen_b562cc4d76d8ed23 =
-  BG.fromFFIType hs_bindgen_b562cc4d76d8ed23_base
+  fmap BG.fromFFIType hs_bindgen_b562cc4d76d8ed23_base
 
 {-# NOINLINE sDL_SetTextureScaleMode #-}
 
@@ -2751,7 +2759,7 @@
 hs_bindgen_01d80174738edcf8
   :: IO (BG.FunPtr (BG.Ptr SDL_Texture -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_ScaleMode -> IO BG.CBool))
 hs_bindgen_01d80174738edcf8 =
-  BG.fromFFIType hs_bindgen_01d80174738edcf8_base
+  fmap BG.fromFFIType hs_bindgen_01d80174738edcf8_base
 
 {-# NOINLINE sDL_GetTextureScaleMode #-}
 
@@ -2792,7 +2800,7 @@
            )
        )
 hs_bindgen_ed82660a3a2952a3 =
-  BG.fromFFIType hs_bindgen_ed82660a3a2952a3_base
+  fmap BG.fromFFIType hs_bindgen_ed82660a3a2952a3_base
 
 {-# NOINLINE sDL_UpdateTexture #-}
 
@@ -2853,7 +2861,7 @@
            )
        )
 hs_bindgen_ccf06645aeb6e433 =
-  BG.fromFFIType hs_bindgen_ccf06645aeb6e433_base
+  fmap BG.fromFFIType hs_bindgen_ccf06645aeb6e433_base
 
 {-# NOINLINE sDL_UpdateYUVTexture #-}
 
@@ -2920,7 +2928,7 @@
            )
        )
 hs_bindgen_25fc8b2ffc040564 =
-  BG.fromFFIType hs_bindgen_25fc8b2ffc040564_base
+  fmap BG.fromFFIType hs_bindgen_25fc8b2ffc040564_base
 
 {-# NOINLINE sDL_UpdateNVTexture #-}
 
@@ -2979,7 +2987,7 @@
            )
        )
 hs_bindgen_b2515cb3b400f701 =
-  BG.fromFFIType hs_bindgen_b2515cb3b400f701_base
+  fmap BG.fromFFIType hs_bindgen_b2515cb3b400f701_base
 
 {-# NOINLINE sDL_LockTexture #-}
 
@@ -3033,7 +3041,7 @@
            )
        )
 hs_bindgen_232feaed95772158 =
-  BG.fromFFIType hs_bindgen_232feaed95772158_base
+  fmap BG.fromFFIType hs_bindgen_232feaed95772158_base
 
 {-# NOINLINE sDL_LockTextureToSurface #-}
 
@@ -3080,7 +3088,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_get_SDL_UnlockTexture@
 hs_bindgen_13908e9a60424294 :: IO (BG.FunPtr (BG.Ptr SDL_Texture -> IO ()))
 hs_bindgen_13908e9a60424294 =
-  BG.fromFFIType hs_bindgen_13908e9a60424294_base
+  fmap BG.fromFFIType hs_bindgen_13908e9a60424294_base
 
 {-# NOINLINE sDL_UnlockTexture #-}
 
@@ -3112,7 +3120,7 @@
 hs_bindgen_bf0b26dd5575e7f4
   :: IO (BG.FunPtr (BG.Ptr SDL_Renderer -> BG.Ptr SDL_Texture -> IO BG.CBool))
 hs_bindgen_bf0b26dd5575e7f4 =
-  BG.fromFFIType hs_bindgen_bf0b26dd5575e7f4_base
+  fmap BG.fromFFIType hs_bindgen_bf0b26dd5575e7f4_base
 
 {-# NOINLINE sDL_SetRenderTarget #-}
 
@@ -3147,7 +3155,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_get_SDL_GetRenderTarget@
 hs_bindgen_1e8b9f67ad2f60e0 :: IO (BG.FunPtr (BG.Ptr SDL_Renderer -> IO (BG.Ptr SDL_Texture)))
 hs_bindgen_1e8b9f67ad2f60e0 =
-  BG.fromFFIType hs_bindgen_1e8b9f67ad2f60e0_base
+  fmap BG.fromFFIType hs_bindgen_1e8b9f67ad2f60e0_base
 
 {-# NOINLINE sDL_GetRenderTarget #-}
 
@@ -3182,7 +3190,7 @@
            (BG.Ptr SDL_Renderer -> BG.CInt -> BG.CInt -> SDL_RendererLogicalPresentation -> IO BG.CBool)
        )
 hs_bindgen_1034cb11879afccd =
-  BG.fromFFIType hs_bindgen_1034cb11879afccd_base
+  fmap BG.fromFFIType hs_bindgen_1034cb11879afccd_base
 
 {-# NOINLINE sDL_SetRenderLogicalPresentation #-}
 
@@ -3238,7 +3246,7 @@
            )
        )
 hs_bindgen_d91c953c563a7c79 =
-  BG.fromFFIType hs_bindgen_d91c953c563a7c79_base
+  fmap BG.fromFFIType hs_bindgen_d91c953c563a7c79_base
 
 {-# NOINLINE sDL_GetRenderLogicalPresentation #-}
 
@@ -3285,7 +3293,7 @@
 hs_bindgen_79882ebc0cf55c2f
   :: IO (BG.FunPtr (BG.Ptr SDL_Renderer -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_FRect -> IO BG.CBool))
 hs_bindgen_79882ebc0cf55c2f =
-  BG.fromFFIType hs_bindgen_79882ebc0cf55c2f_base
+  fmap BG.fromFFIType hs_bindgen_79882ebc0cf55c2f_base
 
 {-# NOINLINE sDL_GetRenderLogicalPresentationRect #-}
 
@@ -3325,7 +3333,7 @@
            (BG.Ptr SDL_Renderer -> BG.CFloat -> BG.CFloat -> BG.Ptr BG.CFloat -> BG.Ptr BG.CFloat -> IO BG.CBool)
        )
 hs_bindgen_fb7241e246ca7baf =
-  BG.fromFFIType hs_bindgen_fb7241e246ca7baf_base
+  fmap BG.fromFFIType hs_bindgen_fb7241e246ca7baf_base
 
 {-# NOINLINE sDL_RenderCoordinatesFromWindow #-}
 
@@ -3378,7 +3386,7 @@
            (BG.Ptr SDL_Renderer -> BG.CFloat -> BG.CFloat -> BG.Ptr BG.CFloat -> BG.Ptr BG.CFloat -> IO BG.CBool)
        )
 hs_bindgen_c7cc17f4dc614c4c =
-  BG.fromFFIType hs_bindgen_c7cc17f4dc614c4c_base
+  fmap BG.fromFFIType hs_bindgen_c7cc17f4dc614c4c_base
 
 {-# NOINLINE sDL_RenderCoordinatesToWindow #-}
 
@@ -3428,7 +3436,7 @@
 hs_bindgen_e37a0e30c32b51de
   :: IO (BG.FunPtr (BG.Ptr SDL_Renderer -> BG.Ptr SDL3.Sys.Bindgen.Events.SDL_Event -> IO BG.CBool))
 hs_bindgen_e37a0e30c32b51de =
-  BG.fromFFIType hs_bindgen_e37a0e30c32b51de_base
+  fmap BG.fromFFIType hs_bindgen_e37a0e30c32b51de_base
 
 {-# NOINLINE sDL_ConvertEventToRenderCoordinates #-}
 
@@ -3480,7 +3488,7 @@
   :: IO
        (BG.FunPtr (BG.Ptr SDL_Renderer -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect -> IO BG.CBool))
 hs_bindgen_787c931cd9718282 =
-  BG.fromFFIType hs_bindgen_787c931cd9718282_base
+  fmap BG.fromFFIType hs_bindgen_787c931cd9718282_base
 
 {-# NOINLINE sDL_SetRenderViewport #-}
 
@@ -3519,7 +3527,7 @@
 hs_bindgen_6aa5d786da4df5f2
   :: IO (BG.FunPtr (BG.Ptr SDL_Renderer -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect -> IO BG.CBool))
 hs_bindgen_6aa5d786da4df5f2 =
-  BG.fromFFIType hs_bindgen_6aa5d786da4df5f2_base
+  fmap BG.fromFFIType hs_bindgen_6aa5d786da4df5f2_base
 
 {-# NOINLINE sDL_GetRenderViewport #-}
 
@@ -3553,7 +3561,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_get_SDL_RenderViewportSet@
 hs_bindgen_9ea268631b7b5e5b :: IO (BG.FunPtr (BG.Ptr SDL_Renderer -> IO BG.CBool))
 hs_bindgen_9ea268631b7b5e5b =
-  BG.fromFFIType hs_bindgen_9ea268631b7b5e5b_base
+  fmap BG.fromFFIType hs_bindgen_9ea268631b7b5e5b_base
 
 {-# NOINLINE sDL_RenderViewportSet #-}
 
@@ -3587,7 +3595,7 @@
 hs_bindgen_892008c6b673220b
   :: IO (BG.FunPtr (BG.Ptr SDL_Renderer -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect -> IO BG.CBool))
 hs_bindgen_892008c6b673220b =
-  BG.fromFFIType hs_bindgen_892008c6b673220b_base
+  fmap BG.fromFFIType hs_bindgen_892008c6b673220b_base
 
 {-# NOINLINE sDL_GetRenderSafeArea #-}
 
@@ -3621,7 +3629,7 @@
   :: IO
        (BG.FunPtr (BG.Ptr SDL_Renderer -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect -> IO BG.CBool))
 hs_bindgen_3aa3a1e497542ee8 =
-  BG.fromFFIType hs_bindgen_3aa3a1e497542ee8_base
+  fmap BG.fromFFIType hs_bindgen_3aa3a1e497542ee8_base
 
 {-# NOINLINE sDL_SetRenderClipRect #-}
 
@@ -3656,7 +3664,7 @@
 hs_bindgen_bec026baef17d1f2
   :: IO (BG.FunPtr (BG.Ptr SDL_Renderer -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect -> IO BG.CBool))
 hs_bindgen_bec026baef17d1f2 =
-  BG.fromFFIType hs_bindgen_bec026baef17d1f2_base
+  fmap BG.fromFFIType hs_bindgen_bec026baef17d1f2_base
 
 {-# NOINLINE sDL_GetRenderClipRect #-}
 
@@ -3690,7 +3698,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_get_SDL_RenderClipEnabled@
 hs_bindgen_b0a5efaab13d3303 :: IO (BG.FunPtr (BG.Ptr SDL_Renderer -> IO BG.CBool))
 hs_bindgen_b0a5efaab13d3303 =
-  BG.fromFFIType hs_bindgen_b0a5efaab13d3303_base
+  fmap BG.fromFFIType hs_bindgen_b0a5efaab13d3303_base
 
 {-# NOINLINE sDL_RenderClipEnabled #-}
 
@@ -3722,7 +3730,7 @@
 hs_bindgen_938869c5ff233e71
   :: IO (BG.FunPtr (BG.Ptr SDL_Renderer -> BG.CFloat -> BG.CFloat -> IO BG.CBool))
 hs_bindgen_938869c5ff233e71 =
-  BG.fromFFIType hs_bindgen_938869c5ff233e71_base
+  fmap BG.fromFFIType hs_bindgen_938869c5ff233e71_base
 
 {-# NOINLINE sDL_SetRenderScale #-}
 
@@ -3762,7 +3770,7 @@
 hs_bindgen_fa6a48d0e427bd48
   :: IO (BG.FunPtr (BG.Ptr SDL_Renderer -> BG.Ptr BG.CFloat -> BG.Ptr BG.CFloat -> IO BG.CBool))
 hs_bindgen_fa6a48d0e427bd48 =
-  BG.fromFFIType hs_bindgen_fa6a48d0e427bd48_base
+  fmap BG.fromFFIType hs_bindgen_fa6a48d0e427bd48_base
 
 {-# NOINLINE sDL_GetRenderScale #-}
 
@@ -3808,7 +3816,7 @@
            )
        )
 hs_bindgen_cfcf753e753a9e88 =
-  BG.fromFFIType hs_bindgen_cfcf753e753a9e88_base
+  fmap BG.fromFFIType hs_bindgen_cfcf753e753a9e88_base
 
 {-# NOINLINE sDL_SetRenderDrawColor #-}
 
@@ -3857,7 +3865,7 @@
   :: IO
        (BG.FunPtr (BG.Ptr SDL_Renderer -> BG.CFloat -> BG.CFloat -> BG.CFloat -> BG.CFloat -> IO BG.CBool))
 hs_bindgen_99e499f38f3c9dc7 =
-  BG.fromFFIType hs_bindgen_99e499f38f3c9dc7_base
+  fmap BG.fromFFIType hs_bindgen_99e499f38f3c9dc7_base
 
 {-# NOINLINE sDL_SetRenderDrawColorFloat #-}
 
@@ -3907,7 +3915,7 @@
            )
        )
 hs_bindgen_c88d83e47700901b =
-  BG.fromFFIType hs_bindgen_c88d83e47700901b_base
+  fmap BG.fromFFIType hs_bindgen_c88d83e47700901b_base
 
 {-# NOINLINE sDL_GetRenderDrawColor #-}
 
@@ -3962,7 +3970,7 @@
            )
        )
 hs_bindgen_d1473916ef27e20f =
-  BG.fromFFIType hs_bindgen_d1473916ef27e20f_base
+  fmap BG.fromFFIType hs_bindgen_d1473916ef27e20f_base
 
 {-# NOINLINE sDL_GetRenderDrawColorFloat #-}
 
@@ -4007,7 +4015,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_get_SDL_SetRenderColorScale@
 hs_bindgen_35d6252a1c594c7c :: IO (BG.FunPtr (BG.Ptr SDL_Renderer -> BG.CFloat -> IO BG.CBool))
 hs_bindgen_35d6252a1c594c7c =
-  BG.fromFFIType hs_bindgen_35d6252a1c594c7c_base
+  fmap BG.fromFFIType hs_bindgen_35d6252a1c594c7c_base
 
 {-# NOINLINE sDL_SetRenderColorScale #-}
 
@@ -4043,7 +4051,7 @@
 hs_bindgen_77d1cf7afcbd4164
   :: IO (BG.FunPtr (BG.Ptr SDL_Renderer -> BG.Ptr BG.CFloat -> IO BG.CBool))
 hs_bindgen_77d1cf7afcbd4164 =
-  BG.fromFFIType hs_bindgen_77d1cf7afcbd4164_base
+  fmap BG.fromFFIType hs_bindgen_77d1cf7afcbd4164_base
 
 {-# NOINLINE sDL_GetRenderColorScale #-}
 
@@ -4075,7 +4083,7 @@
 hs_bindgen_820f982c1cc61a34
   :: IO (BG.FunPtr (BG.Ptr SDL_Renderer -> SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode -> IO BG.CBool))
 hs_bindgen_820f982c1cc61a34 =
-  BG.fromFFIType hs_bindgen_820f982c1cc61a34_base
+  fmap BG.fromFFIType hs_bindgen_820f982c1cc61a34_base
 
 {-# NOINLINE sDL_SetRenderDrawBlendMode #-}
 
@@ -4113,7 +4121,7 @@
   :: IO
        (BG.FunPtr (BG.Ptr SDL_Renderer -> BG.Ptr SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode -> IO BG.CBool))
 hs_bindgen_1409781aca259b0a =
-  BG.fromFFIType hs_bindgen_1409781aca259b0a_base
+  fmap BG.fromFFIType hs_bindgen_1409781aca259b0a_base
 
 {-# NOINLINE sDL_GetRenderDrawBlendMode #-}
 
@@ -4145,7 +4153,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_get_SDL_RenderClear@
 hs_bindgen_9a11c0e709a2af5e :: IO (BG.FunPtr (BG.Ptr SDL_Renderer -> IO BG.CBool))
 hs_bindgen_9a11c0e709a2af5e =
-  BG.fromFFIType hs_bindgen_9a11c0e709a2af5e_base
+  fmap BG.fromFFIType hs_bindgen_9a11c0e709a2af5e_base
 
 {-# NOINLINE sDL_RenderClear #-}
 
@@ -4177,7 +4185,7 @@
 hs_bindgen_429122691f4ce0fc
   :: IO (BG.FunPtr (BG.Ptr SDL_Renderer -> BG.CFloat -> BG.CFloat -> IO BG.CBool))
 hs_bindgen_429122691f4ce0fc =
-  BG.fromFFIType hs_bindgen_429122691f4ce0fc_base
+  fmap BG.fromFFIType hs_bindgen_429122691f4ce0fc_base
 
 {-# NOINLINE sDL_RenderPoint #-}
 
@@ -4214,7 +4222,7 @@
            (BG.Ptr SDL_Renderer -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint -> BG.CInt -> IO BG.CBool)
        )
 hs_bindgen_b884f579966e5db6 =
-  BG.fromFFIType hs_bindgen_b884f579966e5db6_base
+  fmap BG.fromFFIType hs_bindgen_b884f579966e5db6_base
 
 {-# NOINLINE sDL_RenderPoints #-}
 
@@ -4251,7 +4259,7 @@
   :: IO
        (BG.FunPtr (BG.Ptr SDL_Renderer -> BG.CFloat -> BG.CFloat -> BG.CFloat -> BG.CFloat -> IO BG.CBool))
 hs_bindgen_ce6fb863b8b65fe2 =
-  BG.fromFFIType hs_bindgen_ce6fb863b8b65fe2_base
+  fmap BG.fromFFIType hs_bindgen_ce6fb863b8b65fe2_base
 
 {-# NOINLINE sDL_RenderLine #-}
 
@@ -4293,7 +4301,7 @@
            (BG.Ptr SDL_Renderer -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint -> BG.CInt -> IO BG.CBool)
        )
 hs_bindgen_f3578aa8a36fe364 =
-  BG.fromFFIType hs_bindgen_f3578aa8a36fe364_base
+  fmap BG.fromFFIType hs_bindgen_f3578aa8a36fe364_base
 
 {-# NOINLINE sDL_RenderLines #-}
 
@@ -4330,7 +4338,7 @@
   :: IO
        (BG.FunPtr (BG.Ptr SDL_Renderer -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect -> IO BG.CBool))
 hs_bindgen_dc6b0741f1d79bee =
-  BG.fromFFIType hs_bindgen_dc6b0741f1d79bee_base
+  fmap BG.fromFFIType hs_bindgen_dc6b0741f1d79bee_base
 
 {-# NOINLINE sDL_RenderRect #-}
 
@@ -4366,7 +4374,7 @@
            (BG.Ptr SDL_Renderer -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect -> BG.CInt -> IO BG.CBool)
        )
 hs_bindgen_d697f94bacf56e0d =
-  BG.fromFFIType hs_bindgen_d697f94bacf56e0d_base
+  fmap BG.fromFFIType hs_bindgen_d697f94bacf56e0d_base
 
 {-# NOINLINE sDL_RenderRects #-}
 
@@ -4403,7 +4411,7 @@
   :: IO
        (BG.FunPtr (BG.Ptr SDL_Renderer -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect -> IO BG.CBool))
 hs_bindgen_a730fe81c75d4472 =
-  BG.fromFFIType hs_bindgen_a730fe81c75d4472_base
+  fmap BG.fromFFIType hs_bindgen_a730fe81c75d4472_base
 
 {-# NOINLINE sDL_RenderFillRect #-}
 
@@ -4439,7 +4447,7 @@
            (BG.Ptr SDL_Renderer -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect -> BG.CInt -> IO BG.CBool)
        )
 hs_bindgen_4cd330b36839141b =
-  BG.fromFFIType hs_bindgen_4cd330b36839141b_base
+  fmap BG.fromFFIType hs_bindgen_4cd330b36839141b_base
 
 {-# NOINLINE sDL_RenderFillRects #-}
 
@@ -4483,7 +4491,7 @@
            )
        )
 hs_bindgen_1f27c13075574257 =
-  BG.fromFFIType hs_bindgen_1f27c13075574257_base
+  fmap BG.fromFFIType hs_bindgen_1f27c13075574257_base
 
 {-# NOINLINE sDL_RenderTexture #-}
 
@@ -4537,7 +4545,7 @@
            )
        )
 hs_bindgen_3424943af047de83 =
-  BG.fromFFIType hs_bindgen_3424943af047de83_base
+  fmap BG.fromFFIType hs_bindgen_3424943af047de83_base
 
 {-# NOINLINE sDL_RenderTextureRotated #-}
 
@@ -4599,7 +4607,7 @@
            )
        )
 hs_bindgen_dd59e212bf7d116f =
-  BG.fromFFIType hs_bindgen_dd59e212bf7d116f_base
+  fmap BG.fromFFIType hs_bindgen_dd59e212bf7d116f_base
 
 {-# NOINLINE sDL_RenderTextureAffine #-}
 
@@ -4657,7 +4665,7 @@
            )
        )
 hs_bindgen_6cf4fce9a372af75 =
-  BG.fromFFIType hs_bindgen_6cf4fce9a372af75_base
+  fmap BG.fromFFIType hs_bindgen_6cf4fce9a372af75_base
 
 {-# NOINLINE sDL_RenderTextureTiled #-}
 
@@ -4718,7 +4726,7 @@
            )
        )
 hs_bindgen_78cecf599cdec7c5 =
-  BG.fromFFIType hs_bindgen_78cecf599cdec7c5_base
+  fmap BG.fromFFIType hs_bindgen_78cecf599cdec7c5_base
 
 {-# NOINLINE sDL_RenderTexture9Grid #-}
 
@@ -4792,7 +4800,7 @@
            )
        )
 hs_bindgen_1b23a5c925e888fb =
-  BG.fromFFIType hs_bindgen_1b23a5c925e888fb_base
+  fmap BG.fromFFIType hs_bindgen_1b23a5c925e888fb_base
 
 {-# NOINLINE sDL_RenderTexture9GridTiled #-}
 
@@ -4865,7 +4873,7 @@
            )
        )
 hs_bindgen_dc26aec86b6b43fe =
-  BG.fromFFIType hs_bindgen_dc26aec86b6b43fe_base
+  fmap BG.fromFFIType hs_bindgen_dc26aec86b6b43fe_base
 
 {-# NOINLINE sDL_RenderGeometry #-}
 
@@ -4930,7 +4938,7 @@
            )
        )
 hs_bindgen_1e06910d8288533e =
-  BG.fromFFIType hs_bindgen_1e06910d8288533e_base
+  fmap BG.fromFFIType hs_bindgen_1e06910d8288533e_base
 
 {-# NOINLINE sDL_RenderGeometryRaw #-}
 
@@ -4998,7 +5006,7 @@
   :: IO
        (BG.FunPtr (BG.Ptr SDL_Renderer -> SDL_TextureAddressMode -> SDL_TextureAddressMode -> IO BG.CBool))
 hs_bindgen_35802c1bb0921c28 =
-  BG.fromFFIType hs_bindgen_35802c1bb0921c28_base
+  fmap BG.fromFFIType hs_bindgen_35802c1bb0921c28_base
 
 {-# NOINLINE sDL_SetRenderTextureAddressMode #-}
 
@@ -5036,7 +5044,7 @@
            (BG.Ptr SDL_Renderer -> BG.Ptr SDL_TextureAddressMode -> BG.Ptr SDL_TextureAddressMode -> IO BG.CBool)
        )
 hs_bindgen_649128c959cdb236 =
-  BG.fromFFIType hs_bindgen_649128c959cdb236_base
+  fmap BG.fromFFIType hs_bindgen_649128c959cdb236_base
 
 {-# NOINLINE sDL_GetRenderTextureAddressMode #-}
 
@@ -5078,7 +5086,7 @@
            )
        )
 hs_bindgen_b087b184be493118 =
-  BG.fromFFIType hs_bindgen_b087b184be493118_base
+  fmap BG.fromFFIType hs_bindgen_b087b184be493118_base
 
 {-# NOINLINE sDL_RenderReadPixels #-}
 
@@ -5118,7 +5126,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_get_SDL_RenderPresent@
 hs_bindgen_2bafff2cb8bebc00 :: IO (BG.FunPtr (BG.Ptr SDL_Renderer -> IO BG.CBool))
 hs_bindgen_2bafff2cb8bebc00 =
-  BG.fromFFIType hs_bindgen_2bafff2cb8bebc00_base
+  fmap BG.fromFFIType hs_bindgen_2bafff2cb8bebc00_base
 
 {-# NOINLINE sDL_RenderPresent #-}
 
@@ -5155,7 +5163,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_get_SDL_DestroyTexture@
 hs_bindgen_4497bf4e9bdd42b9 :: IO (BG.FunPtr (BG.Ptr SDL_Texture -> IO ()))
 hs_bindgen_4497bf4e9bdd42b9 =
-  BG.fromFFIType hs_bindgen_4497bf4e9bdd42b9_base
+  fmap BG.fromFFIType hs_bindgen_4497bf4e9bdd42b9_base
 
 {-# NOINLINE sDL_DestroyTexture #-}
 
@@ -5184,7 +5192,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_get_SDL_DestroyRenderer@
 hs_bindgen_011b10f177cafc47 :: IO (BG.FunPtr (BG.Ptr SDL_Renderer -> IO ()))
 hs_bindgen_011b10f177cafc47 =
-  BG.fromFFIType hs_bindgen_011b10f177cafc47_base
+  fmap BG.fromFFIType hs_bindgen_011b10f177cafc47_base
 
 {-# NOINLINE sDL_DestroyRenderer #-}
 
@@ -5213,7 +5221,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_get_SDL_FlushRenderer@
 hs_bindgen_0ee776d39090d2fd :: IO (BG.FunPtr (BG.Ptr SDL_Renderer -> IO BG.CBool))
 hs_bindgen_0ee776d39090d2fd =
-  BG.fromFFIType hs_bindgen_0ee776d39090d2fd_base
+  fmap BG.fromFFIType hs_bindgen_0ee776d39090d2fd_base
 
 {-# NOINLINE sDL_FlushRenderer #-}
 
@@ -5250,7 +5258,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_get_SDL_GetRenderMetalLayer@
 hs_bindgen_f52f9cb5238155f3 :: IO (BG.FunPtr (BG.Ptr SDL_Renderer -> IO (BG.Ptr BG.Void)))
 hs_bindgen_f52f9cb5238155f3 =
-  BG.fromFFIType hs_bindgen_f52f9cb5238155f3_base
+  fmap BG.fromFFIType hs_bindgen_f52f9cb5238155f3_base
 
 {-# NOINLINE sDL_GetRenderMetalLayer #-}
 
@@ -5281,7 +5289,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_get_SDL_GetRenderMetalCommandEncoder@
 hs_bindgen_0e330f87af225f8b :: IO (BG.FunPtr (BG.Ptr SDL_Renderer -> IO (BG.Ptr BG.Void)))
 hs_bindgen_0e330f87af225f8b =
-  BG.fromFFIType hs_bindgen_0e330f87af225f8b_base
+  fmap BG.fromFFIType hs_bindgen_0e330f87af225f8b_base
 
 {-# NOINLINE sDL_GetRenderMetalCommandEncoder #-}
 
@@ -5323,7 +5331,7 @@
            )
        )
 hs_bindgen_3aaeda31b2a532b0 =
-  BG.fromFFIType hs_bindgen_3aaeda31b2a532b0_base
+  fmap BG.fromFFIType hs_bindgen_3aaeda31b2a532b0_base
 
 {-# NOINLINE sDL_AddVulkanRenderSemaphores #-}
 
@@ -5367,7 +5375,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_get_SDL_SetRenderVSync@
 hs_bindgen_964c717567cbb3b7 :: IO (BG.FunPtr (BG.Ptr SDL_Renderer -> BG.CInt -> IO BG.CBool))
 hs_bindgen_964c717567cbb3b7 =
-  BG.fromFFIType hs_bindgen_964c717567cbb3b7_base
+  fmap BG.fromFFIType hs_bindgen_964c717567cbb3b7_base
 
 {-# NOINLINE sDL_SetRenderVSync #-}
 
@@ -5402,7 +5410,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_get_SDL_GetRenderVSync@
 hs_bindgen_ea48e8e1fe227495 :: IO (BG.FunPtr (BG.Ptr SDL_Renderer -> BG.Ptr BG.CInt -> IO BG.CBool))
 hs_bindgen_ea48e8e1fe227495 =
-  BG.fromFFIType hs_bindgen_ea48e8e1fe227495_base
+  fmap BG.fromFFIType hs_bindgen_ea48e8e1fe227495_base
 
 {-# NOINLINE sDL_GetRenderVSync #-}
 
@@ -5437,7 +5445,7 @@
            (BG.Ptr SDL_Renderer -> BG.CFloat -> BG.CFloat -> PtrConst.PtrConst BG.CChar -> IO BG.CBool)
        )
 hs_bindgen_30bc1d75e73ca06a =
-  BG.fromFFIType hs_bindgen_30bc1d75e73ca06a_base
+  fmap BG.fromFFIType hs_bindgen_30bc1d75e73ca06a_base
 
 {-# NOINLINE sDL_RenderDebugText #-}
 
@@ -5493,7 +5501,7 @@
 hs_bindgen_7118410bfe83a316
   :: IO (BG.FunPtr (BG.Ptr SDL_Renderer -> SDL3.Sys.Bindgen.Surface.SDL_ScaleMode -> IO BG.CBool))
 hs_bindgen_7118410bfe83a316 =
-  BG.fromFFIType hs_bindgen_7118410bfe83a316_base
+  fmap BG.fromFFIType hs_bindgen_7118410bfe83a316_base
 
 {-# NOINLINE sDL_SetDefaultTextureScaleMode #-}
 
@@ -5528,7 +5536,7 @@
 hs_bindgen_51156f5e8dd42d03
   :: IO (BG.FunPtr (BG.Ptr SDL_Renderer -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_ScaleMode -> IO BG.CBool))
 hs_bindgen_51156f5e8dd42d03 =
-  BG.fromFFIType hs_bindgen_51156f5e8dd42d03_base
+  fmap BG.fromFFIType hs_bindgen_51156f5e8dd42d03_base
 
 {-# NOINLINE sDL_GetDefaultTextureScaleMode #-}
 
@@ -5567,7 +5575,7 @@
            )
        )
 hs_bindgen_c77515a1f877dab2 =
-  BG.fromFFIType hs_bindgen_c77515a1f877dab2_base
+  fmap BG.fromFFIType hs_bindgen_c77515a1f877dab2_base
 
 {-# NOINLINE sDL_CreateGPURenderState #-}
 
@@ -5612,7 +5620,7 @@
            )
        )
 hs_bindgen_65c1c07e7c4876a6 =
-  BG.fromFFIType hs_bindgen_65c1c07e7c4876a6_base
+  fmap BG.fromFFIType hs_bindgen_65c1c07e7c4876a6_base
 
 {-# NOINLINE sDL_SetGPURenderStateFragmentUniforms #-}
 
@@ -5655,7 +5663,7 @@
 hs_bindgen_440f7dac948d9e3d
   :: IO (BG.FunPtr (BG.Ptr SDL_Renderer -> BG.Ptr SDL_GPURenderState -> IO BG.CBool))
 hs_bindgen_440f7dac948d9e3d =
-  BG.fromFFIType hs_bindgen_440f7dac948d9e3d_base
+  fmap BG.fromFFIType hs_bindgen_440f7dac948d9e3d_base
 
 {-# NOINLINE sDL_SetGPURenderState #-}
 
@@ -5686,7 +5694,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_get_SDL_DestroyGPURenderState@
 hs_bindgen_dc4da5de025a8ba9 :: IO (BG.FunPtr (BG.Ptr SDL_GPURenderState -> IO ()))
 hs_bindgen_dc4da5de025a8ba9 =
-  BG.fromFFIType hs_bindgen_dc4da5de025a8ba9_base
+  fmap BG.fromFFIType hs_bindgen_dc4da5de025a8ba9_base
 
 {-# NOINLINE sDL_DestroyGPURenderState #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Render/Safe.hs b/src/SDL3/Sys/Bindgen/Render/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Render/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Render/Safe.hs
@@ -1,5949 +1,6531 @@
-{-# LANGUAGE TemplateHaskell #-}
-{-# LANGUAGE NoFieldSelectors #-}
-{-# OPTIONS_HADDOCK prune #-}
-
-module SDL3.Sys.Bindgen.Render.Safe (
-  SDL3.Sys.Bindgen.Render.Safe.sDL_GetNumRenderDrivers,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderDriver,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_CreateWindowAndRenderer,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_CreateRenderer,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_CreateRendererWithProperties,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_CreateGPURenderer,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_GetGPURendererDevice,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_CreateSoftwareRenderer,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderer,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderWindow,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRendererName,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRendererProperties,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderOutputSize,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_GetCurrentRenderOutputSize,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_CreateTexture,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_CreateTextureFromSurface,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_CreateTextureWithProperties,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_GetTextureProperties,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRendererFromTexture,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_GetTextureSize,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_SetTexturePalette,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_GetTexturePalette,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_SetTextureColorMod,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_SetTextureColorModFloat,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_GetTextureColorMod,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_GetTextureColorModFloat,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_SetTextureAlphaMod,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_SetTextureAlphaModFloat,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_GetTextureAlphaMod,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_GetTextureAlphaModFloat,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_SetTextureBlendMode,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_GetTextureBlendMode,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_SetTextureScaleMode,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_GetTextureScaleMode,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_UpdateTexture,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_UpdateYUVTexture,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_UpdateNVTexture,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_LockTexture,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_LockTextureToSurface,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_UnlockTexture,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_SetRenderTarget,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderTarget,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_SetRenderLogicalPresentation,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderLogicalPresentation,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderLogicalPresentationRect,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderCoordinatesFromWindow,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderCoordinatesToWindow,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_ConvertEventToRenderCoordinates,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_SetRenderViewport,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderViewport,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderViewportSet,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderSafeArea,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_SetRenderClipRect,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderClipRect,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderClipEnabled,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_SetRenderScale,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderScale,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_SetRenderDrawColor,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_SetRenderDrawColorFloat,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderDrawColor,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderDrawColorFloat,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_SetRenderColorScale,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderColorScale,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_SetRenderDrawBlendMode,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderDrawBlendMode,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderClear,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderPoint,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderPoints,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderLine,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderLines,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderRect,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderRects,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderFillRect,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderFillRects,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderTexture,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderTextureRotated,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderTextureAffine,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderTextureTiled,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderTexture9Grid,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderTexture9GridTiled,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderGeometry,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderGeometryRaw,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_SetRenderTextureAddressMode,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderTextureAddressMode,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderReadPixels,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderPresent,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_DestroyTexture,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_DestroyRenderer,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_FlushRenderer,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderMetalLayer,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderMetalCommandEncoder,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_AddVulkanRenderSemaphores,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_SetRenderVSync,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderVSync,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderDebugText,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_SetDefaultTextureScaleMode,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_GetDefaultTextureScaleMode,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_CreateGPURenderState,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_SetGPURenderStateFragmentUniforms,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_SetGPURenderState,
-  SDL3.Sys.Bindgen.Render.Safe.sDL_DestroyGPURenderState,
-)
-where
-
-import HsBindgen.Runtime.PtrConst qualified as PtrConst
-import HsBindgen.Runtime.Support qualified as BG
-import HsBindgen.Runtime.Support.CAPI qualified
-import SDL3.Sys.Bindgen.Blendmode qualified
-import SDL3.Sys.Bindgen.Events qualified
-import SDL3.Sys.Bindgen.Gpu qualified
-import SDL3.Sys.Bindgen.Pixels qualified
-import SDL3.Sys.Bindgen.Properties qualified
-import SDL3.Sys.Bindgen.Rect qualified
-import SDL3.Sys.Bindgen.Render
-import SDL3.Sys.Bindgen.Stdinc qualified
-import SDL3.Sys.Bindgen.Surface qualified
-import SDL3.Sys.Bindgen.Video qualified
-
-$( HsBindgen.Runtime.Support.CAPI.addCSource
-     ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_render.h>"
-         , "signed int hs_bindgen_73e69181c85cbe7b (void)"
-         , "{"
-         , "  return (SDL_GetNumRenderDrivers)();"
-         , "}"
-         , "char const *hs_bindgen_785e31d2ab303c36 ("
-         , "  signed int arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderDriver)(arg1);"
-         , "}"
-         , "_Bool hs_bindgen_8b7a09bca8ba667b ("
-         , "  char const *arg1,"
-         , "  signed int arg2,"
-         , "  signed int arg3,"
-         , "  SDL_WindowFlags arg4,"
-         , "  SDL_Window **arg5,"
-         , "  SDL_Renderer **arg6"
-         , ")"
-         , "{"
-         , "  return (SDL_CreateWindowAndRenderer)(arg1, arg2, arg3, arg4, arg5, arg6);"
-         , "}"
-         , "SDL_Renderer *hs_bindgen_4a9fac5ac8d291e9 ("
-         , "  SDL_Window *arg1,"
-         , "  char const *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_CreateRenderer)(arg1, arg2);"
-         , "}"
-         , "SDL_Renderer *hs_bindgen_8b6efe6418cb34a2 ("
-         , "  SDL_PropertiesID arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_CreateRendererWithProperties)(arg1);"
-         , "}"
-         , "#include <SDL3/SDL_version.h>"
-         , "#include <SDL3/SDL_error.h>"
-         , "#include <SDL3/SDL_version.h>"
-         , "#if !SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "typedef struct SDL_GPUDevice SDL_GPUDevice;"
-         , "typedef struct SDL_GPURenderState SDL_GPURenderState;"
-         , "typedef struct SDL_GPURenderStateCreateInfo SDL_GPURenderStateCreateInfo;"
-         , "typedef int SDL_TextureAddressMode;"
-         , "#endif"
-         , "SDL_Renderer *hs_bindgen_6efbbd05c80e02d0 ("
-         , "  SDL_GPUDevice *arg1,"
-         , "  SDL_Window *arg2"
-         , ")"
-         , "{"
-         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "  return (SDL_CreateGPURenderer)(arg1, arg2);"
-         , "#else"
-         , "  (void)arg1; (void)arg2; SDL_SetError(\"SDL_CreateGPURenderer requires SDL >= 3.4.0\"); return 0;"
-         , "#endif"
-         , "}"
-         , "#include <SDL3/SDL_version.h>"
-         , "#include <SDL3/SDL_error.h>"
-         , "#include <SDL3/SDL_version.h>"
-         , "#if !SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "typedef struct SDL_GPUDevice SDL_GPUDevice;"
-         , "typedef struct SDL_GPURenderState SDL_GPURenderState;"
-         , "typedef struct SDL_GPURenderStateCreateInfo SDL_GPURenderStateCreateInfo;"
-         , "typedef int SDL_TextureAddressMode;"
-         , "#endif"
-         , "SDL_GPUDevice *hs_bindgen_aa8cead59246ca07 ("
-         , "  SDL_Renderer *arg1"
-         , ")"
-         , "{"
-         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "  return (SDL_GetGPURendererDevice)(arg1);"
-         , "#else"
-         , "  (void)arg1; SDL_SetError(\"SDL_GetGPURendererDevice requires SDL >= 3.4.0\"); return 0;"
-         , "#endif"
-         , "}"
-         , "SDL_Renderer *hs_bindgen_154eef5a69d9f0de ("
-         , "  SDL_Surface *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_CreateSoftwareRenderer)(arg1);"
-         , "}"
-         , "SDL_Renderer *hs_bindgen_6b28e604d7d033f7 ("
-         , "  SDL_Window *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderer)(arg1);"
-         , "}"
-         , "SDL_Window *hs_bindgen_b22b3e4ae10bdb0d ("
-         , "  SDL_Renderer *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderWindow)(arg1);"
-         , "}"
-         , "char const *hs_bindgen_599c50262188b811 ("
-         , "  SDL_Renderer *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRendererName)(arg1);"
-         , "}"
-         , "SDL_PropertiesID hs_bindgen_4a11529b7951c637 ("
-         , "  SDL_Renderer *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRendererProperties)(arg1);"
-         , "}"
-         , "_Bool hs_bindgen_1d433c9827126af7 ("
-         , "  SDL_Renderer *arg1,"
-         , "  signed int *arg2,"
-         , "  signed int *arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderOutputSize)(arg1, arg2, arg3);"
-         , "}"
-         , "_Bool hs_bindgen_5d30db125155788b ("
-         , "  SDL_Renderer *arg1,"
-         , "  signed int *arg2,"
-         , "  signed int *arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_GetCurrentRenderOutputSize)(arg1, arg2, arg3);"
-         , "}"
-         , "SDL_Texture *hs_bindgen_052b6ffc7143143e ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_PixelFormat arg2,"
-         , "  SDL_TextureAccess arg3,"
-         , "  signed int arg4,"
-         , "  signed int arg5"
-         , ")"
-         , "{"
-         , "  return (SDL_CreateTexture)(arg1, arg2, arg3, arg4, arg5);"
-         , "}"
-         , "SDL_Texture *hs_bindgen_4d23668000d5b53c ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_Surface *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_CreateTextureFromSurface)(arg1, arg2);"
-         , "}"
-         , "SDL_Texture *hs_bindgen_56364d1627b2f54e ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_PropertiesID arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_CreateTextureWithProperties)(arg1, arg2);"
-         , "}"
-         , "SDL_PropertiesID hs_bindgen_5a086b7bc8bee33d ("
-         , "  SDL_Texture *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_GetTextureProperties)(arg1);"
-         , "}"
-         , "SDL_Renderer *hs_bindgen_952d60b9be750f80 ("
-         , "  SDL_Texture *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRendererFromTexture)(arg1);"
-         , "}"
-         , "_Bool hs_bindgen_593080867d87a9cb ("
-         , "  SDL_Texture *arg1,"
-         , "  float *arg2,"
-         , "  float *arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_GetTextureSize)(arg1, arg2, arg3);"
-         , "}"
-         , "#include <SDL3/SDL_version.h>"
-         , "#include <SDL3/SDL_error.h>"
-         , "_Bool hs_bindgen_c0c58495bafd931b ("
-         , "  SDL_Texture *arg1,"
-         , "  SDL_Palette *arg2"
-         , ")"
-         , "{"
-         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "  return (SDL_SetTexturePalette)(arg1, arg2);"
-         , "#else"
-         , "  (void)arg1; (void)arg2; SDL_SetError(\"SDL_SetTexturePalette requires SDL >= 3.4.0\"); return 0;"
-         , "#endif"
-         , "}"
-         , "#include <SDL3/SDL_version.h>"
-         , "#include <SDL3/SDL_error.h>"
-         , "SDL_Palette *hs_bindgen_23b273d543966d78 ("
-         , "  SDL_Texture *arg1"
-         , ")"
-         , "{"
-         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "  return (SDL_GetTexturePalette)(arg1);"
-         , "#else"
-         , "  (void)arg1; SDL_SetError(\"SDL_GetTexturePalette requires SDL >= 3.4.0\"); return 0;"
-         , "#endif"
-         , "}"
-         , "_Bool hs_bindgen_823afe6398e7b8c5 ("
-         , "  SDL_Texture *arg1,"
-         , "  Uint8 arg2,"
-         , "  Uint8 arg3,"
-         , "  Uint8 arg4"
-         , ")"
-         , "{"
-         , "  return (SDL_SetTextureColorMod)(arg1, arg2, arg3, arg4);"
-         , "}"
-         , "_Bool hs_bindgen_7ad37bb707c0047a ("
-         , "  SDL_Texture *arg1,"
-         , "  float arg2,"
-         , "  float arg3,"
-         , "  float arg4"
-         , ")"
-         , "{"
-         , "  return (SDL_SetTextureColorModFloat)(arg1, arg2, arg3, arg4);"
-         , "}"
-         , "_Bool hs_bindgen_7a0ccf77a4fdfc3e ("
-         , "  SDL_Texture *arg1,"
-         , "  Uint8 *arg2,"
-         , "  Uint8 *arg3,"
-         , "  Uint8 *arg4"
-         , ")"
-         , "{"
-         , "  return (SDL_GetTextureColorMod)(arg1, arg2, arg3, arg4);"
-         , "}"
-         , "_Bool hs_bindgen_842e59bbba82a5a3 ("
-         , "  SDL_Texture *arg1,"
-         , "  float *arg2,"
-         , "  float *arg3,"
-         , "  float *arg4"
-         , ")"
-         , "{"
-         , "  return (SDL_GetTextureColorModFloat)(arg1, arg2, arg3, arg4);"
-         , "}"
-         , "_Bool hs_bindgen_cd0da7f365c5d74f ("
-         , "  SDL_Texture *arg1,"
-         , "  Uint8 arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_SetTextureAlphaMod)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_3c8a499336e4d5a3 ("
-         , "  SDL_Texture *arg1,"
-         , "  float arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_SetTextureAlphaModFloat)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_d0b8db7f236a27d6 ("
-         , "  SDL_Texture *arg1,"
-         , "  Uint8 *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_GetTextureAlphaMod)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_10d5dcf405fda170 ("
-         , "  SDL_Texture *arg1,"
-         , "  float *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_GetTextureAlphaModFloat)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_2881e5a760914ac5 ("
-         , "  SDL_Texture *arg1,"
-         , "  SDL_BlendMode arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_SetTextureBlendMode)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_816bbcb1b4c3283a ("
-         , "  SDL_Texture *arg1,"
-         , "  SDL_BlendMode *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_GetTextureBlendMode)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_f9ee16ea95e7fdf6 ("
-         , "  SDL_Texture *arg1,"
-         , "  SDL_ScaleMode arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_SetTextureScaleMode)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_6de3c22a0ac3ed25 ("
-         , "  SDL_Texture *arg1,"
-         , "  SDL_ScaleMode *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_GetTextureScaleMode)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_34af457e8db29591 ("
-         , "  SDL_Texture *arg1,"
-         , "  SDL_Rect const *arg2,"
-         , "  void const *arg3,"
-         , "  signed int arg4"
-         , ")"
-         , "{"
-         , "  return (SDL_UpdateTexture)(arg1, arg2, arg3, arg4);"
-         , "}"
-         , "_Bool hs_bindgen_a7b149fabb767cd5 ("
-         , "  SDL_Texture *arg1,"
-         , "  SDL_Rect const *arg2,"
-         , "  Uint8 const *arg3,"
-         , "  signed int arg4,"
-         , "  Uint8 const *arg5,"
-         , "  signed int arg6,"
-         , "  Uint8 const *arg7,"
-         , "  signed int arg8"
-         , ")"
-         , "{"
-         , "  return (SDL_UpdateYUVTexture)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);"
-         , "}"
-         , "_Bool hs_bindgen_2d94f5e4965716c8 ("
-         , "  SDL_Texture *arg1,"
-         , "  SDL_Rect const *arg2,"
-         , "  Uint8 const *arg3,"
-         , "  signed int arg4,"
-         , "  Uint8 const *arg5,"
-         , "  signed int arg6"
-         , ")"
-         , "{"
-         , "  return (SDL_UpdateNVTexture)(arg1, arg2, arg3, arg4, arg5, arg6);"
-         , "}"
-         , "_Bool hs_bindgen_b121055dd1158359 ("
-         , "  SDL_Texture *arg1,"
-         , "  SDL_Rect const *arg2,"
-         , "  void **arg3,"
-         , "  signed int *arg4"
-         , ")"
-         , "{"
-         , "  return (SDL_LockTexture)(arg1, arg2, arg3, arg4);"
-         , "}"
-         , "_Bool hs_bindgen_1526f9100ed55b03 ("
-         , "  SDL_Texture *arg1,"
-         , "  SDL_Rect const *arg2,"
-         , "  SDL_Surface **arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_LockTextureToSurface)(arg1, arg2, arg3);"
-         , "}"
-         , "void hs_bindgen_1159217b1f34f925 ("
-         , "  SDL_Texture *arg1"
-         , ")"
-         , "{"
-         , "  (SDL_UnlockTexture)(arg1);"
-         , "}"
-         , "_Bool hs_bindgen_4b272fad8dbaa9f4 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_Texture *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_SetRenderTarget)(arg1, arg2);"
-         , "}"
-         , "SDL_Texture *hs_bindgen_0f2b08c2b3c8ddb1 ("
-         , "  SDL_Renderer *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderTarget)(arg1);"
-         , "}"
-         , "_Bool hs_bindgen_c8bfb4ad8baf9874 ("
-         , "  SDL_Renderer *arg1,"
-         , "  signed int arg2,"
-         , "  signed int arg3,"
-         , "  SDL_RendererLogicalPresentation arg4"
-         , ")"
-         , "{"
-         , "  return (SDL_SetRenderLogicalPresentation)(arg1, arg2, arg3, arg4);"
-         , "}"
-         , "_Bool hs_bindgen_88acfc55c8872d4d ("
-         , "  SDL_Renderer *arg1,"
-         , "  signed int *arg2,"
-         , "  signed int *arg3,"
-         , "  SDL_RendererLogicalPresentation *arg4"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderLogicalPresentation)(arg1, arg2, arg3, arg4);"
-         , "}"
-         , "_Bool hs_bindgen_e6080eb5475f066e ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_FRect *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderLogicalPresentationRect)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_2ed6b3e16ff69faf ("
-         , "  SDL_Renderer *arg1,"
-         , "  float arg2,"
-         , "  float arg3,"
-         , "  float *arg4,"
-         , "  float *arg5"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderCoordinatesFromWindow)(arg1, arg2, arg3, arg4, arg5);"
-         , "}"
-         , "_Bool hs_bindgen_694297dc8b16c606 ("
-         , "  SDL_Renderer *arg1,"
-         , "  float arg2,"
-         , "  float arg3,"
-         , "  float *arg4,"
-         , "  float *arg5"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderCoordinatesToWindow)(arg1, arg2, arg3, arg4, arg5);"
-         , "}"
-         , "_Bool hs_bindgen_4d63449cf75fd80c ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_Event *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_ConvertEventToRenderCoordinates)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_6d15f83fef90049f ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_Rect const *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_SetRenderViewport)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_b94438b981f1f14c ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_Rect *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderViewport)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_a3207f3fc59e8dc9 ("
-         , "  SDL_Renderer *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderViewportSet)(arg1);"
-         , "}"
-         , "_Bool hs_bindgen_4eb48f61abc48f1f ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_Rect *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderSafeArea)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_8baf3dc3de980190 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_Rect const *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_SetRenderClipRect)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_5b7acae61b400f09 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_Rect *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderClipRect)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_151563301b587559 ("
-         , "  SDL_Renderer *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderClipEnabled)(arg1);"
-         , "}"
-         , "_Bool hs_bindgen_edd164833dbcbd86 ("
-         , "  SDL_Renderer *arg1,"
-         , "  float arg2,"
-         , "  float arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_SetRenderScale)(arg1, arg2, arg3);"
-         , "}"
-         , "_Bool hs_bindgen_b47b8598441289bb ("
-         , "  SDL_Renderer *arg1,"
-         , "  float *arg2,"
-         , "  float *arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderScale)(arg1, arg2, arg3);"
-         , "}"
-         , "_Bool hs_bindgen_2a1d5a5e6763970a ("
-         , "  SDL_Renderer *arg1,"
-         , "  Uint8 arg2,"
-         , "  Uint8 arg3,"
-         , "  Uint8 arg4,"
-         , "  Uint8 arg5"
-         , ")"
-         , "{"
-         , "  return (SDL_SetRenderDrawColor)(arg1, arg2, arg3, arg4, arg5);"
-         , "}"
-         , "_Bool hs_bindgen_deb567c32a3b304a ("
-         , "  SDL_Renderer *arg1,"
-         , "  float arg2,"
-         , "  float arg3,"
-         , "  float arg4,"
-         , "  float arg5"
-         , ")"
-         , "{"
-         , "  return (SDL_SetRenderDrawColorFloat)(arg1, arg2, arg3, arg4, arg5);"
-         , "}"
-         , "_Bool hs_bindgen_4b8538e6f2e6330e ("
-         , "  SDL_Renderer *arg1,"
-         , "  Uint8 *arg2,"
-         , "  Uint8 *arg3,"
-         , "  Uint8 *arg4,"
-         , "  Uint8 *arg5"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderDrawColor)(arg1, arg2, arg3, arg4, arg5);"
-         , "}"
-         , "_Bool hs_bindgen_02be3e3dad551497 ("
-         , "  SDL_Renderer *arg1,"
-         , "  float *arg2,"
-         , "  float *arg3,"
-         , "  float *arg4,"
-         , "  float *arg5"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderDrawColorFloat)(arg1, arg2, arg3, arg4, arg5);"
-         , "}"
-         , "_Bool hs_bindgen_4b5898833d8f7966 ("
-         , "  SDL_Renderer *arg1,"
-         , "  float arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_SetRenderColorScale)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_107aa0fcfa767aa5 ("
-         , "  SDL_Renderer *arg1,"
-         , "  float *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderColorScale)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_b9c067d52917b47d ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_BlendMode arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_SetRenderDrawBlendMode)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_167da6f1eb78062a ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_BlendMode *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderDrawBlendMode)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_cde099ce5b1cfc9d ("
-         , "  SDL_Renderer *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderClear)(arg1);"
-         , "}"
-         , "_Bool hs_bindgen_9685ef9bec873fd9 ("
-         , "  SDL_Renderer *arg1,"
-         , "  float arg2,"
-         , "  float arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderPoint)(arg1, arg2, arg3);"
-         , "}"
-         , "_Bool hs_bindgen_a2f27901d75ff412 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_FPoint const *arg2,"
-         , "  signed int arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderPoints)(arg1, arg2, arg3);"
-         , "}"
-         , "_Bool hs_bindgen_a22413e4506d153a ("
-         , "  SDL_Renderer *arg1,"
-         , "  float arg2,"
-         , "  float arg3,"
-         , "  float arg4,"
-         , "  float arg5"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderLine)(arg1, arg2, arg3, arg4, arg5);"
-         , "}"
-         , "_Bool hs_bindgen_139f9e9bbb114174 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_FPoint const *arg2,"
-         , "  signed int arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderLines)(arg1, arg2, arg3);"
-         , "}"
-         , "_Bool hs_bindgen_c336b07d3c7c70e0 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_FRect const *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderRect)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_4402e93d7e0ba929 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_FRect const *arg2,"
-         , "  signed int arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderRects)(arg1, arg2, arg3);"
-         , "}"
-         , "_Bool hs_bindgen_2904f549c42ca454 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_FRect const *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderFillRect)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_8e1470eae177aaca ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_FRect const *arg2,"
-         , "  signed int arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderFillRects)(arg1, arg2, arg3);"
-         , "}"
-         , "_Bool hs_bindgen_25ce1a6520376b45 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_Texture *arg2,"
-         , "  SDL_FRect const *arg3,"
-         , "  SDL_FRect const *arg4"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderTexture)(arg1, arg2, arg3, arg4);"
-         , "}"
-         , "_Bool hs_bindgen_7784d7195eaae275 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_Texture *arg2,"
-         , "  SDL_FRect const *arg3,"
-         , "  SDL_FRect const *arg4,"
-         , "  double arg5,"
-         , "  SDL_FPoint const *arg6,"
-         , "  SDL_FlipMode arg7"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderTextureRotated)(arg1, arg2, arg3, arg4, arg5, arg6, arg7);"
-         , "}"
-         , "_Bool hs_bindgen_add42f94463f73c6 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_Texture *arg2,"
-         , "  SDL_FRect const *arg3,"
-         , "  SDL_FPoint const *arg4,"
-         , "  SDL_FPoint const *arg5,"
-         , "  SDL_FPoint const *arg6"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderTextureAffine)(arg1, arg2, arg3, arg4, arg5, arg6);"
-         , "}"
-         , "_Bool hs_bindgen_74aa5a13c76159fa ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_Texture *arg2,"
-         , "  SDL_FRect const *arg3,"
-         , "  float arg4,"
-         , "  SDL_FRect const *arg5"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderTextureTiled)(arg1, arg2, arg3, arg4, arg5);"
-         , "}"
-         , "_Bool hs_bindgen_6b75253c3413f458 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_Texture *arg2,"
-         , "  SDL_FRect const *arg3,"
-         , "  float arg4,"
-         , "  float arg5,"
-         , "  float arg6,"
-         , "  float arg7,"
-         , "  float arg8,"
-         , "  SDL_FRect const *arg9"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderTexture9Grid)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);"
-         , "}"
-         , "#include <SDL3/SDL_version.h>"
-         , "#include <SDL3/SDL_error.h>"
-         , "_Bool hs_bindgen_2d9cf263c1277f5b ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_Texture *arg2,"
-         , "  SDL_FRect const *arg3,"
-         , "  float arg4,"
-         , "  float arg5,"
-         , "  float arg6,"
-         , "  float arg7,"
-         , "  float arg8,"
-         , "  SDL_FRect const *arg9,"
-         , "  float arg10"
-         , ")"
-         , "{"
-         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "  return (SDL_RenderTexture9GridTiled)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10);"
-         , "#else"
-         , "  (void)arg1; (void)arg2; (void)arg3; (void)arg4; (void)arg5; (void)arg6; (void)arg7; (void)arg8; (void)arg9; (void)arg10; SDL_SetError(\"SDL_RenderTexture9GridTiled requires SDL >= 3.4.0\"); return 0;"
-         , "#endif"
-         , "}"
-         , "_Bool hs_bindgen_778c782602e7d6de ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_Texture *arg2,"
-         , "  SDL_Vertex const *arg3,"
-         , "  signed int arg4,"
-         , "  signed int const *arg5,"
-         , "  signed int arg6"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderGeometry)(arg1, arg2, arg3, arg4, arg5, arg6);"
-         , "}"
-         , "_Bool hs_bindgen_32080687747fa83c ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_Texture *arg2,"
-         , "  float const *arg3,"
-         , "  signed int arg4,"
-         , "  SDL_FColor const *arg5,"
-         , "  signed int arg6,"
-         , "  float const *arg7,"
-         , "  signed int arg8,"
-         , "  signed int arg9,"
-         , "  void const *arg10,"
-         , "  signed int arg11,"
-         , "  signed int arg12"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderGeometryRaw)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12);"
-         , "}"
-         , "#include <SDL3/SDL_version.h>"
-         , "#include <SDL3/SDL_error.h>"
-         , "#include <SDL3/SDL_version.h>"
-         , "#if !SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "typedef struct SDL_GPUDevice SDL_GPUDevice;"
-         , "typedef struct SDL_GPURenderState SDL_GPURenderState;"
-         , "typedef struct SDL_GPURenderStateCreateInfo SDL_GPURenderStateCreateInfo;"
-         , "typedef int SDL_TextureAddressMode;"
-         , "#endif"
-         , "_Bool hs_bindgen_56e605702d9776b5 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_TextureAddressMode arg2,"
-         , "  SDL_TextureAddressMode arg3"
-         , ")"
-         , "{"
-         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "  return (SDL_SetRenderTextureAddressMode)(arg1, arg2, arg3);"
-         , "#else"
-         , "  (void)arg1; (void)arg2; (void)arg3; SDL_SetError(\"SDL_SetRenderTextureAddressMode requires SDL >= 3.4.0\"); return 0;"
-         , "#endif"
-         , "}"
-         , "#include <SDL3/SDL_version.h>"
-         , "#include <SDL3/SDL_error.h>"
-         , "#include <SDL3/SDL_version.h>"
-         , "#if !SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "typedef struct SDL_GPUDevice SDL_GPUDevice;"
-         , "typedef struct SDL_GPURenderState SDL_GPURenderState;"
-         , "typedef struct SDL_GPURenderStateCreateInfo SDL_GPURenderStateCreateInfo;"
-         , "typedef int SDL_TextureAddressMode;"
-         , "#endif"
-         , "_Bool hs_bindgen_b63dbaffb6d53264 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_TextureAddressMode *arg2,"
-         , "  SDL_TextureAddressMode *arg3"
-         , ")"
-         , "{"
-         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "  return (SDL_GetRenderTextureAddressMode)(arg1, arg2, arg3);"
-         , "#else"
-         , "  (void)arg1; (void)arg2; (void)arg3; SDL_SetError(\"SDL_GetRenderTextureAddressMode requires SDL >= 3.4.0\"); return 0;"
-         , "#endif"
-         , "}"
-         , "SDL_Surface *hs_bindgen_8e39bba88c8b590b ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_Rect const *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderReadPixels)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_7c3d5531ae54aea4 ("
-         , "  SDL_Renderer *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderPresent)(arg1);"
-         , "}"
-         , "void hs_bindgen_8bed4d77b35c687f ("
-         , "  SDL_Texture *arg1"
-         , ")"
-         , "{"
-         , "  (SDL_DestroyTexture)(arg1);"
-         , "}"
-         , "void hs_bindgen_1d20db71cb8b3442 ("
-         , "  SDL_Renderer *arg1"
-         , ")"
-         , "{"
-         , "  (SDL_DestroyRenderer)(arg1);"
-         , "}"
-         , "_Bool hs_bindgen_541ef4edd41b43f3 ("
-         , "  SDL_Renderer *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_FlushRenderer)(arg1);"
-         , "}"
-         , "void *hs_bindgen_b665c5f20441fcd2 ("
-         , "  SDL_Renderer *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderMetalLayer)(arg1);"
-         , "}"
-         , "void *hs_bindgen_4cc0199f9267bab8 ("
-         , "  SDL_Renderer *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderMetalCommandEncoder)(arg1);"
-         , "}"
-         , "_Bool hs_bindgen_91025902db96959c ("
-         , "  SDL_Renderer *arg1,"
-         , "  Uint32 arg2,"
-         , "  Sint64 arg3,"
-         , "  Sint64 arg4"
-         , ")"
-         , "{"
-         , "  return (SDL_AddVulkanRenderSemaphores)(arg1, arg2, arg3, arg4);"
-         , "}"
-         , "_Bool hs_bindgen_6f4a42b49f0de954 ("
-         , "  SDL_Renderer *arg1,"
-         , "  signed int arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_SetRenderVSync)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_eb1ce0cdf3d11c86 ("
-         , "  SDL_Renderer *arg1,"
-         , "  signed int *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderVSync)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_54ec6a89b17b55b6 ("
-         , "  SDL_Renderer *arg1,"
-         , "  float arg2,"
-         , "  float arg3,"
-         , "  char const *arg4"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderDebugText)(arg1, arg2, arg3, arg4);"
-         , "}"
-         , "#include <SDL3/SDL_version.h>"
-         , "#include <SDL3/SDL_error.h>"
-         , "_Bool hs_bindgen_3e694d41804c455e ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_ScaleMode arg2"
-         , ")"
-         , "{"
-         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "  return (SDL_SetDefaultTextureScaleMode)(arg1, arg2);"
-         , "#else"
-         , "  (void)arg1; (void)arg2; SDL_SetError(\"SDL_SetDefaultTextureScaleMode requires SDL >= 3.4.0\"); return 0;"
-         , "#endif"
-         , "}"
-         , "#include <SDL3/SDL_version.h>"
-         , "#include <SDL3/SDL_error.h>"
-         , "_Bool hs_bindgen_3782129e34172c40 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_ScaleMode *arg2"
-         , ")"
-         , "{"
-         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "  return (SDL_GetDefaultTextureScaleMode)(arg1, arg2);"
-         , "#else"
-         , "  (void)arg1; (void)arg2; SDL_SetError(\"SDL_GetDefaultTextureScaleMode requires SDL >= 3.4.0\"); return 0;"
-         , "#endif"
-         , "}"
-         , "#include <SDL3/SDL_version.h>"
-         , "#include <SDL3/SDL_error.h>"
-         , "#include <SDL3/SDL_version.h>"
-         , "#if !SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "typedef struct SDL_GPUDevice SDL_GPUDevice;"
-         , "typedef struct SDL_GPURenderState SDL_GPURenderState;"
-         , "typedef struct SDL_GPURenderStateCreateInfo SDL_GPURenderStateCreateInfo;"
-         , "typedef int SDL_TextureAddressMode;"
-         , "#endif"
-         , "SDL_GPURenderState *hs_bindgen_b6fd9bfda38a61c5 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_GPURenderStateCreateInfo const *arg2"
-         , ")"
-         , "{"
-         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "  return (SDL_CreateGPURenderState)(arg1, arg2);"
-         , "#else"
-         , "  (void)arg1; (void)arg2; SDL_SetError(\"SDL_CreateGPURenderState requires SDL >= 3.4.0\"); return 0;"
-         , "#endif"
-         , "}"
-         , "#include <SDL3/SDL_version.h>"
-         , "#include <SDL3/SDL_error.h>"
-         , "#include <SDL3/SDL_version.h>"
-         , "#if !SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "typedef struct SDL_GPUDevice SDL_GPUDevice;"
-         , "typedef struct SDL_GPURenderState SDL_GPURenderState;"
-         , "typedef struct SDL_GPURenderStateCreateInfo SDL_GPURenderStateCreateInfo;"
-         , "typedef int SDL_TextureAddressMode;"
-         , "#endif"
-         , "_Bool hs_bindgen_18aafc7283600d91 ("
-         , "  SDL_GPURenderState *arg1,"
-         , "  Uint32 arg2,"
-         , "  void const *arg3,"
-         , "  Uint32 arg4"
-         , ")"
-         , "{"
-         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "  return (SDL_SetGPURenderStateFragmentUniforms)(arg1, arg2, arg3, arg4);"
-         , "#else"
-         , "  (void)arg1; (void)arg2; (void)arg3; (void)arg4; SDL_SetError(\"SDL_SetGPURenderStateFragmentUniforms requires SDL >= 3.4.0\"); return 0;"
-         , "#endif"
-         , "}"
-         , "#include <SDL3/SDL_version.h>"
-         , "#include <SDL3/SDL_error.h>"
-         , "#include <SDL3/SDL_version.h>"
-         , "#if !SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "typedef struct SDL_GPUDevice SDL_GPUDevice;"
-         , "typedef struct SDL_GPURenderState SDL_GPURenderState;"
-         , "typedef struct SDL_GPURenderStateCreateInfo SDL_GPURenderStateCreateInfo;"
-         , "typedef int SDL_TextureAddressMode;"
-         , "#endif"
-         , "_Bool hs_bindgen_707dc041c39c56ad ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_GPURenderState *arg2"
-         , ")"
-         , "{"
-         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "  return (SDL_SetGPURenderState)(arg1, arg2);"
-         , "#else"
-         , "  (void)arg1; (void)arg2; SDL_SetError(\"SDL_SetGPURenderState requires SDL >= 3.4.0\"); return 0;"
-         , "#endif"
-         , "}"
-         , "#include <SDL3/SDL_version.h>"
-         , "#include <SDL3/SDL_error.h>"
-         , "#include <SDL3/SDL_version.h>"
-         , "#if !SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "typedef struct SDL_GPUDevice SDL_GPUDevice;"
-         , "typedef struct SDL_GPURenderState SDL_GPURenderState;"
-         , "typedef struct SDL_GPURenderStateCreateInfo SDL_GPURenderStateCreateInfo;"
-         , "typedef int SDL_TextureAddressMode;"
-         , "#endif"
-         , "void hs_bindgen_ef5a4d7453634025 ("
-         , "  SDL_GPURenderState *arg1"
-         , ")"
-         , "{"
-         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "  (SDL_DestroyGPURenderState)(arg1);"
-         , "#else"
-         , "  (void)arg1; SDL_SetError(\"SDL_DestroyGPURenderState requires SDL >= 3.4.0\");"
-         , "#endif"
-         , "}"
-         ]
-     )
- )
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetNumRenderDrivers@
-foreign import ccall safe "hs_bindgen_73e69181c85cbe7b"
-  hs_bindgen_73e69181c85cbe7b_base
-    :: IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetNumRenderDrivers@
-hs_bindgen_73e69181c85cbe7b :: IO BG.CInt
-hs_bindgen_73e69181c85cbe7b =
-  BG.fromFFIType hs_bindgen_73e69181c85cbe7b_base
-
--- | Get the number of 2D rendering drivers available for the current display.
---
---     A render driver is a set of code that handles rendering and texture management on a particular display. Normally there is only one, but some drivers may have several available with different capabilities.
---
---     There may be none if SDL was compiled without render support.
---
---     [Returns]: the number of built in render drivers.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_CreateRenderer', 'sDL_GetRenderDriver'
---
---     [C declaration]: @SDL_GetNumRenderDrivers@, defined at @SDL3\/SDL_render.h 192:33@
-sDL_GetNumRenderDrivers :: IO BG.CInt
-sDL_GetNumRenderDrivers = hs_bindgen_73e69181c85cbe7b
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderDriver@
-foreign import ccall safe "hs_bindgen_785e31d2ab303c36"
-  hs_bindgen_785e31d2ab303c36_base
-    :: BG.Int32
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderDriver@
-hs_bindgen_785e31d2ab303c36
-  :: BG.CInt
-  -> IO (PtrConst.PtrConst BG.CChar)
-hs_bindgen_785e31d2ab303c36 =
-  BG.fromFFIType hs_bindgen_785e31d2ab303c36_base
-
--- | Use this function to get the name of a built in 2D rendering driver.
---
---     The list of rendering drivers is given in the order that they are normally initialized by default; the drivers that seem more reasonable to choose first (as far as the SDL developers believe) are earlier in the list.
---
---     The names of drivers are all simple, low-ASCII identifiers, like \"opengl\", \"direct3d12\" or \"metal\". These never have Unicode characters, and are not meant to be proper names.
---
---     [Returns]: the name of the rendering driver at the requested index, or NULL if an invalid index was specified.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetNumRenderDrivers'
---
---     [C declaration]: @SDL_GetRenderDriver@, defined at @SDL3\/SDL_render.h 216:42@
-sDL_GetRenderDriver
-  :: BG.CInt
-  -- ^
-  --
-  --           [@index@]: the index of the rendering driver; the value ranges from 0 to @SDL_GetNumRenderDrivers()@ - 1.
-  -> IO (PtrConst.PtrConst BG.CChar)
-sDL_GetRenderDriver = hs_bindgen_785e31d2ab303c36
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateWindowAndRenderer@
-foreign import ccall safe "hs_bindgen_8b7a09bca8ba667b"
-  hs_bindgen_8b7a09bca8ba667b_base
-    :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> BG.Word64
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateWindowAndRenderer@
-hs_bindgen_8b7a09bca8ba667b
-  :: PtrConst.PtrConst BG.CChar
-  -> BG.CInt
-  -> BG.CInt
-  -> SDL3.Sys.Bindgen.Video.SDL_WindowFlags
-  -> BG.Ptr (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window)
-  -> BG.Ptr (BG.Ptr SDL_Renderer)
-  -> IO BG.CBool
-hs_bindgen_8b7a09bca8ba667b =
-  BG.fromFFIType hs_bindgen_8b7a09bca8ba667b_base
-
--- | Create a window and default renderer.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_CreateRenderer', SDL_CreateWindow
---
---     [C declaration]: @SDL_CreateWindowAndRenderer@, defined at @SDL3\/SDL_render.h 238:34@
-sDL_CreateWindowAndRenderer
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@title@]: the title of the window, in UTF-8 encoding.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@width@]: the width of the window.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@height@]: the height of the window.
-  -> SDL3.Sys.Bindgen.Video.SDL_WindowFlags
-  -- ^
-  --
-  --           [@window_flags@]: the flags used to create the window (see SDL_CreateWindow()).
-  -> BG.Ptr (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window)
-  -- ^
-  --
-  --           [@window@]: a pointer filled with the window, or NULL on error.
-  -> BG.Ptr (BG.Ptr SDL_Renderer)
-  -- ^
-  --
-  --           [@renderer@]: a pointer filled with the renderer, or NULL on error.
-  -> IO BG.CBool
-sDL_CreateWindowAndRenderer =
-  hs_bindgen_8b7a09bca8ba667b
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateRenderer@
-foreign import ccall safe "hs_bindgen_4a9fac5ac8d291e9"
-  hs_bindgen_4a9fac5ac8d291e9_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateRenderer@
-hs_bindgen_4a9fac5ac8d291e9
-  :: BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
-  -> PtrConst.PtrConst BG.CChar
-  -> IO (BG.Ptr SDL_Renderer)
-hs_bindgen_4a9fac5ac8d291e9 =
-  BG.fromFFIType hs_bindgen_4a9fac5ac8d291e9_base
-
--- | Create a 2D rendering context for a window.
---
---     If you want a specific renderer, you can specify its name here. A list of available renderers can be obtained by calling @SDL_GetRenderDriver()@ multiple times, with indices from 0 to @SDL_GetNumRenderDrivers()@ -1. If you don\'t need a specific renderer, specify NULL and SDL will attempt to choose the best option for you, based on what is available on the user\'s system.
---
---     If @name@ is a comma-separated list, SDL will try each name, in the order listed, until one succeeds or all of them fail.
---
---     By default the rendering size matches the window size in pixels, but you can call @SDL_SetRenderLogicalPresentation()@ to change the content size and scaling options.
---
---     [Returns]: a valid rendering context or NULL if there was an error; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_CreateRendererWithProperties', 'sDL_CreateSoftwareRenderer', 'sDL_DestroyRenderer', 'sDL_GetNumRenderDrivers', 'sDL_GetRenderDriver', 'sDL_GetRendererName'
---
---     [C declaration]: @SDL_CreateRenderer@, defined at @SDL3\/SDL_render.h 273:44@
-sDL_CreateRenderer
-  :: BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
-  -- ^
-  --
-  --           [@window@]: the window where rendering is displayed.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@name@]: the name of the rendering driver to initialize, or NULL to let SDL choose one.
-  -> IO (BG.Ptr SDL_Renderer)
-sDL_CreateRenderer = hs_bindgen_4a9fac5ac8d291e9
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateRendererWithProperties@
-foreign import ccall safe "hs_bindgen_8b6efe6418cb34a2"
-  hs_bindgen_8b6efe6418cb34a2_base
-    :: BG.Word32
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateRendererWithProperties@
-hs_bindgen_8b6efe6418cb34a2
-  :: SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
-  -> IO (BG.Ptr SDL_Renderer)
-hs_bindgen_8b6efe6418cb34a2 =
-  BG.fromFFIType hs_bindgen_8b6efe6418cb34a2_base
-
--- | Create a 2D rendering context for a window, with the specified properties.
---
---     These are the supported properties:
---
---     * @'sDL_PROP_RENDERER_CREATE_NAME_STRING'@: the name of the rendering driver to use, if a specific one is desired
---
---     * @'sDL_PROP_RENDERER_CREATE_WINDOW_POINTER'@: the window where rendering is displayed, required if this isn\'t a software renderer using a surface
---
---     * @'sDL_PROP_RENDERER_CREATE_SURFACE_POINTER'@: the surface where rendering is displayed, if you want a software renderer without a window
---
---     * @'sDL_PROP_RENDERER_CREATE_OUTPUT_COLORSPACE_NUMBER'@: an SDL_Colorspace value describing the colorspace for output to the display, defaults to SDL_COLORSPACE_SRGB. The direct3d11, direct3d12, and metal renderers support SDL_COLORSPACE_SRGB_LINEAR, which is a linear color space and supports HDR output. If you select SDL_COLORSPACE_SRGB_LINEAR, drawing still uses the sRGB colorspace, but values can go beyond 1.0 and float (linear) format textures can be used for HDR content.
---
---     * @'sDL_PROP_RENDERER_CREATE_PRESENT_VSYNC_NUMBER'@: non-zero if you want present synchronized with the refresh rate. This property can take any value that is supported by @SDL_SetRenderVSync()@ for the renderer.
---
---     With the SDL GPU renderer (since SDL 3.4.0):
---
---     * @'sDL_PROP_RENDERER_CREATE_GPU_DEVICE_POINTER'@: the device to use with the renderer, optional.
---
---     * @'sDL_PROP_RENDERER_CREATE_GPU_SHADERS_SPIRV_BOOLEAN'@: the app is able to provide SPIR-V shaders to 'SDL_GPURenderState', optional.
---
---     * @'sDL_PROP_RENDERER_CREATE_GPU_SHADERS_DXIL_BOOLEAN'@: the app is able to provide DXIL shaders to 'SDL_GPURenderState', optional.
---
---     * @'sDL_PROP_RENDERER_CREATE_GPU_SHADERS_MSL_BOOLEAN'@: the app is able to provide MSL shaders to 'SDL_GPURenderState', optional.
---
---     With the vulkan renderer:
---
---     * @'sDL_PROP_RENDERER_CREATE_VULKAN_INSTANCE_POINTER'@: the VkInstance to use with the renderer, optional.
---
---     * @'sDL_PROP_RENDERER_CREATE_VULKAN_SURFACE_NUMBER'@: the VkSurfaceKHR to use with the renderer, optional.
---
---     * @'sDL_PROP_RENDERER_CREATE_VULKAN_PHYSICAL_DEVICE_POINTER'@: the VkPhysicalDevice to use with the renderer, optional.
---
---     * @'sDL_PROP_RENDERER_CREATE_VULKAN_DEVICE_POINTER'@: the VkDevice to use with the renderer, optional.
---
---     * @'sDL_PROP_RENDERER_CREATE_VULKAN_GRAPHICS_QUEUE_FAMILY_INDEX_NUMBER'@: the queue family index used for rendering.
---
---     * @'sDL_PROP_RENDERER_CREATE_VULKAN_PRESENT_QUEUE_FAMILY_INDEX_NUMBER'@: the queue family index used for presentation.
---
---     [Returns]: a valid rendering context or NULL if there was an error; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: SDL_CreateProperties, 'sDL_CreateRenderer', 'sDL_CreateSoftwareRenderer', 'sDL_DestroyRenderer', 'sDL_GetRendererName'
---
---     [C declaration]: @SDL_CreateRendererWithProperties@, defined at @SDL3\/SDL_render.h 337:44@
-sDL_CreateRendererWithProperties
-  :: SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
-  -- ^
-  --
-  --           [@props@]: the properties to use.
-  -> IO (BG.Ptr SDL_Renderer)
-sDL_CreateRendererWithProperties =
-  hs_bindgen_8b6efe6418cb34a2
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateGPURenderer@
-foreign import ccall safe "hs_bindgen_6efbbd05c80e02d0"
-  hs_bindgen_6efbbd05c80e02d0_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateGPURenderer@
-hs_bindgen_6efbbd05c80e02d0
-  :: BG.Ptr SDL3.Sys.Bindgen.Gpu.SDL_GPUDevice
-  -> BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
-  -> IO (BG.Ptr SDL_Renderer)
-hs_bindgen_6efbbd05c80e02d0 =
-  BG.fromFFIType hs_bindgen_6efbbd05c80e02d0_base
-
--- | Create a 2D GPU rendering context.
---
---     The GPU device to use is passed in as a parameter. If this is NULL, then a device will be created normally and can be retrieved using @SDL_GetGPURendererDevice()@.
---
---     The window to use is passed in as a parameter. If this is NULL, then this will become an offscreen renderer. In that case, you should call @SDL_SetRenderTarget()@ to setup rendering to a texture, and then call @SDL_RenderPresent()@ normally to complete drawing a frame.
---
---     [Returns]: a valid rendering context or NULL if there was an error; call SDL_GetError() for more information.
---
---     [Thread safety]: If this function is called with a valid GPU device, it should be called on the thread that created the device. If this function is called with a valid window, it should be called on the thread that created the window.
---
---     @since 3.4.0
---
---     [See also]: 'sDL_CreateRendererWithProperties', 'sDL_GetGPURendererDevice', SDL_CreateGPUShader, 'sDL_CreateGPURenderState', 'sDL_SetGPURenderState'
---
---     [C declaration]: @SDL_CreateGPURenderer@, defined at @SDL3\/SDL_render.h 387:44@
-sDL_CreateGPURenderer
-  :: BG.Ptr SDL3.Sys.Bindgen.Gpu.SDL_GPUDevice
-  -- ^
-  --
-  --           [@device@]: the GPU device to use with the renderer, or NULL to create a device.
-  -> BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
-  -- ^
-  --
-  --           [@window@]: the window where rendering is displayed, or NULL to create an offscreen renderer.
-  -> IO (BG.Ptr SDL_Renderer)
-sDL_CreateGPURenderer = hs_bindgen_6efbbd05c80e02d0
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetGPURendererDevice@
-foreign import ccall safe "hs_bindgen_aa8cead59246ca07"
-  hs_bindgen_aa8cead59246ca07_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetGPURendererDevice@
-hs_bindgen_aa8cead59246ca07
-  :: BG.Ptr SDL_Renderer
-  -> IO (BG.Ptr SDL3.Sys.Bindgen.Gpu.SDL_GPUDevice)
-hs_bindgen_aa8cead59246ca07 =
-  BG.fromFFIType hs_bindgen_aa8cead59246ca07_base
-
--- | Return the GPU device used by a renderer.
---
---     [Returns]: the GPU device used by the renderer, or NULL if the renderer is not a GPU renderer; call SDL_GetError() for more information.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.4.0
---
---     [C declaration]: @SDL_GetGPURendererDevice@, defined at @SDL3\/SDL_render.h 400:45@
-sDL_GetGPURendererDevice
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> IO (BG.Ptr SDL3.Sys.Bindgen.Gpu.SDL_GPUDevice)
-sDL_GetGPURendererDevice =
-  hs_bindgen_aa8cead59246ca07
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateSoftwareRenderer@
-foreign import ccall safe "hs_bindgen_154eef5a69d9f0de"
-  hs_bindgen_154eef5a69d9f0de_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateSoftwareRenderer@
-hs_bindgen_154eef5a69d9f0de
-  :: BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface
-  -> IO (BG.Ptr SDL_Renderer)
-hs_bindgen_154eef5a69d9f0de =
-  BG.fromFFIType hs_bindgen_154eef5a69d9f0de_base
-
--- | Create a 2D software rendering context for a surface.
---
---     Two other APIs which can be used to create 'SDL_Renderer': @SDL_CreateRenderer()@ and @SDL_CreateWindowAndRenderer()@. These can /also/ create a software renderer, but they are intended to be used with an SDL_Window as the final destination and not an SDL_Surface.
---
---     [Returns]: a valid rendering context or NULL if there was an error; call SDL_GetError() for more information.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_DestroyRenderer'
---
---     [C declaration]: @SDL_CreateSoftwareRenderer@, defined at @SDL3\/SDL_render.h 421:44@
-sDL_CreateSoftwareRenderer
-  :: BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface
-  -- ^
-  --
-  --           [@surface@]: the SDL_Surface structure representing the surface where rendering is done.
-  -> IO (BG.Ptr SDL_Renderer)
-sDL_CreateSoftwareRenderer =
-  hs_bindgen_154eef5a69d9f0de
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderer@
-foreign import ccall safe "hs_bindgen_6b28e604d7d033f7"
-  hs_bindgen_6b28e604d7d033f7_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderer@
-hs_bindgen_6b28e604d7d033f7
-  :: BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
-  -> IO (BG.Ptr SDL_Renderer)
-hs_bindgen_6b28e604d7d033f7 =
-  BG.fromFFIType hs_bindgen_6b28e604d7d033f7_base
-
--- | Get the renderer associated with a window.
---
---     [Returns]: the rendering context on success or NULL on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_GetRenderer@, defined at @SDL3\/SDL_render.h 434:44@
-sDL_GetRenderer
-  :: BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
-  -- ^
-  --
-  --           [@window@]: the window to query.
-  -> IO (BG.Ptr SDL_Renderer)
-sDL_GetRenderer = hs_bindgen_6b28e604d7d033f7
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderWindow@
-foreign import ccall safe "hs_bindgen_b22b3e4ae10bdb0d"
-  hs_bindgen_b22b3e4ae10bdb0d_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderWindow@
-hs_bindgen_b22b3e4ae10bdb0d
-  :: BG.Ptr SDL_Renderer
-  -> IO (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window)
-hs_bindgen_b22b3e4ae10bdb0d =
-  BG.fromFFIType hs_bindgen_b22b3e4ae10bdb0d_base
-
--- | Get the window associated with a renderer.
---
---     [Returns]: the window on success or NULL on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_GetRenderWindow@, defined at @SDL3\/SDL_render.h 447:42@
-sDL_GetRenderWindow
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer to query.
-  -> IO (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window)
-sDL_GetRenderWindow = hs_bindgen_b22b3e4ae10bdb0d
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRendererName@
-foreign import ccall safe "hs_bindgen_599c50262188b811"
-  hs_bindgen_599c50262188b811_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRendererName@
-hs_bindgen_599c50262188b811
-  :: BG.Ptr SDL_Renderer
-  -> IO (PtrConst.PtrConst BG.CChar)
-hs_bindgen_599c50262188b811 =
-  BG.fromFFIType hs_bindgen_599c50262188b811_base
-
--- | Get the name of a renderer.
---
---     [Returns]: the name of the selected renderer, or NULL on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_CreateRenderer', 'sDL_CreateRendererWithProperties'
---
---     [C declaration]: @SDL_GetRendererName@, defined at @SDL3\/SDL_render.h 463:42@
-sDL_GetRendererName
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> IO (PtrConst.PtrConst BG.CChar)
-sDL_GetRendererName = hs_bindgen_599c50262188b811
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRendererProperties@
-foreign import ccall safe "hs_bindgen_4a11529b7951c637"
-  hs_bindgen_4a11529b7951c637_base
-    :: BG.Ptr BG.Void
-    -> IO BG.Word32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRendererProperties@
-hs_bindgen_4a11529b7951c637
-  :: BG.Ptr SDL_Renderer
-  -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
-hs_bindgen_4a11529b7951c637 =
-  BG.fromFFIType hs_bindgen_4a11529b7951c637_base
-
--- | Get the properties associated with a renderer.
---
---     The following read-only properties are provided by SDL:
---
---     * @'sDL_PROP_RENDERER_NAME_STRING'@: the name of the rendering driver
---
---     * @'sDL_PROP_RENDERER_WINDOW_POINTER'@: the window where rendering is displayed, if any
---
---     * @'sDL_PROP_RENDERER_SURFACE_POINTER'@: the surface where rendering is displayed, if this is a software renderer without a window
---
---     * @'sDL_PROP_RENDERER_VSYNC_NUMBER'@: the current vsync setting
---
---     * @'sDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER'@: the maximum texture width and height
---
---     * @'sDL_PROP_RENDERER_TEXTURE_FORMATS_POINTER'@: a (const SDL_PixelFormat *) array of pixel formats, terminated with SDL_PIXELFORMAT_UNKNOWN, representing the available texture formats for this renderer.
---
---     * @'sDL_PROP_RENDERER_TEXTURE_WRAPPING_BOOLEAN'@: true if the renderer supports SDL_TEXTURE_ADDRESS_WRAP on non-power-of-two textures.
---
---     * @'sDL_PROP_RENDERER_OUTPUT_COLORSPACE_NUMBER'@: an SDL_Colorspace value describing the colorspace for output to the display, defaults to SDL_COLORSPACE_SRGB.
---
---     * @'sDL_PROP_RENDERER_HDR_ENABLED_BOOLEAN'@: true if the output colorspace is SDL_COLORSPACE_SRGB_LINEAR and the renderer is showing on a display with HDR enabled. This property can change dynamically when SDL_EVENT_WINDOW_HDR_STATE_CHANGED is sent.
---
---     * @'sDL_PROP_RENDERER_SDR_WHITE_POINT_FLOAT'@: the value of SDR white in the SDL_COLORSPACE_SRGB_LINEAR colorspace. When HDR is enabled, this value is automatically multiplied into the color scale. This property can change dynamically when SDL_EVENT_WINDOW_HDR_STATE_CHANGED is sent.
---
---     * @'sDL_PROP_RENDERER_HDR_HEADROOM_FLOAT'@: the additional high dynamic range that can be displayed, in terms of the SDR white point. When HDR is not enabled, this will be 1.0. This property can change dynamically when SDL_EVENT_WINDOW_HDR_STATE_CHANGED is sent.
---
---     With the direct3d renderer:
---
---     * @'sDL_PROP_RENDERER_D3D9_DEVICE_POINTER'@: the IDirect3DDevice9 associated with the renderer
---
---     With the direct3d11 renderer:
---
---     * @'sDL_PROP_RENDERER_D3D11_DEVICE_POINTER'@: the ID3D11Device associated with the renderer
---
---     * @'sDL_PROP_RENDERER_D3D11_SWAPCHAIN_POINTER'@: the IDXGISwapChain1 associated with the renderer. This may change when the window is resized.
---
---     With the direct3d12 renderer:
---
---     * @'sDL_PROP_RENDERER_D3D12_DEVICE_POINTER'@: the ID3D12Device associated with the renderer
---
---     * @'sDL_PROP_RENDERER_D3D12_SWAPCHAIN_POINTER'@: the IDXGISwapChain4 associated with the renderer.
---
---     * @'sDL_PROP_RENDERER_D3D12_COMMAND_QUEUE_POINTER'@: the ID3D12CommandQueue associated with the renderer
---
---     With the vulkan renderer:
---
---     * @'sDL_PROP_RENDERER_VULKAN_INSTANCE_POINTER'@: the VkInstance associated with the renderer
---
---     * @'sDL_PROP_RENDERER_VULKAN_SURFACE_NUMBER'@: the VkSurfaceKHR associated with the renderer
---
---     * @'sDL_PROP_RENDERER_VULKAN_PHYSICAL_DEVICE_POINTER'@: the VkPhysicalDevice associated with the renderer
---
---     * @'sDL_PROP_RENDERER_VULKAN_DEVICE_POINTER'@: the VkDevice associated with the renderer
---
---     * @'sDL_PROP_RENDERER_VULKAN_GRAPHICS_QUEUE_FAMILY_INDEX_NUMBER'@: the queue family index used for rendering
---
---     * @'sDL_PROP_RENDERER_VULKAN_PRESENT_QUEUE_FAMILY_INDEX_NUMBER'@: the queue family index used for presentation
---
---     * @'sDL_PROP_RENDERER_VULKAN_SWAPCHAIN_IMAGE_COUNT_NUMBER'@: the number of swapchain images, or potential frames in flight, used by the Vulkan renderer
---
---     With the gpu renderer:
---
---     * @'sDL_PROP_RENDERER_GPU_DEVICE_POINTER'@: the SDL_GPUDevice associated with the renderer
---
---     [Returns]: a valid property ID on success or 0 on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_GetRendererProperties@, defined at @SDL3\/SDL_render.h 551:46@
-sDL_GetRendererProperties
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
-sDL_GetRendererProperties =
-  hs_bindgen_4a11529b7951c637
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderOutputSize@
-foreign import ccall safe "hs_bindgen_1d433c9827126af7"
-  hs_bindgen_1d433c9827126af7_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderOutputSize@
-hs_bindgen_1d433c9827126af7
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr BG.CInt
-  -> BG.Ptr BG.CInt
-  -> IO BG.CBool
-hs_bindgen_1d433c9827126af7 =
-  BG.fromFFIType hs_bindgen_1d433c9827126af7_base
-
--- | Get the output size in pixels of a rendering context.
---
---     This returns the true output size in pixels, ignoring any render targets or logical size and presentation.
---
---     For the output size of the current rendering target, with logical size adjustments, use @SDL_GetCurrentRenderOutputSize()@ instead.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetCurrentRenderOutputSize'
---
---     [C declaration]: @SDL_GetRenderOutputSize@, defined at @SDL3\/SDL_render.h 600:34@
-sDL_GetRenderOutputSize
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr BG.CInt
-  -- ^
-  --
-  --           [@w@]: a pointer filled in with the width in pixels.
-  -> BG.Ptr BG.CInt
-  -- ^
-  --
-  --           [@h@]: a pointer filled in with the height in pixels.
-  -> IO BG.CBool
-sDL_GetRenderOutputSize = hs_bindgen_1d433c9827126af7
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetCurrentRenderOutputSize@
-foreign import ccall safe "hs_bindgen_5d30db125155788b"
-  hs_bindgen_5d30db125155788b_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetCurrentRenderOutputSize@
-hs_bindgen_5d30db125155788b
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr BG.CInt
-  -> BG.Ptr BG.CInt
-  -> IO BG.CBool
-hs_bindgen_5d30db125155788b =
-  BG.fromFFIType hs_bindgen_5d30db125155788b_base
-
--- | Get the current output size in pixels of a rendering context.
---
---     If a rendering target is active, this will return the size of the rendering target in pixels, otherwise return the value of @SDL_GetRenderOutputSize()@.
---
---     Rendering target or not, the output will be adjusted by the current logical presentation state, dictated by @SDL_SetRenderLogicalPresentation()@.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetRenderOutputSize'
---
---     [C declaration]: @SDL_GetCurrentRenderOutputSize@, defined at @SDL3\/SDL_render.h 623:34@
-sDL_GetCurrentRenderOutputSize
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr BG.CInt
-  -- ^
-  --
-  --           [@w@]: a pointer filled in with the current width.
-  -> BG.Ptr BG.CInt
-  -- ^
-  --
-  --           [@h@]: a pointer filled in with the current height.
-  -> IO BG.CBool
-sDL_GetCurrentRenderOutputSize =
-  hs_bindgen_5d30db125155788b
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateTexture@
-foreign import ccall safe "hs_bindgen_052b6ffc7143143e"
-  hs_bindgen_052b6ffc7143143e_base
-    :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Int32
-    -> BG.Int32
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateTexture@
-hs_bindgen_052b6ffc7143143e
-  :: BG.Ptr SDL_Renderer
-  -> SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
-  -> SDL_TextureAccess
-  -> BG.CInt
-  -> BG.CInt
-  -> IO (BG.Ptr SDL_Texture)
-hs_bindgen_052b6ffc7143143e =
-  BG.fromFFIType hs_bindgen_052b6ffc7143143e_base
-
--- | Create a texture for a rendering context.
---
---     The contents of a texture when first created are not defined.
---
---     [Returns]: the created texture or NULL on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_CreateTextureFromSurface', 'sDL_CreateTextureWithProperties', 'sDL_DestroyTexture', 'sDL_GetTextureSize', 'sDL_UpdateTexture'
---
---     [C declaration]: @SDL_CreateTexture@, defined at @SDL3\/SDL_render.h 648:43@
-sDL_CreateTexture
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
-  -- ^
-  --
-  --           [@format@]: one of the enumerated values in SDL_PixelFormat.
-  -> SDL_TextureAccess
-  -- ^
-  --
-  --           [@access@]: one of the enumerated values in 'SDL_TextureAccess'.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@w@]: the width of the texture in pixels.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@h@]: the height of the texture in pixels.
-  -> IO (BG.Ptr SDL_Texture)
-sDL_CreateTexture = hs_bindgen_052b6ffc7143143e
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateTextureFromSurface@
-foreign import ccall safe "hs_bindgen_4d23668000d5b53c"
-  hs_bindgen_4d23668000d5b53c_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateTextureFromSurface@
-hs_bindgen_4d23668000d5b53c
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface
-  -> IO (BG.Ptr SDL_Texture)
-hs_bindgen_4d23668000d5b53c =
-  BG.fromFFIType hs_bindgen_4d23668000d5b53c_base
-
--- | Create a texture from an existing surface.
---
---     The surface is not modified or freed by this function.
---
---     The 'SDL_TextureAccess' hint for the created texture is @SDL_TEXTUREACCESS_STATIC@.
---
---     The pixel format of the created texture may be different from the pixel format of the surface, and can be queried using the SDL_PROP_TEXTURE_FORMAT_NUMBER property.
---
---     [Returns]: the created texture or NULL on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_CreateTexture', 'sDL_CreateTextureWithProperties', 'sDL_DestroyTexture'
---
---     [C declaration]: @SDL_CreateTextureFromSurface@, defined at @SDL3\/SDL_render.h 676:43@
-sDL_CreateTextureFromSurface
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface
-  -- ^
-  --
-  --           [@surface@]: the SDL_Surface structure containing pixel data used to fill the texture.
-  -> IO (BG.Ptr SDL_Texture)
-sDL_CreateTextureFromSurface =
-  hs_bindgen_4d23668000d5b53c
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateTextureWithProperties@
-foreign import ccall safe "hs_bindgen_56364d1627b2f54e"
-  hs_bindgen_56364d1627b2f54e_base
-    :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateTextureWithProperties@
-hs_bindgen_56364d1627b2f54e
-  :: BG.Ptr SDL_Renderer
-  -> SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
-  -> IO (BG.Ptr SDL_Texture)
-hs_bindgen_56364d1627b2f54e =
-  BG.fromFFIType hs_bindgen_56364d1627b2f54e_base
-
--- | Create a texture for a rendering context with the specified properties.
---
---     These are the supported properties:
---
---     * @'sDL_PROP_TEXTURE_CREATE_COLORSPACE_NUMBER'@: an SDL_Colorspace value describing the texture colorspace, defaults to SDL_COLORSPACE_SRGB_LINEAR for floating point textures, SDL_COLORSPACE_HDR10 for 10-bit textures, SDL_COLORSPACE_SRGB for other RGB textures and SDL_COLORSPACE_JPEG for YUV textures.
---
---     * @'sDL_PROP_TEXTURE_CREATE_FORMAT_NUMBER'@: one of the enumerated values in SDL_PixelFormat, defaults to the best RGBA format for the renderer
---
---     * @'sDL_PROP_TEXTURE_CREATE_ACCESS_NUMBER'@: one of the enumerated values in 'SDL_TextureAccess', defaults to SDL_TEXTUREACCESS_STATIC
---
---     * @'sDL_PROP_TEXTURE_CREATE_WIDTH_NUMBER'@: the width of the texture in pixels, required
---
---     * @'sDL_PROP_TEXTURE_CREATE_HEIGHT_NUMBER'@: the height of the texture in pixels, required
---
---     * @'sDL_PROP_TEXTURE_CREATE_PALETTE_POINTER'@: an SDL_Palette to use with palettized texture formats. This can be set later with @SDL_SetTexturePalette()@
---
---     * @'sDL_PROP_TEXTURE_CREATE_SDR_WHITE_POINT_FLOAT'@: for HDR10 and floating point textures, this defines the value of 100% diffuse white, with higher values being displayed in the High Dynamic Range headroom. This defaults to 100 for HDR10 textures and 1.0 for floating point textures.
---
---     * @'sDL_PROP_TEXTURE_CREATE_HDR_HEADROOM_FLOAT'@: for HDR10 and floating point textures, this defines the maximum dynamic range used by the content, in terms of the SDR white point. This would be equivalent to maxCLL \/ SDL_PROP_TEXTURE_CREATE_SDR_WHITE_POINT_FLOAT for HDR10 content. If this is defined, any values outside the range supported by the display will be scaled into the available HDR headroom, otherwise they are clipped.
---
---     With the direct3d11 renderer:
---
---     * @'sDL_PROP_TEXTURE_CREATE_D3D11_TEXTURE_POINTER'@: the ID3D11Texture2D associated with the texture, if you want to wrap an existing texture.
---
---     * @'sDL_PROP_TEXTURE_CREATE_D3D11_TEXTURE_U_POINTER'@: the ID3D11Texture2D associated with the U plane of a YUV texture, if you want to wrap an existing texture.
---
---     * @'sDL_PROP_TEXTURE_CREATE_D3D11_TEXTURE_V_POINTER'@: the ID3D11Texture2D associated with the V plane of a YUV texture, if you want to wrap an existing texture.
---
---     With the direct3d12 renderer:
---
---     * @'sDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_POINTER'@: the ID3D12Resource associated with the texture, if you want to wrap an existing texture.
---
---     * @'sDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_U_POINTER'@: the ID3D12Resource associated with the U plane of a YUV texture, if you want to wrap an existing texture.
---
---     * @'sDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_V_POINTER'@: the ID3D12Resource associated with the V plane of a YUV texture, if you want to wrap an existing texture.
---
---     With the metal renderer:
---
---     * @'sDL_PROP_TEXTURE_CREATE_METAL_PIXELBUFFER_POINTER'@: the CVPixelBufferRef associated with the texture, if you want to create a texture from an existing pixel buffer.
---
---     With the opengl renderer:
---
---     * @'sDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_NUMBER'@: the GLuint texture associated with the texture, if you want to wrap an existing texture.
---
---     * @'sDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_UV_NUMBER'@: the GLuint texture associated with the UV plane of an NV12 texture, if you want to wrap an existing texture.
---
---     * @'sDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_U_NUMBER'@: the GLuint texture associated with the U plane of a YUV texture, if you want to wrap an existing texture.
---
---     * @'sDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_V_NUMBER'@: the GLuint texture associated with the V plane of a YUV texture, if you want to wrap an existing texture.
---
---     With the opengles2 renderer:
---
---     * @'sDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_NUMBER'@: the GLuint texture associated with the texture, if you want to wrap an existing texture.
---
---     * @'sDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_UV_NUMBER'@: the GLuint texture associated with the UV plane of an NV12 texture, if you want to wrap an existing texture.
---
---     * @'sDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_U_NUMBER'@: the GLuint texture associated with the U plane of a YUV texture, if you want to wrap an existing texture.
---
---     * @'sDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_V_NUMBER'@: the GLuint texture associated with the V plane of a YUV texture, if you want to wrap an existing texture.
---
---     With the vulkan renderer:
---
---     * @'sDL_PROP_TEXTURE_CREATE_VULKAN_TEXTURE_NUMBER'@: the VkImage associated with the texture, if you want to wrap an existing texture.
---
---     * @'sDL_PROP_TEXTURE_CREATE_VULKAN_LAYOUT_NUMBER'@: the VkImageLayout for the VkImage, defaults to VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL.
---
---     With the GPU renderer:
---
---     * @'sDL_PROP_TEXTURE_CREATE_GPU_TEXTURE_POINTER'@: the SDL_GPUTexture associated with the texture, if you want to wrap an existing texture.
---
---     * @SDL_PROP_TEXTURE_CREATE_GPU_TEXTURE_UV_NUMBER@: the SDL_GPUTexture associated with the UV plane of an NV12 texture, if you want to wrap an existing texture.
---
---     * @SDL_PROP_TEXTURE_CREATE_GPU_TEXTURE_U_NUMBER@: the SDL_GPUTexture associated with the U plane of a YUV texture, if you want to wrap an existing texture.
---
---     * @SDL_PROP_TEXTURE_CREATE_GPU_TEXTURE_V_NUMBER@: the SDL_GPUTexture associated with the V plane of a YUV texture, if you want to wrap an existing texture.
---
---     [Returns]: the created texture or NULL on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: SDL_CreateProperties, 'sDL_CreateTexture', 'sDL_CreateTextureFromSurface', 'sDL_DestroyTexture', 'sDL_GetTextureSize', 'sDL_UpdateTexture'
---
---     [C declaration]: @SDL_CreateTextureWithProperties@, defined at @SDL3\/SDL_render.h 804:43@
-sDL_CreateTextureWithProperties
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
-  -- ^
-  --
-  --           [@props@]: the properties to use.
-  -> IO (BG.Ptr SDL_Texture)
-sDL_CreateTextureWithProperties =
-  hs_bindgen_56364d1627b2f54e
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTextureProperties@
-foreign import ccall safe "hs_bindgen_5a086b7bc8bee33d"
-  hs_bindgen_5a086b7bc8bee33d_base
-    :: BG.Ptr BG.Void
-    -> IO BG.Word32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTextureProperties@
-hs_bindgen_5a086b7bc8bee33d
-  :: BG.Ptr SDL_Texture
-  -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
-hs_bindgen_5a086b7bc8bee33d =
-  BG.fromFFIType hs_bindgen_5a086b7bc8bee33d_base
-
--- | Get the properties associated with a texture.
---
---     The following read-only properties are provided by SDL:
---
---     * @'sDL_PROP_TEXTURE_COLORSPACE_NUMBER'@: an SDL_Colorspace value describing the texture colorspace.
---
---     * @'sDL_PROP_TEXTURE_FORMAT_NUMBER'@: one of the enumerated values in SDL_PixelFormat.
---
---     * @'sDL_PROP_TEXTURE_ACCESS_NUMBER'@: one of the enumerated values in 'SDL_TextureAccess'.
---
---     * @'sDL_PROP_TEXTURE_WIDTH_NUMBER'@: the width of the texture in pixels.
---
---     * @'sDL_PROP_TEXTURE_HEIGHT_NUMBER'@: the height of the texture in pixels.
---
---     * @'sDL_PROP_TEXTURE_SDR_WHITE_POINT_FLOAT'@: for HDR10 and floating point textures, this defines the value of 100% diffuse white, with higher values being displayed in the High Dynamic Range headroom. This defaults to 100 for HDR10 textures and 1.0 for other textures.
---
---     * @'sDL_PROP_TEXTURE_HDR_HEADROOM_FLOAT'@: for HDR10 and floating point textures, this defines the maximum dynamic range used by the content, in terms of the SDR white point. If this is defined, any values outside the range supported by the display will be scaled into the available HDR headroom, otherwise they are clipped. This defaults to 1.0 for SDR textures, 4.0 for HDR10 textures, and no default for floating point textures.
---
---     With the direct3d11 renderer:
---
---     * @'sDL_PROP_TEXTURE_D3D11_TEXTURE_POINTER'@: the ID3D11Texture2D associated with the texture
---
---     * @'sDL_PROP_TEXTURE_D3D11_TEXTURE_U_POINTER'@: the ID3D11Texture2D associated with the U plane of a YUV texture
---
---     * @'sDL_PROP_TEXTURE_D3D11_TEXTURE_V_POINTER'@: the ID3D11Texture2D associated with the V plane of a YUV texture
---
---     With the direct3d12 renderer:
---
---     * @'sDL_PROP_TEXTURE_D3D12_TEXTURE_POINTER'@: the ID3D12Resource associated with the texture
---
---     * @'sDL_PROP_TEXTURE_D3D12_TEXTURE_U_POINTER'@: the ID3D12Resource associated with the U plane of a YUV texture
---
---     * @'sDL_PROP_TEXTURE_D3D12_TEXTURE_V_POINTER'@: the ID3D12Resource associated with the V plane of a YUV texture
---
---     With the vulkan renderer:
---
---     * @'sDL_PROP_TEXTURE_VULKAN_TEXTURE_NUMBER'@: the VkImage associated with the texture
---
---     With the opengl renderer:
---
---     * @'sDL_PROP_TEXTURE_OPENGL_TEXTURE_NUMBER'@: the GLuint texture associated with the texture
---
---     * @'sDL_PROP_TEXTURE_OPENGL_TEXTURE_UV_NUMBER'@: the GLuint texture associated with the UV plane of an NV12 texture
---
---     * @'sDL_PROP_TEXTURE_OPENGL_TEXTURE_U_NUMBER'@: the GLuint texture associated with the U plane of a YUV texture
---
---     * @'sDL_PROP_TEXTURE_OPENGL_TEXTURE_V_NUMBER'@: the GLuint texture associated with the V plane of a YUV texture
---
---     * @'sDL_PROP_TEXTURE_OPENGL_TEXTURE_TARGET_NUMBER'@: the GLenum for the texture target (@GL_TEXTURE_2D@, @GL_TEXTURE_RECTANGLE_ARB@, etc)
---
---     * @'sDL_PROP_TEXTURE_OPENGL_TEX_W_FLOAT'@: the texture coordinate width of the texture (0.0 - 1.0)
---
---     * @'sDL_PROP_TEXTURE_OPENGL_TEX_H_FLOAT'@: the texture coordinate height of the texture (0.0 - 1.0)
---
---     With the opengles2 renderer:
---
---     * @'sDL_PROP_TEXTURE_OPENGLES2_TEXTURE_NUMBER'@: the GLuint texture associated with the texture
---
---     * @'sDL_PROP_TEXTURE_OPENGLES2_TEXTURE_UV_NUMBER'@: the GLuint texture associated with the UV plane of an NV12 texture
---
---     * @'sDL_PROP_TEXTURE_OPENGLES2_TEXTURE_U_NUMBER'@: the GLuint texture associated with the U plane of a YUV texture
---
---     * @'sDL_PROP_TEXTURE_OPENGLES2_TEXTURE_V_NUMBER'@: the GLuint texture associated with the V plane of a YUV texture
---
---     * @'sDL_PROP_TEXTURE_OPENGLES2_TEXTURE_TARGET_NUMBER'@: the GLenum for the texture target (@GL_TEXTURE_2D@, @GL_TEXTURE_EXTERNAL_OES@, etc)
---
---     With the gpu renderer:
---
---     * @'sDL_PROP_TEXTURE_GPU_TEXTURE_POINTER'@: the SDL_GPUTexture associated with the texture
---
---     * @'sDL_PROP_TEXTURE_GPU_TEXTURE_UV_POINTER'@: the SDL_GPUTexture associated with the UV plane of an NV12 texture
---
---     * @'sDL_PROP_TEXTURE_GPU_TEXTURE_U_POINTER'@: the SDL_GPUTexture associated with the U plane of a YUV texture
---
---     * @'sDL_PROP_TEXTURE_GPU_TEXTURE_V_POINTER'@: the SDL_GPUTexture associated with the V plane of a YUV texture
---
---     [Returns]: a valid property ID on success or 0 on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_GetTextureProperties@, defined at @SDL3\/SDL_render.h 933:46@
-sDL_GetTextureProperties
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to query.
-  -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
-sDL_GetTextureProperties =
-  hs_bindgen_5a086b7bc8bee33d
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRendererFromTexture@
-foreign import ccall safe "hs_bindgen_952d60b9be750f80"
-  hs_bindgen_952d60b9be750f80_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRendererFromTexture@
-hs_bindgen_952d60b9be750f80
-  :: BG.Ptr SDL_Texture
-  -> IO (BG.Ptr SDL_Renderer)
-hs_bindgen_952d60b9be750f80 =
-  BG.fromFFIType hs_bindgen_952d60b9be750f80_base
-
--- | Get the renderer that created an 'SDL_Texture'.
---
---     [Returns]: a pointer to the 'SDL_Renderer' that created the texture, or NULL on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_GetRendererFromTexture@, defined at @SDL3\/SDL_render.h 977:44@
-sDL_GetRendererFromTexture
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to query.
-  -> IO (BG.Ptr SDL_Renderer)
-sDL_GetRendererFromTexture =
-  hs_bindgen_952d60b9be750f80
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTextureSize@
-foreign import ccall safe "hs_bindgen_593080867d87a9cb"
-  hs_bindgen_593080867d87a9cb_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTextureSize@
-hs_bindgen_593080867d87a9cb
-  :: BG.Ptr SDL_Texture
-  -> BG.Ptr BG.CFloat
-  -> BG.Ptr BG.CFloat
-  -> IO BG.CBool
-hs_bindgen_593080867d87a9cb =
-  BG.fromFFIType hs_bindgen_593080867d87a9cb_base
-
--- | Get the size of a texture, as floating point values.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_GetTextureSize@, defined at @SDL3\/SDL_render.h 994:34@
-sDL_GetTextureSize
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to query.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@w@]: a pointer filled in with the width of the texture in pixels. This argument can be NULL if you don\'t need this information.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@h@]: a pointer filled in with the height of the texture in pixels. This argument can be NULL if you don\'t need this information.
-  -> IO BG.CBool
-sDL_GetTextureSize = hs_bindgen_593080867d87a9cb
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetTexturePalette@
-foreign import ccall safe "hs_bindgen_c0c58495bafd931b"
-  hs_bindgen_c0c58495bafd931b_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetTexturePalette@
-hs_bindgen_c0c58495bafd931b
-  :: BG.Ptr SDL_Texture
-  -> BG.Ptr SDL3.Sys.Bindgen.Pixels.SDL_Palette
-  -> IO BG.CBool
-hs_bindgen_c0c58495bafd931b =
-  BG.fromFFIType hs_bindgen_c0c58495bafd931b_base
-
--- | Set the palette used by a texture.
---
---     Setting the palette keeps an internal reference to the palette, which can be safely destroyed afterwards.
---
---     A single palette can be shared with many textures.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.4.0
---
---     [See also]: SDL_CreatePalette, 'sDL_GetTexturePalette'
---
---     [C declaration]: @SDL_SetTexturePalette@, defined at @SDL3\/SDL_render.h 1016:34@
-sDL_SetTexturePalette
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to update.
-  -> BG.Ptr SDL3.Sys.Bindgen.Pixels.SDL_Palette
-  -- ^
-  --
-  --           [@palette@]: the SDL_Palette structure to use.
-  -> IO BG.CBool
-sDL_SetTexturePalette = hs_bindgen_c0c58495bafd931b
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTexturePalette@
-foreign import ccall safe "hs_bindgen_23b273d543966d78"
-  hs_bindgen_23b273d543966d78_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTexturePalette@
-hs_bindgen_23b273d543966d78
-  :: BG.Ptr SDL_Texture
-  -> IO (BG.Ptr SDL3.Sys.Bindgen.Pixels.SDL_Palette)
-hs_bindgen_23b273d543966d78 =
-  BG.fromFFIType hs_bindgen_23b273d543966d78_base
-
--- | Get the palette used by a texture.
---
---     [Returns]: a pointer to the palette used by the texture, or NULL if there is no palette used.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.4.0
---
---     [See also]: 'sDL_SetTexturePalette'
---
---     [C declaration]: @SDL_GetTexturePalette@, defined at @SDL3\/SDL_render.h 1031:43@
-sDL_GetTexturePalette
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to query.
-  -> IO (BG.Ptr SDL3.Sys.Bindgen.Pixels.SDL_Palette)
-sDL_GetTexturePalette = hs_bindgen_23b273d543966d78
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetTextureColorMod@
-foreign import ccall safe "hs_bindgen_823afe6398e7b8c5"
-  hs_bindgen_823afe6398e7b8c5_base
-    :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> BG.Word8
-    -> BG.Word8
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetTextureColorMod@
-hs_bindgen_823afe6398e7b8c5
-  :: BG.Ptr SDL_Texture
-  -> SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> IO BG.CBool
-hs_bindgen_823afe6398e7b8c5 =
-  BG.fromFFIType hs_bindgen_823afe6398e7b8c5_base
-
--- | Set an additional color value multiplied into render copy operations.
---
---     When this texture is rendered, during the copy operation each source color channel is modulated by the appropriate color value according to the following formula:
---
---     @srcC = srcC * (color \/ 255)@
---
---     Color modulation is not always supported by the renderer; it will return false if color modulation is not supported.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetTextureColorMod', 'sDL_SetTextureAlphaMod', 'sDL_SetTextureColorModFloat'
---
---     [C declaration]: @SDL_SetTextureColorMod@, defined at @SDL3\/SDL_render.h 1060:34@
-sDL_SetTextureColorMod
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to update.
-  -> SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@r@]: the red color value multiplied into copy operations.
-  -> SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@g@]: the green color value multiplied into copy operations.
-  -> SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@b@]: the blue color value multiplied into copy operations.
-  -> IO BG.CBool
-sDL_SetTextureColorMod = hs_bindgen_823afe6398e7b8c5
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetTextureColorModFloat@
-foreign import ccall safe "hs_bindgen_7ad37bb707c0047a"
-  hs_bindgen_7ad37bb707c0047a_base
-    :: BG.Ptr BG.Void
-    -> Float
-    -> Float
-    -> Float
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetTextureColorModFloat@
-hs_bindgen_7ad37bb707c0047a
-  :: BG.Ptr SDL_Texture
-  -> BG.CFloat
-  -> BG.CFloat
-  -> BG.CFloat
-  -> IO BG.CBool
-hs_bindgen_7ad37bb707c0047a =
-  BG.fromFFIType hs_bindgen_7ad37bb707c0047a_base
-
--- | Set an additional color value multiplied into render copy operations.
---
---     When this texture is rendered, during the copy operation each source color channel is modulated by the appropriate color value according to the following formula:
---
---     @srcC = srcC * color@
---
---     Color modulation is not always supported by the renderer; it will return false if color modulation is not supported.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetTextureColorModFloat', 'sDL_SetTextureAlphaModFloat', 'sDL_SetTextureColorMod'
---
---     [C declaration]: @SDL_SetTextureColorModFloat@, defined at @SDL3\/SDL_render.h 1090:34@
-sDL_SetTextureColorModFloat
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to update.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@r@]: the red color value multiplied into copy operations.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@g@]: the green color value multiplied into copy operations.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@b@]: the blue color value multiplied into copy operations.
-  -> IO BG.CBool
-sDL_SetTextureColorModFloat =
-  hs_bindgen_7ad37bb707c0047a
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTextureColorMod@
-foreign import ccall safe "hs_bindgen_7a0ccf77a4fdfc3e"
-  hs_bindgen_7a0ccf77a4fdfc3e_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTextureColorMod@
-hs_bindgen_7a0ccf77a4fdfc3e
-  :: BG.Ptr SDL_Texture
-  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> IO BG.CBool
-hs_bindgen_7a0ccf77a4fdfc3e =
-  BG.fromFFIType hs_bindgen_7a0ccf77a4fdfc3e_base
-
--- | Get the additional color value multiplied into render copy operations.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetTextureAlphaMod', 'sDL_GetTextureColorModFloat', 'sDL_SetTextureColorMod'
---
---     [C declaration]: @SDL_GetTextureColorMod@, defined at @SDL3\/SDL_render.h 1111:34@
-sDL_GetTextureColorMod
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to query.
-  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@r@]: a pointer filled in with the current red color value.
-  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@g@]: a pointer filled in with the current green color value.
-  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@b@]: a pointer filled in with the current blue color value.
-  -> IO BG.CBool
-sDL_GetTextureColorMod = hs_bindgen_7a0ccf77a4fdfc3e
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTextureColorModFloat@
-foreign import ccall safe "hs_bindgen_842e59bbba82a5a3"
-  hs_bindgen_842e59bbba82a5a3_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTextureColorModFloat@
-hs_bindgen_842e59bbba82a5a3
-  :: BG.Ptr SDL_Texture
-  -> BG.Ptr BG.CFloat
-  -> BG.Ptr BG.CFloat
-  -> BG.Ptr BG.CFloat
-  -> IO BG.CBool
-hs_bindgen_842e59bbba82a5a3 =
-  BG.fromFFIType hs_bindgen_842e59bbba82a5a3_base
-
--- | Get the additional color value multiplied into render copy operations.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetTextureAlphaModFloat', 'sDL_GetTextureColorMod', 'sDL_SetTextureColorModFloat'
---
---     [C declaration]: @SDL_GetTextureColorModFloat@, defined at @SDL3\/SDL_render.h 1131:34@
-sDL_GetTextureColorModFloat
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to query.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@r@]: a pointer filled in with the current red color value.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@g@]: a pointer filled in with the current green color value.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@b@]: a pointer filled in with the current blue color value.
-  -> IO BG.CBool
-sDL_GetTextureColorModFloat =
-  hs_bindgen_842e59bbba82a5a3
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetTextureAlphaMod@
-foreign import ccall safe "hs_bindgen_cd0da7f365c5d74f"
-  hs_bindgen_cd0da7f365c5d74f_base
-    :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetTextureAlphaMod@
-hs_bindgen_cd0da7f365c5d74f
-  :: BG.Ptr SDL_Texture
-  -> SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> IO BG.CBool
-hs_bindgen_cd0da7f365c5d74f =
-  BG.fromFFIType hs_bindgen_cd0da7f365c5d74f_base
-
--- | Set an additional alpha value multiplied into render copy operations.
---
---     When this texture is rendered, during the copy operation the source alpha value is modulated by this alpha value according to the following formula:
---
---     @srcA = srcA * (alpha \/ 255)@
---
---     Alpha modulation is not always supported by the renderer; it will return false if alpha modulation is not supported.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetTextureAlphaMod', 'sDL_SetTextureAlphaModFloat', 'sDL_SetTextureColorMod'
---
---     [C declaration]: @SDL_SetTextureAlphaMod@, defined at @SDL3\/SDL_render.h 1157:34@
-sDL_SetTextureAlphaMod
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to update.
-  -> SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@alpha@]: the source alpha value multiplied into copy operations.
-  -> IO BG.CBool
-sDL_SetTextureAlphaMod = hs_bindgen_cd0da7f365c5d74f
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetTextureAlphaModFloat@
-foreign import ccall safe "hs_bindgen_3c8a499336e4d5a3"
-  hs_bindgen_3c8a499336e4d5a3_base
-    :: BG.Ptr BG.Void
-    -> Float
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetTextureAlphaModFloat@
-hs_bindgen_3c8a499336e4d5a3
-  :: BG.Ptr SDL_Texture
-  -> BG.CFloat
-  -> IO BG.CBool
-hs_bindgen_3c8a499336e4d5a3 =
-  BG.fromFFIType hs_bindgen_3c8a499336e4d5a3_base
-
--- | Set an additional alpha value multiplied into render copy operations.
---
---     When this texture is rendered, during the copy operation the source alpha value is modulated by this alpha value according to the following formula:
---
---     @srcA = srcA * alpha@
---
---     Alpha modulation is not always supported by the renderer; it will return false if alpha modulation is not supported.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetTextureAlphaModFloat', 'sDL_SetTextureAlphaMod', 'sDL_SetTextureColorModFloat'
---
---     [C declaration]: @SDL_SetTextureAlphaModFloat@, defined at @SDL3\/SDL_render.h 1183:34@
-sDL_SetTextureAlphaModFloat
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to update.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@alpha@]: the source alpha value multiplied into copy operations.
-  -> IO BG.CBool
-sDL_SetTextureAlphaModFloat =
-  hs_bindgen_3c8a499336e4d5a3
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTextureAlphaMod@
-foreign import ccall safe "hs_bindgen_d0b8db7f236a27d6"
-  hs_bindgen_d0b8db7f236a27d6_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTextureAlphaMod@
-hs_bindgen_d0b8db7f236a27d6
-  :: BG.Ptr SDL_Texture
-  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> IO BG.CBool
-hs_bindgen_d0b8db7f236a27d6 =
-  BG.fromFFIType hs_bindgen_d0b8db7f236a27d6_base
-
--- | Get the additional alpha value multiplied into render copy operations.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetTextureAlphaModFloat', 'sDL_GetTextureColorMod', 'sDL_SetTextureAlphaMod'
---
---     [C declaration]: @SDL_GetTextureAlphaMod@, defined at @SDL3\/SDL_render.h 1201:34@
-sDL_GetTextureAlphaMod
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to query.
-  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@alpha@]: a pointer filled in with the current alpha value.
-  -> IO BG.CBool
-sDL_GetTextureAlphaMod = hs_bindgen_d0b8db7f236a27d6
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTextureAlphaModFloat@
-foreign import ccall safe "hs_bindgen_10d5dcf405fda170"
-  hs_bindgen_10d5dcf405fda170_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTextureAlphaModFloat@
-hs_bindgen_10d5dcf405fda170
-  :: BG.Ptr SDL_Texture
-  -> BG.Ptr BG.CFloat
-  -> IO BG.CBool
-hs_bindgen_10d5dcf405fda170 =
-  BG.fromFFIType hs_bindgen_10d5dcf405fda170_base
-
--- | Get the additional alpha value multiplied into render copy operations.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetTextureAlphaMod', 'sDL_GetTextureColorModFloat', 'sDL_SetTextureAlphaModFloat'
---
---     [C declaration]: @SDL_GetTextureAlphaModFloat@, defined at @SDL3\/SDL_render.h 1219:34@
-sDL_GetTextureAlphaModFloat
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to query.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@alpha@]: a pointer filled in with the current alpha value.
-  -> IO BG.CBool
-sDL_GetTextureAlphaModFloat =
-  hs_bindgen_10d5dcf405fda170
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetTextureBlendMode@
-foreign import ccall safe "hs_bindgen_2881e5a760914ac5"
-  hs_bindgen_2881e5a760914ac5_base
-    :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetTextureBlendMode@
-hs_bindgen_2881e5a760914ac5
-  :: BG.Ptr SDL_Texture
-  -> SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
-  -> IO BG.CBool
-hs_bindgen_2881e5a760914ac5 =
-  BG.fromFFIType hs_bindgen_2881e5a760914ac5_base
-
--- | Set the blend mode for a texture, used by @SDL_RenderTexture()@.
---
---     This blend mode is used for any drawing that involves this texture.
---
---     If the blend mode is not supported, the closest supported mode is chosen and this function returns false.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetTextureBlendMode', 'sDL_SetRenderDrawBlendMode'
---
---     [C declaration]: @SDL_SetTextureBlendMode@, defined at @SDL3\/SDL_render.h 1241:34@
-sDL_SetTextureBlendMode
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to update.
-  -> SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
-  -- ^
-  --
-  --           [@blendMode@]: the SDL_BlendMode to use for texture blending.
-  -> IO BG.CBool
-sDL_SetTextureBlendMode = hs_bindgen_2881e5a760914ac5
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTextureBlendMode@
-foreign import ccall safe "hs_bindgen_816bbcb1b4c3283a"
-  hs_bindgen_816bbcb1b4c3283a_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTextureBlendMode@
-hs_bindgen_816bbcb1b4c3283a
-  :: BG.Ptr SDL_Texture
-  -> BG.Ptr SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
-  -> IO BG.CBool
-hs_bindgen_816bbcb1b4c3283a =
-  BG.fromFFIType hs_bindgen_816bbcb1b4c3283a_base
-
--- | Get the blend mode used for texture copy operations.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_SetTextureBlendMode'
---
---     [C declaration]: @SDL_GetTextureBlendMode@, defined at @SDL3\/SDL_render.h 1257:34@
-sDL_GetTextureBlendMode
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to query.
-  -> BG.Ptr SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
-  -- ^
-  --
-  --           [@blendMode@]: a pointer filled in with the current SDL_BlendMode.
-  -> IO BG.CBool
-sDL_GetTextureBlendMode = hs_bindgen_816bbcb1b4c3283a
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetTextureScaleMode@
-foreign import ccall safe "hs_bindgen_f9ee16ea95e7fdf6"
-  hs_bindgen_f9ee16ea95e7fdf6_base
-    :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetTextureScaleMode@
-hs_bindgen_f9ee16ea95e7fdf6
-  :: BG.Ptr SDL_Texture
-  -> SDL3.Sys.Bindgen.Surface.SDL_ScaleMode
-  -> IO BG.CBool
-hs_bindgen_f9ee16ea95e7fdf6 =
-  BG.fromFFIType hs_bindgen_f9ee16ea95e7fdf6_base
-
--- | Set the scale mode used for texture scale operations.
---
---     The default texture scale mode is SDL_SCALEMODE_LINEAR.
---
---     If the scale mode is not supported, the closest supported mode is chosen.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetTextureScaleMode'
---
---     [C declaration]: @SDL_SetTextureScaleMode@, defined at @SDL3\/SDL_render.h 1277:34@
-sDL_SetTextureScaleMode
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to update.
-  -> SDL3.Sys.Bindgen.Surface.SDL_ScaleMode
-  -- ^
-  --
-  --           [@scaleMode@]: the SDL_ScaleMode to use for texture scaling.
-  -> IO BG.CBool
-sDL_SetTextureScaleMode = hs_bindgen_f9ee16ea95e7fdf6
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTextureScaleMode@
-foreign import ccall safe "hs_bindgen_6de3c22a0ac3ed25"
-  hs_bindgen_6de3c22a0ac3ed25_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTextureScaleMode@
-hs_bindgen_6de3c22a0ac3ed25
-  :: BG.Ptr SDL_Texture
-  -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_ScaleMode
-  -> IO BG.CBool
-hs_bindgen_6de3c22a0ac3ed25 =
-  BG.fromFFIType hs_bindgen_6de3c22a0ac3ed25_base
-
--- | Get the scale mode used for texture scale operations.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_SetTextureScaleMode'
---
---     [C declaration]: @SDL_GetTextureScaleMode@, defined at @SDL3\/SDL_render.h 1293:34@
-sDL_GetTextureScaleMode
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to query.
-  -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_ScaleMode
-  -- ^
-  --
-  --           [@scaleMode@]: a pointer filled in with the current scale mode.
-  -> IO BG.CBool
-sDL_GetTextureScaleMode = hs_bindgen_6de3c22a0ac3ed25
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_UpdateTexture@
-foreign import ccall safe "hs_bindgen_34af457e8db29591"
-  hs_bindgen_34af457e8db29591_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_UpdateTexture@
-hs_bindgen_34af457e8db29591
-  :: BG.Ptr SDL_Texture
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -> PtrConst.PtrConst BG.Void
-  -> BG.CInt
-  -> IO BG.CBool
-hs_bindgen_34af457e8db29591 =
-  BG.fromFFIType hs_bindgen_34af457e8db29591_base
-
--- | Update the given texture rectangle with new pixel data.
---
---     The pixel data must be in the pixel format of the texture, which can be queried using the SDL_PROP_TEXTURE_FORMAT_NUMBER property.
---
---     This is a fairly slow function, intended for use with static textures that do not change often.
---
---     If the texture is intended to be updated often, it is preferred to create the texture as streaming and use the locking functions referenced below. While this function will work with streaming textures, for optimization reasons you may not get the pixels back if you lock the texture afterward.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_LockTexture', 'sDL_UnlockTexture', 'sDL_UpdateNVTexture', 'sDL_UpdateYUVTexture'
---
---     [C declaration]: @SDL_UpdateTexture@, defined at @SDL3\/SDL_render.h 1327:34@
-sDL_UpdateTexture
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to update.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -- ^
-  --
-  --           [@rect@]: an SDL_Rect structure representing the area to update, or NULL to update the entire texture.
-  -> PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@pixels@]: the raw pixel data in the format of the texture.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@pitch@]: the number of bytes in a row of pixel data, including padding between lines.
-  -> IO BG.CBool
-sDL_UpdateTexture = hs_bindgen_34af457e8db29591
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_UpdateYUVTexture@
-foreign import ccall safe "hs_bindgen_a7b149fabb767cd5"
-  hs_bindgen_a7b149fabb767cd5_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_UpdateYUVTexture@
-hs_bindgen_a7b149fabb767cd5
-  :: BG.Ptr SDL_Texture
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> BG.CInt
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> BG.CInt
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> BG.CInt
-  -> IO BG.CBool
-hs_bindgen_a7b149fabb767cd5 =
-  BG.fromFFIType hs_bindgen_a7b149fabb767cd5_base
-
--- | Update a rectangle within a planar YV12 or IYUV texture with new pixel data.
---
---     You can use @SDL_UpdateTexture()@ as long as your pixel data is a contiguous block of Y and U\/V planes in the proper order, but this function is available if your pixel data is not contiguous.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_UpdateNVTexture', 'sDL_UpdateTexture'
---
---     [C declaration]: @SDL_UpdateYUVTexture@, defined at @SDL3\/SDL_render.h 1359:34@
-sDL_UpdateYUVTexture
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to update.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -- ^
-  --
-  --           [@rect@]: a pointer to the rectangle of pixels to update, or NULL to update the entire texture.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@Yplane@]: the raw pixel data for the Y plane.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@Ypitch@]: the number of bytes between rows of pixel data for the Y plane.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@Uplane@]: the raw pixel data for the U plane.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@Upitch@]: the number of bytes between rows of pixel data for the U plane.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@Vplane@]: the raw pixel data for the V plane.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@Vpitch@]: the number of bytes between rows of pixel data for the V plane.
-  -> IO BG.CBool
-sDL_UpdateYUVTexture = hs_bindgen_a7b149fabb767cd5
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_UpdateNVTexture@
-foreign import ccall safe "hs_bindgen_2d94f5e4965716c8"
-  hs_bindgen_2d94f5e4965716c8_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_UpdateNVTexture@
-hs_bindgen_2d94f5e4965716c8
-  :: BG.Ptr SDL_Texture
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> BG.CInt
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> BG.CInt
-  -> IO BG.CBool
-hs_bindgen_2d94f5e4965716c8 =
-  BG.fromFFIType hs_bindgen_2d94f5e4965716c8_base
-
--- | Update a rectangle within a planar NV12 or NV21 texture with new pixels.
---
---     You can use @SDL_UpdateTexture()@ as long as your pixel data is a contiguous block of NV12\/21 planes in the proper order, but this function is available if your pixel data is not contiguous.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_UpdateTexture', 'sDL_UpdateYUVTexture'
---
---     [C declaration]: @SDL_UpdateNVTexture@, defined at @SDL3\/SDL_render.h 1391:34@
-sDL_UpdateNVTexture
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to update.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -- ^
-  --
-  --           [@rect@]: a pointer to the rectangle of pixels to update, or NULL to update the entire texture.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@Yplane@]: the raw pixel data for the Y plane.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@Ypitch@]: the number of bytes between rows of pixel data for the Y plane.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@UVplane@]: the raw pixel data for the UV plane.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@UVpitch@]: the number of bytes between rows of pixel data for the UV plane.
-  -> IO BG.CBool
-sDL_UpdateNVTexture = hs_bindgen_2d94f5e4965716c8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_LockTexture@
-foreign import ccall safe "hs_bindgen_b121055dd1158359"
-  hs_bindgen_b121055dd1158359_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_LockTexture@
-hs_bindgen_b121055dd1158359
-  :: BG.Ptr SDL_Texture
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -> BG.Ptr (BG.Ptr BG.Void)
-  -> BG.Ptr BG.CInt
-  -> IO BG.CBool
-hs_bindgen_b121055dd1158359 =
-  BG.fromFFIType hs_bindgen_b121055dd1158359_base
-
--- | Lock a portion of the texture for __write-only__ pixel access.
---
---     As an optimization, the pixels made available for editing don\'t necessarily contain the old texture data. This is a write-only operation, and if you need to keep a copy of the texture data you should do that at the application level.
---
---     You must use @SDL_UnlockTexture()@ to unlock the pixels and apply any changes.
---
---     [Returns]: true on success or false if the texture is not valid or was not created with @SDL_TEXTUREACCESS_STREAMING@; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_LockTextureToSurface', 'sDL_UnlockTexture'
---
---     [C declaration]: @SDL_LockTexture@, defined at @SDL3\/SDL_render.h 1426:34@
-sDL_LockTexture
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to lock for access, which was created with @SDL_TEXTUREACCESS_STREAMING@.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -- ^
-  --
-  --           [@rect@]: an SDL_Rect structure representing the area to lock for access; NULL to lock the entire texture.
-  -> BG.Ptr (BG.Ptr BG.Void)
-  -- ^
-  --
-  --           [@pixels@]: this is filled in with a pointer to the locked pixels, appropriately offset by the locked area.
-  -> BG.Ptr BG.CInt
-  -- ^
-  --
-  --           [@pitch@]: this is filled in with the pitch of the locked pixels; the pitch is the length of one row in bytes.
-  -> IO BG.CBool
-sDL_LockTexture = hs_bindgen_b121055dd1158359
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_LockTextureToSurface@
-foreign import ccall safe "hs_bindgen_1526f9100ed55b03"
-  hs_bindgen_1526f9100ed55b03_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_LockTextureToSurface@
-hs_bindgen_1526f9100ed55b03
-  :: BG.Ptr SDL_Texture
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -> BG.Ptr (BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface)
-  -> IO BG.CBool
-hs_bindgen_1526f9100ed55b03 =
-  BG.fromFFIType hs_bindgen_1526f9100ed55b03_base
-
--- | Lock a portion of the texture for __write-only__ pixel access, and expose it as a SDL surface.
---
---     Besides providing an SDL_Surface instead of raw pixel data, this function operates like SDL_LockTexture.
---
---     As an optimization, the pixels made available for editing don\'t necessarily contain the old texture data. This is a write-only operation, and if you need to keep a copy of the texture data you should do that at the application level.
---
---     You must use @SDL_UnlockTexture()@ to unlock the pixels and apply any changes.
---
---     The returned surface is freed internally after calling @SDL_UnlockTexture()@ or @SDL_DestroyTexture()@. The caller should not free it.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_LockTexture', 'sDL_UnlockTexture'
---
---     [C declaration]: @SDL_LockTextureToSurface@, defined at @SDL3\/SDL_render.h 1464:34@
-sDL_LockTextureToSurface
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to lock for access, which must be created with @SDL_TEXTUREACCESS_STREAMING@.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -- ^
-  --
-  --           [@rect@]: a pointer to the rectangle to lock for access. If the rect is NULL, the entire texture will be locked.
-  -> BG.Ptr (BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface)
-  -- ^
-  --
-  --           [@surface@]: a pointer to an SDL surface of size __rect__. Don\'t assume any specific pixel content.
-  -> IO BG.CBool
-sDL_LockTextureToSurface =
-  hs_bindgen_1526f9100ed55b03
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_UnlockTexture@
-foreign import ccall safe "hs_bindgen_1159217b1f34f925"
-  hs_bindgen_1159217b1f34f925_base
-    :: BG.Ptr BG.Void
-    -> IO ()
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_UnlockTexture@
-hs_bindgen_1159217b1f34f925
-  :: BG.Ptr SDL_Texture
-  -> IO ()
-hs_bindgen_1159217b1f34f925 =
-  BG.fromFFIType hs_bindgen_1159217b1f34f925_base
-
--- | Unlock a texture, uploading the changes to video memory, if needed.
---
---     __Warning__: Please note that @SDL_LockTexture()@ is intended to be write-only; it will not guarantee the previous contents of the texture will be provided. You must fully initialize any area of a texture that you lock before unlocking it, as the pixels might otherwise be uninitialized memory.
---
---     Which is to say: locking and immediately unlocking a texture can result in corrupted textures, depending on the renderer in use.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_LockTexture'
---
---     [C declaration]: @SDL_UnlockTexture@, defined at @SDL3\/SDL_render.h 1485:34@
-sDL_UnlockTexture
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: a texture locked by @SDL_LockTexture()@.
-  -> IO ()
-sDL_UnlockTexture = hs_bindgen_1159217b1f34f925
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderTarget@
-foreign import ccall safe "hs_bindgen_4b272fad8dbaa9f4"
-  hs_bindgen_4b272fad8dbaa9f4_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderTarget@
-hs_bindgen_4b272fad8dbaa9f4
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL_Texture
-  -> IO BG.CBool
-hs_bindgen_4b272fad8dbaa9f4 =
-  BG.fromFFIType hs_bindgen_4b272fad8dbaa9f4_base
-
--- | Set a texture as the current rendering target.
---
---     The default render target is the window for which the renderer was created. To stop rendering to a texture and render to the window again, call this function with a NULL @texture@.
---
---     Viewport, cliprect, scale, and logical presentation are unique to each render target. Get and set functions for these states apply to the current render target set by this function, and those states persist on each target when the current render target changes.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetRenderTarget'
---
---     [C declaration]: @SDL_SetRenderTarget@, defined at @SDL3\/SDL_render.h 1512:34@
-sDL_SetRenderTarget
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the targeted texture, which must be created with the @SDL_TEXTUREACCESS_TARGET@ flag, or NULL to render to the window instead of a texture.
-  -> IO BG.CBool
-sDL_SetRenderTarget = hs_bindgen_4b272fad8dbaa9f4
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderTarget@
-foreign import ccall safe "hs_bindgen_0f2b08c2b3c8ddb1"
-  hs_bindgen_0f2b08c2b3c8ddb1_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderTarget@
-hs_bindgen_0f2b08c2b3c8ddb1
-  :: BG.Ptr SDL_Renderer
-  -> IO (BG.Ptr SDL_Texture)
-hs_bindgen_0f2b08c2b3c8ddb1 =
-  BG.fromFFIType hs_bindgen_0f2b08c2b3c8ddb1_base
-
--- | Get the current render target.
---
---     The default render target is the window for which the renderer was created, and is reported a NULL here.
---
---     [Returns]: the current render target or NULL for the default render target.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_SetRenderTarget'
---
---     [C declaration]: @SDL_GetRenderTarget@, defined at @SDL3\/SDL_render.h 1529:43@
-sDL_GetRenderTarget
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> IO (BG.Ptr SDL_Texture)
-sDL_GetRenderTarget = hs_bindgen_0f2b08c2b3c8ddb1
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderLogicalPresentation@
-foreign import ccall safe "hs_bindgen_c8bfb4ad8baf9874"
-  hs_bindgen_c8bfb4ad8baf9874_base
-    :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> BG.Word32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderLogicalPresentation@
-hs_bindgen_c8bfb4ad8baf9874
-  :: BG.Ptr SDL_Renderer
-  -> BG.CInt
-  -> BG.CInt
-  -> SDL_RendererLogicalPresentation
-  -> IO BG.CBool
-hs_bindgen_c8bfb4ad8baf9874 =
-  BG.fromFFIType hs_bindgen_c8bfb4ad8baf9874_base
-
--- | Set a device-independent resolution and presentation mode for rendering.
---
---     This function sets the width and height of the logical rendering output. The renderer will act as if the current render target is always the requested dimensions, scaling to the actual resolution as necessary.
---
---     This can be useful for games that expect a fixed size, but would like to scale the output to whatever is available, regardless of how a user resizes a window, or if the display is high DPI.
---
---     Logical presentation can be used with both render target textures and the renderer\'s window; the state is unique to each render target, and this function sets the state for the current render target. It might be useful to draw to a texture that matches the window dimensions with logical presentation enabled, and then draw that texture across the entire window with logical presentation disabled. Be careful not to render both with logical presentation enabled, however, as this could produce double-letterboxing, etc.
---
---     You can disable logical coordinates by setting the mode to SDL_LOGICAL_PRESENTATION_DISABLED, and in that case you get the full pixel resolution of the render target; it is safe to toggle logical presentation during the rendering of a frame: perhaps most of the rendering is done to specific dimensions but to make fonts look sharp, the app turns off logical presentation while drawing text, for example.
---
---     You can convert coordinates in an event into rendering coordinates using @SDL_ConvertEventToRenderCoordinates()@.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_ConvertEventToRenderCoordinates', 'sDL_GetRenderLogicalPresentation', 'sDL_GetRenderLogicalPresentationRect'
---
---     [C declaration]: @SDL_SetRenderLogicalPresentation@, defined at @SDL3\/SDL_render.h 1576:34@
-sDL_SetRenderLogicalPresentation
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@w@]: the width of the logical resolution.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@h@]: the height of the logical resolution.
-  -> SDL_RendererLogicalPresentation
-  -- ^
-  --
-  --           [@mode@]: the presentation mode used.
-  -> IO BG.CBool
-sDL_SetRenderLogicalPresentation =
-  hs_bindgen_c8bfb4ad8baf9874
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderLogicalPresentation@
-foreign import ccall safe "hs_bindgen_88acfc55c8872d4d"
-  hs_bindgen_88acfc55c8872d4d_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderLogicalPresentation@
-hs_bindgen_88acfc55c8872d4d
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr BG.CInt
-  -> BG.Ptr BG.CInt
-  -> BG.Ptr SDL_RendererLogicalPresentation
-  -> IO BG.CBool
-hs_bindgen_88acfc55c8872d4d =
-  BG.fromFFIType hs_bindgen_88acfc55c8872d4d_base
-
--- | Get device independent resolution and presentation mode for rendering.
---
---     This function gets the width and height of the logical rendering output, or 0 if a logical resolution is not enabled.
---
---     Each render target has its own logical presentation state. This function gets the state for the current render target.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_SetRenderLogicalPresentation'
---
---     [C declaration]: @SDL_GetRenderLogicalPresentation@, defined at @SDL3\/SDL_render.h 1601:34@
-sDL_GetRenderLogicalPresentation
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr BG.CInt
-  -- ^
-  --
-  --           [@w@]: an int filled with the logical presentation width.
-  -> BG.Ptr BG.CInt
-  -- ^
-  --
-  --           [@h@]: an int filled with the logical presentation height.
-  -> BG.Ptr SDL_RendererLogicalPresentation
-  -- ^
-  --
-  --           [@mode@]: a variable filled with the logical presentation mode being used.
-  -> IO BG.CBool
-sDL_GetRenderLogicalPresentation =
-  hs_bindgen_88acfc55c8872d4d
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderLogicalPresentationRect@
-foreign import ccall safe "hs_bindgen_e6080eb5475f066e"
-  hs_bindgen_e6080eb5475f066e_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderLogicalPresentationRect@
-hs_bindgen_e6080eb5475f066e
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -> IO BG.CBool
-hs_bindgen_e6080eb5475f066e =
-  BG.fromFFIType hs_bindgen_e6080eb5475f066e_base
-
--- | Get the final presentation rectangle for rendering.
---
---     This function returns the calculated rectangle used for logical presentation, based on the presentation mode and output size. If logical presentation is disabled, it will fill the rectangle with the output size, in pixels.
---
---     Each render target has its own logical presentation state. This function gets the rectangle for the current render target.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_SetRenderLogicalPresentation'
---
---     [C declaration]: @SDL_GetRenderLogicalPresentationRect@, defined at @SDL3\/SDL_render.h 1626:34@
-sDL_GetRenderLogicalPresentationRect
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -- ^
-  --
-  --           [@rect@]: a pointer filled in with the final presentation rectangle, may be NULL.
-  -> IO BG.CBool
-sDL_GetRenderLogicalPresentationRect =
-  hs_bindgen_e6080eb5475f066e
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderCoordinatesFromWindow@
-foreign import ccall safe "hs_bindgen_2ed6b3e16ff69faf"
-  hs_bindgen_2ed6b3e16ff69faf_base
-    :: BG.Ptr BG.Void
-    -> Float
-    -> Float
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderCoordinatesFromWindow@
-hs_bindgen_2ed6b3e16ff69faf
-  :: BG.Ptr SDL_Renderer
-  -> BG.CFloat
-  -> BG.CFloat
-  -> BG.Ptr BG.CFloat
-  -> BG.Ptr BG.CFloat
-  -> IO BG.CBool
-hs_bindgen_2ed6b3e16ff69faf =
-  BG.fromFFIType hs_bindgen_2ed6b3e16ff69faf_base
-
--- | Get a point in render coordinates when given a point in window coordinates.
---
---     This takes into account several states:
---
---     * The window dimensions.
---
---     * The logical presentation settings (SDL_SetRenderLogicalPresentation)
---
---     * The scale (SDL_SetRenderScale)
---
---     * The viewport (SDL_SetRenderViewport)
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_SetRenderLogicalPresentation', 'sDL_SetRenderScale'
---
---     [C declaration]: @SDL_RenderCoordinatesFromWindow@, defined at @SDL3\/SDL_render.h 1653:34@
-sDL_RenderCoordinatesFromWindow
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@window_x@]: the x coordinate in window coordinates.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@window_y@]: the y coordinate in window coordinates.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@x@]: a pointer filled with the x coordinate in render coordinates.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@y@]: a pointer filled with the y coordinate in render coordinates.
-  -> IO BG.CBool
-sDL_RenderCoordinatesFromWindow =
-  hs_bindgen_2ed6b3e16ff69faf
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderCoordinatesToWindow@
-foreign import ccall safe "hs_bindgen_694297dc8b16c606"
-  hs_bindgen_694297dc8b16c606_base
-    :: BG.Ptr BG.Void
-    -> Float
-    -> Float
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderCoordinatesToWindow@
-hs_bindgen_694297dc8b16c606
-  :: BG.Ptr SDL_Renderer
-  -> BG.CFloat
-  -> BG.CFloat
-  -> BG.Ptr BG.CFloat
-  -> BG.Ptr BG.CFloat
-  -> IO BG.CBool
-hs_bindgen_694297dc8b16c606 =
-  BG.fromFFIType hs_bindgen_694297dc8b16c606_base
-
--- | Get a point in window coordinates when given a point in render coordinates.
---
---     This takes into account several states:
---
---     * The window dimensions.
---
---     * The logical presentation settings (SDL_SetRenderLogicalPresentation)
---
---     * The scale (SDL_SetRenderScale)
---
---     * The viewport (SDL_SetRenderViewport)
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_SetRenderLogicalPresentation', 'sDL_SetRenderScale', 'sDL_SetRenderViewport'
---
---     [C declaration]: @SDL_RenderCoordinatesToWindow@, defined at @SDL3\/SDL_render.h 1683:34@
-sDL_RenderCoordinatesToWindow
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@x@]: the x coordinate in render coordinates.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@y@]: the y coordinate in render coordinates.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@window_x@]: a pointer filled with the x coordinate in window coordinates.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@window_y@]: a pointer filled with the y coordinate in window coordinates.
-  -> IO BG.CBool
-sDL_RenderCoordinatesToWindow =
-  hs_bindgen_694297dc8b16c606
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_ConvertEventToRenderCoordinates@
-foreign import ccall safe "hs_bindgen_4d63449cf75fd80c"
-  hs_bindgen_4d63449cf75fd80c_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_ConvertEventToRenderCoordinates@
-hs_bindgen_4d63449cf75fd80c
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL3.Sys.Bindgen.Events.SDL_Event
-  -> IO BG.CBool
-hs_bindgen_4d63449cf75fd80c =
-  BG.fromFFIType hs_bindgen_4d63449cf75fd80c_base
-
--- | Convert the coordinates in an event to render coordinates.
---
---     This takes into account several states:
---
---     * The window dimensions.
---
---     * The logical presentation settings (SDL_SetRenderLogicalPresentation)
---
---     * The scale (SDL_SetRenderScale)
---
---     * The viewport (SDL_SetRenderViewport)
---
---     Various event types are converted with this function: mouse, touch, pen, etc.
---
---     Touch coordinates are converted from normalized coordinates in the window to non-normalized rendering coordinates.
---
---     Relative mouse coordinates (xrel and yrel event fields) are /also/ converted. Applications that do not want these fields converted should use @SDL_RenderCoordinatesFromWindow()@ on the specific event fields instead of converting the entire event structure.
---
---     Once converted, coordinates may be outside the rendering area.
---
---     [Returns]: true if the event is converted or doesn\'t need conversion, or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderCoordinatesFromWindow'
---
---     [C declaration]: @SDL_ConvertEventToRenderCoordinates@, defined at @SDL3\/SDL_render.h 1719:34@
-sDL_ConvertEventToRenderCoordinates
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr SDL3.Sys.Bindgen.Events.SDL_Event
-  -- ^
-  --
-  --           [@event@]: the event to modify.
-  -> IO BG.CBool
-sDL_ConvertEventToRenderCoordinates =
-  hs_bindgen_4d63449cf75fd80c
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderViewport@
-foreign import ccall safe "hs_bindgen_6d15f83fef90049f"
-  hs_bindgen_6d15f83fef90049f_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderViewport@
-hs_bindgen_6d15f83fef90049f
-  :: BG.Ptr SDL_Renderer
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -> IO BG.CBool
-hs_bindgen_6d15f83fef90049f =
-  BG.fromFFIType hs_bindgen_6d15f83fef90049f_base
-
--- | Set the drawing area for rendering on the current target.
---
---     Drawing will clip to this area (separately from any clipping done with SDL_SetRenderClipRect), and the top left of the area will become coordinate (0, 0) for future drawing commands.
---
---     The area\'s width and height must be >= 0.
---
---     Each render target has its own viewport. This function sets the viewport for the current render target.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetRenderViewport', 'sDL_RenderViewportSet'
---
---     [C declaration]: @SDL_SetRenderViewport@, defined at @SDL3\/SDL_render.h 1746:34@
-sDL_SetRenderViewport
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -- ^
-  --
-  --           [@rect@]: the SDL_Rect structure representing the drawing area, or NULL to set the viewport to the entire target.
-  -> IO BG.CBool
-sDL_SetRenderViewport = hs_bindgen_6d15f83fef90049f
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderViewport@
-foreign import ccall safe "hs_bindgen_b94438b981f1f14c"
-  hs_bindgen_b94438b981f1f14c_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderViewport@
-hs_bindgen_b94438b981f1f14c
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -> IO BG.CBool
-hs_bindgen_b94438b981f1f14c =
-  BG.fromFFIType hs_bindgen_b94438b981f1f14c_base
-
--- | Get the drawing area for the current target.
---
---     Each render target has its own viewport. This function gets the viewport for the current render target.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderViewportSet', 'sDL_SetRenderViewport'
---
---     [C declaration]: @SDL_GetRenderViewport@, defined at @SDL3\/SDL_render.h 1766:34@
-sDL_GetRenderViewport
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -- ^
-  --
-  --           [@rect@]: an SDL_Rect structure filled in with the current drawing area.
-  -> IO BG.CBool
-sDL_GetRenderViewport = hs_bindgen_b94438b981f1f14c
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderViewportSet@
-foreign import ccall safe "hs_bindgen_a3207f3fc59e8dc9"
-  hs_bindgen_a3207f3fc59e8dc9_base
-    :: BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderViewportSet@
-hs_bindgen_a3207f3fc59e8dc9
-  :: BG.Ptr SDL_Renderer
-  -> IO BG.CBool
-hs_bindgen_a3207f3fc59e8dc9 =
-  BG.fromFFIType hs_bindgen_a3207f3fc59e8dc9_base
-
--- | Return whether an explicit rectangle was set as the viewport.
---
---     This is useful if you\'re saving and restoring the viewport and want to know whether you should restore a specific rectangle or NULL.
---
---     Each render target has its own viewport. This function checks the viewport for the current render target.
---
---     [Returns]: true if the viewport was set to a specific rectangle, or false if it was set to NULL (the entire target).
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetRenderViewport', 'sDL_SetRenderViewport'
---
---     [C declaration]: @SDL_RenderViewportSet@, defined at @SDL3\/SDL_render.h 1788:34@
-sDL_RenderViewportSet
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> IO BG.CBool
-sDL_RenderViewportSet = hs_bindgen_a3207f3fc59e8dc9
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderSafeArea@
-foreign import ccall safe "hs_bindgen_4eb48f61abc48f1f"
-  hs_bindgen_4eb48f61abc48f1f_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderSafeArea@
-hs_bindgen_4eb48f61abc48f1f
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -> IO BG.CBool
-hs_bindgen_4eb48f61abc48f1f =
-  BG.fromFFIType hs_bindgen_4eb48f61abc48f1f_base
-
--- | Get the safe area for rendering within the current viewport.
---
---     Some devices have portions of the screen which are partially obscured or not interactive, possibly due to on-screen controls, curved edges, camera notches, TV overscan, etc. This function provides the area of the current viewport which is safe to have interactible content. You should continue rendering into the rest of the render target, but it should not contain visually important or interactible content.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_GetRenderSafeArea@, defined at @SDL3\/SDL_render.h 1810:34@
-sDL_GetRenderSafeArea
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -- ^
-  --
-  --           [@rect@]: a pointer filled in with the area that is safe for interactive content.
-  -> IO BG.CBool
-sDL_GetRenderSafeArea = hs_bindgen_4eb48f61abc48f1f
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderClipRect@
-foreign import ccall safe "hs_bindgen_8baf3dc3de980190"
-  hs_bindgen_8baf3dc3de980190_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderClipRect@
-hs_bindgen_8baf3dc3de980190
-  :: BG.Ptr SDL_Renderer
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -> IO BG.CBool
-hs_bindgen_8baf3dc3de980190 =
-  BG.fromFFIType hs_bindgen_8baf3dc3de980190_base
-
--- | Set the clip rectangle for rendering on the specified target.
---
---     Each render target has its own clip rectangle. This function sets the cliprect for the current render target.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetRenderClipRect', 'sDL_RenderClipEnabled'
---
---     [C declaration]: @SDL_SetRenderClipRect@, defined at @SDL3\/SDL_render.h 1831:34@
-sDL_SetRenderClipRect
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -- ^
-  --
-  --           [@rect@]: an SDL_Rect structure representing the clip area, relative to the viewport, or NULL to disable clipping.
-  -> IO BG.CBool
-sDL_SetRenderClipRect = hs_bindgen_8baf3dc3de980190
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderClipRect@
-foreign import ccall safe "hs_bindgen_5b7acae61b400f09"
-  hs_bindgen_5b7acae61b400f09_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderClipRect@
-hs_bindgen_5b7acae61b400f09
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -> IO BG.CBool
-hs_bindgen_5b7acae61b400f09 =
-  BG.fromFFIType hs_bindgen_5b7acae61b400f09_base
-
--- | Get the clip rectangle for the current target.
---
---     Each render target has its own clip rectangle. This function gets the cliprect for the current render target.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderClipEnabled', 'sDL_SetRenderClipRect'
---
---     [C declaration]: @SDL_GetRenderClipRect@, defined at @SDL3\/SDL_render.h 1852:34@
-sDL_GetRenderClipRect
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -- ^
-  --
-  --           [@rect@]: an SDL_Rect structure filled in with the current clipping area or an empty rectangle if clipping is disabled.
-  -> IO BG.CBool
-sDL_GetRenderClipRect = hs_bindgen_5b7acae61b400f09
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderClipEnabled@
-foreign import ccall safe "hs_bindgen_151563301b587559"
-  hs_bindgen_151563301b587559_base
-    :: BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderClipEnabled@
-hs_bindgen_151563301b587559
-  :: BG.Ptr SDL_Renderer
-  -> IO BG.CBool
-hs_bindgen_151563301b587559 =
-  BG.fromFFIType hs_bindgen_151563301b587559_base
-
--- | Get whether clipping is enabled on the given render target.
---
---     Each render target has its own clip rectangle. This function checks the cliprect for the current render target.
---
---     [Returns]: true if clipping is enabled or false if not; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetRenderClipRect', 'sDL_SetRenderClipRect'
---
---     [C declaration]: @SDL_RenderClipEnabled@, defined at @SDL3\/SDL_render.h 1871:34@
-sDL_RenderClipEnabled
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> IO BG.CBool
-sDL_RenderClipEnabled = hs_bindgen_151563301b587559
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderScale@
-foreign import ccall safe "hs_bindgen_edd164833dbcbd86"
-  hs_bindgen_edd164833dbcbd86_base
-    :: BG.Ptr BG.Void
-    -> Float
-    -> Float
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderScale@
-hs_bindgen_edd164833dbcbd86
-  :: BG.Ptr SDL_Renderer
-  -> BG.CFloat
-  -> BG.CFloat
-  -> IO BG.CBool
-hs_bindgen_edd164833dbcbd86 =
-  BG.fromFFIType hs_bindgen_edd164833dbcbd86_base
-
--- | Set the drawing scale for rendering on the current target.
---
---     The drawing coordinates are scaled by the x\/y scaling factors before they are used by the renderer. This allows resolution independent drawing with a single coordinate system.
---
---     If this results in scaling or subpixel drawing by the rendering backend, it will be handled using the appropriate quality hints. For best results use integer scaling factors.
---
---     Each render target has its own scale. This function sets the scale for the current render target.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetRenderScale'
---
---     [C declaration]: @SDL_SetRenderScale@, defined at @SDL3\/SDL_render.h 1899:34@
-sDL_SetRenderScale
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@scaleX@]: the horizontal scaling factor.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@scaleY@]: the vertical scaling factor.
-  -> IO BG.CBool
-sDL_SetRenderScale = hs_bindgen_edd164833dbcbd86
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderScale@
-foreign import ccall safe "hs_bindgen_b47b8598441289bb"
-  hs_bindgen_b47b8598441289bb_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderScale@
-hs_bindgen_b47b8598441289bb
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr BG.CFloat
-  -> BG.Ptr BG.CFloat
-  -> IO BG.CBool
-hs_bindgen_b47b8598441289bb =
-  BG.fromFFIType hs_bindgen_b47b8598441289bb_base
-
--- | Get the drawing scale for the current target.
---
---     Each render target has its own scale. This function gets the scale for the current render target.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_SetRenderScale'
---
---     [C declaration]: @SDL_GetRenderScale@, defined at @SDL3\/SDL_render.h 1919:34@
-sDL_GetRenderScale
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@scaleX@]: a pointer filled in with the horizontal scaling factor.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@scaleY@]: a pointer filled in with the vertical scaling factor.
-  -> IO BG.CBool
-sDL_GetRenderScale = hs_bindgen_b47b8598441289bb
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderDrawColor@
-foreign import ccall safe "hs_bindgen_2a1d5a5e6763970a"
-  hs_bindgen_2a1d5a5e6763970a_base
-    :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> BG.Word8
-    -> BG.Word8
-    -> BG.Word8
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderDrawColor@
-hs_bindgen_2a1d5a5e6763970a
-  :: BG.Ptr SDL_Renderer
-  -> SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> IO BG.CBool
-hs_bindgen_2a1d5a5e6763970a =
-  BG.fromFFIType hs_bindgen_2a1d5a5e6763970a_base
-
--- | Set the color used for drawing operations.
---
---     Set the color for drawing or filling rectangles, lines, and points, and for @SDL_RenderClear()@.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetRenderDrawColor', 'sDL_SetRenderDrawColorFloat'
---
---     [C declaration]: @SDL_SetRenderDrawColor@, defined at @SDL3\/SDL_render.h 1944:34@
-sDL_SetRenderDrawColor
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@r@]: the red value used to draw on the rendering target.
-  -> SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@g@]: the green value used to draw on the rendering target.
-  -> SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@b@]: the blue value used to draw on the rendering target.
-  -> SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@a@]: the alpha value used to draw on the rendering target; usually @SDL_ALPHA_OPAQUE@ (255). Use SDL_SetRenderDrawBlendMode to specify how the alpha channel is used.
-  -> IO BG.CBool
-sDL_SetRenderDrawColor = hs_bindgen_2a1d5a5e6763970a
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderDrawColorFloat@
-foreign import ccall safe "hs_bindgen_deb567c32a3b304a"
-  hs_bindgen_deb567c32a3b304a_base
-    :: BG.Ptr BG.Void
-    -> Float
-    -> Float
-    -> Float
-    -> Float
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderDrawColorFloat@
-hs_bindgen_deb567c32a3b304a
-  :: BG.Ptr SDL_Renderer
-  -> BG.CFloat
-  -> BG.CFloat
-  -> BG.CFloat
-  -> BG.CFloat
-  -> IO BG.CBool
-hs_bindgen_deb567c32a3b304a =
-  BG.fromFFIType hs_bindgen_deb567c32a3b304a_base
-
--- | Set the color used for drawing operations (Rect, Line and Clear).
---
---     Set the color for drawing or filling rectangles, lines, and points, and for @SDL_RenderClear()@.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetRenderDrawColorFloat', 'sDL_SetRenderDrawColor'
---
---     [C declaration]: @SDL_SetRenderDrawColorFloat@, defined at @SDL3\/SDL_render.h 1969:34@
-sDL_SetRenderDrawColorFloat
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@r@]: the red value used to draw on the rendering target.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@g@]: the green value used to draw on the rendering target.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@b@]: the blue value used to draw on the rendering target.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@a@]: the alpha value used to draw on the rendering target. Use SDL_SetRenderDrawBlendMode to specify how the alpha channel is used.
-  -> IO BG.CBool
-sDL_SetRenderDrawColorFloat =
-  hs_bindgen_deb567c32a3b304a
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderDrawColor@
-foreign import ccall safe "hs_bindgen_4b8538e6f2e6330e"
-  hs_bindgen_4b8538e6f2e6330e_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderDrawColor@
-hs_bindgen_4b8538e6f2e6330e
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> IO BG.CBool
-hs_bindgen_4b8538e6f2e6330e =
-  BG.fromFFIType hs_bindgen_4b8538e6f2e6330e_base
-
--- | Get the color used for drawing operations (Rect, Line and Clear).
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetRenderDrawColorFloat', 'sDL_SetRenderDrawColor'
---
---     [C declaration]: @SDL_GetRenderDrawColor@, defined at @SDL3\/SDL_render.h 1993:34@
-sDL_GetRenderDrawColor
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@r@]: a pointer filled in with the red value used to draw on the rendering target.
-  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@g@]: a pointer filled in with the green value used to draw on the rendering target.
-  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@b@]: a pointer filled in with the blue value used to draw on the rendering target.
-  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@a@]: a pointer filled in with the alpha value used to draw on the rendering target; usually @SDL_ALPHA_OPAQUE@ (255).
-  -> IO BG.CBool
-sDL_GetRenderDrawColor = hs_bindgen_4b8538e6f2e6330e
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderDrawColorFloat@
-foreign import ccall safe "hs_bindgen_02be3e3dad551497"
-  hs_bindgen_02be3e3dad551497_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderDrawColorFloat@
-hs_bindgen_02be3e3dad551497
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr BG.CFloat
-  -> BG.Ptr BG.CFloat
-  -> BG.Ptr BG.CFloat
-  -> BG.Ptr BG.CFloat
-  -> IO BG.CBool
-hs_bindgen_02be3e3dad551497 =
-  BG.fromFFIType hs_bindgen_02be3e3dad551497_base
-
--- | Get the color used for drawing operations (Rect, Line and Clear).
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_SetRenderDrawColorFloat', 'sDL_GetRenderDrawColor'
---
---     [C declaration]: @SDL_GetRenderDrawColorFloat@, defined at @SDL3\/SDL_render.h 2017:34@
-sDL_GetRenderDrawColorFloat
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@r@]: a pointer filled in with the red value used to draw on the rendering target.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@g@]: a pointer filled in with the green value used to draw on the rendering target.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@b@]: a pointer filled in with the blue value used to draw on the rendering target.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@a@]: a pointer filled in with the alpha value used to draw on the rendering target.
-  -> IO BG.CBool
-sDL_GetRenderDrawColorFloat =
-  hs_bindgen_02be3e3dad551497
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderColorScale@
-foreign import ccall safe "hs_bindgen_4b5898833d8f7966"
-  hs_bindgen_4b5898833d8f7966_base
-    :: BG.Ptr BG.Void
-    -> Float
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderColorScale@
-hs_bindgen_4b5898833d8f7966
-  :: BG.Ptr SDL_Renderer
-  -> BG.CFloat
-  -> IO BG.CBool
-hs_bindgen_4b5898833d8f7966 =
-  BG.fromFFIType hs_bindgen_4b5898833d8f7966_base
-
--- | Set the color scale used for render operations.
---
---     The color scale is an additional scale multiplied into the pixel color value while rendering. This can be used to adjust the brightness of colors during HDR rendering, or changing HDR video brightness when playing on an SDR display.
---
---     The color scale does not affect the alpha channel, only the color brightness.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetRenderColorScale'
---
---     [C declaration]: @SDL_SetRenderColorScale@, defined at @SDL3\/SDL_render.h 2041:34@
-sDL_SetRenderColorScale
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@scale@]: the color scale value.
-  -> IO BG.CBool
-sDL_SetRenderColorScale = hs_bindgen_4b5898833d8f7966
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderColorScale@
-foreign import ccall safe "hs_bindgen_107aa0fcfa767aa5"
-  hs_bindgen_107aa0fcfa767aa5_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderColorScale@
-hs_bindgen_107aa0fcfa767aa5
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr BG.CFloat
-  -> IO BG.CBool
-hs_bindgen_107aa0fcfa767aa5 =
-  BG.fromFFIType hs_bindgen_107aa0fcfa767aa5_base
-
--- | Get the color scale used for render operations.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_SetRenderColorScale'
---
---     [C declaration]: @SDL_GetRenderColorScale@, defined at @SDL3\/SDL_render.h 2057:34@
-sDL_GetRenderColorScale
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@scale@]: a pointer filled in with the current color scale value.
-  -> IO BG.CBool
-sDL_GetRenderColorScale = hs_bindgen_107aa0fcfa767aa5
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderDrawBlendMode@
-foreign import ccall safe "hs_bindgen_b9c067d52917b47d"
-  hs_bindgen_b9c067d52917b47d_base
-    :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderDrawBlendMode@
-hs_bindgen_b9c067d52917b47d
-  :: BG.Ptr SDL_Renderer
-  -> SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
-  -> IO BG.CBool
-hs_bindgen_b9c067d52917b47d =
-  BG.fromFFIType hs_bindgen_b9c067d52917b47d_base
-
--- | Set the blend mode used for drawing operations.
---
---     This blend mode is used for any drawing that doesn\'t involve textures.
---
---     If the blend mode is not supported, the closest supported mode is chosen.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetRenderDrawBlendMode', 'sDL_SetTextureBlendMode'
---
---     [C declaration]: @SDL_SetRenderDrawBlendMode@, defined at @SDL3\/SDL_render.h 2078:34@
-sDL_SetRenderDrawBlendMode
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
-  -- ^
-  --
-  --           [@blendMode@]: the SDL_BlendMode to use for blending.
-  -> IO BG.CBool
-sDL_SetRenderDrawBlendMode =
-  hs_bindgen_b9c067d52917b47d
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderDrawBlendMode@
-foreign import ccall safe "hs_bindgen_167da6f1eb78062a"
-  hs_bindgen_167da6f1eb78062a_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderDrawBlendMode@
-hs_bindgen_167da6f1eb78062a
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
-  -> IO BG.CBool
-hs_bindgen_167da6f1eb78062a =
-  BG.fromFFIType hs_bindgen_167da6f1eb78062a_base
-
--- | Get the blend mode used for drawing operations.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_SetRenderDrawBlendMode'
---
---     [C declaration]: @SDL_GetRenderDrawBlendMode@, defined at @SDL3\/SDL_render.h 2094:34@
-sDL_GetRenderDrawBlendMode
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
-  -- ^
-  --
-  --           [@blendMode@]: a pointer filled in with the current SDL_BlendMode.
-  -> IO BG.CBool
-sDL_GetRenderDrawBlendMode =
-  hs_bindgen_167da6f1eb78062a
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderClear@
-foreign import ccall safe "hs_bindgen_cde099ce5b1cfc9d"
-  hs_bindgen_cde099ce5b1cfc9d_base
-    :: BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderClear@
-hs_bindgen_cde099ce5b1cfc9d
-  :: BG.Ptr SDL_Renderer
-  -> IO BG.CBool
-hs_bindgen_cde099ce5b1cfc9d =
-  BG.fromFFIType hs_bindgen_cde099ce5b1cfc9d_base
-
--- | Clear the current rendering target with the drawing color.
---
---     This function clears the entire rendering target, ignoring the viewport and the clip rectangle. Note, that clearing will also set\/fill all pixels of the rendering target to current renderer draw color, so make sure to invoke @SDL_SetRenderDrawColor()@ when needed.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_SetRenderDrawColor'
---
---     [C declaration]: @SDL_RenderClear@, defined at @SDL3\/SDL_render.h 2114:34@
-sDL_RenderClear
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> IO BG.CBool
-sDL_RenderClear = hs_bindgen_cde099ce5b1cfc9d
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderPoint@
-foreign import ccall safe "hs_bindgen_9685ef9bec873fd9"
-  hs_bindgen_9685ef9bec873fd9_base
-    :: BG.Ptr BG.Void
-    -> Float
-    -> Float
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderPoint@
-hs_bindgen_9685ef9bec873fd9
-  :: BG.Ptr SDL_Renderer
-  -> BG.CFloat
-  -> BG.CFloat
-  -> IO BG.CBool
-hs_bindgen_9685ef9bec873fd9 =
-  BG.fromFFIType hs_bindgen_9685ef9bec873fd9_base
-
--- | Draw a point on the current rendering target at subpixel precision.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderPoints'
---
---     [C declaration]: @SDL_RenderPoint@, defined at @SDL3\/SDL_render.h 2131:34@
-sDL_RenderPoint
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer which should draw a point.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@x@]: the x coordinate of the point.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@y@]: the y coordinate of the point.
-  -> IO BG.CBool
-sDL_RenderPoint = hs_bindgen_9685ef9bec873fd9
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderPoints@
-foreign import ccall safe "hs_bindgen_a2f27901d75ff412"
-  hs_bindgen_a2f27901d75ff412_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderPoints@
-hs_bindgen_a2f27901d75ff412
-  :: BG.Ptr SDL_Renderer
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
-  -> BG.CInt
-  -> IO BG.CBool
-hs_bindgen_a2f27901d75ff412 =
-  BG.fromFFIType hs_bindgen_a2f27901d75ff412_base
-
--- | Draw multiple points on the current rendering target at subpixel precision.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderPoint'
---
---     [C declaration]: @SDL_RenderPoints@, defined at @SDL3\/SDL_render.h 2148:34@
-sDL_RenderPoints
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer which should draw multiple points.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
-  -- ^
-  --
-  --           [@points@]: the points to draw.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@count@]: the number of points to draw.
-  -> IO BG.CBool
-sDL_RenderPoints = hs_bindgen_a2f27901d75ff412
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderLine@
-foreign import ccall safe "hs_bindgen_a22413e4506d153a"
-  hs_bindgen_a22413e4506d153a_base
-    :: BG.Ptr BG.Void
-    -> Float
-    -> Float
-    -> Float
-    -> Float
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderLine@
-hs_bindgen_a22413e4506d153a
-  :: BG.Ptr SDL_Renderer
-  -> BG.CFloat
-  -> BG.CFloat
-  -> BG.CFloat
-  -> BG.CFloat
-  -> IO BG.CBool
-hs_bindgen_a22413e4506d153a =
-  BG.fromFFIType hs_bindgen_a22413e4506d153a_base
-
--- | Draw a line on the current rendering target at subpixel precision.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderLines'
---
---     [C declaration]: @SDL_RenderLine@, defined at @SDL3\/SDL_render.h 2167:34@
-sDL_RenderLine
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer which should draw a line.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@x1@]: the x coordinate of the start point.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@y1@]: the y coordinate of the start point.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@x2@]: the x coordinate of the end point.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@y2@]: the y coordinate of the end point.
-  -> IO BG.CBool
-sDL_RenderLine = hs_bindgen_a22413e4506d153a
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderLines@
-foreign import ccall safe "hs_bindgen_139f9e9bbb114174"
-  hs_bindgen_139f9e9bbb114174_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderLines@
-hs_bindgen_139f9e9bbb114174
-  :: BG.Ptr SDL_Renderer
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
-  -> BG.CInt
-  -> IO BG.CBool
-hs_bindgen_139f9e9bbb114174 =
-  BG.fromFFIType hs_bindgen_139f9e9bbb114174_base
-
--- | Draw a series of connected lines on the current rendering target at subpixel precision.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderLine'
---
---     [C declaration]: @SDL_RenderLines@, defined at @SDL3\/SDL_render.h 2185:34@
-sDL_RenderLines
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer which should draw multiple lines.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
-  -- ^
-  --
-  --           [@points@]: the points along the lines.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@count@]: the number of points, drawing count-1 lines.
-  -> IO BG.CBool
-sDL_RenderLines = hs_bindgen_139f9e9bbb114174
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderRect@
-foreign import ccall safe "hs_bindgen_c336b07d3c7c70e0"
-  hs_bindgen_c336b07d3c7c70e0_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderRect@
-hs_bindgen_c336b07d3c7c70e0
-  :: BG.Ptr SDL_Renderer
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -> IO BG.CBool
-hs_bindgen_c336b07d3c7c70e0 =
-  BG.fromFFIType hs_bindgen_c336b07d3c7c70e0_base
-
--- | Draw a rectangle on the current rendering target at subpixel precision.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderRects'
---
---     [C declaration]: @SDL_RenderRect@, defined at @SDL3\/SDL_render.h 2202:34@
-sDL_RenderRect
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer which should draw a rectangle.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -- ^
-  --
-  --           [@rect@]: a pointer to the destination rectangle, or NULL to outline the entire rendering target.
-  -> IO BG.CBool
-sDL_RenderRect = hs_bindgen_c336b07d3c7c70e0
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderRects@
-foreign import ccall safe "hs_bindgen_4402e93d7e0ba929"
-  hs_bindgen_4402e93d7e0ba929_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderRects@
-hs_bindgen_4402e93d7e0ba929
-  :: BG.Ptr SDL_Renderer
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -> BG.CInt
-  -> IO BG.CBool
-hs_bindgen_4402e93d7e0ba929 =
-  BG.fromFFIType hs_bindgen_4402e93d7e0ba929_base
-
--- | Draw some number of rectangles on the current rendering target at subpixel precision.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderRect'
---
---     [C declaration]: @SDL_RenderRects@, defined at @SDL3\/SDL_render.h 2220:34@
-sDL_RenderRects
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer which should draw multiple rectangles.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -- ^
-  --
-  --           [@rects@]: a pointer to an array of destination rectangles.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@count@]: the number of rectangles.
-  -> IO BG.CBool
-sDL_RenderRects = hs_bindgen_4402e93d7e0ba929
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderFillRect@
-foreign import ccall safe "hs_bindgen_2904f549c42ca454"
-  hs_bindgen_2904f549c42ca454_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderFillRect@
-hs_bindgen_2904f549c42ca454
-  :: BG.Ptr SDL_Renderer
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -> IO BG.CBool
-hs_bindgen_2904f549c42ca454 =
-  BG.fromFFIType hs_bindgen_2904f549c42ca454_base
-
--- | Fill a rectangle on the current rendering target with the drawing color at subpixel precision.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderFillRects'
---
---     [C declaration]: @SDL_RenderFillRect@, defined at @SDL3\/SDL_render.h 2238:34@
-sDL_RenderFillRect
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer which should fill a rectangle.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -- ^
-  --
-  --           [@rect@]: a pointer to the destination rectangle, or NULL for the entire rendering target.
-  -> IO BG.CBool
-sDL_RenderFillRect = hs_bindgen_2904f549c42ca454
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderFillRects@
-foreign import ccall safe "hs_bindgen_8e1470eae177aaca"
-  hs_bindgen_8e1470eae177aaca_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderFillRects@
-hs_bindgen_8e1470eae177aaca
-  :: BG.Ptr SDL_Renderer
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -> BG.CInt
-  -> IO BG.CBool
-hs_bindgen_8e1470eae177aaca =
-  BG.fromFFIType hs_bindgen_8e1470eae177aaca_base
-
--- | Fill some number of rectangles on the current rendering target with the drawing color at subpixel precision.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderFillRect'
---
---     [C declaration]: @SDL_RenderFillRects@, defined at @SDL3\/SDL_render.h 2256:34@
-sDL_RenderFillRects
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer which should fill multiple rectangles.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -- ^
-  --
-  --           [@rects@]: a pointer to an array of destination rectangles.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@count@]: the number of rectangles.
-  -> IO BG.CBool
-sDL_RenderFillRects = hs_bindgen_8e1470eae177aaca
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderTexture@
-foreign import ccall safe "hs_bindgen_25ce1a6520376b45"
-  hs_bindgen_25ce1a6520376b45_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderTexture@
-hs_bindgen_25ce1a6520376b45
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL_Texture
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -> IO BG.CBool
-hs_bindgen_25ce1a6520376b45 =
-  BG.fromFFIType hs_bindgen_25ce1a6520376b45_base
-
--- | Copy a portion of the texture to the current rendering target at subpixel precision.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderTextureRotated', 'sDL_RenderTextureTiled'
---
---     [C declaration]: @SDL_RenderTexture@, defined at @SDL3\/SDL_render.h 2278:34@
-sDL_RenderTexture
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer which should copy parts of a texture.
-  -> BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the source texture.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -- ^
-  --
-  --           [@srcrect@]: a pointer to the source rectangle, or NULL for the entire texture.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -- ^
-  --
-  --           [@dstrect@]: a pointer to the destination rectangle, or NULL for the entire rendering target.
-  -> IO BG.CBool
-sDL_RenderTexture = hs_bindgen_25ce1a6520376b45
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderTextureRotated@
-foreign import ccall safe "hs_bindgen_7784d7195eaae275"
-  hs_bindgen_7784d7195eaae275_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> Double
-    -> BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderTextureRotated@
-hs_bindgen_7784d7195eaae275
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL_Texture
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -> BG.CDouble
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
-  -> SDL3.Sys.Bindgen.Surface.SDL_FlipMode
-  -> IO BG.CBool
-hs_bindgen_7784d7195eaae275 =
-  BG.fromFFIType hs_bindgen_7784d7195eaae275_base
-
--- | Copy a portion of the source texture to the current rendering target, with rotation and flipping, at subpixel precision.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderTexture'
---
---     [C declaration]: @SDL_RenderTextureRotated@, defined at @SDL3\/SDL_render.h 2306:34@
-sDL_RenderTextureRotated
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer which should copy parts of a texture.
-  -> BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the source texture.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -- ^
-  --
-  --           [@srcrect@]: a pointer to the source rectangle, or NULL for the entire texture.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -- ^
-  --
-  --           [@dstrect@]: a pointer to the destination rectangle, or NULL for the entire rendering target.
-  -> BG.CDouble
-  -- ^
-  --
-  --           [@angle@]: an angle in degrees that indicates the rotation that will be applied to dstrect, rotating it in a clockwise direction.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
-  -- ^
-  --
-  --           [@center@]: a pointer to a point indicating the point around which dstrect will be rotated (if NULL, rotation will be done around dstrect.w\/2, dstrect.h\/2).
-  -> SDL3.Sys.Bindgen.Surface.SDL_FlipMode
-  -- ^
-  --
-  --           [@flip@]: an SDL_FlipMode value stating which flipping actions should be performed on the texture.
-  -> IO BG.CBool
-sDL_RenderTextureRotated =
-  hs_bindgen_7784d7195eaae275
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderTextureAffine@
-foreign import ccall safe "hs_bindgen_add42f94463f73c6"
-  hs_bindgen_add42f94463f73c6_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderTextureAffine@
-hs_bindgen_add42f94463f73c6
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL_Texture
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
-  -> IO BG.CBool
-hs_bindgen_add42f94463f73c6 =
-  BG.fromFFIType hs_bindgen_add42f94463f73c6_base
-
--- | Copy a portion of the source texture to the current rendering target, with affine transform, at subpixel precision.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: You may only call this function from the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderTexture'
---
---     [C declaration]: @SDL_RenderTextureAffine@, defined at @SDL3\/SDL_render.h 2337:34@
-sDL_RenderTextureAffine
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer which should copy parts of a texture.
-  -> BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the source texture.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -- ^
-  --
-  --           [@srcrect@]: a pointer to the source rectangle, or NULL for the entire texture.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
-  -- ^
-  --
-  --           [@origin@]: a pointer to a point indicating where the top-left corner of srcrect should be mapped to, or NULL for the rendering target\'s origin.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
-  -- ^
-  --
-  --           [@right@]: a pointer to a point indicating where the top-right corner of srcrect should be mapped to, or NULL for the rendering target\'s top-right corner.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
-  -- ^
-  --
-  --           [@down@]: a pointer to a point indicating where the bottom-left corner of srcrect should be mapped to, or NULL for the rendering target\'s bottom-left corner.
-  -> IO BG.CBool
-sDL_RenderTextureAffine = hs_bindgen_add42f94463f73c6
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderTextureTiled@
-foreign import ccall safe "hs_bindgen_74aa5a13c76159fa"
-  hs_bindgen_74aa5a13c76159fa_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> Float
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderTextureTiled@
-hs_bindgen_74aa5a13c76159fa
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL_Texture
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -> BG.CFloat
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -> IO BG.CBool
-hs_bindgen_74aa5a13c76159fa =
-  BG.fromFFIType hs_bindgen_74aa5a13c76159fa_base
-
--- | Tile a portion of the texture to the current rendering target at subpixel precision.
---
---     The pixels in @srcrect@ will be repeated as many times as needed to completely fill @dstrect@.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderTexture'
---
---     [C declaration]: @SDL_RenderTextureTiled@, defined at @SDL3\/SDL_render.h 2366:34@
-sDL_RenderTextureTiled
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer which should copy parts of a texture.
-  -> BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the source texture.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -- ^
-  --
-  --           [@srcrect@]: a pointer to the source rectangle, or NULL for the entire texture.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@scale@]: the scale used to transform srcrect into the destination rectangle, e.g. a 32x32 texture with a scale of 2 would fill 64x64 tiles.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -- ^
-  --
-  --           [@dstrect@]: a pointer to the destination rectangle, or NULL for the entire rendering target.
-  -> IO BG.CBool
-sDL_RenderTextureTiled = hs_bindgen_74aa5a13c76159fa
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderTexture9Grid@
-foreign import ccall safe "hs_bindgen_6b75253c3413f458"
-  hs_bindgen_6b75253c3413f458_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> Float
-    -> Float
-    -> Float
-    -> Float
-    -> Float
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderTexture9Grid@
-hs_bindgen_6b75253c3413f458
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL_Texture
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -> BG.CFloat
-  -> BG.CFloat
-  -> BG.CFloat
-  -> BG.CFloat
-  -> BG.CFloat
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -> IO BG.CBool
-hs_bindgen_6b75253c3413f458 =
-  BG.fromFFIType hs_bindgen_6b75253c3413f458_base
-
--- | Perform a scaled copy using the 9-grid algorithm to the current rendering target at subpixel precision.
---
---     The pixels in the texture are split into a 3x3 grid, using the different corner sizes for each corner, and the sides and center making up the remaining pixels. The corners are then scaled using @scale@ and fit into the corners of the destination rectangle. The sides and center are then stretched into place to cover the remaining destination rectangle.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderTexture', 'sDL_RenderTexture9GridTiled'
---
---     [C declaration]: @SDL_RenderTexture9Grid@, defined at @SDL3\/SDL_render.h 2401:34@
-sDL_RenderTexture9Grid
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer which should copy parts of a texture.
-  -> BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the source texture.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -- ^
-  --
-  --           [@srcrect@]: the SDL_Rect structure representing the rectangle to be used for the 9-grid, or NULL to use the entire texture.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@left_width@]: the width, in pixels, of the left corners in @srcrect@.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@right_width@]: the width, in pixels, of the right corners in @srcrect@.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@top_height@]: the height, in pixels, of the top corners in @srcrect@.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@bottom_height@]: the height, in pixels, of the bottom corners in @srcrect@.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@scale@]: the scale used to transform the corner of @srcrect@ into the corner of @dstrect@, or 0.0f for an unscaled copy.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -- ^
-  --
-  --           [@dstrect@]: a pointer to the destination rectangle, or NULL for the entire rendering target.
-  -> IO BG.CBool
-sDL_RenderTexture9Grid = hs_bindgen_6b75253c3413f458
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderTexture9GridTiled@
-foreign import ccall safe "hs_bindgen_2d9cf263c1277f5b"
-  hs_bindgen_2d9cf263c1277f5b_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> Float
-    -> Float
-    -> Float
-    -> Float
-    -> Float
-    -> BG.Ptr BG.Void
-    -> Float
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderTexture9GridTiled@
-hs_bindgen_2d9cf263c1277f5b
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL_Texture
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -> BG.CFloat
-  -> BG.CFloat
-  -> BG.CFloat
-  -> BG.CFloat
-  -> BG.CFloat
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -> BG.CFloat
-  -> IO BG.CBool
-hs_bindgen_2d9cf263c1277f5b =
-  BG.fromFFIType hs_bindgen_2d9cf263c1277f5b_base
-
--- | Perform a scaled copy using the 9-grid algorithm to the current rendering target at subpixel precision.
---
---     The pixels in the texture are split into a 3x3 grid, using the different corner sizes for each corner, and the sides and center making up the remaining pixels. The corners are then scaled using @scale@ and fit into the corners of the destination rectangle. The sides and center are then tiled into place to cover the remaining destination rectangle.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.4.0
---
---     [See also]: 'sDL_RenderTexture', 'sDL_RenderTexture9Grid'
---
---     [C declaration]: @SDL_RenderTexture9GridTiled@, defined at @SDL3\/SDL_render.h 2439:34@
-sDL_RenderTexture9GridTiled
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer which should copy parts of a texture.
-  -> BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the source texture.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -- ^
-  --
-  --           [@srcrect@]: the SDL_Rect structure representing the rectangle to be used for the 9-grid, or NULL to use the entire texture.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@left_width@]: the width, in pixels, of the left corners in @srcrect@.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@right_width@]: the width, in pixels, of the right corners in @srcrect@.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@top_height@]: the height, in pixels, of the top corners in @srcrect@.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@bottom_height@]: the height, in pixels, of the bottom corners in @srcrect@.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@scale@]: the scale used to transform the corner of @srcrect@ into the corner of @dstrect@, or 0.0f for an unscaled copy.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -- ^
-  --
-  --           [@dstrect@]: a pointer to the destination rectangle, or NULL for the entire rendering target.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@tileScale@]: the scale used to transform the borders and center of @srcrect@ into the borders and middle of @dstrect@, or 1.0f for an unscaled copy.
-  -> IO BG.CBool
-sDL_RenderTexture9GridTiled =
-  hs_bindgen_2d9cf263c1277f5b
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderGeometry@
-foreign import ccall safe "hs_bindgen_778c782602e7d6de"
-  hs_bindgen_778c782602e7d6de_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderGeometry@
-hs_bindgen_778c782602e7d6de
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL_Texture
-  -> PtrConst.PtrConst SDL_Vertex
-  -> BG.CInt
-  -> PtrConst.PtrConst BG.CInt
-  -> BG.CInt
-  -> IO BG.CBool
-hs_bindgen_778c782602e7d6de =
-  BG.fromFFIType hs_bindgen_778c782602e7d6de_base
-
--- | Render a list of triangles, optionally using a texture and indices into the vertex array Color and alpha modulation is done per vertex (SDL_SetTextureColorMod and SDL_SetTextureAlphaMod are ignored).
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderGeometryRaw', 'sDL_SetRenderTextureAddressMode'
---
---     [C declaration]: @SDL_RenderGeometry@, defined at @SDL3\/SDL_render.h 2464:34@
-sDL_RenderGeometry
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: (optional) The SDL texture to use.
-  -> PtrConst.PtrConst SDL_Vertex
-  -- ^
-  --
-  --           [@vertices@]: vertices.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@num_vertices@]: number of vertices.
-  -> PtrConst.PtrConst BG.CInt
-  -- ^
-  --
-  --           [@indices@]: (optional) An array of integer indices into the \'vertices\' array, if NULL all vertices will be rendered in sequential order.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@num_indices@]: number of indices.
-  -> IO BG.CBool
-sDL_RenderGeometry = hs_bindgen_778c782602e7d6de
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderGeometryRaw@
-foreign import ccall safe "hs_bindgen_32080687747fa83c"
-  hs_bindgen_32080687747fa83c_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderGeometryRaw@
-hs_bindgen_32080687747fa83c
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL_Texture
-  -> PtrConst.PtrConst BG.CFloat
-  -> BG.CInt
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Pixels.SDL_FColor
-  -> BG.CInt
-  -> PtrConst.PtrConst BG.CFloat
-  -> BG.CInt
-  -> BG.CInt
-  -> PtrConst.PtrConst BG.Void
-  -> BG.CInt
-  -> BG.CInt
-  -> IO BG.CBool
-hs_bindgen_32080687747fa83c =
-  BG.fromFFIType hs_bindgen_32080687747fa83c_base
-
--- | Render a list of triangles, optionally using a texture and indices into the vertex arrays Color and alpha modulation is done per vertex (SDL_SetTextureColorMod and SDL_SetTextureAlphaMod are ignored).
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderGeometry', 'sDL_SetRenderTextureAddressMode'
---
---     [C declaration]: @SDL_RenderGeometryRaw@, defined at @SDL3\/SDL_render.h 2497:34@
-sDL_RenderGeometryRaw
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: (optional) The SDL texture to use.
-  -> PtrConst.PtrConst BG.CFloat
-  -- ^
-  --
-  --           [@xy@]: vertex positions.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@xy_stride@]: byte size to move from one element to the next element.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Pixels.SDL_FColor
-  -- ^
-  --
-  --           [@color@]: vertex colors (as SDL_FColor).
-  -> BG.CInt
-  -- ^
-  --
-  --           [@color_stride@]: byte size to move from one element to the next element.
-  -> PtrConst.PtrConst BG.CFloat
-  -- ^
-  --
-  --           [@uv@]: vertex normalized texture coordinates.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@uv_stride@]: byte size to move from one element to the next element.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@num_vertices@]: number of vertices.
-  -> PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@indices@]: (optional) An array of indices into the \'vertices\' arrays, if NULL all vertices will be rendered in sequential order.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@num_indices@]: number of indices.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@size_indices@]: index size: 1 (byte), 2 (short), 4 (int).
-  -> IO BG.CBool
-sDL_RenderGeometryRaw = hs_bindgen_32080687747fa83c
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderTextureAddressMode@
-foreign import ccall safe "hs_bindgen_56e605702d9776b5"
-  hs_bindgen_56e605702d9776b5_base
-    :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderTextureAddressMode@
-hs_bindgen_56e605702d9776b5
-  :: BG.Ptr SDL_Renderer
-  -> SDL_TextureAddressMode
-  -> SDL_TextureAddressMode
-  -> IO BG.CBool
-hs_bindgen_56e605702d9776b5 =
-  BG.fromFFIType hs_bindgen_56e605702d9776b5_base
-
--- | Set the texture addressing mode used in @SDL_RenderGeometry()@.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.4.0
---
---     [See also]: 'sDL_RenderGeometry', 'sDL_RenderGeometryRaw', 'sDL_GetRenderTextureAddressMode'
---
---     [C declaration]: @SDL_SetRenderTextureAddressMode@, defined at @SDL3\/SDL_render.h 2524:34@
-sDL_SetRenderTextureAddressMode
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> SDL_TextureAddressMode
-  -- ^
-  --
-  --           [@u_mode@]: the 'SDL_TextureAddressMode' to use for horizontal texture coordinates in @SDL_RenderGeometry()@.
-  -> SDL_TextureAddressMode
-  -- ^
-  --
-  --           [@v_mode@]: the 'SDL_TextureAddressMode' to use for vertical texture coordinates in @SDL_RenderGeometry()@.
-  -> IO BG.CBool
-sDL_SetRenderTextureAddressMode =
-  hs_bindgen_56e605702d9776b5
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderTextureAddressMode@
-foreign import ccall safe "hs_bindgen_b63dbaffb6d53264"
-  hs_bindgen_b63dbaffb6d53264_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderTextureAddressMode@
-hs_bindgen_b63dbaffb6d53264
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL_TextureAddressMode
-  -> BG.Ptr SDL_TextureAddressMode
-  -> IO BG.CBool
-hs_bindgen_b63dbaffb6d53264 =
-  BG.fromFFIType hs_bindgen_b63dbaffb6d53264_base
-
--- | Get the texture addressing mode used in @SDL_RenderGeometry()@.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.4.0
---
---     [See also]: 'sDL_SetRenderTextureAddressMode'
---
---     [C declaration]: @SDL_GetRenderTextureAddressMode@, defined at @SDL3\/SDL_render.h 2545:34@
-sDL_GetRenderTextureAddressMode
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr SDL_TextureAddressMode
-  -- ^
-  --
-  --           [@u_mode@]: a pointer filled in with the 'SDL_TextureAddressMode' to use for horizontal texture coordinates in @SDL_RenderGeometry()@, may be NULL.
-  -> BG.Ptr SDL_TextureAddressMode
-  -- ^
-  --
-  --           [@v_mode@]: a pointer filled in with the 'SDL_TextureAddressMode' to use for vertical texture coordinates in @SDL_RenderGeometry()@, may be NULL.
-  -> IO BG.CBool
-sDL_GetRenderTextureAddressMode =
-  hs_bindgen_b63dbaffb6d53264
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderReadPixels@
-foreign import ccall safe "hs_bindgen_8e39bba88c8b590b"
-  hs_bindgen_8e39bba88c8b590b_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderReadPixels@
-hs_bindgen_8e39bba88c8b590b
-  :: BG.Ptr SDL_Renderer
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -> IO (BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface)
-hs_bindgen_8e39bba88c8b590b =
-  BG.fromFFIType hs_bindgen_8e39bba88c8b590b_base
-
--- | Read pixels from the current rendering target.
---
---     The returned surface contains pixels inside the desired area clipped to the current viewport, and should be freed with SDL_DestroySurface().
---
---     Note that this returns the actual pixels on the screen, so if you are using logical presentation you should use @SDL_GetRenderLogicalPresentationRect()@ to get the area containing your content.
---
---     __WARNING__: This is a very slow operation, and should not be used frequently. If you\'re using this on the main rendering target, it should be called after rendering and before @SDL_RenderPresent()@.
---
---     [Returns]: a new SDL_Surface on success or NULL on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_RenderReadPixels@, defined at @SDL3\/SDL_render.h 2572:43@
-sDL_RenderReadPixels
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -- ^
-  --
-  --           [@rect@]: an SDL_Rect structure representing the area to read, which will be clipped to the current viewport, or NULL for the entire viewport.
-  -> IO (BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface)
-sDL_RenderReadPixels = hs_bindgen_8e39bba88c8b590b
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderPresent@
-foreign import ccall safe "hs_bindgen_7c3d5531ae54aea4"
-  hs_bindgen_7c3d5531ae54aea4_base
-    :: BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderPresent@
-hs_bindgen_7c3d5531ae54aea4
-  :: BG.Ptr SDL_Renderer
-  -> IO BG.CBool
-hs_bindgen_7c3d5531ae54aea4 =
-  BG.fromFFIType hs_bindgen_7c3d5531ae54aea4_base
-
--- | Update the screen with any rendering performed since the previous call.
---
---     SDL\'s rendering functions operate on a backbuffer; that is, calling a rendering function such as @SDL_RenderLine()@ does not directly put a line on the screen, but rather updates the backbuffer. As such, you compose your entire scene and /present/ the composed backbuffer to the screen as a complete picture.
---
---     Therefore, when using SDL\'s rendering API, one does all drawing intended for the frame, and then calls this function once per frame to present the final drawing to the user.
---
---     The backbuffer should be considered invalidated after each present; do not assume that previous contents will exist between frames. You are strongly encouraged to call @SDL_RenderClear()@ to initialize the backbuffer before starting each new frame\'s drawing, even if you plan to overwrite every pixel.
---
---     Please note, that in case of rendering to a texture - there is __no need__ to call @'sDL_RenderPresent'@ after drawing needed objects to a texture, and should not be done; you are only required to change back the rendering target to default via @SDL_SetRenderTarget(renderer, NULL)@ afterwards, as textures by themselves do not have a concept of backbuffers. Calling SDL_RenderPresent while rendering to a texture will fail.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_CreateRenderer', 'sDL_RenderClear', 'sDL_RenderFillRect', 'sDL_RenderFillRects', 'sDL_RenderLine', 'sDL_RenderLines', 'sDL_RenderPoint', 'sDL_RenderPoints', 'sDL_RenderRect', 'sDL_RenderRects', 'sDL_SetRenderDrawBlendMode', 'sDL_SetRenderDrawColor'
---
---     [C declaration]: @SDL_RenderPresent@, defined at @SDL3\/SDL_render.h 2621:34@
-sDL_RenderPresent
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> IO BG.CBool
-sDL_RenderPresent = hs_bindgen_7c3d5531ae54aea4
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_DestroyTexture@
-foreign import ccall safe "hs_bindgen_8bed4d77b35c687f"
-  hs_bindgen_8bed4d77b35c687f_base
-    :: BG.Ptr BG.Void
-    -> IO ()
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_DestroyTexture@
-hs_bindgen_8bed4d77b35c687f
-  :: BG.Ptr SDL_Texture
-  -> IO ()
-hs_bindgen_8bed4d77b35c687f =
-  BG.fromFFIType hs_bindgen_8bed4d77b35c687f_base
-
--- | Destroy the specified texture.
---
---     Passing NULL or an otherwise invalid texture will set the SDL error message to \"Invalid texture\".
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_CreateTexture', 'sDL_CreateTextureFromSurface'
---
---     [C declaration]: @SDL_DestroyTexture@, defined at @SDL3\/SDL_render.h 2638:34@
-sDL_DestroyTexture
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to destroy.
-  -> IO ()
-sDL_DestroyTexture = hs_bindgen_8bed4d77b35c687f
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_DestroyRenderer@
-foreign import ccall safe "hs_bindgen_1d20db71cb8b3442"
-  hs_bindgen_1d20db71cb8b3442_base
-    :: BG.Ptr BG.Void
-    -> IO ()
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_DestroyRenderer@
-hs_bindgen_1d20db71cb8b3442
-  :: BG.Ptr SDL_Renderer
-  -> IO ()
-hs_bindgen_1d20db71cb8b3442 =
-  BG.fromFFIType hs_bindgen_1d20db71cb8b3442_base
-
--- | Destroy the rendering context for a window and free all associated textures.
---
---     This should be called before destroying the associated window.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_CreateRenderer'
---
---     [C declaration]: @SDL_DestroyRenderer@, defined at @SDL3\/SDL_render.h 2654:34@
-sDL_DestroyRenderer
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> IO ()
-sDL_DestroyRenderer = hs_bindgen_1d20db71cb8b3442
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_FlushRenderer@
-foreign import ccall safe "hs_bindgen_541ef4edd41b43f3"
-  hs_bindgen_541ef4edd41b43f3_base
-    :: BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_FlushRenderer@
-hs_bindgen_541ef4edd41b43f3
-  :: BG.Ptr SDL_Renderer
-  -> IO BG.CBool
-hs_bindgen_541ef4edd41b43f3 =
-  BG.fromFFIType hs_bindgen_541ef4edd41b43f3_base
-
--- | Force the rendering context to flush any pending commands and state.
---
---     You do not need to (and in fact, shouldn\'t) call this function unless you are planning to call into OpenGL\/Direct3D\/Metal\/whatever directly, in addition to using an 'SDL_Renderer'.
---
---     This is for a very-specific case: if you are using SDL\'s render API, and you plan to make OpenGL\/D3D\/whatever calls in addition to SDL render API calls. If this applies, you should call this function between calls to SDL\'s render API and the low-level API you\'re using in cooperation.
---
---     In all other cases, you can ignore this function.
---
---     This call makes SDL flush any pending rendering work it was queueing up to do later in a single batch, and marks any internal cached state as invalid, so it\'ll prepare all its state again later, from scratch.
---
---     This means you do not need to save state in your rendering code to protect the SDL renderer. However, there lots of arbitrary pieces of Direct3D and OpenGL state that can confuse things; you should use your best judgment and be prepared to make changes if specific state needs to be protected.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_FlushRenderer@, defined at @SDL3\/SDL_render.h 2687:34@
-sDL_FlushRenderer
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> IO BG.CBool
-sDL_FlushRenderer = hs_bindgen_541ef4edd41b43f3
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderMetalLayer@
-foreign import ccall safe "hs_bindgen_b665c5f20441fcd2"
-  hs_bindgen_b665c5f20441fcd2_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderMetalLayer@
-hs_bindgen_b665c5f20441fcd2
-  :: BG.Ptr SDL_Renderer
-  -> IO (BG.Ptr BG.Void)
-hs_bindgen_b665c5f20441fcd2 =
-  BG.fromFFIType hs_bindgen_b665c5f20441fcd2_base
-
--- | Get the CAMetalLayer associated with the given Metal renderer.
---
---     This function returns @void *@, so SDL doesn\'t have to include Metal\'s headers, but it can be safely cast to a @CAMetalLayer *@.
---
---     [Returns]: a @CAMetalLayer *@ on success, or NULL if the renderer isn\'t a Metal renderer.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetRenderMetalCommandEncoder'
---
---     [C declaration]: @SDL_GetRenderMetalLayer@, defined at @SDL3\/SDL_render.h 2705:36@
-sDL_GetRenderMetalLayer
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer to query.
-  -> IO (BG.Ptr BG.Void)
-sDL_GetRenderMetalLayer = hs_bindgen_b665c5f20441fcd2
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderMetalCommandEncoder@
-foreign import ccall safe "hs_bindgen_4cc0199f9267bab8"
-  hs_bindgen_4cc0199f9267bab8_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderMetalCommandEncoder@
-hs_bindgen_4cc0199f9267bab8
-  :: BG.Ptr SDL_Renderer
-  -> IO (BG.Ptr BG.Void)
-hs_bindgen_4cc0199f9267bab8 =
-  BG.fromFFIType hs_bindgen_4cc0199f9267bab8_base
-
--- | Get the Metal command encoder for the current frame.
---
---     This function returns @void *@, so SDL doesn\'t have to include Metal\'s headers, but it can be safely cast to an @id\<MTLRenderCommandEncoder>@.
---
---     This will return NULL if Metal refuses to give SDL a drawable to render to, which might happen if the window is hidden\/minimized\/offscreen. This doesn\'t apply to command encoders for render targets, just the window\'s backbuffer. Check your return values!
---
---     [Returns]: an @id\<MTLRenderCommandEncoder>@ on success, or NULL if the renderer isn\'t a Metal renderer or there was an error.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetRenderMetalLayer'
---
---     [C declaration]: @SDL_GetRenderMetalCommandEncoder@, defined at @SDL3\/SDL_render.h 2728:36@
-sDL_GetRenderMetalCommandEncoder
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer to query.
-  -> IO (BG.Ptr BG.Void)
-sDL_GetRenderMetalCommandEncoder =
-  hs_bindgen_4cc0199f9267bab8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_AddVulkanRenderSemaphores@
-foreign import ccall safe "hs_bindgen_91025902db96959c"
-  hs_bindgen_91025902db96959c_base
-    :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Int64
-    -> BG.Int64
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_AddVulkanRenderSemaphores@
-hs_bindgen_91025902db96959c
-  :: BG.Ptr SDL_Renderer
-  -> SDL3.Sys.Bindgen.Stdinc.Uint32
-  -> SDL3.Sys.Bindgen.Stdinc.Sint64
-  -> SDL3.Sys.Bindgen.Stdinc.Sint64
-  -> IO BG.CBool
-hs_bindgen_91025902db96959c =
-  BG.fromFFIType hs_bindgen_91025902db96959c_base
-
--- | Add a set of synchronization semaphores for the current frame.
---
---     The Vulkan renderer will wait for @wait_semaphore@ before submitting rendering commands and signal @signal_semaphore@ after rendering commands are complete for this frame.
---
---     This should be called each frame that you want semaphore synchronization. The Vulkan renderer may have multiple frames in flight on the GPU, so you should have multiple semaphores that are used for synchronization. Querying SDL_PROP_RENDERER_VULKAN_SWAPCHAIN_IMAGE_COUNT_NUMBER will give you the maximum number of semaphores you\'ll need.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: It is __NOT__ safe to call this function from two threads at once.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_AddVulkanRenderSemaphores@, defined at @SDL3\/SDL_render.h 2759:34@
-sDL_AddVulkanRenderSemaphores
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^
-  --
-  --           [@wait_stage_mask@]: the VkPipelineStageFlags for the wait.
-  -> SDL3.Sys.Bindgen.Stdinc.Sint64
-  -- ^
-  --
-  --           [@wait_semaphore@]: a VkSempahore to wait on before rendering the current frame, or 0 if not needed.
-  -> SDL3.Sys.Bindgen.Stdinc.Sint64
-  -- ^
-  --
-  --           [@signal_semaphore@]: a VkSempahore that SDL will signal when rendering for the current frame is complete, or 0 if not needed.
-  -> IO BG.CBool
-sDL_AddVulkanRenderSemaphores =
-  hs_bindgen_91025902db96959c
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderVSync@
-foreign import ccall safe "hs_bindgen_6f4a42b49f0de954"
-  hs_bindgen_6f4a42b49f0de954_base
-    :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderVSync@
-hs_bindgen_6f4a42b49f0de954
-  :: BG.Ptr SDL_Renderer
-  -> BG.CInt
-  -> IO BG.CBool
-hs_bindgen_6f4a42b49f0de954 =
-  BG.fromFFIType hs_bindgen_6f4a42b49f0de954_base
-
--- | Toggle VSync of the given renderer.
---
---     When a renderer is created, vsync defaults to SDL_RENDERER_VSYNC_DISABLED.
---
---     The @vsync@ parameter can be 1 to synchronize present with every vertical refresh, 2 to synchronize present with every second vertical refresh, etc., SDL_RENDERER_VSYNC_ADAPTIVE for late swap tearing (adaptive vsync), or SDL_RENDERER_VSYNC_DISABLED to disable. Not every value is supported by every driver, so you should check the return value to see whether the requested setting is supported.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetRenderVSync'
---
---     [C declaration]: @SDL_SetRenderVSync@, defined at @SDL3\/SDL_render.h 2784:34@
-sDL_SetRenderVSync
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer to toggle.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@vsync@]: the vertical refresh sync interval.
-  -> IO BG.CBool
-sDL_SetRenderVSync = hs_bindgen_6f4a42b49f0de954
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderVSync@
-foreign import ccall safe "hs_bindgen_eb1ce0cdf3d11c86"
-  hs_bindgen_eb1ce0cdf3d11c86_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderVSync@
-hs_bindgen_eb1ce0cdf3d11c86
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr BG.CInt
-  -> IO BG.CBool
-hs_bindgen_eb1ce0cdf3d11c86 =
-  BG.fromFFIType hs_bindgen_eb1ce0cdf3d11c86_base
-
--- | Get VSync of the given renderer.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_SetRenderVSync'
---
---     [C declaration]: @SDL_GetRenderVSync@, defined at @SDL3\/SDL_render.h 2804:34@
-sDL_GetRenderVSync
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer to toggle.
-  -> BG.Ptr BG.CInt
-  -- ^
-  --
-  --           [@vsync@]: an int filled with the current vertical refresh sync interval. See @SDL_SetRenderVSync()@ for the meaning of the value.
-  -> IO BG.CBool
-sDL_GetRenderVSync = hs_bindgen_eb1ce0cdf3d11c86
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderDebugText@
-foreign import ccall safe "hs_bindgen_54ec6a89b17b55b6"
-  hs_bindgen_54ec6a89b17b55b6_base
-    :: BG.Ptr BG.Void
-    -> Float
-    -> Float
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderDebugText@
-hs_bindgen_54ec6a89b17b55b6
-  :: BG.Ptr SDL_Renderer
-  -> BG.CFloat
-  -> BG.CFloat
-  -> PtrConst.PtrConst BG.CChar
-  -> IO BG.CBool
-hs_bindgen_54ec6a89b17b55b6 =
-  BG.fromFFIType hs_bindgen_54ec6a89b17b55b6_base
-
--- | Draw debug text to an 'SDL_Renderer'.
---
---     This function will render a string of text to an 'SDL_Renderer'. Note that this is a convenience function for debugging, with severe limitations, and not intended to be used for production apps and games.
---
---     Among these limitations:
---
---     * It accepts UTF-8 strings, but will only renders ASCII characters.
---
---     * It has a single, tiny size (8x8 pixels). You can use logical presentation or @SDL_SetRenderScale()@ to adjust it.
---
---     * It uses a simple, hardcoded bitmap font. It does not allow different font selections and it does not support truetype, for proper scaling.
---
---     * It does no word-wrapping and does not treat newline characters as a line break. If the text goes out of the window, it\'s gone.
---
---     For serious text rendering, there are several good options, such as SDL_ttf, stb_truetype, or other external libraries.
---
---     On first use, this will create an internal texture for rendering glyphs. This texture will live until the renderer is destroyed.
---
---     The text is drawn in the color specified by @SDL_SetRenderDrawColor()@.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: @SDL_RenderDebugTextFormat@, 'sDL_DEBUG_TEXT_FONT_CHARACTER_SIZE'
---
---     [C declaration]: @SDL_RenderDebugText@, defined at @SDL3\/SDL_render.h 2856:34@
-sDL_RenderDebugText
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer which should draw a line of text.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@x@]: the x coordinate where the top-left corner of the text will draw.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@y@]: the y coordinate where the top-left corner of the text will draw.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: the string to render.
-  -> IO BG.CBool
-sDL_RenderDebugText = hs_bindgen_54ec6a89b17b55b6
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetDefaultTextureScaleMode@
-foreign import ccall safe "hs_bindgen_3e694d41804c455e"
-  hs_bindgen_3e694d41804c455e_base
-    :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetDefaultTextureScaleMode@
-hs_bindgen_3e694d41804c455e
-  :: BG.Ptr SDL_Renderer
-  -> SDL3.Sys.Bindgen.Surface.SDL_ScaleMode
-  -> IO BG.CBool
-hs_bindgen_3e694d41804c455e =
-  BG.fromFFIType hs_bindgen_3e694d41804c455e_base
-
--- | Set default scale mode for new textures for given renderer.
---
---     When a renderer is created, scale_mode defaults to SDL_SCALEMODE_LINEAR.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.4.0
---
---     [See also]: 'sDL_GetDefaultTextureScaleMode'
---
---     [C declaration]: @SDL_SetDefaultTextureScaleMode@, defined at @SDL3\/SDL_render.h 2902:34@
-sDL_SetDefaultTextureScaleMode
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer to update.
-  -> SDL3.Sys.Bindgen.Surface.SDL_ScaleMode
-  -- ^
-  --
-  --           [@scale_mode@]: the scale mode to change to for new textures.
-  -> IO BG.CBool
-sDL_SetDefaultTextureScaleMode =
-  hs_bindgen_3e694d41804c455e
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetDefaultTextureScaleMode@
-foreign import ccall safe "hs_bindgen_3782129e34172c40"
-  hs_bindgen_3782129e34172c40_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetDefaultTextureScaleMode@
-hs_bindgen_3782129e34172c40
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_ScaleMode
-  -> IO BG.CBool
-hs_bindgen_3782129e34172c40 =
-  BG.fromFFIType hs_bindgen_3782129e34172c40_base
-
--- | Get default texture scale mode of the given renderer.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.4.0
---
---     [See also]: 'sDL_SetDefaultTextureScaleMode'
---
---     [C declaration]: @SDL_GetDefaultTextureScaleMode@, defined at @SDL3\/SDL_render.h 2920:34@
-sDL_GetDefaultTextureScaleMode
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer to get data from.
-  -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_ScaleMode
-  -- ^
-  --
-  --           [@scale_mode@]: a SDL_ScaleMode filled with current default scale mode. See @SDL_SetDefaultTextureScaleMode()@ for the meaning of the value.
-  -> IO BG.CBool
-sDL_GetDefaultTextureScaleMode =
-  hs_bindgen_3782129e34172c40
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateGPURenderState@
-foreign import ccall safe "hs_bindgen_b6fd9bfda38a61c5"
-  hs_bindgen_b6fd9bfda38a61c5_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateGPURenderState@
-hs_bindgen_b6fd9bfda38a61c5
-  :: BG.Ptr SDL_Renderer
-  -> PtrConst.PtrConst SDL_GPURenderStateCreateInfo
-  -> IO (BG.Ptr SDL_GPURenderState)
-hs_bindgen_b6fd9bfda38a61c5 =
-  BG.fromFFIType hs_bindgen_b6fd9bfda38a61c5_base
-
--- | Create custom GPU render state.
---
---     [Returns]: a custom GPU render state or NULL on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should be called on the thread that created the renderer.
---
---     @since 3.4.0
---
---     [See also]: 'sDL_SetGPURenderStateFragmentUniforms', 'sDL_SetGPURenderState', 'sDL_DestroyGPURenderState'
---
---     [C declaration]: @SDL_CreateGPURenderState@, defined at @SDL3\/SDL_render.h 2974:50@
-sDL_CreateGPURenderState
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer to use.
-  -> PtrConst.PtrConst SDL_GPURenderStateCreateInfo
-  -- ^
-  --
-  --           [@createinfo@]: a struct describing the GPU render state to create.
-  -> IO (BG.Ptr SDL_GPURenderState)
-sDL_CreateGPURenderState =
-  hs_bindgen_b6fd9bfda38a61c5
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetGPURenderStateFragmentUniforms@
-foreign import ccall safe "hs_bindgen_18aafc7283600d91"
-  hs_bindgen_18aafc7283600d91_base
-    :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetGPURenderStateFragmentUniforms@
-hs_bindgen_18aafc7283600d91
-  :: BG.Ptr SDL_GPURenderState
-  -> SDL3.Sys.Bindgen.Stdinc.Uint32
-  -> PtrConst.PtrConst BG.Void
-  -> SDL3.Sys.Bindgen.Stdinc.Uint32
-  -> IO BG.CBool
-hs_bindgen_18aafc7283600d91 =
-  BG.fromFFIType hs_bindgen_18aafc7283600d91_base
-
--- | Set fragment shader uniform variables in a custom GPU render state.
---
---     The data is copied and will be pushed using SDL_PushGPUFragmentUniformData() during draw call execution.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should be called on the thread that created the renderer.
---
---     @since 3.4.0
---
---     [C declaration]: @SDL_SetGPURenderStateFragmentUniforms@, defined at @SDL3\/SDL_render.h 2994:34@
-sDL_SetGPURenderStateFragmentUniforms
-  :: BG.Ptr SDL_GPURenderState
-  -- ^
-  --
-  --           [@state@]: the state to modify.
-  -> SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^
-  --
-  --           [@slot_index@]: the fragment uniform slot to push data to.
-  -> PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@data@]: client data to write.
-  -> SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^
-  --
-  --           [@length@]: the length of the data to write.
-  -> IO BG.CBool
-sDL_SetGPURenderStateFragmentUniforms =
-  hs_bindgen_18aafc7283600d91
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetGPURenderState@
-foreign import ccall safe "hs_bindgen_707dc041c39c56ad"
-  hs_bindgen_707dc041c39c56ad_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetGPURenderState@
-hs_bindgen_707dc041c39c56ad
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL_GPURenderState
-  -> IO BG.CBool
-hs_bindgen_707dc041c39c56ad =
-  BG.fromFFIType hs_bindgen_707dc041c39c56ad_base
-
--- | Set custom GPU render state.
---
---     This function sets custom GPU render state for subsequent draw calls. This allows using custom shaders with the GPU renderer.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should be called on the thread that created the renderer.
---
---     @since 3.4.0
---
---     [C declaration]: @SDL_SetGPURenderState@, defined at @SDL3\/SDL_render.h 3012:34@
-sDL_SetGPURenderState
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer to use.
-  -> BG.Ptr SDL_GPURenderState
-  -- ^
-  --
-  --           [@state@]: the state to to use, or NULL to clear custom GPU render state.
-  -> IO BG.CBool
-sDL_SetGPURenderState = hs_bindgen_707dc041c39c56ad
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_DestroyGPURenderState@
-foreign import ccall safe "hs_bindgen_ef5a4d7453634025"
-  hs_bindgen_ef5a4d7453634025_base
-    :: BG.Ptr BG.Void
-    -> IO ()
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_DestroyGPURenderState@
-hs_bindgen_ef5a4d7453634025
-  :: BG.Ptr SDL_GPURenderState
-  -> IO ()
-hs_bindgen_ef5a4d7453634025 =
-  BG.fromFFIType hs_bindgen_ef5a4d7453634025_base
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.Render.Safe (
+  SDL3.Sys.Bindgen.Render.Safe.sDL_GetNumRenderDrivers,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderDriver,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_CreateWindowAndRenderer,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_CreateRenderer,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_CreateRendererWithProperties,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_CreateGPURenderer,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_GetGPURendererDevice,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_CreateSoftwareRenderer,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderer,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderWindow,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRendererName,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRendererProperties,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderOutputSize,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_GetCurrentRenderOutputSize,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_CreateTexture,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_CreateTextureFromSurface,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_CreateTextureWithProperties,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_GetTextureProperties,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRendererFromTexture,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_GetTextureSize,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_SetTexturePalette,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_GetTexturePalette,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_SetTextureColorMod,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_SetTextureColorModFloat,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_GetTextureColorMod,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_GetTextureColorModFloat,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_SetTextureAlphaMod,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_SetTextureAlphaModFloat,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_GetTextureAlphaMod,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_GetTextureAlphaModFloat,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_SetTextureBlendMode,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_GetTextureBlendMode,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_SetTextureScaleMode,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_GetTextureScaleMode,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_UpdateTexture,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_UpdateYUVTexture,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_UpdateNVTexture,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_LockTexture,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_LockTextureToSurface,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_UnlockTexture,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_SetRenderTarget,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderTarget,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_SetRenderLogicalPresentation,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderLogicalPresentation,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderLogicalPresentationRect,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderCoordinatesFromWindow,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderCoordinatesToWindow,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_ConvertEventToRenderCoordinates,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_SetRenderViewport,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderViewport,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderViewportSet,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderSafeArea,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_SetRenderClipRect,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderClipRect,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderClipEnabled,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_SetRenderScale,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderScale,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_SetRenderDrawColor,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_SetRenderDrawColorFloat,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderDrawColor,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderDrawColorFloat,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_SetRenderColorScale,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderColorScale,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_SetRenderDrawBlendMode,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderDrawBlendMode,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderClear,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderPoint,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderPoints,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderLine,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderLines,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderRect,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderRects,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderFillRect,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderFillRects,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderTexture,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderTextureRotated,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderTextureAffine,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderTextureTiled,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderTexture9Grid,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderTexture9GridTiled,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderGeometry,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderGeometryRaw,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_SetRenderTextureAddressMode,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderTextureAddressMode,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderReadPixels,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderPresent,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_DestroyTexture,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_DestroyRenderer,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_FlushRenderer,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderMetalLayer,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderMetalCommandEncoder,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_AddVulkanRenderSemaphores,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_SetRenderVSync,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_GetRenderVSync,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_RenderDebugText,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_SetDefaultTextureScaleMode,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_GetDefaultTextureScaleMode,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_CreateGPURenderState,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_SetGPURenderStateFragmentUniforms,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_SetGPURenderState,
+  SDL3.Sys.Bindgen.Render.Safe.sDL_DestroyGPURenderState,
+)
+where
+
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
+import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+import SDL3.Sys.Bindgen.Blendmode qualified
+import SDL3.Sys.Bindgen.Events qualified
+import SDL3.Sys.Bindgen.Gpu qualified
+import SDL3.Sys.Bindgen.Pixels qualified
+import SDL3.Sys.Bindgen.Properties qualified
+import SDL3.Sys.Bindgen.Rect qualified
+import SDL3.Sys.Bindgen.Render
+import SDL3.Sys.Bindgen.Stdinc qualified
+import SDL3.Sys.Bindgen.Surface qualified
+import SDL3.Sys.Bindgen.Video qualified
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_render.h>"
+         , "signed int hs_bindgen_73e69181c85cbe7b (void)"
+         , "{"
+         , "  return (SDL_GetNumRenderDrivers)();"
+         , "}"
+         , "char const *hs_bindgen_785e31d2ab303c36 ("
+         , "  signed int arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderDriver)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_8b7a09bca8ba667b ("
+         , "  char const *arg1,"
+         , "  signed int arg2,"
+         , "  signed int arg3,"
+         , "  SDL_WindowFlags arg4,"
+         , "  SDL_Window **arg5,"
+         , "  SDL_Renderer **arg6"
+         , ")"
+         , "{"
+         , "  return (SDL_CreateWindowAndRenderer)(arg1, arg2, arg3, arg4, arg5, arg6);"
+         , "}"
+         , "SDL_Renderer *hs_bindgen_4a9fac5ac8d291e9 ("
+         , "  SDL_Window *arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_CreateRenderer)(arg1, arg2);"
+         , "}"
+         , "SDL_Renderer *hs_bindgen_8b6efe6418cb34a2 ("
+         , "  SDL_PropertiesID arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_CreateRendererWithProperties)(arg1);"
+         , "}"
+         , "#include <SDL3/SDL_version.h>"
+         , "#include <SDL3/SDL_error.h>"
+         , "#include <SDL3/SDL_version.h>"
+         , "#if !SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "typedef struct SDL_GPUDevice SDL_GPUDevice;"
+         , "typedef struct SDL_GPURenderState SDL_GPURenderState;"
+         , "typedef struct SDL_GPURenderStateCreateInfo SDL_GPURenderStateCreateInfo;"
+         , "typedef int SDL_TextureAddressMode;"
+         , "#endif"
+         , "SDL_Renderer *hs_bindgen_6efbbd05c80e02d0 ("
+         , "  SDL_GPUDevice *arg1,"
+         , "  SDL_Window *arg2"
+         , ")"
+         , "{"
+         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "  return (SDL_CreateGPURenderer)(arg1, arg2);"
+         , "#else"
+         , "  (void)arg1; (void)arg2; SDL_SetError(\"SDL_CreateGPURenderer requires SDL >= 3.4.0\"); return 0;"
+         , "#endif"
+         , "}"
+         , "#include <SDL3/SDL_version.h>"
+         , "#include <SDL3/SDL_error.h>"
+         , "#include <SDL3/SDL_version.h>"
+         , "#if !SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "typedef struct SDL_GPUDevice SDL_GPUDevice;"
+         , "typedef struct SDL_GPURenderState SDL_GPURenderState;"
+         , "typedef struct SDL_GPURenderStateCreateInfo SDL_GPURenderStateCreateInfo;"
+         , "typedef int SDL_TextureAddressMode;"
+         , "#endif"
+         , "SDL_GPUDevice *hs_bindgen_aa8cead59246ca07 ("
+         , "  SDL_Renderer *arg1"
+         , ")"
+         , "{"
+         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "  return (SDL_GetGPURendererDevice)(arg1);"
+         , "#else"
+         , "  (void)arg1; SDL_SetError(\"SDL_GetGPURendererDevice requires SDL >= 3.4.0\"); return 0;"
+         , "#endif"
+         , "}"
+         , "SDL_Renderer *hs_bindgen_154eef5a69d9f0de ("
+         , "  SDL_Surface *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_CreateSoftwareRenderer)(arg1);"
+         , "}"
+         , "SDL_Renderer *hs_bindgen_6b28e604d7d033f7 ("
+         , "  SDL_Window *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderer)(arg1);"
+         , "}"
+         , "SDL_Window *hs_bindgen_b22b3e4ae10bdb0d ("
+         , "  SDL_Renderer *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderWindow)(arg1);"
+         , "}"
+         , "char const *hs_bindgen_599c50262188b811 ("
+         , "  SDL_Renderer *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRendererName)(arg1);"
+         , "}"
+         , "SDL_PropertiesID hs_bindgen_4a11529b7951c637 ("
+         , "  SDL_Renderer *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRendererProperties)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_1d433c9827126af7 ("
+         , "  SDL_Renderer *arg1,"
+         , "  signed int *arg2,"
+         , "  signed int *arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderOutputSize)(arg1, arg2, arg3);"
+         , "}"
+         , "_Bool hs_bindgen_5d30db125155788b ("
+         , "  SDL_Renderer *arg1,"
+         , "  signed int *arg2,"
+         , "  signed int *arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_GetCurrentRenderOutputSize)(arg1, arg2, arg3);"
+         , "}"
+         , "SDL_Texture *hs_bindgen_052b6ffc7143143e ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_PixelFormat arg2,"
+         , "  SDL_TextureAccess arg3,"
+         , "  signed int arg4,"
+         , "  signed int arg5"
+         , ")"
+         , "{"
+         , "  return (SDL_CreateTexture)(arg1, arg2, arg3, arg4, arg5);"
+         , "}"
+         , "SDL_Texture *hs_bindgen_4d23668000d5b53c ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_Surface *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_CreateTextureFromSurface)(arg1, arg2);"
+         , "}"
+         , "SDL_Texture *hs_bindgen_56364d1627b2f54e ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_PropertiesID arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_CreateTextureWithProperties)(arg1, arg2);"
+         , "}"
+         , "SDL_PropertiesID hs_bindgen_5a086b7bc8bee33d ("
+         , "  SDL_Texture *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_GetTextureProperties)(arg1);"
+         , "}"
+         , "SDL_Renderer *hs_bindgen_952d60b9be750f80 ("
+         , "  SDL_Texture *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRendererFromTexture)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_593080867d87a9cb ("
+         , "  SDL_Texture *arg1,"
+         , "  float *arg2,"
+         , "  float *arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_GetTextureSize)(arg1, arg2, arg3);"
+         , "}"
+         , "#include <SDL3/SDL_version.h>"
+         , "#include <SDL3/SDL_error.h>"
+         , "_Bool hs_bindgen_c0c58495bafd931b ("
+         , "  SDL_Texture *arg1,"
+         , "  SDL_Palette *arg2"
+         , ")"
+         , "{"
+         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "  return (SDL_SetTexturePalette)(arg1, arg2);"
+         , "#else"
+         , "  (void)arg1; (void)arg2; SDL_SetError(\"SDL_SetTexturePalette requires SDL >= 3.4.0\"); return 0;"
+         , "#endif"
+         , "}"
+         , "#include <SDL3/SDL_version.h>"
+         , "#include <SDL3/SDL_error.h>"
+         , "SDL_Palette *hs_bindgen_23b273d543966d78 ("
+         , "  SDL_Texture *arg1"
+         , ")"
+         , "{"
+         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "  return (SDL_GetTexturePalette)(arg1);"
+         , "#else"
+         , "  (void)arg1; SDL_SetError(\"SDL_GetTexturePalette requires SDL >= 3.4.0\"); return 0;"
+         , "#endif"
+         , "}"
+         , "_Bool hs_bindgen_823afe6398e7b8c5 ("
+         , "  SDL_Texture *arg1,"
+         , "  Uint8 arg2,"
+         , "  Uint8 arg3,"
+         , "  Uint8 arg4"
+         , ")"
+         , "{"
+         , "  return (SDL_SetTextureColorMod)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "_Bool hs_bindgen_7ad37bb707c0047a ("
+         , "  SDL_Texture *arg1,"
+         , "  float arg2,"
+         , "  float arg3,"
+         , "  float arg4"
+         , ")"
+         , "{"
+         , "  return (SDL_SetTextureColorModFloat)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "_Bool hs_bindgen_7a0ccf77a4fdfc3e ("
+         , "  SDL_Texture *arg1,"
+         , "  Uint8 *arg2,"
+         , "  Uint8 *arg3,"
+         , "  Uint8 *arg4"
+         , ")"
+         , "{"
+         , "  return (SDL_GetTextureColorMod)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "_Bool hs_bindgen_842e59bbba82a5a3 ("
+         , "  SDL_Texture *arg1,"
+         , "  float *arg2,"
+         , "  float *arg3,"
+         , "  float *arg4"
+         , ")"
+         , "{"
+         , "  return (SDL_GetTextureColorModFloat)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "_Bool hs_bindgen_cd0da7f365c5d74f ("
+         , "  SDL_Texture *arg1,"
+         , "  Uint8 arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_SetTextureAlphaMod)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_3c8a499336e4d5a3 ("
+         , "  SDL_Texture *arg1,"
+         , "  float arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_SetTextureAlphaModFloat)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_d0b8db7f236a27d6 ("
+         , "  SDL_Texture *arg1,"
+         , "  Uint8 *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_GetTextureAlphaMod)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_10d5dcf405fda170 ("
+         , "  SDL_Texture *arg1,"
+         , "  float *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_GetTextureAlphaModFloat)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_2881e5a760914ac5 ("
+         , "  SDL_Texture *arg1,"
+         , "  SDL_BlendMode arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_SetTextureBlendMode)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_816bbcb1b4c3283a ("
+         , "  SDL_Texture *arg1,"
+         , "  SDL_BlendMode *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_GetTextureBlendMode)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_f9ee16ea95e7fdf6 ("
+         , "  SDL_Texture *arg1,"
+         , "  SDL_ScaleMode arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_SetTextureScaleMode)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_6de3c22a0ac3ed25 ("
+         , "  SDL_Texture *arg1,"
+         , "  SDL_ScaleMode *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_GetTextureScaleMode)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_34af457e8db29591 ("
+         , "  SDL_Texture *arg1,"
+         , "  SDL_Rect const *arg2,"
+         , "  void const *arg3,"
+         , "  signed int arg4"
+         , ")"
+         , "{"
+         , "  return (SDL_UpdateTexture)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "_Bool hs_bindgen_a7b149fabb767cd5 ("
+         , "  SDL_Texture *arg1,"
+         , "  SDL_Rect const *arg2,"
+         , "  Uint8 const *arg3,"
+         , "  signed int arg4,"
+         , "  Uint8 const *arg5,"
+         , "  signed int arg6,"
+         , "  Uint8 const *arg7,"
+         , "  signed int arg8"
+         , ")"
+         , "{"
+         , "  return (SDL_UpdateYUVTexture)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);"
+         , "}"
+         , "_Bool hs_bindgen_2d94f5e4965716c8 ("
+         , "  SDL_Texture *arg1,"
+         , "  SDL_Rect const *arg2,"
+         , "  Uint8 const *arg3,"
+         , "  signed int arg4,"
+         , "  Uint8 const *arg5,"
+         , "  signed int arg6"
+         , ")"
+         , "{"
+         , "  return (SDL_UpdateNVTexture)(arg1, arg2, arg3, arg4, arg5, arg6);"
+         , "}"
+         , "_Bool hs_bindgen_b121055dd1158359 ("
+         , "  SDL_Texture *arg1,"
+         , "  SDL_Rect const *arg2,"
+         , "  void **arg3,"
+         , "  signed int *arg4"
+         , ")"
+         , "{"
+         , "  return (SDL_LockTexture)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "_Bool hs_bindgen_1526f9100ed55b03 ("
+         , "  SDL_Texture *arg1,"
+         , "  SDL_Rect const *arg2,"
+         , "  SDL_Surface **arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_LockTextureToSurface)(arg1, arg2, arg3);"
+         , "}"
+         , "void hs_bindgen_1159217b1f34f925 ("
+         , "  SDL_Texture *arg1"
+         , ")"
+         , "{"
+         , "  (SDL_UnlockTexture)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_4b272fad8dbaa9f4 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_Texture *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_SetRenderTarget)(arg1, arg2);"
+         , "}"
+         , "SDL_Texture *hs_bindgen_0f2b08c2b3c8ddb1 ("
+         , "  SDL_Renderer *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderTarget)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_c8bfb4ad8baf9874 ("
+         , "  SDL_Renderer *arg1,"
+         , "  signed int arg2,"
+         , "  signed int arg3,"
+         , "  SDL_RendererLogicalPresentation arg4"
+         , ")"
+         , "{"
+         , "  return (SDL_SetRenderLogicalPresentation)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "_Bool hs_bindgen_88acfc55c8872d4d ("
+         , "  SDL_Renderer *arg1,"
+         , "  signed int *arg2,"
+         , "  signed int *arg3,"
+         , "  SDL_RendererLogicalPresentation *arg4"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderLogicalPresentation)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "_Bool hs_bindgen_e6080eb5475f066e ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_FRect *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderLogicalPresentationRect)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_2ed6b3e16ff69faf ("
+         , "  SDL_Renderer *arg1,"
+         , "  float arg2,"
+         , "  float arg3,"
+         , "  float *arg4,"
+         , "  float *arg5"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderCoordinatesFromWindow)(arg1, arg2, arg3, arg4, arg5);"
+         , "}"
+         , "_Bool hs_bindgen_694297dc8b16c606 ("
+         , "  SDL_Renderer *arg1,"
+         , "  float arg2,"
+         , "  float arg3,"
+         , "  float *arg4,"
+         , "  float *arg5"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderCoordinatesToWindow)(arg1, arg2, arg3, arg4, arg5);"
+         , "}"
+         , "_Bool hs_bindgen_4d63449cf75fd80c ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_Event *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_ConvertEventToRenderCoordinates)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_6d15f83fef90049f ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_Rect const *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_SetRenderViewport)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_b94438b981f1f14c ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_Rect *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderViewport)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_a3207f3fc59e8dc9 ("
+         , "  SDL_Renderer *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderViewportSet)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_4eb48f61abc48f1f ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_Rect *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderSafeArea)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_8baf3dc3de980190 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_Rect const *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_SetRenderClipRect)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_5b7acae61b400f09 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_Rect *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderClipRect)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_151563301b587559 ("
+         , "  SDL_Renderer *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderClipEnabled)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_edd164833dbcbd86 ("
+         , "  SDL_Renderer *arg1,"
+         , "  float arg2,"
+         , "  float arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_SetRenderScale)(arg1, arg2, arg3);"
+         , "}"
+         , "_Bool hs_bindgen_b47b8598441289bb ("
+         , "  SDL_Renderer *arg1,"
+         , "  float *arg2,"
+         , "  float *arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderScale)(arg1, arg2, arg3);"
+         , "}"
+         , "_Bool hs_bindgen_2a1d5a5e6763970a ("
+         , "  SDL_Renderer *arg1,"
+         , "  Uint8 arg2,"
+         , "  Uint8 arg3,"
+         , "  Uint8 arg4,"
+         , "  Uint8 arg5"
+         , ")"
+         , "{"
+         , "  return (SDL_SetRenderDrawColor)(arg1, arg2, arg3, arg4, arg5);"
+         , "}"
+         , "_Bool hs_bindgen_deb567c32a3b304a ("
+         , "  SDL_Renderer *arg1,"
+         , "  float arg2,"
+         , "  float arg3,"
+         , "  float arg4,"
+         , "  float arg5"
+         , ")"
+         , "{"
+         , "  return (SDL_SetRenderDrawColorFloat)(arg1, arg2, arg3, arg4, arg5);"
+         , "}"
+         , "_Bool hs_bindgen_4b8538e6f2e6330e ("
+         , "  SDL_Renderer *arg1,"
+         , "  Uint8 *arg2,"
+         , "  Uint8 *arg3,"
+         , "  Uint8 *arg4,"
+         , "  Uint8 *arg5"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderDrawColor)(arg1, arg2, arg3, arg4, arg5);"
+         , "}"
+         , "_Bool hs_bindgen_02be3e3dad551497 ("
+         , "  SDL_Renderer *arg1,"
+         , "  float *arg2,"
+         , "  float *arg3,"
+         , "  float *arg4,"
+         , "  float *arg5"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderDrawColorFloat)(arg1, arg2, arg3, arg4, arg5);"
+         , "}"
+         , "_Bool hs_bindgen_4b5898833d8f7966 ("
+         , "  SDL_Renderer *arg1,"
+         , "  float arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_SetRenderColorScale)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_107aa0fcfa767aa5 ("
+         , "  SDL_Renderer *arg1,"
+         , "  float *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderColorScale)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_b9c067d52917b47d ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_BlendMode arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_SetRenderDrawBlendMode)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_167da6f1eb78062a ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_BlendMode *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderDrawBlendMode)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_cde099ce5b1cfc9d ("
+         , "  SDL_Renderer *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderClear)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_9685ef9bec873fd9 ("
+         , "  SDL_Renderer *arg1,"
+         , "  float arg2,"
+         , "  float arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderPoint)(arg1, arg2, arg3);"
+         , "}"
+         , "_Bool hs_bindgen_a2f27901d75ff412 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_FPoint const *arg2,"
+         , "  signed int arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderPoints)(arg1, arg2, arg3);"
+         , "}"
+         , "_Bool hs_bindgen_a22413e4506d153a ("
+         , "  SDL_Renderer *arg1,"
+         , "  float arg2,"
+         , "  float arg3,"
+         , "  float arg4,"
+         , "  float arg5"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderLine)(arg1, arg2, arg3, arg4, arg5);"
+         , "}"
+         , "_Bool hs_bindgen_139f9e9bbb114174 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_FPoint const *arg2,"
+         , "  signed int arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderLines)(arg1, arg2, arg3);"
+         , "}"
+         , "_Bool hs_bindgen_c336b07d3c7c70e0 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_FRect const *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderRect)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_4402e93d7e0ba929 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_FRect const *arg2,"
+         , "  signed int arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderRects)(arg1, arg2, arg3);"
+         , "}"
+         , "_Bool hs_bindgen_2904f549c42ca454 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_FRect const *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderFillRect)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_8e1470eae177aaca ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_FRect const *arg2,"
+         , "  signed int arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderFillRects)(arg1, arg2, arg3);"
+         , "}"
+         , "_Bool hs_bindgen_25ce1a6520376b45 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_Texture *arg2,"
+         , "  SDL_FRect const *arg3,"
+         , "  SDL_FRect const *arg4"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderTexture)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "_Bool hs_bindgen_7784d7195eaae275 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_Texture *arg2,"
+         , "  SDL_FRect const *arg3,"
+         , "  SDL_FRect const *arg4,"
+         , "  double arg5,"
+         , "  SDL_FPoint const *arg6,"
+         , "  SDL_FlipMode arg7"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderTextureRotated)(arg1, arg2, arg3, arg4, arg5, arg6, arg7);"
+         , "}"
+         , "_Bool hs_bindgen_add42f94463f73c6 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_Texture *arg2,"
+         , "  SDL_FRect const *arg3,"
+         , "  SDL_FPoint const *arg4,"
+         , "  SDL_FPoint const *arg5,"
+         , "  SDL_FPoint const *arg6"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderTextureAffine)(arg1, arg2, arg3, arg4, arg5, arg6);"
+         , "}"
+         , "_Bool hs_bindgen_74aa5a13c76159fa ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_Texture *arg2,"
+         , "  SDL_FRect const *arg3,"
+         , "  float arg4,"
+         , "  SDL_FRect const *arg5"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderTextureTiled)(arg1, arg2, arg3, arg4, arg5);"
+         , "}"
+         , "_Bool hs_bindgen_6b75253c3413f458 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_Texture *arg2,"
+         , "  SDL_FRect const *arg3,"
+         , "  float arg4,"
+         , "  float arg5,"
+         , "  float arg6,"
+         , "  float arg7,"
+         , "  float arg8,"
+         , "  SDL_FRect const *arg9"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderTexture9Grid)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);"
+         , "}"
+         , "#include <SDL3/SDL_version.h>"
+         , "#include <SDL3/SDL_error.h>"
+         , "_Bool hs_bindgen_2d9cf263c1277f5b ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_Texture *arg2,"
+         , "  SDL_FRect const *arg3,"
+         , "  float arg4,"
+         , "  float arg5,"
+         , "  float arg6,"
+         , "  float arg7,"
+         , "  float arg8,"
+         , "  SDL_FRect const *arg9,"
+         , "  float arg10"
+         , ")"
+         , "{"
+         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "  return (SDL_RenderTexture9GridTiled)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10);"
+         , "#else"
+         , "  (void)arg1; (void)arg2; (void)arg3; (void)arg4; (void)arg5; (void)arg6; (void)arg7; (void)arg8; (void)arg9; (void)arg10; SDL_SetError(\"SDL_RenderTexture9GridTiled requires SDL >= 3.4.0\"); return 0;"
+         , "#endif"
+         , "}"
+         , "_Bool hs_bindgen_778c782602e7d6de ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_Texture *arg2,"
+         , "  SDL_Vertex const *arg3,"
+         , "  signed int arg4,"
+         , "  signed int const *arg5,"
+         , "  signed int arg6"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderGeometry)(arg1, arg2, arg3, arg4, arg5, arg6);"
+         , "}"
+         , "_Bool hs_bindgen_32080687747fa83c ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_Texture *arg2,"
+         , "  float const *arg3,"
+         , "  signed int arg4,"
+         , "  SDL_FColor const *arg5,"
+         , "  signed int arg6,"
+         , "  float const *arg7,"
+         , "  signed int arg8,"
+         , "  signed int arg9,"
+         , "  void const *arg10,"
+         , "  signed int arg11,"
+         , "  signed int arg12"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderGeometryRaw)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12);"
+         , "}"
+         , "#include <SDL3/SDL_version.h>"
+         , "#include <SDL3/SDL_error.h>"
+         , "#include <SDL3/SDL_version.h>"
+         , "#if !SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "typedef struct SDL_GPUDevice SDL_GPUDevice;"
+         , "typedef struct SDL_GPURenderState SDL_GPURenderState;"
+         , "typedef struct SDL_GPURenderStateCreateInfo SDL_GPURenderStateCreateInfo;"
+         , "typedef int SDL_TextureAddressMode;"
+         , "#endif"
+         , "_Bool hs_bindgen_56e605702d9776b5 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_TextureAddressMode arg2,"
+         , "  SDL_TextureAddressMode arg3"
+         , ")"
+         , "{"
+         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "  return (SDL_SetRenderTextureAddressMode)(arg1, arg2, arg3);"
+         , "#else"
+         , "  (void)arg1; (void)arg2; (void)arg3; SDL_SetError(\"SDL_SetRenderTextureAddressMode requires SDL >= 3.4.0\"); return 0;"
+         , "#endif"
+         , "}"
+         , "#include <SDL3/SDL_version.h>"
+         , "#include <SDL3/SDL_error.h>"
+         , "#include <SDL3/SDL_version.h>"
+         , "#if !SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "typedef struct SDL_GPUDevice SDL_GPUDevice;"
+         , "typedef struct SDL_GPURenderState SDL_GPURenderState;"
+         , "typedef struct SDL_GPURenderStateCreateInfo SDL_GPURenderStateCreateInfo;"
+         , "typedef int SDL_TextureAddressMode;"
+         , "#endif"
+         , "_Bool hs_bindgen_b63dbaffb6d53264 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_TextureAddressMode *arg2,"
+         , "  SDL_TextureAddressMode *arg3"
+         , ")"
+         , "{"
+         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "  return (SDL_GetRenderTextureAddressMode)(arg1, arg2, arg3);"
+         , "#else"
+         , "  (void)arg1; (void)arg2; (void)arg3; SDL_SetError(\"SDL_GetRenderTextureAddressMode requires SDL >= 3.4.0\"); return 0;"
+         , "#endif"
+         , "}"
+         , "SDL_Surface *hs_bindgen_8e39bba88c8b590b ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_Rect const *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderReadPixels)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_7c3d5531ae54aea4 ("
+         , "  SDL_Renderer *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderPresent)(arg1);"
+         , "}"
+         , "void hs_bindgen_8bed4d77b35c687f ("
+         , "  SDL_Texture *arg1"
+         , ")"
+         , "{"
+         , "  (SDL_DestroyTexture)(arg1);"
+         , "}"
+         , "void hs_bindgen_1d20db71cb8b3442 ("
+         , "  SDL_Renderer *arg1"
+         , ")"
+         , "{"
+         , "  (SDL_DestroyRenderer)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_541ef4edd41b43f3 ("
+         , "  SDL_Renderer *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_FlushRenderer)(arg1);"
+         , "}"
+         , "void *hs_bindgen_b665c5f20441fcd2 ("
+         , "  SDL_Renderer *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderMetalLayer)(arg1);"
+         , "}"
+         , "void *hs_bindgen_4cc0199f9267bab8 ("
+         , "  SDL_Renderer *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderMetalCommandEncoder)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_91025902db96959c ("
+         , "  SDL_Renderer *arg1,"
+         , "  Uint32 arg2,"
+         , "  Sint64 arg3,"
+         , "  Sint64 arg4"
+         , ")"
+         , "{"
+         , "  return (SDL_AddVulkanRenderSemaphores)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "_Bool hs_bindgen_6f4a42b49f0de954 ("
+         , "  SDL_Renderer *arg1,"
+         , "  signed int arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_SetRenderVSync)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_eb1ce0cdf3d11c86 ("
+         , "  SDL_Renderer *arg1,"
+         , "  signed int *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderVSync)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_54ec6a89b17b55b6 ("
+         , "  SDL_Renderer *arg1,"
+         , "  float arg2,"
+         , "  float arg3,"
+         , "  char const *arg4"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderDebugText)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "#include <SDL3/SDL_version.h>"
+         , "#include <SDL3/SDL_error.h>"
+         , "_Bool hs_bindgen_3e694d41804c455e ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_ScaleMode arg2"
+         , ")"
+         , "{"
+         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "  return (SDL_SetDefaultTextureScaleMode)(arg1, arg2);"
+         , "#else"
+         , "  (void)arg1; (void)arg2; SDL_SetError(\"SDL_SetDefaultTextureScaleMode requires SDL >= 3.4.0\"); return 0;"
+         , "#endif"
+         , "}"
+         , "#include <SDL3/SDL_version.h>"
+         , "#include <SDL3/SDL_error.h>"
+         , "_Bool hs_bindgen_3782129e34172c40 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_ScaleMode *arg2"
+         , ")"
+         , "{"
+         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "  return (SDL_GetDefaultTextureScaleMode)(arg1, arg2);"
+         , "#else"
+         , "  (void)arg1; (void)arg2; SDL_SetError(\"SDL_GetDefaultTextureScaleMode requires SDL >= 3.4.0\"); return 0;"
+         , "#endif"
+         , "}"
+         , "#include <SDL3/SDL_version.h>"
+         , "#include <SDL3/SDL_error.h>"
+         , "#include <SDL3/SDL_version.h>"
+         , "#if !SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "typedef struct SDL_GPUDevice SDL_GPUDevice;"
+         , "typedef struct SDL_GPURenderState SDL_GPURenderState;"
+         , "typedef struct SDL_GPURenderStateCreateInfo SDL_GPURenderStateCreateInfo;"
+         , "typedef int SDL_TextureAddressMode;"
+         , "#endif"
+         , "SDL_GPURenderState *hs_bindgen_b6fd9bfda38a61c5 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_GPURenderStateCreateInfo const *arg2"
+         , ")"
+         , "{"
+         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "  return (SDL_CreateGPURenderState)(arg1, arg2);"
+         , "#else"
+         , "  (void)arg1; (void)arg2; SDL_SetError(\"SDL_CreateGPURenderState requires SDL >= 3.4.0\"); return 0;"
+         , "#endif"
+         , "}"
+         , "#include <SDL3/SDL_version.h>"
+         , "#include <SDL3/SDL_error.h>"
+         , "#include <SDL3/SDL_version.h>"
+         , "#if !SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "typedef struct SDL_GPUDevice SDL_GPUDevice;"
+         , "typedef struct SDL_GPURenderState SDL_GPURenderState;"
+         , "typedef struct SDL_GPURenderStateCreateInfo SDL_GPURenderStateCreateInfo;"
+         , "typedef int SDL_TextureAddressMode;"
+         , "#endif"
+         , "_Bool hs_bindgen_18aafc7283600d91 ("
+         , "  SDL_GPURenderState *arg1,"
+         , "  Uint32 arg2,"
+         , "  void const *arg3,"
+         , "  Uint32 arg4"
+         , ")"
+         , "{"
+         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "  return (SDL_SetGPURenderStateFragmentUniforms)(arg1, arg2, arg3, arg4);"
+         , "#else"
+         , "  (void)arg1; (void)arg2; (void)arg3; (void)arg4; SDL_SetError(\"SDL_SetGPURenderStateFragmentUniforms requires SDL >= 3.4.0\"); return 0;"
+         , "#endif"
+         , "}"
+         , "#include <SDL3/SDL_version.h>"
+         , "#include <SDL3/SDL_error.h>"
+         , "#include <SDL3/SDL_version.h>"
+         , "#if !SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "typedef struct SDL_GPUDevice SDL_GPUDevice;"
+         , "typedef struct SDL_GPURenderState SDL_GPURenderState;"
+         , "typedef struct SDL_GPURenderStateCreateInfo SDL_GPURenderStateCreateInfo;"
+         , "typedef int SDL_TextureAddressMode;"
+         , "#endif"
+         , "_Bool hs_bindgen_707dc041c39c56ad ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_GPURenderState *arg2"
+         , ")"
+         , "{"
+         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "  return (SDL_SetGPURenderState)(arg1, arg2);"
+         , "#else"
+         , "  (void)arg1; (void)arg2; SDL_SetError(\"SDL_SetGPURenderState requires SDL >= 3.4.0\"); return 0;"
+         , "#endif"
+         , "}"
+         , "#include <SDL3/SDL_version.h>"
+         , "#include <SDL3/SDL_error.h>"
+         , "#include <SDL3/SDL_version.h>"
+         , "#if !SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "typedef struct SDL_GPUDevice SDL_GPUDevice;"
+         , "typedef struct SDL_GPURenderState SDL_GPURenderState;"
+         , "typedef struct SDL_GPURenderStateCreateInfo SDL_GPURenderStateCreateInfo;"
+         , "typedef int SDL_TextureAddressMode;"
+         , "#endif"
+         , "void hs_bindgen_ef5a4d7453634025 ("
+         , "  SDL_GPURenderState *arg1"
+         , ")"
+         , "{"
+         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "  (SDL_DestroyGPURenderState)(arg1);"
+         , "#else"
+         , "  (void)arg1; SDL_SetError(\"SDL_DestroyGPURenderState requires SDL >= 3.4.0\");"
+         , "#endif"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetNumRenderDrivers@
+foreign import ccall safe "hs_bindgen_73e69181c85cbe7b"
+  hs_bindgen_73e69181c85cbe7b_base
+    :: IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetNumRenderDrivers@
+hs_bindgen_73e69181c85cbe7b :: IO BG.CInt
+hs_bindgen_73e69181c85cbe7b =
+  fmap BG.fromFFIType hs_bindgen_73e69181c85cbe7b_base
+
+-- | Get the number of 2D rendering drivers available for the current display.
+--
+--     A render driver is a set of code that handles rendering and texture management on a particular display. Normally there is only one, but some drivers may have several available with different capabilities.
+--
+--     There may be none if SDL was compiled without render support.
+--
+--     [Returns]: the number of built in render drivers.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_CreateRenderer', 'sDL_GetRenderDriver'
+--
+--     [C declaration]: @SDL_GetNumRenderDrivers@, defined at @SDL3\/SDL_render.h 192:33@
+sDL_GetNumRenderDrivers :: IO BG.CInt
+sDL_GetNumRenderDrivers = hs_bindgen_73e69181c85cbe7b
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderDriver@
+foreign import ccall safe "hs_bindgen_785e31d2ab303c36"
+  hs_bindgen_785e31d2ab303c36_base
+    :: BG.CInt
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderDriver@
+hs_bindgen_785e31d2ab303c36
+  :: BG.CInt
+  -> IO (PtrConst.PtrConst BG.CChar)
+hs_bindgen_785e31d2ab303c36 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_785e31d2ab303c36_base (BG.toFFIType x0))
+
+-- | Use this function to get the name of a built in 2D rendering driver.
+--
+--     The list of rendering drivers is given in the order that they are normally initialized by default; the drivers that seem more reasonable to choose first (as far as the SDL developers believe) are earlier in the list.
+--
+--     The names of drivers are all simple, low-ASCII identifiers, like \"opengl\", \"direct3d12\" or \"metal\". These never have Unicode characters, and are not meant to be proper names.
+--
+--     [Returns]: the name of the rendering driver at the requested index, or NULL if an invalid index was specified.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetNumRenderDrivers'
+--
+--     [C declaration]: @SDL_GetRenderDriver@, defined at @SDL3\/SDL_render.h 216:42@
+sDL_GetRenderDriver
+  :: BG.CInt
+  -- ^
+  --
+  --           [@index@]: the index of the rendering driver; the value ranges from 0 to @SDL_GetNumRenderDrivers()@ - 1.
+  -> IO (PtrConst.PtrConst BG.CChar)
+sDL_GetRenderDriver = hs_bindgen_785e31d2ab303c36
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateWindowAndRenderer@
+foreign import ccall safe "hs_bindgen_8b7a09bca8ba667b"
+  hs_bindgen_8b7a09bca8ba667b_base
+    :: BG.Ptr BG.Void
+    -> BG.CInt
+    -> BG.CInt
+    -> HsBindgen.Runtime.LibC.Word64
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateWindowAndRenderer@
+hs_bindgen_8b7a09bca8ba667b
+  :: PtrConst.PtrConst BG.CChar
+  -> BG.CInt
+  -> BG.CInt
+  -> SDL3.Sys.Bindgen.Video.SDL_WindowFlags
+  -> BG.Ptr (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window)
+  -> BG.Ptr (BG.Ptr SDL_Renderer)
+  -> IO BG.CBool
+hs_bindgen_8b7a09bca8ba667b =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_8b7a09bca8ba667b_base
+                    (BG.toFFIType x0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                    (BG.toFFIType x4)
+                    (BG.toFFIType x5)
+                )
+
+-- | Create a window and default renderer.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_CreateRenderer', SDL_CreateWindow
+--
+--     [C declaration]: @SDL_CreateWindowAndRenderer@, defined at @SDL3\/SDL_render.h 238:34@
+sDL_CreateWindowAndRenderer
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@title@]: the title of the window, in UTF-8 encoding.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@width@]: the width of the window.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@height@]: the height of the window.
+  -> SDL3.Sys.Bindgen.Video.SDL_WindowFlags
+  -- ^
+  --
+  --           [@window_flags@]: the flags used to create the window (see SDL_CreateWindow()).
+  -> BG.Ptr (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window)
+  -- ^
+  --
+  --           [@window@]: a pointer filled with the window, or NULL on error.
+  -> BG.Ptr (BG.Ptr SDL_Renderer)
+  -- ^
+  --
+  --           [@renderer@]: a pointer filled with the renderer, or NULL on error.
+  -> IO BG.CBool
+sDL_CreateWindowAndRenderer =
+  hs_bindgen_8b7a09bca8ba667b
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateRenderer@
+foreign import ccall safe "hs_bindgen_4a9fac5ac8d291e9"
+  hs_bindgen_4a9fac5ac8d291e9_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateRenderer@
+hs_bindgen_4a9fac5ac8d291e9
+  :: BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
+  -> PtrConst.PtrConst BG.CChar
+  -> IO (BG.Ptr SDL_Renderer)
+hs_bindgen_4a9fac5ac8d291e9 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_4a9fac5ac8d291e9_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Create a 2D rendering context for a window.
+--
+--     If you want a specific renderer, you can specify its name here. A list of available renderers can be obtained by calling @SDL_GetRenderDriver()@ multiple times, with indices from 0 to @SDL_GetNumRenderDrivers()@ -1. If you don\'t need a specific renderer, specify NULL and SDL will attempt to choose the best option for you, based on what is available on the user\'s system.
+--
+--     If @name@ is a comma-separated list, SDL will try each name, in the order listed, until one succeeds or all of them fail.
+--
+--     By default the rendering size matches the window size in pixels, but you can call @SDL_SetRenderLogicalPresentation()@ to change the content size and scaling options.
+--
+--     [Returns]: a valid rendering context or NULL if there was an error; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_CreateRendererWithProperties', 'sDL_CreateSoftwareRenderer', 'sDL_DestroyRenderer', 'sDL_GetNumRenderDrivers', 'sDL_GetRenderDriver', 'sDL_GetRendererName'
+--
+--     [C declaration]: @SDL_CreateRenderer@, defined at @SDL3\/SDL_render.h 273:44@
+sDL_CreateRenderer
+  :: BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
+  -- ^
+  --
+  --           [@window@]: the window where rendering is displayed.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@name@]: the name of the rendering driver to initialize, or NULL to let SDL choose one.
+  -> IO (BG.Ptr SDL_Renderer)
+sDL_CreateRenderer = hs_bindgen_4a9fac5ac8d291e9
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateRendererWithProperties@
+foreign import ccall safe "hs_bindgen_8b6efe6418cb34a2"
+  hs_bindgen_8b6efe6418cb34a2_base
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateRendererWithProperties@
+hs_bindgen_8b6efe6418cb34a2
+  :: SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
+  -> IO (BG.Ptr SDL_Renderer)
+hs_bindgen_8b6efe6418cb34a2 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_8b6efe6418cb34a2_base (BG.toFFIType x0))
+
+-- | Create a 2D rendering context for a window, with the specified properties.
+--
+--     These are the supported properties:
+--
+--     * @'sDL_PROP_RENDERER_CREATE_NAME_STRING'@: the name of the rendering driver to use, if a specific one is desired
+--
+--     * @'sDL_PROP_RENDERER_CREATE_WINDOW_POINTER'@: the window where rendering is displayed, required if this isn\'t a software renderer using a surface
+--
+--     * @'sDL_PROP_RENDERER_CREATE_SURFACE_POINTER'@: the surface where rendering is displayed, if you want a software renderer without a window
+--
+--     * @'sDL_PROP_RENDERER_CREATE_OUTPUT_COLORSPACE_NUMBER'@: an SDL_Colorspace value describing the colorspace for output to the display, defaults to SDL_COLORSPACE_SRGB. The direct3d11, direct3d12, and metal renderers support SDL_COLORSPACE_SRGB_LINEAR, which is a linear color space and supports HDR output. If you select SDL_COLORSPACE_SRGB_LINEAR, drawing still uses the sRGB colorspace, but values can go beyond 1.0 and float (linear) format textures can be used for HDR content.
+--
+--     * @'sDL_PROP_RENDERER_CREATE_PRESENT_VSYNC_NUMBER'@: non-zero if you want present synchronized with the refresh rate. This property can take any value that is supported by @SDL_SetRenderVSync()@ for the renderer.
+--
+--     With the SDL GPU renderer (since SDL 3.4.0):
+--
+--     * @'sDL_PROP_RENDERER_CREATE_GPU_DEVICE_POINTER'@: the device to use with the renderer, optional.
+--
+--     * @'sDL_PROP_RENDERER_CREATE_GPU_SHADERS_SPIRV_BOOLEAN'@: the app is able to provide SPIR-V shaders to 'SDL_GPURenderState', optional.
+--
+--     * @'sDL_PROP_RENDERER_CREATE_GPU_SHADERS_DXIL_BOOLEAN'@: the app is able to provide DXIL shaders to 'SDL_GPURenderState', optional.
+--
+--     * @'sDL_PROP_RENDERER_CREATE_GPU_SHADERS_MSL_BOOLEAN'@: the app is able to provide MSL shaders to 'SDL_GPURenderState', optional.
+--
+--     With the vulkan renderer:
+--
+--     * @'sDL_PROP_RENDERER_CREATE_VULKAN_INSTANCE_POINTER'@: the VkInstance to use with the renderer, optional.
+--
+--     * @'sDL_PROP_RENDERER_CREATE_VULKAN_SURFACE_NUMBER'@: the VkSurfaceKHR to use with the renderer, optional.
+--
+--     * @'sDL_PROP_RENDERER_CREATE_VULKAN_PHYSICAL_DEVICE_POINTER'@: the VkPhysicalDevice to use with the renderer, optional.
+--
+--     * @'sDL_PROP_RENDERER_CREATE_VULKAN_DEVICE_POINTER'@: the VkDevice to use with the renderer, optional.
+--
+--     * @'sDL_PROP_RENDERER_CREATE_VULKAN_GRAPHICS_QUEUE_FAMILY_INDEX_NUMBER'@: the queue family index used for rendering.
+--
+--     * @'sDL_PROP_RENDERER_CREATE_VULKAN_PRESENT_QUEUE_FAMILY_INDEX_NUMBER'@: the queue family index used for presentation.
+--
+--     [Returns]: a valid rendering context or NULL if there was an error; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_CreateProperties, 'sDL_CreateRenderer', 'sDL_CreateSoftwareRenderer', 'sDL_DestroyRenderer', 'sDL_GetRendererName'
+--
+--     [C declaration]: @SDL_CreateRendererWithProperties@, defined at @SDL3\/SDL_render.h 337:44@
+sDL_CreateRendererWithProperties
+  :: SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
+  -- ^
+  --
+  --           [@props@]: the properties to use.
+  -> IO (BG.Ptr SDL_Renderer)
+sDL_CreateRendererWithProperties =
+  hs_bindgen_8b6efe6418cb34a2
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateGPURenderer@
+foreign import ccall safe "hs_bindgen_6efbbd05c80e02d0"
+  hs_bindgen_6efbbd05c80e02d0_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateGPURenderer@
+hs_bindgen_6efbbd05c80e02d0
+  :: BG.Ptr SDL3.Sys.Bindgen.Gpu.SDL_GPUDevice
+  -> BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
+  -> IO (BG.Ptr SDL_Renderer)
+hs_bindgen_6efbbd05c80e02d0 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_6efbbd05c80e02d0_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Create a 2D GPU rendering context.
+--
+--     The GPU device to use is passed in as a parameter. If this is NULL, then a device will be created normally and can be retrieved using @SDL_GetGPURendererDevice()@.
+--
+--     The window to use is passed in as a parameter. If this is NULL, then this will become an offscreen renderer. In that case, you should call @SDL_SetRenderTarget()@ to setup rendering to a texture, and then call @SDL_RenderPresent()@ normally to complete drawing a frame.
+--
+--     [Returns]: a valid rendering context or NULL if there was an error; call SDL_GetError() for more information.
+--
+--     [Thread safety]: If this function is called with a valid GPU device, it should be called on the thread that created the device. If this function is called with a valid window, it should be called on the thread that created the window.
+--
+--     @since 3.4.0
+--
+--     [See also]: 'sDL_CreateRendererWithProperties', 'sDL_GetGPURendererDevice', SDL_CreateGPUShader, 'sDL_CreateGPURenderState', 'sDL_SetGPURenderState'
+--
+--     [C declaration]: @SDL_CreateGPURenderer@, defined at @SDL3\/SDL_render.h 387:44@
+sDL_CreateGPURenderer
+  :: BG.Ptr SDL3.Sys.Bindgen.Gpu.SDL_GPUDevice
+  -- ^
+  --
+  --           [@device@]: the GPU device to use with the renderer, or NULL to create a device.
+  -> BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
+  -- ^
+  --
+  --           [@window@]: the window where rendering is displayed, or NULL to create an offscreen renderer.
+  -> IO (BG.Ptr SDL_Renderer)
+sDL_CreateGPURenderer = hs_bindgen_6efbbd05c80e02d0
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetGPURendererDevice@
+foreign import ccall safe "hs_bindgen_aa8cead59246ca07"
+  hs_bindgen_aa8cead59246ca07_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetGPURendererDevice@
+hs_bindgen_aa8cead59246ca07
+  :: BG.Ptr SDL_Renderer
+  -> IO (BG.Ptr SDL3.Sys.Bindgen.Gpu.SDL_GPUDevice)
+hs_bindgen_aa8cead59246ca07 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_aa8cead59246ca07_base (BG.toFFIType x0))
+
+-- | Return the GPU device used by a renderer.
+--
+--     [Returns]: the GPU device used by the renderer, or NULL if the renderer is not a GPU renderer; call SDL_GetError() for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.4.0
+--
+--     [C declaration]: @SDL_GetGPURendererDevice@, defined at @SDL3\/SDL_render.h 400:45@
+sDL_GetGPURendererDevice
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> IO (BG.Ptr SDL3.Sys.Bindgen.Gpu.SDL_GPUDevice)
+sDL_GetGPURendererDevice =
+  hs_bindgen_aa8cead59246ca07
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateSoftwareRenderer@
+foreign import ccall safe "hs_bindgen_154eef5a69d9f0de"
+  hs_bindgen_154eef5a69d9f0de_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateSoftwareRenderer@
+hs_bindgen_154eef5a69d9f0de
+  :: BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface
+  -> IO (BG.Ptr SDL_Renderer)
+hs_bindgen_154eef5a69d9f0de =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_154eef5a69d9f0de_base (BG.toFFIType x0))
+
+-- | Create a 2D software rendering context for a surface.
+--
+--     Two other APIs which can be used to create 'SDL_Renderer': @SDL_CreateRenderer()@ and @SDL_CreateWindowAndRenderer()@. These can /also/ create a software renderer, but they are intended to be used with an SDL_Window as the final destination and not an SDL_Surface.
+--
+--     [Returns]: a valid rendering context or NULL if there was an error; call SDL_GetError() for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_DestroyRenderer'
+--
+--     [C declaration]: @SDL_CreateSoftwareRenderer@, defined at @SDL3\/SDL_render.h 421:44@
+sDL_CreateSoftwareRenderer
+  :: BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface
+  -- ^
+  --
+  --           [@surface@]: the SDL_Surface structure representing the surface where rendering is done.
+  -> IO (BG.Ptr SDL_Renderer)
+sDL_CreateSoftwareRenderer =
+  hs_bindgen_154eef5a69d9f0de
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderer@
+foreign import ccall safe "hs_bindgen_6b28e604d7d033f7"
+  hs_bindgen_6b28e604d7d033f7_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderer@
+hs_bindgen_6b28e604d7d033f7
+  :: BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
+  -> IO (BG.Ptr SDL_Renderer)
+hs_bindgen_6b28e604d7d033f7 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_6b28e604d7d033f7_base (BG.toFFIType x0))
+
+-- | Get the renderer associated with a window.
+--
+--     [Returns]: the rendering context on success or NULL on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_GetRenderer@, defined at @SDL3\/SDL_render.h 434:44@
+sDL_GetRenderer
+  :: BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
+  -- ^
+  --
+  --           [@window@]: the window to query.
+  -> IO (BG.Ptr SDL_Renderer)
+sDL_GetRenderer = hs_bindgen_6b28e604d7d033f7
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderWindow@
+foreign import ccall safe "hs_bindgen_b22b3e4ae10bdb0d"
+  hs_bindgen_b22b3e4ae10bdb0d_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderWindow@
+hs_bindgen_b22b3e4ae10bdb0d
+  :: BG.Ptr SDL_Renderer
+  -> IO (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window)
+hs_bindgen_b22b3e4ae10bdb0d =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_b22b3e4ae10bdb0d_base (BG.toFFIType x0))
+
+-- | Get the window associated with a renderer.
+--
+--     [Returns]: the window on success or NULL on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_GetRenderWindow@, defined at @SDL3\/SDL_render.h 447:42@
+sDL_GetRenderWindow
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer to query.
+  -> IO (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window)
+sDL_GetRenderWindow = hs_bindgen_b22b3e4ae10bdb0d
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRendererName@
+foreign import ccall safe "hs_bindgen_599c50262188b811"
+  hs_bindgen_599c50262188b811_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRendererName@
+hs_bindgen_599c50262188b811
+  :: BG.Ptr SDL_Renderer
+  -> IO (PtrConst.PtrConst BG.CChar)
+hs_bindgen_599c50262188b811 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_599c50262188b811_base (BG.toFFIType x0))
+
+-- | Get the name of a renderer.
+--
+--     [Returns]: the name of the selected renderer, or NULL on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_CreateRenderer', 'sDL_CreateRendererWithProperties'
+--
+--     [C declaration]: @SDL_GetRendererName@, defined at @SDL3\/SDL_render.h 463:42@
+sDL_GetRendererName
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> IO (PtrConst.PtrConst BG.CChar)
+sDL_GetRendererName = hs_bindgen_599c50262188b811
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRendererProperties@
+foreign import ccall safe "hs_bindgen_4a11529b7951c637"
+  hs_bindgen_4a11529b7951c637_base
+    :: BG.Ptr BG.Void
+    -> IO HsBindgen.Runtime.LibC.Word32
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRendererProperties@
+hs_bindgen_4a11529b7951c637
+  :: BG.Ptr SDL_Renderer
+  -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
+hs_bindgen_4a11529b7951c637 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_4a11529b7951c637_base (BG.toFFIType x0))
+
+-- | Get the properties associated with a renderer.
+--
+--     The following read-only properties are provided by SDL:
+--
+--     * @'sDL_PROP_RENDERER_NAME_STRING'@: the name of the rendering driver
+--
+--     * @'sDL_PROP_RENDERER_WINDOW_POINTER'@: the window where rendering is displayed, if any
+--
+--     * @'sDL_PROP_RENDERER_SURFACE_POINTER'@: the surface where rendering is displayed, if this is a software renderer without a window
+--
+--     * @'sDL_PROP_RENDERER_VSYNC_NUMBER'@: the current vsync setting
+--
+--     * @'sDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER'@: the maximum texture width and height
+--
+--     * @'sDL_PROP_RENDERER_TEXTURE_FORMATS_POINTER'@: a (const SDL_PixelFormat *) array of pixel formats, terminated with SDL_PIXELFORMAT_UNKNOWN, representing the available texture formats for this renderer.
+--
+--     * @'sDL_PROP_RENDERER_TEXTURE_WRAPPING_BOOLEAN'@: true if the renderer supports SDL_TEXTURE_ADDRESS_WRAP on non-power-of-two textures.
+--
+--     * @'sDL_PROP_RENDERER_OUTPUT_COLORSPACE_NUMBER'@: an SDL_Colorspace value describing the colorspace for output to the display, defaults to SDL_COLORSPACE_SRGB.
+--
+--     * @'sDL_PROP_RENDERER_HDR_ENABLED_BOOLEAN'@: true if the output colorspace is SDL_COLORSPACE_SRGB_LINEAR and the renderer is showing on a display with HDR enabled. This property can change dynamically when SDL_EVENT_WINDOW_HDR_STATE_CHANGED is sent.
+--
+--     * @'sDL_PROP_RENDERER_SDR_WHITE_POINT_FLOAT'@: the value of SDR white in the SDL_COLORSPACE_SRGB_LINEAR colorspace. When HDR is enabled, this value is automatically multiplied into the color scale. This property can change dynamically when SDL_EVENT_WINDOW_HDR_STATE_CHANGED is sent.
+--
+--     * @'sDL_PROP_RENDERER_HDR_HEADROOM_FLOAT'@: the additional high dynamic range that can be displayed, in terms of the SDR white point. When HDR is not enabled, this will be 1.0. This property can change dynamically when SDL_EVENT_WINDOW_HDR_STATE_CHANGED is sent.
+--
+--     With the direct3d renderer:
+--
+--     * @'sDL_PROP_RENDERER_D3D9_DEVICE_POINTER'@: the IDirect3DDevice9 associated with the renderer
+--
+--     With the direct3d11 renderer:
+--
+--     * @'sDL_PROP_RENDERER_D3D11_DEVICE_POINTER'@: the ID3D11Device associated with the renderer
+--
+--     * @'sDL_PROP_RENDERER_D3D11_SWAPCHAIN_POINTER'@: the IDXGISwapChain1 associated with the renderer. This may change when the window is resized.
+--
+--     With the direct3d12 renderer:
+--
+--     * @'sDL_PROP_RENDERER_D3D12_DEVICE_POINTER'@: the ID3D12Device associated with the renderer
+--
+--     * @'sDL_PROP_RENDERER_D3D12_SWAPCHAIN_POINTER'@: the IDXGISwapChain4 associated with the renderer.
+--
+--     * @'sDL_PROP_RENDERER_D3D12_COMMAND_QUEUE_POINTER'@: the ID3D12CommandQueue associated with the renderer
+--
+--     With the vulkan renderer:
+--
+--     * @'sDL_PROP_RENDERER_VULKAN_INSTANCE_POINTER'@: the VkInstance associated with the renderer
+--
+--     * @'sDL_PROP_RENDERER_VULKAN_SURFACE_NUMBER'@: the VkSurfaceKHR associated with the renderer
+--
+--     * @'sDL_PROP_RENDERER_VULKAN_PHYSICAL_DEVICE_POINTER'@: the VkPhysicalDevice associated with the renderer
+--
+--     * @'sDL_PROP_RENDERER_VULKAN_DEVICE_POINTER'@: the VkDevice associated with the renderer
+--
+--     * @'sDL_PROP_RENDERER_VULKAN_GRAPHICS_QUEUE_FAMILY_INDEX_NUMBER'@: the queue family index used for rendering
+--
+--     * @'sDL_PROP_RENDERER_VULKAN_PRESENT_QUEUE_FAMILY_INDEX_NUMBER'@: the queue family index used for presentation
+--
+--     * @'sDL_PROP_RENDERER_VULKAN_SWAPCHAIN_IMAGE_COUNT_NUMBER'@: the number of swapchain images, or potential frames in flight, used by the Vulkan renderer
+--
+--     With the gpu renderer:
+--
+--     * @'sDL_PROP_RENDERER_GPU_DEVICE_POINTER'@: the SDL_GPUDevice associated with the renderer
+--
+--     [Returns]: a valid property ID on success or 0 on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_GetRendererProperties@, defined at @SDL3\/SDL_render.h 551:46@
+sDL_GetRendererProperties
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
+sDL_GetRendererProperties =
+  hs_bindgen_4a11529b7951c637
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderOutputSize@
+foreign import ccall safe "hs_bindgen_1d433c9827126af7"
+  hs_bindgen_1d433c9827126af7_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderOutputSize@
+hs_bindgen_1d433c9827126af7
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr BG.CInt
+  -> BG.Ptr BG.CInt
+  -> IO BG.CBool
+hs_bindgen_1d433c9827126af7 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_1d433c9827126af7_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Get the output size in pixels of a rendering context.
+--
+--     This returns the true output size in pixels, ignoring any render targets or logical size and presentation.
+--
+--     For the output size of the current rendering target, with logical size adjustments, use @SDL_GetCurrentRenderOutputSize()@ instead.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetCurrentRenderOutputSize'
+--
+--     [C declaration]: @SDL_GetRenderOutputSize@, defined at @SDL3\/SDL_render.h 600:34@
+sDL_GetRenderOutputSize
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr BG.CInt
+  -- ^
+  --
+  --           [@w@]: a pointer filled in with the width in pixels.
+  -> BG.Ptr BG.CInt
+  -- ^
+  --
+  --           [@h@]: a pointer filled in with the height in pixels.
+  -> IO BG.CBool
+sDL_GetRenderOutputSize = hs_bindgen_1d433c9827126af7
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetCurrentRenderOutputSize@
+foreign import ccall safe "hs_bindgen_5d30db125155788b"
+  hs_bindgen_5d30db125155788b_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetCurrentRenderOutputSize@
+hs_bindgen_5d30db125155788b
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr BG.CInt
+  -> BG.Ptr BG.CInt
+  -> IO BG.CBool
+hs_bindgen_5d30db125155788b =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_5d30db125155788b_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Get the current output size in pixels of a rendering context.
+--
+--     If a rendering target is active, this will return the size of the rendering target in pixels, otherwise return the value of @SDL_GetRenderOutputSize()@.
+--
+--     Rendering target or not, the output will be adjusted by the current logical presentation state, dictated by @SDL_SetRenderLogicalPresentation()@.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetRenderOutputSize'
+--
+--     [C declaration]: @SDL_GetCurrentRenderOutputSize@, defined at @SDL3\/SDL_render.h 623:34@
+sDL_GetCurrentRenderOutputSize
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr BG.CInt
+  -- ^
+  --
+  --           [@w@]: a pointer filled in with the current width.
+  -> BG.Ptr BG.CInt
+  -- ^
+  --
+  --           [@h@]: a pointer filled in with the current height.
+  -> IO BG.CBool
+sDL_GetCurrentRenderOutputSize =
+  hs_bindgen_5d30db125155788b
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateTexture@
+foreign import ccall safe "hs_bindgen_052b6ffc7143143e"
+  hs_bindgen_052b6ffc7143143e_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.Support.CUInt
+    -> BG.CUInt
+    -> BG.CInt
+    -> BG.CInt
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateTexture@
+hs_bindgen_052b6ffc7143143e
+  :: BG.Ptr SDL_Renderer
+  -> SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -> SDL_TextureAccess
+  -> BG.CInt
+  -> BG.CInt
+  -> IO (BG.Ptr SDL_Texture)
+hs_bindgen_052b6ffc7143143e =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_052b6ffc7143143e_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
+
+-- | Create a texture for a rendering context.
+--
+--     The contents of a texture when first created are not defined.
+--
+--     [Returns]: the created texture or NULL on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_CreateTextureFromSurface', 'sDL_CreateTextureWithProperties', 'sDL_DestroyTexture', 'sDL_GetTextureSize', 'sDL_UpdateTexture'
+--
+--     [C declaration]: @SDL_CreateTexture@, defined at @SDL3\/SDL_render.h 648:43@
+sDL_CreateTexture
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -- ^
+  --
+  --           [@format@]: one of the enumerated values in SDL_PixelFormat.
+  -> SDL_TextureAccess
+  -- ^
+  --
+  --           [@access@]: one of the enumerated values in 'SDL_TextureAccess'.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@w@]: the width of the texture in pixels.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@h@]: the height of the texture in pixels.
+  -> IO (BG.Ptr SDL_Texture)
+sDL_CreateTexture = hs_bindgen_052b6ffc7143143e
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateTextureFromSurface@
+foreign import ccall safe "hs_bindgen_4d23668000d5b53c"
+  hs_bindgen_4d23668000d5b53c_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateTextureFromSurface@
+hs_bindgen_4d23668000d5b53c
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface
+  -> IO (BG.Ptr SDL_Texture)
+hs_bindgen_4d23668000d5b53c =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_4d23668000d5b53c_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Create a texture from an existing surface.
+--
+--     The surface is not modified or freed by this function.
+--
+--     The 'SDL_TextureAccess' hint for the created texture is @SDL_TEXTUREACCESS_STATIC@.
+--
+--     The pixel format of the created texture may be different from the pixel format of the surface, and can be queried using the SDL_PROP_TEXTURE_FORMAT_NUMBER property.
+--
+--     [Returns]: the created texture or NULL on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_CreateTexture', 'sDL_CreateTextureWithProperties', 'sDL_DestroyTexture'
+--
+--     [C declaration]: @SDL_CreateTextureFromSurface@, defined at @SDL3\/SDL_render.h 676:43@
+sDL_CreateTextureFromSurface
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface
+  -- ^
+  --
+  --           [@surface@]: the SDL_Surface structure containing pixel data used to fill the texture.
+  -> IO (BG.Ptr SDL_Texture)
+sDL_CreateTextureFromSurface =
+  hs_bindgen_4d23668000d5b53c
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateTextureWithProperties@
+foreign import ccall safe "hs_bindgen_56364d1627b2f54e"
+  hs_bindgen_56364d1627b2f54e_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateTextureWithProperties@
+hs_bindgen_56364d1627b2f54e
+  :: BG.Ptr SDL_Renderer
+  -> SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
+  -> IO (BG.Ptr SDL_Texture)
+hs_bindgen_56364d1627b2f54e =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_56364d1627b2f54e_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Create a texture for a rendering context with the specified properties.
+--
+--     These are the supported properties:
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_COLORSPACE_NUMBER'@: an SDL_Colorspace value describing the texture colorspace, defaults to SDL_COLORSPACE_SRGB_LINEAR for floating point textures, SDL_COLORSPACE_HDR10 for 10-bit textures, SDL_COLORSPACE_SRGB for other RGB textures and SDL_COLORSPACE_JPEG for YUV textures.
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_FORMAT_NUMBER'@: one of the enumerated values in SDL_PixelFormat, defaults to the best RGBA format for the renderer
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_ACCESS_NUMBER'@: one of the enumerated values in 'SDL_TextureAccess', defaults to SDL_TEXTUREACCESS_STATIC
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_WIDTH_NUMBER'@: the width of the texture in pixels, required
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_HEIGHT_NUMBER'@: the height of the texture in pixels, required
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_PALETTE_POINTER'@: an SDL_Palette to use with palettized texture formats. This can be set later with @SDL_SetTexturePalette()@
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_SDR_WHITE_POINT_FLOAT'@: for HDR10 and floating point textures, this defines the value of 100% diffuse white, with higher values being displayed in the High Dynamic Range headroom. This defaults to 100 for HDR10 textures and 1.0 for floating point textures.
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_HDR_HEADROOM_FLOAT'@: for HDR10 and floating point textures, this defines the maximum dynamic range used by the content, in terms of the SDR white point. This would be equivalent to maxCLL \/ SDL_PROP_TEXTURE_CREATE_SDR_WHITE_POINT_FLOAT for HDR10 content. If this is defined, any values outside the range supported by the display will be scaled into the available HDR headroom, otherwise they are clipped.
+--
+--     With the direct3d11 renderer:
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_D3D11_TEXTURE_POINTER'@: the ID3D11Texture2D associated with the texture, if you want to wrap an existing texture.
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_D3D11_TEXTURE_U_POINTER'@: the ID3D11Texture2D associated with the U plane of a YUV texture, if you want to wrap an existing texture.
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_D3D11_TEXTURE_V_POINTER'@: the ID3D11Texture2D associated with the V plane of a YUV texture, if you want to wrap an existing texture.
+--
+--     With the direct3d12 renderer:
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_POINTER'@: the ID3D12Resource associated with the texture, if you want to wrap an existing texture.
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_U_POINTER'@: the ID3D12Resource associated with the U plane of a YUV texture, if you want to wrap an existing texture.
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_V_POINTER'@: the ID3D12Resource associated with the V plane of a YUV texture, if you want to wrap an existing texture.
+--
+--     With the metal renderer:
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_METAL_PIXELBUFFER_POINTER'@: the CVPixelBufferRef associated with the texture, if you want to create a texture from an existing pixel buffer.
+--
+--     With the opengl renderer:
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_NUMBER'@: the GLuint texture associated with the texture, if you want to wrap an existing texture.
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_UV_NUMBER'@: the GLuint texture associated with the UV plane of an NV12 texture, if you want to wrap an existing texture.
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_U_NUMBER'@: the GLuint texture associated with the U plane of a YUV texture, if you want to wrap an existing texture.
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_V_NUMBER'@: the GLuint texture associated with the V plane of a YUV texture, if you want to wrap an existing texture.
+--
+--     With the opengles2 renderer:
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_NUMBER'@: the GLuint texture associated with the texture, if you want to wrap an existing texture.
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_UV_NUMBER'@: the GLuint texture associated with the UV plane of an NV12 texture, if you want to wrap an existing texture.
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_U_NUMBER'@: the GLuint texture associated with the U plane of a YUV texture, if you want to wrap an existing texture.
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_V_NUMBER'@: the GLuint texture associated with the V plane of a YUV texture, if you want to wrap an existing texture.
+--
+--     With the vulkan renderer:
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_VULKAN_TEXTURE_NUMBER'@: the VkImage associated with the texture, if you want to wrap an existing texture.
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_VULKAN_LAYOUT_NUMBER'@: the VkImageLayout for the VkImage, defaults to VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL.
+--
+--     With the GPU renderer:
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_GPU_TEXTURE_POINTER'@: the SDL_GPUTexture associated with the texture, if you want to wrap an existing texture.
+--
+--     * @SDL_PROP_TEXTURE_CREATE_GPU_TEXTURE_UV_NUMBER@: the SDL_GPUTexture associated with the UV plane of an NV12 texture, if you want to wrap an existing texture.
+--
+--     * @SDL_PROP_TEXTURE_CREATE_GPU_TEXTURE_U_NUMBER@: the SDL_GPUTexture associated with the U plane of a YUV texture, if you want to wrap an existing texture.
+--
+--     * @SDL_PROP_TEXTURE_CREATE_GPU_TEXTURE_V_NUMBER@: the SDL_GPUTexture associated with the V plane of a YUV texture, if you want to wrap an existing texture.
+--
+--     [Returns]: the created texture or NULL on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_CreateProperties, 'sDL_CreateTexture', 'sDL_CreateTextureFromSurface', 'sDL_DestroyTexture', 'sDL_GetTextureSize', 'sDL_UpdateTexture'
+--
+--     [C declaration]: @SDL_CreateTextureWithProperties@, defined at @SDL3\/SDL_render.h 804:43@
+sDL_CreateTextureWithProperties
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
+  -- ^
+  --
+  --           [@props@]: the properties to use.
+  -> IO (BG.Ptr SDL_Texture)
+sDL_CreateTextureWithProperties =
+  hs_bindgen_56364d1627b2f54e
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTextureProperties@
+foreign import ccall safe "hs_bindgen_5a086b7bc8bee33d"
+  hs_bindgen_5a086b7bc8bee33d_base
+    :: BG.Ptr BG.Void
+    -> IO HsBindgen.Runtime.LibC.Word32
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTextureProperties@
+hs_bindgen_5a086b7bc8bee33d
+  :: BG.Ptr SDL_Texture
+  -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
+hs_bindgen_5a086b7bc8bee33d =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_5a086b7bc8bee33d_base (BG.toFFIType x0))
+
+-- | Get the properties associated with a texture.
+--
+--     The following read-only properties are provided by SDL:
+--
+--     * @'sDL_PROP_TEXTURE_COLORSPACE_NUMBER'@: an SDL_Colorspace value describing the texture colorspace.
+--
+--     * @'sDL_PROP_TEXTURE_FORMAT_NUMBER'@: one of the enumerated values in SDL_PixelFormat.
+--
+--     * @'sDL_PROP_TEXTURE_ACCESS_NUMBER'@: one of the enumerated values in 'SDL_TextureAccess'.
+--
+--     * @'sDL_PROP_TEXTURE_WIDTH_NUMBER'@: the width of the texture in pixels.
+--
+--     * @'sDL_PROP_TEXTURE_HEIGHT_NUMBER'@: the height of the texture in pixels.
+--
+--     * @'sDL_PROP_TEXTURE_SDR_WHITE_POINT_FLOAT'@: for HDR10 and floating point textures, this defines the value of 100% diffuse white, with higher values being displayed in the High Dynamic Range headroom. This defaults to 100 for HDR10 textures and 1.0 for other textures.
+--
+--     * @'sDL_PROP_TEXTURE_HDR_HEADROOM_FLOAT'@: for HDR10 and floating point textures, this defines the maximum dynamic range used by the content, in terms of the SDR white point. If this is defined, any values outside the range supported by the display will be scaled into the available HDR headroom, otherwise they are clipped. This defaults to 1.0 for SDR textures, 4.0 for HDR10 textures, and no default for floating point textures.
+--
+--     With the direct3d11 renderer:
+--
+--     * @'sDL_PROP_TEXTURE_D3D11_TEXTURE_POINTER'@: the ID3D11Texture2D associated with the texture
+--
+--     * @'sDL_PROP_TEXTURE_D3D11_TEXTURE_U_POINTER'@: the ID3D11Texture2D associated with the U plane of a YUV texture
+--
+--     * @'sDL_PROP_TEXTURE_D3D11_TEXTURE_V_POINTER'@: the ID3D11Texture2D associated with the V plane of a YUV texture
+--
+--     With the direct3d12 renderer:
+--
+--     * @'sDL_PROP_TEXTURE_D3D12_TEXTURE_POINTER'@: the ID3D12Resource associated with the texture
+--
+--     * @'sDL_PROP_TEXTURE_D3D12_TEXTURE_U_POINTER'@: the ID3D12Resource associated with the U plane of a YUV texture
+--
+--     * @'sDL_PROP_TEXTURE_D3D12_TEXTURE_V_POINTER'@: the ID3D12Resource associated with the V plane of a YUV texture
+--
+--     With the vulkan renderer:
+--
+--     * @'sDL_PROP_TEXTURE_VULKAN_TEXTURE_NUMBER'@: the VkImage associated with the texture
+--
+--     With the opengl renderer:
+--
+--     * @'sDL_PROP_TEXTURE_OPENGL_TEXTURE_NUMBER'@: the GLuint texture associated with the texture
+--
+--     * @'sDL_PROP_TEXTURE_OPENGL_TEXTURE_UV_NUMBER'@: the GLuint texture associated with the UV plane of an NV12 texture
+--
+--     * @'sDL_PROP_TEXTURE_OPENGL_TEXTURE_U_NUMBER'@: the GLuint texture associated with the U plane of a YUV texture
+--
+--     * @'sDL_PROP_TEXTURE_OPENGL_TEXTURE_V_NUMBER'@: the GLuint texture associated with the V plane of a YUV texture
+--
+--     * @'sDL_PROP_TEXTURE_OPENGL_TEXTURE_TARGET_NUMBER'@: the GLenum for the texture target (@GL_TEXTURE_2D@, @GL_TEXTURE_RECTANGLE_ARB@, etc)
+--
+--     * @'sDL_PROP_TEXTURE_OPENGL_TEX_W_FLOAT'@: the texture coordinate width of the texture (0.0 - 1.0)
+--
+--     * @'sDL_PROP_TEXTURE_OPENGL_TEX_H_FLOAT'@: the texture coordinate height of the texture (0.0 - 1.0)
+--
+--     With the opengles2 renderer:
+--
+--     * @'sDL_PROP_TEXTURE_OPENGLES2_TEXTURE_NUMBER'@: the GLuint texture associated with the texture
+--
+--     * @'sDL_PROP_TEXTURE_OPENGLES2_TEXTURE_UV_NUMBER'@: the GLuint texture associated with the UV plane of an NV12 texture
+--
+--     * @'sDL_PROP_TEXTURE_OPENGLES2_TEXTURE_U_NUMBER'@: the GLuint texture associated with the U plane of a YUV texture
+--
+--     * @'sDL_PROP_TEXTURE_OPENGLES2_TEXTURE_V_NUMBER'@: the GLuint texture associated with the V plane of a YUV texture
+--
+--     * @'sDL_PROP_TEXTURE_OPENGLES2_TEXTURE_TARGET_NUMBER'@: the GLenum for the texture target (@GL_TEXTURE_2D@, @GL_TEXTURE_EXTERNAL_OES@, etc)
+--
+--     With the gpu renderer:
+--
+--     * @'sDL_PROP_TEXTURE_GPU_TEXTURE_POINTER'@: the SDL_GPUTexture associated with the texture
+--
+--     * @'sDL_PROP_TEXTURE_GPU_TEXTURE_UV_POINTER'@: the SDL_GPUTexture associated with the UV plane of an NV12 texture
+--
+--     * @'sDL_PROP_TEXTURE_GPU_TEXTURE_U_POINTER'@: the SDL_GPUTexture associated with the U plane of a YUV texture
+--
+--     * @'sDL_PROP_TEXTURE_GPU_TEXTURE_V_POINTER'@: the SDL_GPUTexture associated with the V plane of a YUV texture
+--
+--     [Returns]: a valid property ID on success or 0 on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_GetTextureProperties@, defined at @SDL3\/SDL_render.h 933:46@
+sDL_GetTextureProperties
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to query.
+  -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
+sDL_GetTextureProperties =
+  hs_bindgen_5a086b7bc8bee33d
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRendererFromTexture@
+foreign import ccall safe "hs_bindgen_952d60b9be750f80"
+  hs_bindgen_952d60b9be750f80_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRendererFromTexture@
+hs_bindgen_952d60b9be750f80
+  :: BG.Ptr SDL_Texture
+  -> IO (BG.Ptr SDL_Renderer)
+hs_bindgen_952d60b9be750f80 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_952d60b9be750f80_base (BG.toFFIType x0))
+
+-- | Get the renderer that created an 'SDL_Texture'.
+--
+--     [Returns]: a pointer to the 'SDL_Renderer' that created the texture, or NULL on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_GetRendererFromTexture@, defined at @SDL3\/SDL_render.h 977:44@
+sDL_GetRendererFromTexture
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to query.
+  -> IO (BG.Ptr SDL_Renderer)
+sDL_GetRendererFromTexture =
+  hs_bindgen_952d60b9be750f80
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTextureSize@
+foreign import ccall safe "hs_bindgen_593080867d87a9cb"
+  hs_bindgen_593080867d87a9cb_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTextureSize@
+hs_bindgen_593080867d87a9cb
+  :: BG.Ptr SDL_Texture
+  -> BG.Ptr BG.CFloat
+  -> BG.Ptr BG.CFloat
+  -> IO BG.CBool
+hs_bindgen_593080867d87a9cb =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_593080867d87a9cb_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Get the size of a texture, as floating point values.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_GetTextureSize@, defined at @SDL3\/SDL_render.h 994:34@
+sDL_GetTextureSize
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to query.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@w@]: a pointer filled in with the width of the texture in pixels. This argument can be NULL if you don\'t need this information.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@h@]: a pointer filled in with the height of the texture in pixels. This argument can be NULL if you don\'t need this information.
+  -> IO BG.CBool
+sDL_GetTextureSize = hs_bindgen_593080867d87a9cb
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetTexturePalette@
+foreign import ccall safe "hs_bindgen_c0c58495bafd931b"
+  hs_bindgen_c0c58495bafd931b_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetTexturePalette@
+hs_bindgen_c0c58495bafd931b
+  :: BG.Ptr SDL_Texture
+  -> BG.Ptr SDL3.Sys.Bindgen.Pixels.SDL_Palette
+  -> IO BG.CBool
+hs_bindgen_c0c58495bafd931b =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_c0c58495bafd931b_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Set the palette used by a texture.
+--
+--     Setting the palette keeps an internal reference to the palette, which can be safely destroyed afterwards.
+--
+--     A single palette can be shared with many textures.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.4.0
+--
+--     [See also]: SDL_CreatePalette, 'sDL_GetTexturePalette'
+--
+--     [C declaration]: @SDL_SetTexturePalette@, defined at @SDL3\/SDL_render.h 1016:34@
+sDL_SetTexturePalette
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to update.
+  -> BG.Ptr SDL3.Sys.Bindgen.Pixels.SDL_Palette
+  -- ^
+  --
+  --           [@palette@]: the SDL_Palette structure to use.
+  -> IO BG.CBool
+sDL_SetTexturePalette = hs_bindgen_c0c58495bafd931b
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTexturePalette@
+foreign import ccall safe "hs_bindgen_23b273d543966d78"
+  hs_bindgen_23b273d543966d78_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTexturePalette@
+hs_bindgen_23b273d543966d78
+  :: BG.Ptr SDL_Texture
+  -> IO (BG.Ptr SDL3.Sys.Bindgen.Pixels.SDL_Palette)
+hs_bindgen_23b273d543966d78 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_23b273d543966d78_base (BG.toFFIType x0))
+
+-- | Get the palette used by a texture.
+--
+--     [Returns]: a pointer to the palette used by the texture, or NULL if there is no palette used.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.4.0
+--
+--     [See also]: 'sDL_SetTexturePalette'
+--
+--     [C declaration]: @SDL_GetTexturePalette@, defined at @SDL3\/SDL_render.h 1031:43@
+sDL_GetTexturePalette
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to query.
+  -> IO (BG.Ptr SDL3.Sys.Bindgen.Pixels.SDL_Palette)
+sDL_GetTexturePalette = hs_bindgen_23b273d543966d78
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetTextureColorMod@
+foreign import ccall safe "hs_bindgen_823afe6398e7b8c5"
+  hs_bindgen_823afe6398e7b8c5_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetTextureColorMod@
+hs_bindgen_823afe6398e7b8c5
+  :: BG.Ptr SDL_Texture
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> IO BG.CBool
+hs_bindgen_823afe6398e7b8c5 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_823afe6398e7b8c5_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Set an additional color value multiplied into render copy operations.
+--
+--     When this texture is rendered, during the copy operation each source color channel is modulated by the appropriate color value according to the following formula:
+--
+--     @srcC = srcC * (color \/ 255)@
+--
+--     Color modulation is not always supported by the renderer; it will return false if color modulation is not supported.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetTextureColorMod', 'sDL_SetTextureAlphaMod', 'sDL_SetTextureColorModFloat'
+--
+--     [C declaration]: @SDL_SetTextureColorMod@, defined at @SDL3\/SDL_render.h 1060:34@
+sDL_SetTextureColorMod
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to update.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@r@]: the red color value multiplied into copy operations.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@g@]: the green color value multiplied into copy operations.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@b@]: the blue color value multiplied into copy operations.
+  -> IO BG.CBool
+sDL_SetTextureColorMod = hs_bindgen_823afe6398e7b8c5
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetTextureColorModFloat@
+foreign import ccall safe "hs_bindgen_7ad37bb707c0047a"
+  hs_bindgen_7ad37bb707c0047a_base
+    :: BG.Ptr BG.Void
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.CFloat
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetTextureColorModFloat@
+hs_bindgen_7ad37bb707c0047a
+  :: BG.Ptr SDL_Texture
+  -> BG.CFloat
+  -> BG.CFloat
+  -> BG.CFloat
+  -> IO BG.CBool
+hs_bindgen_7ad37bb707c0047a =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_7ad37bb707c0047a_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Set an additional color value multiplied into render copy operations.
+--
+--     When this texture is rendered, during the copy operation each source color channel is modulated by the appropriate color value according to the following formula:
+--
+--     @srcC = srcC * color@
+--
+--     Color modulation is not always supported by the renderer; it will return false if color modulation is not supported.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetTextureColorModFloat', 'sDL_SetTextureAlphaModFloat', 'sDL_SetTextureColorMod'
+--
+--     [C declaration]: @SDL_SetTextureColorModFloat@, defined at @SDL3\/SDL_render.h 1090:34@
+sDL_SetTextureColorModFloat
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to update.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@r@]: the red color value multiplied into copy operations.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@g@]: the green color value multiplied into copy operations.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@b@]: the blue color value multiplied into copy operations.
+  -> IO BG.CBool
+sDL_SetTextureColorModFloat =
+  hs_bindgen_7ad37bb707c0047a
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTextureColorMod@
+foreign import ccall safe "hs_bindgen_7a0ccf77a4fdfc3e"
+  hs_bindgen_7a0ccf77a4fdfc3e_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTextureColorMod@
+hs_bindgen_7a0ccf77a4fdfc3e
+  :: BG.Ptr SDL_Texture
+  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> IO BG.CBool
+hs_bindgen_7a0ccf77a4fdfc3e =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_7a0ccf77a4fdfc3e_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Get the additional color value multiplied into render copy operations.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetTextureAlphaMod', 'sDL_GetTextureColorModFloat', 'sDL_SetTextureColorMod'
+--
+--     [C declaration]: @SDL_GetTextureColorMod@, defined at @SDL3\/SDL_render.h 1111:34@
+sDL_GetTextureColorMod
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to query.
+  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@r@]: a pointer filled in with the current red color value.
+  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@g@]: a pointer filled in with the current green color value.
+  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@b@]: a pointer filled in with the current blue color value.
+  -> IO BG.CBool
+sDL_GetTextureColorMod = hs_bindgen_7a0ccf77a4fdfc3e
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTextureColorModFloat@
+foreign import ccall safe "hs_bindgen_842e59bbba82a5a3"
+  hs_bindgen_842e59bbba82a5a3_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTextureColorModFloat@
+hs_bindgen_842e59bbba82a5a3
+  :: BG.Ptr SDL_Texture
+  -> BG.Ptr BG.CFloat
+  -> BG.Ptr BG.CFloat
+  -> BG.Ptr BG.CFloat
+  -> IO BG.CBool
+hs_bindgen_842e59bbba82a5a3 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_842e59bbba82a5a3_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Get the additional color value multiplied into render copy operations.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetTextureAlphaModFloat', 'sDL_GetTextureColorMod', 'sDL_SetTextureColorModFloat'
+--
+--     [C declaration]: @SDL_GetTextureColorModFloat@, defined at @SDL3\/SDL_render.h 1131:34@
+sDL_GetTextureColorModFloat
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to query.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@r@]: a pointer filled in with the current red color value.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@g@]: a pointer filled in with the current green color value.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@b@]: a pointer filled in with the current blue color value.
+  -> IO BG.CBool
+sDL_GetTextureColorModFloat =
+  hs_bindgen_842e59bbba82a5a3
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetTextureAlphaMod@
+foreign import ccall safe "hs_bindgen_cd0da7f365c5d74f"
+  hs_bindgen_cd0da7f365c5d74f_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.Word8
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetTextureAlphaMod@
+hs_bindgen_cd0da7f365c5d74f
+  :: BG.Ptr SDL_Texture
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> IO BG.CBool
+hs_bindgen_cd0da7f365c5d74f =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_cd0da7f365c5d74f_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Set an additional alpha value multiplied into render copy operations.
+--
+--     When this texture is rendered, during the copy operation the source alpha value is modulated by this alpha value according to the following formula:
+--
+--     @srcA = srcA * (alpha \/ 255)@
+--
+--     Alpha modulation is not always supported by the renderer; it will return false if alpha modulation is not supported.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetTextureAlphaMod', 'sDL_SetTextureAlphaModFloat', 'sDL_SetTextureColorMod'
+--
+--     [C declaration]: @SDL_SetTextureAlphaMod@, defined at @SDL3\/SDL_render.h 1157:34@
+sDL_SetTextureAlphaMod
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to update.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@alpha@]: the source alpha value multiplied into copy operations.
+  -> IO BG.CBool
+sDL_SetTextureAlphaMod = hs_bindgen_cd0da7f365c5d74f
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetTextureAlphaModFloat@
+foreign import ccall safe "hs_bindgen_3c8a499336e4d5a3"
+  hs_bindgen_3c8a499336e4d5a3_base
+    :: BG.Ptr BG.Void
+    -> BG.CFloat
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetTextureAlphaModFloat@
+hs_bindgen_3c8a499336e4d5a3
+  :: BG.Ptr SDL_Texture
+  -> BG.CFloat
+  -> IO BG.CBool
+hs_bindgen_3c8a499336e4d5a3 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_3c8a499336e4d5a3_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Set an additional alpha value multiplied into render copy operations.
+--
+--     When this texture is rendered, during the copy operation the source alpha value is modulated by this alpha value according to the following formula:
+--
+--     @srcA = srcA * alpha@
+--
+--     Alpha modulation is not always supported by the renderer; it will return false if alpha modulation is not supported.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetTextureAlphaModFloat', 'sDL_SetTextureAlphaMod', 'sDL_SetTextureColorModFloat'
+--
+--     [C declaration]: @SDL_SetTextureAlphaModFloat@, defined at @SDL3\/SDL_render.h 1183:34@
+sDL_SetTextureAlphaModFloat
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to update.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@alpha@]: the source alpha value multiplied into copy operations.
+  -> IO BG.CBool
+sDL_SetTextureAlphaModFloat =
+  hs_bindgen_3c8a499336e4d5a3
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTextureAlphaMod@
+foreign import ccall safe "hs_bindgen_d0b8db7f236a27d6"
+  hs_bindgen_d0b8db7f236a27d6_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTextureAlphaMod@
+hs_bindgen_d0b8db7f236a27d6
+  :: BG.Ptr SDL_Texture
+  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> IO BG.CBool
+hs_bindgen_d0b8db7f236a27d6 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_d0b8db7f236a27d6_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Get the additional alpha value multiplied into render copy operations.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetTextureAlphaModFloat', 'sDL_GetTextureColorMod', 'sDL_SetTextureAlphaMod'
+--
+--     [C declaration]: @SDL_GetTextureAlphaMod@, defined at @SDL3\/SDL_render.h 1201:34@
+sDL_GetTextureAlphaMod
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to query.
+  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@alpha@]: a pointer filled in with the current alpha value.
+  -> IO BG.CBool
+sDL_GetTextureAlphaMod = hs_bindgen_d0b8db7f236a27d6
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTextureAlphaModFloat@
+foreign import ccall safe "hs_bindgen_10d5dcf405fda170"
+  hs_bindgen_10d5dcf405fda170_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTextureAlphaModFloat@
+hs_bindgen_10d5dcf405fda170
+  :: BG.Ptr SDL_Texture
+  -> BG.Ptr BG.CFloat
+  -> IO BG.CBool
+hs_bindgen_10d5dcf405fda170 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_10d5dcf405fda170_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Get the additional alpha value multiplied into render copy operations.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetTextureAlphaMod', 'sDL_GetTextureColorModFloat', 'sDL_SetTextureAlphaModFloat'
+--
+--     [C declaration]: @SDL_GetTextureAlphaModFloat@, defined at @SDL3\/SDL_render.h 1219:34@
+sDL_GetTextureAlphaModFloat
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to query.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@alpha@]: a pointer filled in with the current alpha value.
+  -> IO BG.CBool
+sDL_GetTextureAlphaModFloat =
+  hs_bindgen_10d5dcf405fda170
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetTextureBlendMode@
+foreign import ccall safe "hs_bindgen_2881e5a760914ac5"
+  hs_bindgen_2881e5a760914ac5_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetTextureBlendMode@
+hs_bindgen_2881e5a760914ac5
+  :: BG.Ptr SDL_Texture
+  -> SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
+  -> IO BG.CBool
+hs_bindgen_2881e5a760914ac5 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_2881e5a760914ac5_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Set the blend mode for a texture, used by @SDL_RenderTexture()@.
+--
+--     This blend mode is used for any drawing that involves this texture.
+--
+--     If the blend mode is not supported, the closest supported mode is chosen and this function returns false.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetTextureBlendMode', 'sDL_SetRenderDrawBlendMode'
+--
+--     [C declaration]: @SDL_SetTextureBlendMode@, defined at @SDL3\/SDL_render.h 1241:34@
+sDL_SetTextureBlendMode
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to update.
+  -> SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
+  -- ^
+  --
+  --           [@blendMode@]: the SDL_BlendMode to use for texture blending.
+  -> IO BG.CBool
+sDL_SetTextureBlendMode = hs_bindgen_2881e5a760914ac5
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTextureBlendMode@
+foreign import ccall safe "hs_bindgen_816bbcb1b4c3283a"
+  hs_bindgen_816bbcb1b4c3283a_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTextureBlendMode@
+hs_bindgen_816bbcb1b4c3283a
+  :: BG.Ptr SDL_Texture
+  -> BG.Ptr SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
+  -> IO BG.CBool
+hs_bindgen_816bbcb1b4c3283a =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_816bbcb1b4c3283a_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Get the blend mode used for texture copy operations.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_SetTextureBlendMode'
+--
+--     [C declaration]: @SDL_GetTextureBlendMode@, defined at @SDL3\/SDL_render.h 1257:34@
+sDL_GetTextureBlendMode
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to query.
+  -> BG.Ptr SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
+  -- ^
+  --
+  --           [@blendMode@]: a pointer filled in with the current SDL_BlendMode.
+  -> IO BG.CBool
+sDL_GetTextureBlendMode = hs_bindgen_816bbcb1b4c3283a
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetTextureScaleMode@
+foreign import ccall safe "hs_bindgen_f9ee16ea95e7fdf6"
+  hs_bindgen_f9ee16ea95e7fdf6_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.Support.CInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetTextureScaleMode@
+hs_bindgen_f9ee16ea95e7fdf6
+  :: BG.Ptr SDL_Texture
+  -> SDL3.Sys.Bindgen.Surface.SDL_ScaleMode
+  -> IO BG.CBool
+hs_bindgen_f9ee16ea95e7fdf6 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_f9ee16ea95e7fdf6_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Set the scale mode used for texture scale operations.
+--
+--     The default texture scale mode is SDL_SCALEMODE_LINEAR.
+--
+--     If the scale mode is not supported, the closest supported mode is chosen.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetTextureScaleMode'
+--
+--     [C declaration]: @SDL_SetTextureScaleMode@, defined at @SDL3\/SDL_render.h 1277:34@
+sDL_SetTextureScaleMode
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to update.
+  -> SDL3.Sys.Bindgen.Surface.SDL_ScaleMode
+  -- ^
+  --
+  --           [@scaleMode@]: the SDL_ScaleMode to use for texture scaling.
+  -> IO BG.CBool
+sDL_SetTextureScaleMode = hs_bindgen_f9ee16ea95e7fdf6
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTextureScaleMode@
+foreign import ccall safe "hs_bindgen_6de3c22a0ac3ed25"
+  hs_bindgen_6de3c22a0ac3ed25_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetTextureScaleMode@
+hs_bindgen_6de3c22a0ac3ed25
+  :: BG.Ptr SDL_Texture
+  -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_ScaleMode
+  -> IO BG.CBool
+hs_bindgen_6de3c22a0ac3ed25 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_6de3c22a0ac3ed25_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Get the scale mode used for texture scale operations.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_SetTextureScaleMode'
+--
+--     [C declaration]: @SDL_GetTextureScaleMode@, defined at @SDL3\/SDL_render.h 1293:34@
+sDL_GetTextureScaleMode
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to query.
+  -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_ScaleMode
+  -- ^
+  --
+  --           [@scaleMode@]: a pointer filled in with the current scale mode.
+  -> IO BG.CBool
+sDL_GetTextureScaleMode = hs_bindgen_6de3c22a0ac3ed25
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_UpdateTexture@
+foreign import ccall safe "hs_bindgen_34af457e8db29591"
+  hs_bindgen_34af457e8db29591_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_UpdateTexture@
+hs_bindgen_34af457e8db29591
+  :: BG.Ptr SDL_Texture
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -> PtrConst.PtrConst BG.Void
+  -> BG.CInt
+  -> IO BG.CBool
+hs_bindgen_34af457e8db29591 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_34af457e8db29591_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Update the given texture rectangle with new pixel data.
+--
+--     The pixel data must be in the pixel format of the texture, which can be queried using the SDL_PROP_TEXTURE_FORMAT_NUMBER property.
+--
+--     This is a fairly slow function, intended for use with static textures that do not change often.
+--
+--     If the texture is intended to be updated often, it is preferred to create the texture as streaming and use the locking functions referenced below. While this function will work with streaming textures, for optimization reasons you may not get the pixels back if you lock the texture afterward.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_LockTexture', 'sDL_UnlockTexture', 'sDL_UpdateNVTexture', 'sDL_UpdateYUVTexture'
+--
+--     [C declaration]: @SDL_UpdateTexture@, defined at @SDL3\/SDL_render.h 1327:34@
+sDL_UpdateTexture
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to update.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -- ^
+  --
+  --           [@rect@]: an SDL_Rect structure representing the area to update, or NULL to update the entire texture.
+  -> PtrConst.PtrConst BG.Void
+  -- ^
+  --
+  --           [@pixels@]: the raw pixel data in the format of the texture.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@pitch@]: the number of bytes in a row of pixel data, including padding between lines.
+  -> IO BG.CBool
+sDL_UpdateTexture = hs_bindgen_34af457e8db29591
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_UpdateYUVTexture@
+foreign import ccall safe "hs_bindgen_a7b149fabb767cd5"
+  hs_bindgen_a7b149fabb767cd5_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_UpdateYUVTexture@
+hs_bindgen_a7b149fabb767cd5
+  :: BG.Ptr SDL_Texture
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> BG.CInt
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> BG.CInt
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> BG.CInt
+  -> IO BG.CBool
+hs_bindgen_a7b149fabb767cd5 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                \x7 ->
+                  fmap
+                    BG.fromFFIType
+                    ( hs_bindgen_a7b149fabb767cd5_base
+                        (BG.toFFIType x0)
+                        (BG.toFFIType x1)
+                        (BG.toFFIType x2)
+                        (BG.toFFIType x3)
+                        (BG.toFFIType x4)
+                        (BG.toFFIType x5)
+                        (BG.toFFIType x6)
+                        (BG.toFFIType x7)
+                    )
+
+-- | Update a rectangle within a planar YV12 or IYUV texture with new pixel data.
+--
+--     You can use @SDL_UpdateTexture()@ as long as your pixel data is a contiguous block of Y and U\/V planes in the proper order, but this function is available if your pixel data is not contiguous.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_UpdateNVTexture', 'sDL_UpdateTexture'
+--
+--     [C declaration]: @SDL_UpdateYUVTexture@, defined at @SDL3\/SDL_render.h 1359:34@
+sDL_UpdateYUVTexture
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to update.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -- ^
+  --
+  --           [@rect@]: a pointer to the rectangle of pixels to update, or NULL to update the entire texture.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@Yplane@]: the raw pixel data for the Y plane.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@Ypitch@]: the number of bytes between rows of pixel data for the Y plane.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@Uplane@]: the raw pixel data for the U plane.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@Upitch@]: the number of bytes between rows of pixel data for the U plane.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@Vplane@]: the raw pixel data for the V plane.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@Vpitch@]: the number of bytes between rows of pixel data for the V plane.
+  -> IO BG.CBool
+sDL_UpdateYUVTexture = hs_bindgen_a7b149fabb767cd5
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_UpdateNVTexture@
+foreign import ccall safe "hs_bindgen_2d94f5e4965716c8"
+  hs_bindgen_2d94f5e4965716c8_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_UpdateNVTexture@
+hs_bindgen_2d94f5e4965716c8
+  :: BG.Ptr SDL_Texture
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> BG.CInt
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> BG.CInt
+  -> IO BG.CBool
+hs_bindgen_2d94f5e4965716c8 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_2d94f5e4965716c8_base
+                    (BG.toFFIType x0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                    (BG.toFFIType x4)
+                    (BG.toFFIType x5)
+                )
+
+-- | Update a rectangle within a planar NV12 or NV21 texture with new pixels.
+--
+--     You can use @SDL_UpdateTexture()@ as long as your pixel data is a contiguous block of NV12\/21 planes in the proper order, but this function is available if your pixel data is not contiguous.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_UpdateTexture', 'sDL_UpdateYUVTexture'
+--
+--     [C declaration]: @SDL_UpdateNVTexture@, defined at @SDL3\/SDL_render.h 1391:34@
+sDL_UpdateNVTexture
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to update.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -- ^
+  --
+  --           [@rect@]: a pointer to the rectangle of pixels to update, or NULL to update the entire texture.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@Yplane@]: the raw pixel data for the Y plane.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@Ypitch@]: the number of bytes between rows of pixel data for the Y plane.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@UVplane@]: the raw pixel data for the UV plane.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@UVpitch@]: the number of bytes between rows of pixel data for the UV plane.
+  -> IO BG.CBool
+sDL_UpdateNVTexture = hs_bindgen_2d94f5e4965716c8
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_LockTexture@
+foreign import ccall safe "hs_bindgen_b121055dd1158359"
+  hs_bindgen_b121055dd1158359_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_LockTexture@
+hs_bindgen_b121055dd1158359
+  :: BG.Ptr SDL_Texture
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -> BG.Ptr (BG.Ptr BG.Void)
+  -> BG.Ptr BG.CInt
+  -> IO BG.CBool
+hs_bindgen_b121055dd1158359 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_b121055dd1158359_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Lock a portion of the texture for __write-only__ pixel access.
+--
+--     As an optimization, the pixels made available for editing don\'t necessarily contain the old texture data. This is a write-only operation, and if you need to keep a copy of the texture data you should do that at the application level.
+--
+--     You must use @SDL_UnlockTexture()@ to unlock the pixels and apply any changes.
+--
+--     [Returns]: true on success or false if the texture is not valid or was not created with @SDL_TEXTUREACCESS_STREAMING@; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_LockTextureToSurface', 'sDL_UnlockTexture'
+--
+--     [C declaration]: @SDL_LockTexture@, defined at @SDL3\/SDL_render.h 1426:34@
+sDL_LockTexture
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to lock for access, which was created with @SDL_TEXTUREACCESS_STREAMING@.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -- ^
+  --
+  --           [@rect@]: an SDL_Rect structure representing the area to lock for access; NULL to lock the entire texture.
+  -> BG.Ptr (BG.Ptr BG.Void)
+  -- ^
+  --
+  --           [@pixels@]: this is filled in with a pointer to the locked pixels, appropriately offset by the locked area.
+  -> BG.Ptr BG.CInt
+  -- ^
+  --
+  --           [@pitch@]: this is filled in with the pitch of the locked pixels; the pitch is the length of one row in bytes.
+  -> IO BG.CBool
+sDL_LockTexture = hs_bindgen_b121055dd1158359
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_LockTextureToSurface@
+foreign import ccall safe "hs_bindgen_1526f9100ed55b03"
+  hs_bindgen_1526f9100ed55b03_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_LockTextureToSurface@
+hs_bindgen_1526f9100ed55b03
+  :: BG.Ptr SDL_Texture
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -> BG.Ptr (BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface)
+  -> IO BG.CBool
+hs_bindgen_1526f9100ed55b03 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_1526f9100ed55b03_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Lock a portion of the texture for __write-only__ pixel access, and expose it as a SDL surface.
+--
+--     Besides providing an SDL_Surface instead of raw pixel data, this function operates like SDL_LockTexture.
+--
+--     As an optimization, the pixels made available for editing don\'t necessarily contain the old texture data. This is a write-only operation, and if you need to keep a copy of the texture data you should do that at the application level.
+--
+--     You must use @SDL_UnlockTexture()@ to unlock the pixels and apply any changes.
+--
+--     The returned surface is freed internally after calling @SDL_UnlockTexture()@ or @SDL_DestroyTexture()@. The caller should not free it.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_LockTexture', 'sDL_UnlockTexture'
+--
+--     [C declaration]: @SDL_LockTextureToSurface@, defined at @SDL3\/SDL_render.h 1464:34@
+sDL_LockTextureToSurface
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to lock for access, which must be created with @SDL_TEXTUREACCESS_STREAMING@.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -- ^
+  --
+  --           [@rect@]: a pointer to the rectangle to lock for access. If the rect is NULL, the entire texture will be locked.
+  -> BG.Ptr (BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface)
+  -- ^
+  --
+  --           [@surface@]: a pointer to an SDL surface of size __rect__. Don\'t assume any specific pixel content.
+  -> IO BG.CBool
+sDL_LockTextureToSurface =
+  hs_bindgen_1526f9100ed55b03
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_UnlockTexture@
+foreign import ccall safe "hs_bindgen_1159217b1f34f925"
+  hs_bindgen_1159217b1f34f925_base
+    :: BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_UnlockTexture@
+hs_bindgen_1159217b1f34f925
+  :: BG.Ptr SDL_Texture
+  -> IO ()
+hs_bindgen_1159217b1f34f925 =
+  \x0 ->
+    hs_bindgen_1159217b1f34f925_base (BG.toFFIType x0)
+
+-- | Unlock a texture, uploading the changes to video memory, if needed.
+--
+--     __Warning__: Please note that @SDL_LockTexture()@ is intended to be write-only; it will not guarantee the previous contents of the texture will be provided. You must fully initialize any area of a texture that you lock before unlocking it, as the pixels might otherwise be uninitialized memory.
+--
+--     Which is to say: locking and immediately unlocking a texture can result in corrupted textures, depending on the renderer in use.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_LockTexture'
+--
+--     [C declaration]: @SDL_UnlockTexture@, defined at @SDL3\/SDL_render.h 1485:34@
+sDL_UnlockTexture
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: a texture locked by @SDL_LockTexture()@.
+  -> IO ()
+sDL_UnlockTexture = hs_bindgen_1159217b1f34f925
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderTarget@
+foreign import ccall safe "hs_bindgen_4b272fad8dbaa9f4"
+  hs_bindgen_4b272fad8dbaa9f4_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderTarget@
+hs_bindgen_4b272fad8dbaa9f4
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL_Texture
+  -> IO BG.CBool
+hs_bindgen_4b272fad8dbaa9f4 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_4b272fad8dbaa9f4_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Set a texture as the current rendering target.
+--
+--     The default render target is the window for which the renderer was created. To stop rendering to a texture and render to the window again, call this function with a NULL @texture@.
+--
+--     Viewport, cliprect, scale, and logical presentation are unique to each render target. Get and set functions for these states apply to the current render target set by this function, and those states persist on each target when the current render target changes.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetRenderTarget'
+--
+--     [C declaration]: @SDL_SetRenderTarget@, defined at @SDL3\/SDL_render.h 1512:34@
+sDL_SetRenderTarget
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the targeted texture, which must be created with the @SDL_TEXTUREACCESS_TARGET@ flag, or NULL to render to the window instead of a texture.
+  -> IO BG.CBool
+sDL_SetRenderTarget = hs_bindgen_4b272fad8dbaa9f4
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderTarget@
+foreign import ccall safe "hs_bindgen_0f2b08c2b3c8ddb1"
+  hs_bindgen_0f2b08c2b3c8ddb1_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderTarget@
+hs_bindgen_0f2b08c2b3c8ddb1
+  :: BG.Ptr SDL_Renderer
+  -> IO (BG.Ptr SDL_Texture)
+hs_bindgen_0f2b08c2b3c8ddb1 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_0f2b08c2b3c8ddb1_base (BG.toFFIType x0))
+
+-- | Get the current render target.
+--
+--     The default render target is the window for which the renderer was created, and is reported a NULL here.
+--
+--     [Returns]: the current render target or NULL for the default render target.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_SetRenderTarget'
+--
+--     [C declaration]: @SDL_GetRenderTarget@, defined at @SDL3\/SDL_render.h 1529:43@
+sDL_GetRenderTarget
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> IO (BG.Ptr SDL_Texture)
+sDL_GetRenderTarget = hs_bindgen_0f2b08c2b3c8ddb1
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderLogicalPresentation@
+foreign import ccall safe "hs_bindgen_c8bfb4ad8baf9874"
+  hs_bindgen_c8bfb4ad8baf9874_base
+    :: BG.Ptr BG.Void
+    -> BG.CInt
+    -> BG.CInt
+    -> BG.CUInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderLogicalPresentation@
+hs_bindgen_c8bfb4ad8baf9874
+  :: BG.Ptr SDL_Renderer
+  -> BG.CInt
+  -> BG.CInt
+  -> SDL_RendererLogicalPresentation
+  -> IO BG.CBool
+hs_bindgen_c8bfb4ad8baf9874 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_c8bfb4ad8baf9874_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Set a device-independent resolution and presentation mode for rendering.
+--
+--     This function sets the width and height of the logical rendering output. The renderer will act as if the current render target is always the requested dimensions, scaling to the actual resolution as necessary.
+--
+--     This can be useful for games that expect a fixed size, but would like to scale the output to whatever is available, regardless of how a user resizes a window, or if the display is high DPI.
+--
+--     Logical presentation can be used with both render target textures and the renderer\'s window; the state is unique to each render target, and this function sets the state for the current render target. It might be useful to draw to a texture that matches the window dimensions with logical presentation enabled, and then draw that texture across the entire window with logical presentation disabled. Be careful not to render both with logical presentation enabled, however, as this could produce double-letterboxing, etc.
+--
+--     You can disable logical coordinates by setting the mode to SDL_LOGICAL_PRESENTATION_DISABLED, and in that case you get the full pixel resolution of the render target; it is safe to toggle logical presentation during the rendering of a frame: perhaps most of the rendering is done to specific dimensions but to make fonts look sharp, the app turns off logical presentation while drawing text, for example.
+--
+--     You can convert coordinates in an event into rendering coordinates using @SDL_ConvertEventToRenderCoordinates()@.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_ConvertEventToRenderCoordinates', 'sDL_GetRenderLogicalPresentation', 'sDL_GetRenderLogicalPresentationRect'
+--
+--     [C declaration]: @SDL_SetRenderLogicalPresentation@, defined at @SDL3\/SDL_render.h 1576:34@
+sDL_SetRenderLogicalPresentation
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@w@]: the width of the logical resolution.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@h@]: the height of the logical resolution.
+  -> SDL_RendererLogicalPresentation
+  -- ^
+  --
+  --           [@mode@]: the presentation mode used.
+  -> IO BG.CBool
+sDL_SetRenderLogicalPresentation =
+  hs_bindgen_c8bfb4ad8baf9874
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderLogicalPresentation@
+foreign import ccall safe "hs_bindgen_88acfc55c8872d4d"
+  hs_bindgen_88acfc55c8872d4d_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderLogicalPresentation@
+hs_bindgen_88acfc55c8872d4d
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr BG.CInt
+  -> BG.Ptr BG.CInt
+  -> BG.Ptr SDL_RendererLogicalPresentation
+  -> IO BG.CBool
+hs_bindgen_88acfc55c8872d4d =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_88acfc55c8872d4d_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Get device independent resolution and presentation mode for rendering.
+--
+--     This function gets the width and height of the logical rendering output, or 0 if a logical resolution is not enabled.
+--
+--     Each render target has its own logical presentation state. This function gets the state for the current render target.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_SetRenderLogicalPresentation'
+--
+--     [C declaration]: @SDL_GetRenderLogicalPresentation@, defined at @SDL3\/SDL_render.h 1601:34@
+sDL_GetRenderLogicalPresentation
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr BG.CInt
+  -- ^
+  --
+  --           [@w@]: an int filled with the logical presentation width.
+  -> BG.Ptr BG.CInt
+  -- ^
+  --
+  --           [@h@]: an int filled with the logical presentation height.
+  -> BG.Ptr SDL_RendererLogicalPresentation
+  -- ^
+  --
+  --           [@mode@]: a variable filled with the logical presentation mode being used.
+  -> IO BG.CBool
+sDL_GetRenderLogicalPresentation =
+  hs_bindgen_88acfc55c8872d4d
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderLogicalPresentationRect@
+foreign import ccall safe "hs_bindgen_e6080eb5475f066e"
+  hs_bindgen_e6080eb5475f066e_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderLogicalPresentationRect@
+hs_bindgen_e6080eb5475f066e
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -> IO BG.CBool
+hs_bindgen_e6080eb5475f066e =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_e6080eb5475f066e_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Get the final presentation rectangle for rendering.
+--
+--     This function returns the calculated rectangle used for logical presentation, based on the presentation mode and output size. If logical presentation is disabled, it will fill the rectangle with the output size, in pixels.
+--
+--     Each render target has its own logical presentation state. This function gets the rectangle for the current render target.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_SetRenderLogicalPresentation'
+--
+--     [C declaration]: @SDL_GetRenderLogicalPresentationRect@, defined at @SDL3\/SDL_render.h 1626:34@
+sDL_GetRenderLogicalPresentationRect
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -- ^
+  --
+  --           [@rect@]: a pointer filled in with the final presentation rectangle, may be NULL.
+  -> IO BG.CBool
+sDL_GetRenderLogicalPresentationRect =
+  hs_bindgen_e6080eb5475f066e
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderCoordinatesFromWindow@
+foreign import ccall safe "hs_bindgen_2ed6b3e16ff69faf"
+  hs_bindgen_2ed6b3e16ff69faf_base
+    :: BG.Ptr BG.Void
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderCoordinatesFromWindow@
+hs_bindgen_2ed6b3e16ff69faf
+  :: BG.Ptr SDL_Renderer
+  -> BG.CFloat
+  -> BG.CFloat
+  -> BG.Ptr BG.CFloat
+  -> BG.Ptr BG.CFloat
+  -> IO BG.CBool
+hs_bindgen_2ed6b3e16ff69faf =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_2ed6b3e16ff69faf_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
+
+-- | Get a point in render coordinates when given a point in window coordinates.
+--
+--     This takes into account several states:
+--
+--     * The window dimensions.
+--
+--     * The logical presentation settings (SDL_SetRenderLogicalPresentation)
+--
+--     * The scale (SDL_SetRenderScale)
+--
+--     * The viewport (SDL_SetRenderViewport)
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_SetRenderLogicalPresentation', 'sDL_SetRenderScale'
+--
+--     [C declaration]: @SDL_RenderCoordinatesFromWindow@, defined at @SDL3\/SDL_render.h 1653:34@
+sDL_RenderCoordinatesFromWindow
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@window_x@]: the x coordinate in window coordinates.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@window_y@]: the y coordinate in window coordinates.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@x@]: a pointer filled with the x coordinate in render coordinates.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@y@]: a pointer filled with the y coordinate in render coordinates.
+  -> IO BG.CBool
+sDL_RenderCoordinatesFromWindow =
+  hs_bindgen_2ed6b3e16ff69faf
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderCoordinatesToWindow@
+foreign import ccall safe "hs_bindgen_694297dc8b16c606"
+  hs_bindgen_694297dc8b16c606_base
+    :: BG.Ptr BG.Void
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderCoordinatesToWindow@
+hs_bindgen_694297dc8b16c606
+  :: BG.Ptr SDL_Renderer
+  -> BG.CFloat
+  -> BG.CFloat
+  -> BG.Ptr BG.CFloat
+  -> BG.Ptr BG.CFloat
+  -> IO BG.CBool
+hs_bindgen_694297dc8b16c606 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_694297dc8b16c606_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
+
+-- | Get a point in window coordinates when given a point in render coordinates.
+--
+--     This takes into account several states:
+--
+--     * The window dimensions.
+--
+--     * The logical presentation settings (SDL_SetRenderLogicalPresentation)
+--
+--     * The scale (SDL_SetRenderScale)
+--
+--     * The viewport (SDL_SetRenderViewport)
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_SetRenderLogicalPresentation', 'sDL_SetRenderScale', 'sDL_SetRenderViewport'
+--
+--     [C declaration]: @SDL_RenderCoordinatesToWindow@, defined at @SDL3\/SDL_render.h 1683:34@
+sDL_RenderCoordinatesToWindow
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@x@]: the x coordinate in render coordinates.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@y@]: the y coordinate in render coordinates.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@window_x@]: a pointer filled with the x coordinate in window coordinates.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@window_y@]: a pointer filled with the y coordinate in window coordinates.
+  -> IO BG.CBool
+sDL_RenderCoordinatesToWindow =
+  hs_bindgen_694297dc8b16c606
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_ConvertEventToRenderCoordinates@
+foreign import ccall safe "hs_bindgen_4d63449cf75fd80c"
+  hs_bindgen_4d63449cf75fd80c_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_ConvertEventToRenderCoordinates@
+hs_bindgen_4d63449cf75fd80c
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL3.Sys.Bindgen.Events.SDL_Event
+  -> IO BG.CBool
+hs_bindgen_4d63449cf75fd80c =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_4d63449cf75fd80c_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Convert the coordinates in an event to render coordinates.
+--
+--     This takes into account several states:
+--
+--     * The window dimensions.
+--
+--     * The logical presentation settings (SDL_SetRenderLogicalPresentation)
+--
+--     * The scale (SDL_SetRenderScale)
+--
+--     * The viewport (SDL_SetRenderViewport)
+--
+--     Various event types are converted with this function: mouse, touch, pen, etc.
+--
+--     Touch coordinates are converted from normalized coordinates in the window to non-normalized rendering coordinates.
+--
+--     Relative mouse coordinates (xrel and yrel event fields) are /also/ converted. Applications that do not want these fields converted should use @SDL_RenderCoordinatesFromWindow()@ on the specific event fields instead of converting the entire event structure.
+--
+--     Once converted, coordinates may be outside the rendering area.
+--
+--     [Returns]: true if the event is converted or doesn\'t need conversion, or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderCoordinatesFromWindow'
+--
+--     [C declaration]: @SDL_ConvertEventToRenderCoordinates@, defined at @SDL3\/SDL_render.h 1719:34@
+sDL_ConvertEventToRenderCoordinates
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr SDL3.Sys.Bindgen.Events.SDL_Event
+  -- ^
+  --
+  --           [@event@]: the event to modify.
+  -> IO BG.CBool
+sDL_ConvertEventToRenderCoordinates =
+  hs_bindgen_4d63449cf75fd80c
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderViewport@
+foreign import ccall safe "hs_bindgen_6d15f83fef90049f"
+  hs_bindgen_6d15f83fef90049f_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderViewport@
+hs_bindgen_6d15f83fef90049f
+  :: BG.Ptr SDL_Renderer
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -> IO BG.CBool
+hs_bindgen_6d15f83fef90049f =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_6d15f83fef90049f_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Set the drawing area for rendering on the current target.
+--
+--     Drawing will clip to this area (separately from any clipping done with SDL_SetRenderClipRect), and the top left of the area will become coordinate (0, 0) for future drawing commands.
+--
+--     The area\'s width and height must be >= 0.
+--
+--     Each render target has its own viewport. This function sets the viewport for the current render target.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetRenderViewport', 'sDL_RenderViewportSet'
+--
+--     [C declaration]: @SDL_SetRenderViewport@, defined at @SDL3\/SDL_render.h 1746:34@
+sDL_SetRenderViewport
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -- ^
+  --
+  --           [@rect@]: the SDL_Rect structure representing the drawing area, or NULL to set the viewport to the entire target.
+  -> IO BG.CBool
+sDL_SetRenderViewport = hs_bindgen_6d15f83fef90049f
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderViewport@
+foreign import ccall safe "hs_bindgen_b94438b981f1f14c"
+  hs_bindgen_b94438b981f1f14c_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderViewport@
+hs_bindgen_b94438b981f1f14c
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -> IO BG.CBool
+hs_bindgen_b94438b981f1f14c =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_b94438b981f1f14c_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Get the drawing area for the current target.
+--
+--     Each render target has its own viewport. This function gets the viewport for the current render target.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderViewportSet', 'sDL_SetRenderViewport'
+--
+--     [C declaration]: @SDL_GetRenderViewport@, defined at @SDL3\/SDL_render.h 1766:34@
+sDL_GetRenderViewport
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -- ^
+  --
+  --           [@rect@]: an SDL_Rect structure filled in with the current drawing area.
+  -> IO BG.CBool
+sDL_GetRenderViewport = hs_bindgen_b94438b981f1f14c
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderViewportSet@
+foreign import ccall safe "hs_bindgen_a3207f3fc59e8dc9"
+  hs_bindgen_a3207f3fc59e8dc9_base
+    :: BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderViewportSet@
+hs_bindgen_a3207f3fc59e8dc9
+  :: BG.Ptr SDL_Renderer
+  -> IO BG.CBool
+hs_bindgen_a3207f3fc59e8dc9 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a3207f3fc59e8dc9_base (BG.toFFIType x0))
+
+-- | Return whether an explicit rectangle was set as the viewport.
+--
+--     This is useful if you\'re saving and restoring the viewport and want to know whether you should restore a specific rectangle or NULL.
+--
+--     Each render target has its own viewport. This function checks the viewport for the current render target.
+--
+--     [Returns]: true if the viewport was set to a specific rectangle, or false if it was set to NULL (the entire target).
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetRenderViewport', 'sDL_SetRenderViewport'
+--
+--     [C declaration]: @SDL_RenderViewportSet@, defined at @SDL3\/SDL_render.h 1788:34@
+sDL_RenderViewportSet
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> IO BG.CBool
+sDL_RenderViewportSet = hs_bindgen_a3207f3fc59e8dc9
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderSafeArea@
+foreign import ccall safe "hs_bindgen_4eb48f61abc48f1f"
+  hs_bindgen_4eb48f61abc48f1f_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderSafeArea@
+hs_bindgen_4eb48f61abc48f1f
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -> IO BG.CBool
+hs_bindgen_4eb48f61abc48f1f =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_4eb48f61abc48f1f_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Get the safe area for rendering within the current viewport.
+--
+--     Some devices have portions of the screen which are partially obscured or not interactive, possibly due to on-screen controls, curved edges, camera notches, TV overscan, etc. This function provides the area of the current viewport which is safe to have interactible content. You should continue rendering into the rest of the render target, but it should not contain visually important or interactible content.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_GetRenderSafeArea@, defined at @SDL3\/SDL_render.h 1810:34@
+sDL_GetRenderSafeArea
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -- ^
+  --
+  --           [@rect@]: a pointer filled in with the area that is safe for interactive content.
+  -> IO BG.CBool
+sDL_GetRenderSafeArea = hs_bindgen_4eb48f61abc48f1f
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderClipRect@
+foreign import ccall safe "hs_bindgen_8baf3dc3de980190"
+  hs_bindgen_8baf3dc3de980190_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderClipRect@
+hs_bindgen_8baf3dc3de980190
+  :: BG.Ptr SDL_Renderer
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -> IO BG.CBool
+hs_bindgen_8baf3dc3de980190 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_8baf3dc3de980190_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Set the clip rectangle for rendering on the specified target.
+--
+--     Each render target has its own clip rectangle. This function sets the cliprect for the current render target.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetRenderClipRect', 'sDL_RenderClipEnabled'
+--
+--     [C declaration]: @SDL_SetRenderClipRect@, defined at @SDL3\/SDL_render.h 1831:34@
+sDL_SetRenderClipRect
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -- ^
+  --
+  --           [@rect@]: an SDL_Rect structure representing the clip area, relative to the viewport, or NULL to disable clipping.
+  -> IO BG.CBool
+sDL_SetRenderClipRect = hs_bindgen_8baf3dc3de980190
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderClipRect@
+foreign import ccall safe "hs_bindgen_5b7acae61b400f09"
+  hs_bindgen_5b7acae61b400f09_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderClipRect@
+hs_bindgen_5b7acae61b400f09
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -> IO BG.CBool
+hs_bindgen_5b7acae61b400f09 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_5b7acae61b400f09_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Get the clip rectangle for the current target.
+--
+--     Each render target has its own clip rectangle. This function gets the cliprect for the current render target.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderClipEnabled', 'sDL_SetRenderClipRect'
+--
+--     [C declaration]: @SDL_GetRenderClipRect@, defined at @SDL3\/SDL_render.h 1852:34@
+sDL_GetRenderClipRect
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -- ^
+  --
+  --           [@rect@]: an SDL_Rect structure filled in with the current clipping area or an empty rectangle if clipping is disabled.
+  -> IO BG.CBool
+sDL_GetRenderClipRect = hs_bindgen_5b7acae61b400f09
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderClipEnabled@
+foreign import ccall safe "hs_bindgen_151563301b587559"
+  hs_bindgen_151563301b587559_base
+    :: BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderClipEnabled@
+hs_bindgen_151563301b587559
+  :: BG.Ptr SDL_Renderer
+  -> IO BG.CBool
+hs_bindgen_151563301b587559 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_151563301b587559_base (BG.toFFIType x0))
+
+-- | Get whether clipping is enabled on the given render target.
+--
+--     Each render target has its own clip rectangle. This function checks the cliprect for the current render target.
+--
+--     [Returns]: true if clipping is enabled or false if not; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetRenderClipRect', 'sDL_SetRenderClipRect'
+--
+--     [C declaration]: @SDL_RenderClipEnabled@, defined at @SDL3\/SDL_render.h 1871:34@
+sDL_RenderClipEnabled
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> IO BG.CBool
+sDL_RenderClipEnabled = hs_bindgen_151563301b587559
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderScale@
+foreign import ccall safe "hs_bindgen_edd164833dbcbd86"
+  hs_bindgen_edd164833dbcbd86_base
+    :: BG.Ptr BG.Void
+    -> BG.CFloat
+    -> BG.CFloat
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderScale@
+hs_bindgen_edd164833dbcbd86
+  :: BG.Ptr SDL_Renderer
+  -> BG.CFloat
+  -> BG.CFloat
+  -> IO BG.CBool
+hs_bindgen_edd164833dbcbd86 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_edd164833dbcbd86_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Set the drawing scale for rendering on the current target.
+--
+--     The drawing coordinates are scaled by the x\/y scaling factors before they are used by the renderer. This allows resolution independent drawing with a single coordinate system.
+--
+--     If this results in scaling or subpixel drawing by the rendering backend, it will be handled using the appropriate quality hints. For best results use integer scaling factors.
+--
+--     Each render target has its own scale. This function sets the scale for the current render target.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetRenderScale'
+--
+--     [C declaration]: @SDL_SetRenderScale@, defined at @SDL3\/SDL_render.h 1899:34@
+sDL_SetRenderScale
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@scaleX@]: the horizontal scaling factor.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@scaleY@]: the vertical scaling factor.
+  -> IO BG.CBool
+sDL_SetRenderScale = hs_bindgen_edd164833dbcbd86
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderScale@
+foreign import ccall safe "hs_bindgen_b47b8598441289bb"
+  hs_bindgen_b47b8598441289bb_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderScale@
+hs_bindgen_b47b8598441289bb
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr BG.CFloat
+  -> BG.Ptr BG.CFloat
+  -> IO BG.CBool
+hs_bindgen_b47b8598441289bb =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_b47b8598441289bb_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Get the drawing scale for the current target.
+--
+--     Each render target has its own scale. This function gets the scale for the current render target.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_SetRenderScale'
+--
+--     [C declaration]: @SDL_GetRenderScale@, defined at @SDL3\/SDL_render.h 1919:34@
+sDL_GetRenderScale
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@scaleX@]: a pointer filled in with the horizontal scaling factor.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@scaleY@]: a pointer filled in with the vertical scaling factor.
+  -> IO BG.CBool
+sDL_GetRenderScale = hs_bindgen_b47b8598441289bb
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderDrawColor@
+foreign import ccall safe "hs_bindgen_2a1d5a5e6763970a"
+  hs_bindgen_2a1d5a5e6763970a_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderDrawColor@
+hs_bindgen_2a1d5a5e6763970a
+  :: BG.Ptr SDL_Renderer
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> IO BG.CBool
+hs_bindgen_2a1d5a5e6763970a =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_2a1d5a5e6763970a_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
+
+-- | Set the color used for drawing operations.
+--
+--     Set the color for drawing or filling rectangles, lines, and points, and for @SDL_RenderClear()@.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetRenderDrawColor', 'sDL_SetRenderDrawColorFloat'
+--
+--     [C declaration]: @SDL_SetRenderDrawColor@, defined at @SDL3\/SDL_render.h 1944:34@
+sDL_SetRenderDrawColor
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@r@]: the red value used to draw on the rendering target.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@g@]: the green value used to draw on the rendering target.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@b@]: the blue value used to draw on the rendering target.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@a@]: the alpha value used to draw on the rendering target; usually @SDL_ALPHA_OPAQUE@ (255). Use SDL_SetRenderDrawBlendMode to specify how the alpha channel is used.
+  -> IO BG.CBool
+sDL_SetRenderDrawColor = hs_bindgen_2a1d5a5e6763970a
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderDrawColorFloat@
+foreign import ccall safe "hs_bindgen_deb567c32a3b304a"
+  hs_bindgen_deb567c32a3b304a_base
+    :: BG.Ptr BG.Void
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.CFloat
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderDrawColorFloat@
+hs_bindgen_deb567c32a3b304a
+  :: BG.Ptr SDL_Renderer
+  -> BG.CFloat
+  -> BG.CFloat
+  -> BG.CFloat
+  -> BG.CFloat
+  -> IO BG.CBool
+hs_bindgen_deb567c32a3b304a =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_deb567c32a3b304a_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
+
+-- | Set the color used for drawing operations (Rect, Line and Clear).
+--
+--     Set the color for drawing or filling rectangles, lines, and points, and for @SDL_RenderClear()@.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetRenderDrawColorFloat', 'sDL_SetRenderDrawColor'
+--
+--     [C declaration]: @SDL_SetRenderDrawColorFloat@, defined at @SDL3\/SDL_render.h 1969:34@
+sDL_SetRenderDrawColorFloat
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@r@]: the red value used to draw on the rendering target.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@g@]: the green value used to draw on the rendering target.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@b@]: the blue value used to draw on the rendering target.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@a@]: the alpha value used to draw on the rendering target. Use SDL_SetRenderDrawBlendMode to specify how the alpha channel is used.
+  -> IO BG.CBool
+sDL_SetRenderDrawColorFloat =
+  hs_bindgen_deb567c32a3b304a
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderDrawColor@
+foreign import ccall safe "hs_bindgen_4b8538e6f2e6330e"
+  hs_bindgen_4b8538e6f2e6330e_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderDrawColor@
+hs_bindgen_4b8538e6f2e6330e
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> IO BG.CBool
+hs_bindgen_4b8538e6f2e6330e =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_4b8538e6f2e6330e_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
+
+-- | Get the color used for drawing operations (Rect, Line and Clear).
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetRenderDrawColorFloat', 'sDL_SetRenderDrawColor'
+--
+--     [C declaration]: @SDL_GetRenderDrawColor@, defined at @SDL3\/SDL_render.h 1993:34@
+sDL_GetRenderDrawColor
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@r@]: a pointer filled in with the red value used to draw on the rendering target.
+  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@g@]: a pointer filled in with the green value used to draw on the rendering target.
+  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@b@]: a pointer filled in with the blue value used to draw on the rendering target.
+  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@a@]: a pointer filled in with the alpha value used to draw on the rendering target; usually @SDL_ALPHA_OPAQUE@ (255).
+  -> IO BG.CBool
+sDL_GetRenderDrawColor = hs_bindgen_4b8538e6f2e6330e
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderDrawColorFloat@
+foreign import ccall safe "hs_bindgen_02be3e3dad551497"
+  hs_bindgen_02be3e3dad551497_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderDrawColorFloat@
+hs_bindgen_02be3e3dad551497
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr BG.CFloat
+  -> BG.Ptr BG.CFloat
+  -> BG.Ptr BG.CFloat
+  -> BG.Ptr BG.CFloat
+  -> IO BG.CBool
+hs_bindgen_02be3e3dad551497 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_02be3e3dad551497_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
+
+-- | Get the color used for drawing operations (Rect, Line and Clear).
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_SetRenderDrawColorFloat', 'sDL_GetRenderDrawColor'
+--
+--     [C declaration]: @SDL_GetRenderDrawColorFloat@, defined at @SDL3\/SDL_render.h 2017:34@
+sDL_GetRenderDrawColorFloat
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@r@]: a pointer filled in with the red value used to draw on the rendering target.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@g@]: a pointer filled in with the green value used to draw on the rendering target.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@b@]: a pointer filled in with the blue value used to draw on the rendering target.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@a@]: a pointer filled in with the alpha value used to draw on the rendering target.
+  -> IO BG.CBool
+sDL_GetRenderDrawColorFloat =
+  hs_bindgen_02be3e3dad551497
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderColorScale@
+foreign import ccall safe "hs_bindgen_4b5898833d8f7966"
+  hs_bindgen_4b5898833d8f7966_base
+    :: BG.Ptr BG.Void
+    -> BG.CFloat
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderColorScale@
+hs_bindgen_4b5898833d8f7966
+  :: BG.Ptr SDL_Renderer
+  -> BG.CFloat
+  -> IO BG.CBool
+hs_bindgen_4b5898833d8f7966 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_4b5898833d8f7966_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Set the color scale used for render operations.
+--
+--     The color scale is an additional scale multiplied into the pixel color value while rendering. This can be used to adjust the brightness of colors during HDR rendering, or changing HDR video brightness when playing on an SDR display.
+--
+--     The color scale does not affect the alpha channel, only the color brightness.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetRenderColorScale'
+--
+--     [C declaration]: @SDL_SetRenderColorScale@, defined at @SDL3\/SDL_render.h 2041:34@
+sDL_SetRenderColorScale
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@scale@]: the color scale value.
+  -> IO BG.CBool
+sDL_SetRenderColorScale = hs_bindgen_4b5898833d8f7966
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderColorScale@
+foreign import ccall safe "hs_bindgen_107aa0fcfa767aa5"
+  hs_bindgen_107aa0fcfa767aa5_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderColorScale@
+hs_bindgen_107aa0fcfa767aa5
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr BG.CFloat
+  -> IO BG.CBool
+hs_bindgen_107aa0fcfa767aa5 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_107aa0fcfa767aa5_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Get the color scale used for render operations.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_SetRenderColorScale'
+--
+--     [C declaration]: @SDL_GetRenderColorScale@, defined at @SDL3\/SDL_render.h 2057:34@
+sDL_GetRenderColorScale
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@scale@]: a pointer filled in with the current color scale value.
+  -> IO BG.CBool
+sDL_GetRenderColorScale = hs_bindgen_107aa0fcfa767aa5
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderDrawBlendMode@
+foreign import ccall safe "hs_bindgen_b9c067d52917b47d"
+  hs_bindgen_b9c067d52917b47d_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderDrawBlendMode@
+hs_bindgen_b9c067d52917b47d
+  :: BG.Ptr SDL_Renderer
+  -> SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
+  -> IO BG.CBool
+hs_bindgen_b9c067d52917b47d =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_b9c067d52917b47d_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Set the blend mode used for drawing operations.
+--
+--     This blend mode is used for any drawing that doesn\'t involve textures.
+--
+--     If the blend mode is not supported, the closest supported mode is chosen.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetRenderDrawBlendMode', 'sDL_SetTextureBlendMode'
+--
+--     [C declaration]: @SDL_SetRenderDrawBlendMode@, defined at @SDL3\/SDL_render.h 2078:34@
+sDL_SetRenderDrawBlendMode
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
+  -- ^
+  --
+  --           [@blendMode@]: the SDL_BlendMode to use for blending.
+  -> IO BG.CBool
+sDL_SetRenderDrawBlendMode =
+  hs_bindgen_b9c067d52917b47d
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderDrawBlendMode@
+foreign import ccall safe "hs_bindgen_167da6f1eb78062a"
+  hs_bindgen_167da6f1eb78062a_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderDrawBlendMode@
+hs_bindgen_167da6f1eb78062a
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
+  -> IO BG.CBool
+hs_bindgen_167da6f1eb78062a =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_167da6f1eb78062a_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Get the blend mode used for drawing operations.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_SetRenderDrawBlendMode'
+--
+--     [C declaration]: @SDL_GetRenderDrawBlendMode@, defined at @SDL3\/SDL_render.h 2094:34@
+sDL_GetRenderDrawBlendMode
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
+  -- ^
+  --
+  --           [@blendMode@]: a pointer filled in with the current SDL_BlendMode.
+  -> IO BG.CBool
+sDL_GetRenderDrawBlendMode =
+  hs_bindgen_167da6f1eb78062a
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderClear@
+foreign import ccall safe "hs_bindgen_cde099ce5b1cfc9d"
+  hs_bindgen_cde099ce5b1cfc9d_base
+    :: BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderClear@
+hs_bindgen_cde099ce5b1cfc9d
+  :: BG.Ptr SDL_Renderer
+  -> IO BG.CBool
+hs_bindgen_cde099ce5b1cfc9d =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_cde099ce5b1cfc9d_base (BG.toFFIType x0))
+
+-- | Clear the current rendering target with the drawing color.
+--
+--     This function clears the entire rendering target, ignoring the viewport and the clip rectangle. Note, that clearing will also set\/fill all pixels of the rendering target to current renderer draw color, so make sure to invoke @SDL_SetRenderDrawColor()@ when needed.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_SetRenderDrawColor'
+--
+--     [C declaration]: @SDL_RenderClear@, defined at @SDL3\/SDL_render.h 2114:34@
+sDL_RenderClear
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> IO BG.CBool
+sDL_RenderClear = hs_bindgen_cde099ce5b1cfc9d
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderPoint@
+foreign import ccall safe "hs_bindgen_9685ef9bec873fd9"
+  hs_bindgen_9685ef9bec873fd9_base
+    :: BG.Ptr BG.Void
+    -> BG.CFloat
+    -> BG.CFloat
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderPoint@
+hs_bindgen_9685ef9bec873fd9
+  :: BG.Ptr SDL_Renderer
+  -> BG.CFloat
+  -> BG.CFloat
+  -> IO BG.CBool
+hs_bindgen_9685ef9bec873fd9 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_9685ef9bec873fd9_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Draw a point on the current rendering target at subpixel precision.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderPoints'
+--
+--     [C declaration]: @SDL_RenderPoint@, defined at @SDL3\/SDL_render.h 2131:34@
+sDL_RenderPoint
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer which should draw a point.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@x@]: the x coordinate of the point.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@y@]: the y coordinate of the point.
+  -> IO BG.CBool
+sDL_RenderPoint = hs_bindgen_9685ef9bec873fd9
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderPoints@
+foreign import ccall safe "hs_bindgen_a2f27901d75ff412"
+  hs_bindgen_a2f27901d75ff412_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderPoints@
+hs_bindgen_a2f27901d75ff412
+  :: BG.Ptr SDL_Renderer
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
+  -> BG.CInt
+  -> IO BG.CBool
+hs_bindgen_a2f27901d75ff412 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_a2f27901d75ff412_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Draw multiple points on the current rendering target at subpixel precision.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderPoint'
+--
+--     [C declaration]: @SDL_RenderPoints@, defined at @SDL3\/SDL_render.h 2148:34@
+sDL_RenderPoints
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer which should draw multiple points.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
+  -- ^
+  --
+  --           [@points@]: the points to draw.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@count@]: the number of points to draw.
+  -> IO BG.CBool
+sDL_RenderPoints = hs_bindgen_a2f27901d75ff412
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderLine@
+foreign import ccall safe "hs_bindgen_a22413e4506d153a"
+  hs_bindgen_a22413e4506d153a_base
+    :: BG.Ptr BG.Void
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.CFloat
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderLine@
+hs_bindgen_a22413e4506d153a
+  :: BG.Ptr SDL_Renderer
+  -> BG.CFloat
+  -> BG.CFloat
+  -> BG.CFloat
+  -> BG.CFloat
+  -> IO BG.CBool
+hs_bindgen_a22413e4506d153a =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_a22413e4506d153a_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
+
+-- | Draw a line on the current rendering target at subpixel precision.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderLines'
+--
+--     [C declaration]: @SDL_RenderLine@, defined at @SDL3\/SDL_render.h 2167:34@
+sDL_RenderLine
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer which should draw a line.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@x1@]: the x coordinate of the start point.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@y1@]: the y coordinate of the start point.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@x2@]: the x coordinate of the end point.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@y2@]: the y coordinate of the end point.
+  -> IO BG.CBool
+sDL_RenderLine = hs_bindgen_a22413e4506d153a
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderLines@
+foreign import ccall safe "hs_bindgen_139f9e9bbb114174"
+  hs_bindgen_139f9e9bbb114174_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderLines@
+hs_bindgen_139f9e9bbb114174
+  :: BG.Ptr SDL_Renderer
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
+  -> BG.CInt
+  -> IO BG.CBool
+hs_bindgen_139f9e9bbb114174 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_139f9e9bbb114174_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Draw a series of connected lines on the current rendering target at subpixel precision.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderLine'
+--
+--     [C declaration]: @SDL_RenderLines@, defined at @SDL3\/SDL_render.h 2185:34@
+sDL_RenderLines
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer which should draw multiple lines.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
+  -- ^
+  --
+  --           [@points@]: the points along the lines.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@count@]: the number of points, drawing count-1 lines.
+  -> IO BG.CBool
+sDL_RenderLines = hs_bindgen_139f9e9bbb114174
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderRect@
+foreign import ccall safe "hs_bindgen_c336b07d3c7c70e0"
+  hs_bindgen_c336b07d3c7c70e0_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderRect@
+hs_bindgen_c336b07d3c7c70e0
+  :: BG.Ptr SDL_Renderer
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -> IO BG.CBool
+hs_bindgen_c336b07d3c7c70e0 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_c336b07d3c7c70e0_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Draw a rectangle on the current rendering target at subpixel precision.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderRects'
+--
+--     [C declaration]: @SDL_RenderRect@, defined at @SDL3\/SDL_render.h 2202:34@
+sDL_RenderRect
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer which should draw a rectangle.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -- ^
+  --
+  --           [@rect@]: a pointer to the destination rectangle, or NULL to outline the entire rendering target.
+  -> IO BG.CBool
+sDL_RenderRect = hs_bindgen_c336b07d3c7c70e0
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderRects@
+foreign import ccall safe "hs_bindgen_4402e93d7e0ba929"
+  hs_bindgen_4402e93d7e0ba929_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderRects@
+hs_bindgen_4402e93d7e0ba929
+  :: BG.Ptr SDL_Renderer
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -> BG.CInt
+  -> IO BG.CBool
+hs_bindgen_4402e93d7e0ba929 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_4402e93d7e0ba929_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Draw some number of rectangles on the current rendering target at subpixel precision.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderRect'
+--
+--     [C declaration]: @SDL_RenderRects@, defined at @SDL3\/SDL_render.h 2220:34@
+sDL_RenderRects
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer which should draw multiple rectangles.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -- ^
+  --
+  --           [@rects@]: a pointer to an array of destination rectangles.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@count@]: the number of rectangles.
+  -> IO BG.CBool
+sDL_RenderRects = hs_bindgen_4402e93d7e0ba929
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderFillRect@
+foreign import ccall safe "hs_bindgen_2904f549c42ca454"
+  hs_bindgen_2904f549c42ca454_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderFillRect@
+hs_bindgen_2904f549c42ca454
+  :: BG.Ptr SDL_Renderer
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -> IO BG.CBool
+hs_bindgen_2904f549c42ca454 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_2904f549c42ca454_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Fill a rectangle on the current rendering target with the drawing color at subpixel precision.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderFillRects'
+--
+--     [C declaration]: @SDL_RenderFillRect@, defined at @SDL3\/SDL_render.h 2238:34@
+sDL_RenderFillRect
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer which should fill a rectangle.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -- ^
+  --
+  --           [@rect@]: a pointer to the destination rectangle, or NULL for the entire rendering target.
+  -> IO BG.CBool
+sDL_RenderFillRect = hs_bindgen_2904f549c42ca454
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderFillRects@
+foreign import ccall safe "hs_bindgen_8e1470eae177aaca"
+  hs_bindgen_8e1470eae177aaca_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderFillRects@
+hs_bindgen_8e1470eae177aaca
+  :: BG.Ptr SDL_Renderer
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -> BG.CInt
+  -> IO BG.CBool
+hs_bindgen_8e1470eae177aaca =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_8e1470eae177aaca_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Fill some number of rectangles on the current rendering target with the drawing color at subpixel precision.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderFillRect'
+--
+--     [C declaration]: @SDL_RenderFillRects@, defined at @SDL3\/SDL_render.h 2256:34@
+sDL_RenderFillRects
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer which should fill multiple rectangles.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -- ^
+  --
+  --           [@rects@]: a pointer to an array of destination rectangles.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@count@]: the number of rectangles.
+  -> IO BG.CBool
+sDL_RenderFillRects = hs_bindgen_8e1470eae177aaca
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderTexture@
+foreign import ccall safe "hs_bindgen_25ce1a6520376b45"
+  hs_bindgen_25ce1a6520376b45_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderTexture@
+hs_bindgen_25ce1a6520376b45
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL_Texture
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -> IO BG.CBool
+hs_bindgen_25ce1a6520376b45 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_25ce1a6520376b45_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Copy a portion of the texture to the current rendering target at subpixel precision.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderTextureRotated', 'sDL_RenderTextureTiled'
+--
+--     [C declaration]: @SDL_RenderTexture@, defined at @SDL3\/SDL_render.h 2278:34@
+sDL_RenderTexture
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer which should copy parts of a texture.
+  -> BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the source texture.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -- ^
+  --
+  --           [@srcrect@]: a pointer to the source rectangle, or NULL for the entire texture.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -- ^
+  --
+  --           [@dstrect@]: a pointer to the destination rectangle, or NULL for the entire rendering target.
+  -> IO BG.CBool
+sDL_RenderTexture = hs_bindgen_25ce1a6520376b45
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderTextureRotated@
+foreign import ccall safe "hs_bindgen_7784d7195eaae275"
+  hs_bindgen_7784d7195eaae275_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.CDouble
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.Support.CUInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderTextureRotated@
+hs_bindgen_7784d7195eaae275
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL_Texture
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -> BG.CDouble
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
+  -> SDL3.Sys.Bindgen.Surface.SDL_FlipMode
+  -> IO BG.CBool
+hs_bindgen_7784d7195eaae275 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                fmap
+                  BG.fromFFIType
+                  ( hs_bindgen_7784d7195eaae275_base
+                      (BG.toFFIType x0)
+                      (BG.toFFIType x1)
+                      (BG.toFFIType x2)
+                      (BG.toFFIType x3)
+                      (BG.toFFIType x4)
+                      (BG.toFFIType x5)
+                      (BG.toFFIType x6)
+                  )
+
+-- | Copy a portion of the source texture to the current rendering target, with rotation and flipping, at subpixel precision.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderTexture'
+--
+--     [C declaration]: @SDL_RenderTextureRotated@, defined at @SDL3\/SDL_render.h 2306:34@
+sDL_RenderTextureRotated
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer which should copy parts of a texture.
+  -> BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the source texture.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -- ^
+  --
+  --           [@srcrect@]: a pointer to the source rectangle, or NULL for the entire texture.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -- ^
+  --
+  --           [@dstrect@]: a pointer to the destination rectangle, or NULL for the entire rendering target.
+  -> BG.CDouble
+  -- ^
+  --
+  --           [@angle@]: an angle in degrees that indicates the rotation that will be applied to dstrect, rotating it in a clockwise direction.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
+  -- ^
+  --
+  --           [@center@]: a pointer to a point indicating the point around which dstrect will be rotated (if NULL, rotation will be done around dstrect.w\/2, dstrect.h\/2).
+  -> SDL3.Sys.Bindgen.Surface.SDL_FlipMode
+  -- ^
+  --
+  --           [@flip@]: an SDL_FlipMode value stating which flipping actions should be performed on the texture.
+  -> IO BG.CBool
+sDL_RenderTextureRotated =
+  hs_bindgen_7784d7195eaae275
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderTextureAffine@
+foreign import ccall safe "hs_bindgen_add42f94463f73c6"
+  hs_bindgen_add42f94463f73c6_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderTextureAffine@
+hs_bindgen_add42f94463f73c6
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL_Texture
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
+  -> IO BG.CBool
+hs_bindgen_add42f94463f73c6 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_add42f94463f73c6_base
+                    (BG.toFFIType x0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                    (BG.toFFIType x4)
+                    (BG.toFFIType x5)
+                )
+
+-- | Copy a portion of the source texture to the current rendering target, with affine transform, at subpixel precision.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: You may only call this function from the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderTexture'
+--
+--     [C declaration]: @SDL_RenderTextureAffine@, defined at @SDL3\/SDL_render.h 2337:34@
+sDL_RenderTextureAffine
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer which should copy parts of a texture.
+  -> BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the source texture.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -- ^
+  --
+  --           [@srcrect@]: a pointer to the source rectangle, or NULL for the entire texture.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
+  -- ^
+  --
+  --           [@origin@]: a pointer to a point indicating where the top-left corner of srcrect should be mapped to, or NULL for the rendering target\'s origin.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
+  -- ^
+  --
+  --           [@right@]: a pointer to a point indicating where the top-right corner of srcrect should be mapped to, or NULL for the rendering target\'s top-right corner.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
+  -- ^
+  --
+  --           [@down@]: a pointer to a point indicating where the bottom-left corner of srcrect should be mapped to, or NULL for the rendering target\'s bottom-left corner.
+  -> IO BG.CBool
+sDL_RenderTextureAffine = hs_bindgen_add42f94463f73c6
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderTextureTiled@
+foreign import ccall safe "hs_bindgen_74aa5a13c76159fa"
+  hs_bindgen_74aa5a13c76159fa_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.CFloat
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderTextureTiled@
+hs_bindgen_74aa5a13c76159fa
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL_Texture
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -> BG.CFloat
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -> IO BG.CBool
+hs_bindgen_74aa5a13c76159fa =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_74aa5a13c76159fa_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
+
+-- | Tile a portion of the texture to the current rendering target at subpixel precision.
+--
+--     The pixels in @srcrect@ will be repeated as many times as needed to completely fill @dstrect@.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderTexture'
+--
+--     [C declaration]: @SDL_RenderTextureTiled@, defined at @SDL3\/SDL_render.h 2366:34@
+sDL_RenderTextureTiled
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer which should copy parts of a texture.
+  -> BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the source texture.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -- ^
+  --
+  --           [@srcrect@]: a pointer to the source rectangle, or NULL for the entire texture.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@scale@]: the scale used to transform srcrect into the destination rectangle, e.g. a 32x32 texture with a scale of 2 would fill 64x64 tiles.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -- ^
+  --
+  --           [@dstrect@]: a pointer to the destination rectangle, or NULL for the entire rendering target.
+  -> IO BG.CBool
+sDL_RenderTextureTiled = hs_bindgen_74aa5a13c76159fa
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderTexture9Grid@
+foreign import ccall safe "hs_bindgen_6b75253c3413f458"
+  hs_bindgen_6b75253c3413f458_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderTexture9Grid@
+hs_bindgen_6b75253c3413f458
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL_Texture
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -> BG.CFloat
+  -> BG.CFloat
+  -> BG.CFloat
+  -> BG.CFloat
+  -> BG.CFloat
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -> IO BG.CBool
+hs_bindgen_6b75253c3413f458 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                \x7 ->
+                  \x8 ->
+                    fmap
+                      BG.fromFFIType
+                      ( hs_bindgen_6b75253c3413f458_base
+                          (BG.toFFIType x0)
+                          (BG.toFFIType x1)
+                          (BG.toFFIType x2)
+                          (BG.toFFIType x3)
+                          (BG.toFFIType x4)
+                          (BG.toFFIType x5)
+                          (BG.toFFIType x6)
+                          (BG.toFFIType x7)
+                          (BG.toFFIType x8)
+                      )
+
+-- | Perform a scaled copy using the 9-grid algorithm to the current rendering target at subpixel precision.
+--
+--     The pixels in the texture are split into a 3x3 grid, using the different corner sizes for each corner, and the sides and center making up the remaining pixels. The corners are then scaled using @scale@ and fit into the corners of the destination rectangle. The sides and center are then stretched into place to cover the remaining destination rectangle.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderTexture', 'sDL_RenderTexture9GridTiled'
+--
+--     [C declaration]: @SDL_RenderTexture9Grid@, defined at @SDL3\/SDL_render.h 2401:34@
+sDL_RenderTexture9Grid
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer which should copy parts of a texture.
+  -> BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the source texture.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -- ^
+  --
+  --           [@srcrect@]: the SDL_Rect structure representing the rectangle to be used for the 9-grid, or NULL to use the entire texture.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@left_width@]: the width, in pixels, of the left corners in @srcrect@.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@right_width@]: the width, in pixels, of the right corners in @srcrect@.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@top_height@]: the height, in pixels, of the top corners in @srcrect@.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@bottom_height@]: the height, in pixels, of the bottom corners in @srcrect@.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@scale@]: the scale used to transform the corner of @srcrect@ into the corner of @dstrect@, or 0.0f for an unscaled copy.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -- ^
+  --
+  --           [@dstrect@]: a pointer to the destination rectangle, or NULL for the entire rendering target.
+  -> IO BG.CBool
+sDL_RenderTexture9Grid = hs_bindgen_6b75253c3413f458
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderTexture9GridTiled@
+foreign import ccall safe "hs_bindgen_2d9cf263c1277f5b"
+  hs_bindgen_2d9cf263c1277f5b_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.Ptr BG.Void
+    -> BG.CFloat
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderTexture9GridTiled@
+hs_bindgen_2d9cf263c1277f5b
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL_Texture
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -> BG.CFloat
+  -> BG.CFloat
+  -> BG.CFloat
+  -> BG.CFloat
+  -> BG.CFloat
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -> BG.CFloat
+  -> IO BG.CBool
+hs_bindgen_2d9cf263c1277f5b =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                \x7 ->
+                  \x8 ->
+                    \x9 ->
+                      fmap
+                        BG.fromFFIType
+                        ( hs_bindgen_2d9cf263c1277f5b_base
+                            (BG.toFFIType x0)
+                            (BG.toFFIType x1)
+                            (BG.toFFIType x2)
+                            (BG.toFFIType x3)
+                            (BG.toFFIType x4)
+                            (BG.toFFIType x5)
+                            (BG.toFFIType x6)
+                            (BG.toFFIType x7)
+                            (BG.toFFIType x8)
+                            (BG.toFFIType x9)
+                        )
+
+-- | Perform a scaled copy using the 9-grid algorithm to the current rendering target at subpixel precision.
+--
+--     The pixels in the texture are split into a 3x3 grid, using the different corner sizes for each corner, and the sides and center making up the remaining pixels. The corners are then scaled using @scale@ and fit into the corners of the destination rectangle. The sides and center are then tiled into place to cover the remaining destination rectangle.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.4.0
+--
+--     [See also]: 'sDL_RenderTexture', 'sDL_RenderTexture9Grid'
+--
+--     [C declaration]: @SDL_RenderTexture9GridTiled@, defined at @SDL3\/SDL_render.h 2439:34@
+sDL_RenderTexture9GridTiled
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer which should copy parts of a texture.
+  -> BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the source texture.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -- ^
+  --
+  --           [@srcrect@]: the SDL_Rect structure representing the rectangle to be used for the 9-grid, or NULL to use the entire texture.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@left_width@]: the width, in pixels, of the left corners in @srcrect@.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@right_width@]: the width, in pixels, of the right corners in @srcrect@.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@top_height@]: the height, in pixels, of the top corners in @srcrect@.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@bottom_height@]: the height, in pixels, of the bottom corners in @srcrect@.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@scale@]: the scale used to transform the corner of @srcrect@ into the corner of @dstrect@, or 0.0f for an unscaled copy.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -- ^
+  --
+  --           [@dstrect@]: a pointer to the destination rectangle, or NULL for the entire rendering target.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@tileScale@]: the scale used to transform the borders and center of @srcrect@ into the borders and middle of @dstrect@, or 1.0f for an unscaled copy.
+  -> IO BG.CBool
+sDL_RenderTexture9GridTiled =
+  hs_bindgen_2d9cf263c1277f5b
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderGeometry@
+foreign import ccall safe "hs_bindgen_778c782602e7d6de"
+  hs_bindgen_778c782602e7d6de_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderGeometry@
+hs_bindgen_778c782602e7d6de
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL_Texture
+  -> PtrConst.PtrConst SDL_Vertex
+  -> BG.CInt
+  -> PtrConst.PtrConst BG.CInt
+  -> BG.CInt
+  -> IO BG.CBool
+hs_bindgen_778c782602e7d6de =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_778c782602e7d6de_base
+                    (BG.toFFIType x0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                    (BG.toFFIType x4)
+                    (BG.toFFIType x5)
+                )
+
+-- | Render a list of triangles, optionally using a texture and indices into the vertex array Color and alpha modulation is done per vertex (SDL_SetTextureColorMod and SDL_SetTextureAlphaMod are ignored).
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderGeometryRaw', 'sDL_SetRenderTextureAddressMode'
+--
+--     [C declaration]: @SDL_RenderGeometry@, defined at @SDL3\/SDL_render.h 2464:34@
+sDL_RenderGeometry
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: (optional) The SDL texture to use.
+  -> PtrConst.PtrConst SDL_Vertex
+  -- ^
+  --
+  --           [@vertices@]: vertices.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@num_vertices@]: number of vertices.
+  -> PtrConst.PtrConst BG.CInt
+  -- ^
+  --
+  --           [@indices@]: (optional) An array of integer indices into the \'vertices\' array, if NULL all vertices will be rendered in sequential order.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@num_indices@]: number of indices.
+  -> IO BG.CBool
+sDL_RenderGeometry = hs_bindgen_778c782602e7d6de
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderGeometryRaw@
+foreign import ccall safe "hs_bindgen_32080687747fa83c"
+  hs_bindgen_32080687747fa83c_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> BG.CInt
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> BG.CInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderGeometryRaw@
+hs_bindgen_32080687747fa83c
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL_Texture
+  -> PtrConst.PtrConst BG.CFloat
+  -> BG.CInt
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Pixels.SDL_FColor
+  -> BG.CInt
+  -> PtrConst.PtrConst BG.CFloat
+  -> BG.CInt
+  -> BG.CInt
+  -> PtrConst.PtrConst BG.Void
+  -> BG.CInt
+  -> BG.CInt
+  -> IO BG.CBool
+hs_bindgen_32080687747fa83c =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                \x7 ->
+                  \x8 ->
+                    \x9 ->
+                      \x10 ->
+                        \x11 ->
+                          fmap
+                            BG.fromFFIType
+                            ( hs_bindgen_32080687747fa83c_base
+                                (BG.toFFIType x0)
+                                (BG.toFFIType x1)
+                                (BG.toFFIType x2)
+                                (BG.toFFIType x3)
+                                (BG.toFFIType x4)
+                                (BG.toFFIType x5)
+                                (BG.toFFIType x6)
+                                (BG.toFFIType x7)
+                                (BG.toFFIType x8)
+                                (BG.toFFIType x9)
+                                (BG.toFFIType x10)
+                                (BG.toFFIType x11)
+                            )
+
+-- | Render a list of triangles, optionally using a texture and indices into the vertex arrays Color and alpha modulation is done per vertex (SDL_SetTextureColorMod and SDL_SetTextureAlphaMod are ignored).
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderGeometry', 'sDL_SetRenderTextureAddressMode'
+--
+--     [C declaration]: @SDL_RenderGeometryRaw@, defined at @SDL3\/SDL_render.h 2497:34@
+sDL_RenderGeometryRaw
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: (optional) The SDL texture to use.
+  -> PtrConst.PtrConst BG.CFloat
+  -- ^
+  --
+  --           [@xy@]: vertex positions.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@xy_stride@]: byte size to move from one element to the next element.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Pixels.SDL_FColor
+  -- ^
+  --
+  --           [@color@]: vertex colors (as SDL_FColor).
+  -> BG.CInt
+  -- ^
+  --
+  --           [@color_stride@]: byte size to move from one element to the next element.
+  -> PtrConst.PtrConst BG.CFloat
+  -- ^
+  --
+  --           [@uv@]: vertex normalized texture coordinates.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@uv_stride@]: byte size to move from one element to the next element.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@num_vertices@]: number of vertices.
+  -> PtrConst.PtrConst BG.Void
+  -- ^
+  --
+  --           [@indices@]: (optional) An array of indices into the \'vertices\' arrays, if NULL all vertices will be rendered in sequential order.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@num_indices@]: number of indices.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@size_indices@]: index size: 1 (byte), 2 (short), 4 (int).
+  -> IO BG.CBool
+sDL_RenderGeometryRaw = hs_bindgen_32080687747fa83c
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderTextureAddressMode@
+foreign import ccall safe "hs_bindgen_56e605702d9776b5"
+  hs_bindgen_56e605702d9776b5_base
+    :: BG.Ptr BG.Void
+    -> BG.CInt
+    -> BG.CInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderTextureAddressMode@
+hs_bindgen_56e605702d9776b5
+  :: BG.Ptr SDL_Renderer
+  -> SDL_TextureAddressMode
+  -> SDL_TextureAddressMode
+  -> IO BG.CBool
+hs_bindgen_56e605702d9776b5 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_56e605702d9776b5_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Set the texture addressing mode used in @SDL_RenderGeometry()@.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.4.0
+--
+--     [See also]: 'sDL_RenderGeometry', 'sDL_RenderGeometryRaw', 'sDL_GetRenderTextureAddressMode'
+--
+--     [C declaration]: @SDL_SetRenderTextureAddressMode@, defined at @SDL3\/SDL_render.h 2524:34@
+sDL_SetRenderTextureAddressMode
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> SDL_TextureAddressMode
+  -- ^
+  --
+  --           [@u_mode@]: the 'SDL_TextureAddressMode' to use for horizontal texture coordinates in @SDL_RenderGeometry()@.
+  -> SDL_TextureAddressMode
+  -- ^
+  --
+  --           [@v_mode@]: the 'SDL_TextureAddressMode' to use for vertical texture coordinates in @SDL_RenderGeometry()@.
+  -> IO BG.CBool
+sDL_SetRenderTextureAddressMode =
+  hs_bindgen_56e605702d9776b5
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderTextureAddressMode@
+foreign import ccall safe "hs_bindgen_b63dbaffb6d53264"
+  hs_bindgen_b63dbaffb6d53264_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderTextureAddressMode@
+hs_bindgen_b63dbaffb6d53264
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL_TextureAddressMode
+  -> BG.Ptr SDL_TextureAddressMode
+  -> IO BG.CBool
+hs_bindgen_b63dbaffb6d53264 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_b63dbaffb6d53264_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Get the texture addressing mode used in @SDL_RenderGeometry()@.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.4.0
+--
+--     [See also]: 'sDL_SetRenderTextureAddressMode'
+--
+--     [C declaration]: @SDL_GetRenderTextureAddressMode@, defined at @SDL3\/SDL_render.h 2545:34@
+sDL_GetRenderTextureAddressMode
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr SDL_TextureAddressMode
+  -- ^
+  --
+  --           [@u_mode@]: a pointer filled in with the 'SDL_TextureAddressMode' to use for horizontal texture coordinates in @SDL_RenderGeometry()@, may be NULL.
+  -> BG.Ptr SDL_TextureAddressMode
+  -- ^
+  --
+  --           [@v_mode@]: a pointer filled in with the 'SDL_TextureAddressMode' to use for vertical texture coordinates in @SDL_RenderGeometry()@, may be NULL.
+  -> IO BG.CBool
+sDL_GetRenderTextureAddressMode =
+  hs_bindgen_b63dbaffb6d53264
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderReadPixels@
+foreign import ccall safe "hs_bindgen_8e39bba88c8b590b"
+  hs_bindgen_8e39bba88c8b590b_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderReadPixels@
+hs_bindgen_8e39bba88c8b590b
+  :: BG.Ptr SDL_Renderer
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -> IO (BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface)
+hs_bindgen_8e39bba88c8b590b =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_8e39bba88c8b590b_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Read pixels from the current rendering target.
+--
+--     The returned surface contains pixels inside the desired area clipped to the current viewport, and should be freed with SDL_DestroySurface().
+--
+--     Note that this returns the actual pixels on the screen, so if you are using logical presentation you should use @SDL_GetRenderLogicalPresentationRect()@ to get the area containing your content.
+--
+--     __WARNING__: This is a very slow operation, and should not be used frequently. If you\'re using this on the main rendering target, it should be called after rendering and before @SDL_RenderPresent()@.
+--
+--     [Returns]: a new SDL_Surface on success or NULL on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_RenderReadPixels@, defined at @SDL3\/SDL_render.h 2572:43@
+sDL_RenderReadPixels
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -- ^
+  --
+  --           [@rect@]: an SDL_Rect structure representing the area to read, which will be clipped to the current viewport, or NULL for the entire viewport.
+  -> IO (BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface)
+sDL_RenderReadPixels = hs_bindgen_8e39bba88c8b590b
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderPresent@
+foreign import ccall safe "hs_bindgen_7c3d5531ae54aea4"
+  hs_bindgen_7c3d5531ae54aea4_base
+    :: BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderPresent@
+hs_bindgen_7c3d5531ae54aea4
+  :: BG.Ptr SDL_Renderer
+  -> IO BG.CBool
+hs_bindgen_7c3d5531ae54aea4 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_7c3d5531ae54aea4_base (BG.toFFIType x0))
+
+-- | Update the screen with any rendering performed since the previous call.
+--
+--     SDL\'s rendering functions operate on a backbuffer; that is, calling a rendering function such as @SDL_RenderLine()@ does not directly put a line on the screen, but rather updates the backbuffer. As such, you compose your entire scene and /present/ the composed backbuffer to the screen as a complete picture.
+--
+--     Therefore, when using SDL\'s rendering API, one does all drawing intended for the frame, and then calls this function once per frame to present the final drawing to the user.
+--
+--     The backbuffer should be considered invalidated after each present; do not assume that previous contents will exist between frames. You are strongly encouraged to call @SDL_RenderClear()@ to initialize the backbuffer before starting each new frame\'s drawing, even if you plan to overwrite every pixel.
+--
+--     Please note, that in case of rendering to a texture - there is __no need__ to call @'sDL_RenderPresent'@ after drawing needed objects to a texture, and should not be done; you are only required to change back the rendering target to default via @SDL_SetRenderTarget(renderer, NULL)@ afterwards, as textures by themselves do not have a concept of backbuffers. Calling SDL_RenderPresent while rendering to a texture will fail.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_CreateRenderer', 'sDL_RenderClear', 'sDL_RenderFillRect', 'sDL_RenderFillRects', 'sDL_RenderLine', 'sDL_RenderLines', 'sDL_RenderPoint', 'sDL_RenderPoints', 'sDL_RenderRect', 'sDL_RenderRects', 'sDL_SetRenderDrawBlendMode', 'sDL_SetRenderDrawColor'
+--
+--     [C declaration]: @SDL_RenderPresent@, defined at @SDL3\/SDL_render.h 2621:34@
+sDL_RenderPresent
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> IO BG.CBool
+sDL_RenderPresent = hs_bindgen_7c3d5531ae54aea4
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_DestroyTexture@
+foreign import ccall safe "hs_bindgen_8bed4d77b35c687f"
+  hs_bindgen_8bed4d77b35c687f_base
+    :: BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_DestroyTexture@
+hs_bindgen_8bed4d77b35c687f
+  :: BG.Ptr SDL_Texture
+  -> IO ()
+hs_bindgen_8bed4d77b35c687f =
+  \x0 ->
+    hs_bindgen_8bed4d77b35c687f_base (BG.toFFIType x0)
+
+-- | Destroy the specified texture.
+--
+--     Passing NULL or an otherwise invalid texture will set the SDL error message to \"Invalid texture\".
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_CreateTexture', 'sDL_CreateTextureFromSurface'
+--
+--     [C declaration]: @SDL_DestroyTexture@, defined at @SDL3\/SDL_render.h 2638:34@
+sDL_DestroyTexture
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to destroy.
+  -> IO ()
+sDL_DestroyTexture = hs_bindgen_8bed4d77b35c687f
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_DestroyRenderer@
+foreign import ccall safe "hs_bindgen_1d20db71cb8b3442"
+  hs_bindgen_1d20db71cb8b3442_base
+    :: BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_DestroyRenderer@
+hs_bindgen_1d20db71cb8b3442
+  :: BG.Ptr SDL_Renderer
+  -> IO ()
+hs_bindgen_1d20db71cb8b3442 =
+  \x0 ->
+    hs_bindgen_1d20db71cb8b3442_base (BG.toFFIType x0)
+
+-- | Destroy the rendering context for a window and free all associated textures.
+--
+--     This should be called before destroying the associated window.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_CreateRenderer'
+--
+--     [C declaration]: @SDL_DestroyRenderer@, defined at @SDL3\/SDL_render.h 2654:34@
+sDL_DestroyRenderer
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> IO ()
+sDL_DestroyRenderer = hs_bindgen_1d20db71cb8b3442
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_FlushRenderer@
+foreign import ccall safe "hs_bindgen_541ef4edd41b43f3"
+  hs_bindgen_541ef4edd41b43f3_base
+    :: BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_FlushRenderer@
+hs_bindgen_541ef4edd41b43f3
+  :: BG.Ptr SDL_Renderer
+  -> IO BG.CBool
+hs_bindgen_541ef4edd41b43f3 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_541ef4edd41b43f3_base (BG.toFFIType x0))
+
+-- | Force the rendering context to flush any pending commands and state.
+--
+--     You do not need to (and in fact, shouldn\'t) call this function unless you are planning to call into OpenGL\/Direct3D\/Metal\/whatever directly, in addition to using an 'SDL_Renderer'.
+--
+--     This is for a very-specific case: if you are using SDL\'s render API, and you plan to make OpenGL\/D3D\/whatever calls in addition to SDL render API calls. If this applies, you should call this function between calls to SDL\'s render API and the low-level API you\'re using in cooperation.
+--
+--     In all other cases, you can ignore this function.
+--
+--     This call makes SDL flush any pending rendering work it was queueing up to do later in a single batch, and marks any internal cached state as invalid, so it\'ll prepare all its state again later, from scratch.
+--
+--     This means you do not need to save state in your rendering code to protect the SDL renderer. However, there lots of arbitrary pieces of Direct3D and OpenGL state that can confuse things; you should use your best judgment and be prepared to make changes if specific state needs to be protected.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_FlushRenderer@, defined at @SDL3\/SDL_render.h 2687:34@
+sDL_FlushRenderer
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> IO BG.CBool
+sDL_FlushRenderer = hs_bindgen_541ef4edd41b43f3
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderMetalLayer@
+foreign import ccall safe "hs_bindgen_b665c5f20441fcd2"
+  hs_bindgen_b665c5f20441fcd2_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderMetalLayer@
+hs_bindgen_b665c5f20441fcd2
+  :: BG.Ptr SDL_Renderer
+  -> IO (BG.Ptr BG.Void)
+hs_bindgen_b665c5f20441fcd2 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_b665c5f20441fcd2_base (BG.toFFIType x0))
+
+-- | Get the CAMetalLayer associated with the given Metal renderer.
+--
+--     This function returns @void *@, so SDL doesn\'t have to include Metal\'s headers, but it can be safely cast to a @CAMetalLayer *@.
+--
+--     [Returns]: a @CAMetalLayer *@ on success, or NULL if the renderer isn\'t a Metal renderer.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetRenderMetalCommandEncoder'
+--
+--     [C declaration]: @SDL_GetRenderMetalLayer@, defined at @SDL3\/SDL_render.h 2705:36@
+sDL_GetRenderMetalLayer
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer to query.
+  -> IO (BG.Ptr BG.Void)
+sDL_GetRenderMetalLayer = hs_bindgen_b665c5f20441fcd2
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderMetalCommandEncoder@
+foreign import ccall safe "hs_bindgen_4cc0199f9267bab8"
+  hs_bindgen_4cc0199f9267bab8_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderMetalCommandEncoder@
+hs_bindgen_4cc0199f9267bab8
+  :: BG.Ptr SDL_Renderer
+  -> IO (BG.Ptr BG.Void)
+hs_bindgen_4cc0199f9267bab8 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_4cc0199f9267bab8_base (BG.toFFIType x0))
+
+-- | Get the Metal command encoder for the current frame.
+--
+--     This function returns @void *@, so SDL doesn\'t have to include Metal\'s headers, but it can be safely cast to an @id\<MTLRenderCommandEncoder>@.
+--
+--     This will return NULL if Metal refuses to give SDL a drawable to render to, which might happen if the window is hidden\/minimized\/offscreen. This doesn\'t apply to command encoders for render targets, just the window\'s backbuffer. Check your return values!
+--
+--     [Returns]: an @id\<MTLRenderCommandEncoder>@ on success, or NULL if the renderer isn\'t a Metal renderer or there was an error.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetRenderMetalLayer'
+--
+--     [C declaration]: @SDL_GetRenderMetalCommandEncoder@, defined at @SDL3\/SDL_render.h 2728:36@
+sDL_GetRenderMetalCommandEncoder
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer to query.
+  -> IO (BG.Ptr BG.Void)
+sDL_GetRenderMetalCommandEncoder =
+  hs_bindgen_4cc0199f9267bab8
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_AddVulkanRenderSemaphores@
+foreign import ccall safe "hs_bindgen_91025902db96959c"
+  hs_bindgen_91025902db96959c_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Int64
+    -> HsBindgen.Runtime.LibC.Int64
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_AddVulkanRenderSemaphores@
+hs_bindgen_91025902db96959c
+  :: BG.Ptr SDL_Renderer
+  -> SDL3.Sys.Bindgen.Stdinc.Uint32
+  -> SDL3.Sys.Bindgen.Stdinc.Sint64
+  -> SDL3.Sys.Bindgen.Stdinc.Sint64
+  -> IO BG.CBool
+hs_bindgen_91025902db96959c =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_91025902db96959c_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Add a set of synchronization semaphores for the current frame.
+--
+--     The Vulkan renderer will wait for @wait_semaphore@ before submitting rendering commands and signal @signal_semaphore@ after rendering commands are complete for this frame.
+--
+--     This should be called each frame that you want semaphore synchronization. The Vulkan renderer may have multiple frames in flight on the GPU, so you should have multiple semaphores that are used for synchronization. Querying SDL_PROP_RENDERER_VULKAN_SWAPCHAIN_IMAGE_COUNT_NUMBER will give you the maximum number of semaphores you\'ll need.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: It is __NOT__ safe to call this function from two threads at once.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_AddVulkanRenderSemaphores@, defined at @SDL3\/SDL_render.h 2759:34@
+sDL_AddVulkanRenderSemaphores
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^
+  --
+  --           [@wait_stage_mask@]: the VkPipelineStageFlags for the wait.
+  -> SDL3.Sys.Bindgen.Stdinc.Sint64
+  -- ^
+  --
+  --           [@wait_semaphore@]: a VkSempahore to wait on before rendering the current frame, or 0 if not needed.
+  -> SDL3.Sys.Bindgen.Stdinc.Sint64
+  -- ^
+  --
+  --           [@signal_semaphore@]: a VkSempahore that SDL will signal when rendering for the current frame is complete, or 0 if not needed.
+  -> IO BG.CBool
+sDL_AddVulkanRenderSemaphores =
+  hs_bindgen_91025902db96959c
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderVSync@
+foreign import ccall safe "hs_bindgen_6f4a42b49f0de954"
+  hs_bindgen_6f4a42b49f0de954_base
+    :: BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetRenderVSync@
+hs_bindgen_6f4a42b49f0de954
+  :: BG.Ptr SDL_Renderer
+  -> BG.CInt
+  -> IO BG.CBool
+hs_bindgen_6f4a42b49f0de954 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_6f4a42b49f0de954_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Toggle VSync of the given renderer.
+--
+--     When a renderer is created, vsync defaults to SDL_RENDERER_VSYNC_DISABLED.
+--
+--     The @vsync@ parameter can be 1 to synchronize present with every vertical refresh, 2 to synchronize present with every second vertical refresh, etc., SDL_RENDERER_VSYNC_ADAPTIVE for late swap tearing (adaptive vsync), or SDL_RENDERER_VSYNC_DISABLED to disable. Not every value is supported by every driver, so you should check the return value to see whether the requested setting is supported.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetRenderVSync'
+--
+--     [C declaration]: @SDL_SetRenderVSync@, defined at @SDL3\/SDL_render.h 2784:34@
+sDL_SetRenderVSync
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer to toggle.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@vsync@]: the vertical refresh sync interval.
+  -> IO BG.CBool
+sDL_SetRenderVSync = hs_bindgen_6f4a42b49f0de954
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderVSync@
+foreign import ccall safe "hs_bindgen_eb1ce0cdf3d11c86"
+  hs_bindgen_eb1ce0cdf3d11c86_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetRenderVSync@
+hs_bindgen_eb1ce0cdf3d11c86
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr BG.CInt
+  -> IO BG.CBool
+hs_bindgen_eb1ce0cdf3d11c86 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_eb1ce0cdf3d11c86_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Get VSync of the given renderer.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_SetRenderVSync'
+--
+--     [C declaration]: @SDL_GetRenderVSync@, defined at @SDL3\/SDL_render.h 2804:34@
+sDL_GetRenderVSync
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer to toggle.
+  -> BG.Ptr BG.CInt
+  -- ^
+  --
+  --           [@vsync@]: an int filled with the current vertical refresh sync interval. See @SDL_SetRenderVSync()@ for the meaning of the value.
+  -> IO BG.CBool
+sDL_GetRenderVSync = hs_bindgen_eb1ce0cdf3d11c86
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderDebugText@
+foreign import ccall safe "hs_bindgen_54ec6a89b17b55b6"
+  hs_bindgen_54ec6a89b17b55b6_base
+    :: BG.Ptr BG.Void
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_RenderDebugText@
+hs_bindgen_54ec6a89b17b55b6
+  :: BG.Ptr SDL_Renderer
+  -> BG.CFloat
+  -> BG.CFloat
+  -> PtrConst.PtrConst BG.CChar
+  -> IO BG.CBool
+hs_bindgen_54ec6a89b17b55b6 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_54ec6a89b17b55b6_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Draw debug text to an 'SDL_Renderer'.
+--
+--     This function will render a string of text to an 'SDL_Renderer'. Note that this is a convenience function for debugging, with severe limitations, and not intended to be used for production apps and games.
+--
+--     Among these limitations:
+--
+--     * It accepts UTF-8 strings, but will only renders ASCII characters.
+--
+--     * It has a single, tiny size (8x8 pixels). You can use logical presentation or @SDL_SetRenderScale()@ to adjust it.
+--
+--     * It uses a simple, hardcoded bitmap font. It does not allow different font selections and it does not support truetype, for proper scaling.
+--
+--     * It does no word-wrapping and does not treat newline characters as a line break. If the text goes out of the window, it\'s gone.
+--
+--     For serious text rendering, there are several good options, such as SDL_ttf, stb_truetype, or other external libraries.
+--
+--     On first use, this will create an internal texture for rendering glyphs. This texture will live until the renderer is destroyed.
+--
+--     The text is drawn in the color specified by @SDL_SetRenderDrawColor()@.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: @SDL_RenderDebugTextFormat@, 'sDL_DEBUG_TEXT_FONT_CHARACTER_SIZE'
+--
+--     [C declaration]: @SDL_RenderDebugText@, defined at @SDL3\/SDL_render.h 2856:34@
+sDL_RenderDebugText
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer which should draw a line of text.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@x@]: the x coordinate where the top-left corner of the text will draw.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@y@]: the y coordinate where the top-left corner of the text will draw.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: the string to render.
+  -> IO BG.CBool
+sDL_RenderDebugText = hs_bindgen_54ec6a89b17b55b6
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetDefaultTextureScaleMode@
+foreign import ccall safe "hs_bindgen_3e694d41804c455e"
+  hs_bindgen_3e694d41804c455e_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.Support.CInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetDefaultTextureScaleMode@
+hs_bindgen_3e694d41804c455e
+  :: BG.Ptr SDL_Renderer
+  -> SDL3.Sys.Bindgen.Surface.SDL_ScaleMode
+  -> IO BG.CBool
+hs_bindgen_3e694d41804c455e =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_3e694d41804c455e_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Set default scale mode for new textures for given renderer.
+--
+--     When a renderer is created, scale_mode defaults to SDL_SCALEMODE_LINEAR.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.4.0
+--
+--     [See also]: 'sDL_GetDefaultTextureScaleMode'
+--
+--     [C declaration]: @SDL_SetDefaultTextureScaleMode@, defined at @SDL3\/SDL_render.h 2902:34@
+sDL_SetDefaultTextureScaleMode
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer to update.
+  -> SDL3.Sys.Bindgen.Surface.SDL_ScaleMode
+  -- ^
+  --
+  --           [@scale_mode@]: the scale mode to change to for new textures.
+  -> IO BG.CBool
+sDL_SetDefaultTextureScaleMode =
+  hs_bindgen_3e694d41804c455e
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetDefaultTextureScaleMode@
+foreign import ccall safe "hs_bindgen_3782129e34172c40"
+  hs_bindgen_3782129e34172c40_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_GetDefaultTextureScaleMode@
+hs_bindgen_3782129e34172c40
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_ScaleMode
+  -> IO BG.CBool
+hs_bindgen_3782129e34172c40 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_3782129e34172c40_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Get default texture scale mode of the given renderer.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.4.0
+--
+--     [See also]: 'sDL_SetDefaultTextureScaleMode'
+--
+--     [C declaration]: @SDL_GetDefaultTextureScaleMode@, defined at @SDL3\/SDL_render.h 2920:34@
+sDL_GetDefaultTextureScaleMode
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer to get data from.
+  -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_ScaleMode
+  -- ^
+  --
+  --           [@scale_mode@]: a SDL_ScaleMode filled with current default scale mode. See @SDL_SetDefaultTextureScaleMode()@ for the meaning of the value.
+  -> IO BG.CBool
+sDL_GetDefaultTextureScaleMode =
+  hs_bindgen_3782129e34172c40
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateGPURenderState@
+foreign import ccall safe "hs_bindgen_b6fd9bfda38a61c5"
+  hs_bindgen_b6fd9bfda38a61c5_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_CreateGPURenderState@
+hs_bindgen_b6fd9bfda38a61c5
+  :: BG.Ptr SDL_Renderer
+  -> PtrConst.PtrConst SDL_GPURenderStateCreateInfo
+  -> IO (BG.Ptr SDL_GPURenderState)
+hs_bindgen_b6fd9bfda38a61c5 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_b6fd9bfda38a61c5_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Create custom GPU render state.
+--
+--     [Returns]: a custom GPU render state or NULL on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should be called on the thread that created the renderer.
+--
+--     @since 3.4.0
+--
+--     [See also]: 'sDL_SetGPURenderStateFragmentUniforms', 'sDL_SetGPURenderState', 'sDL_DestroyGPURenderState'
+--
+--     [C declaration]: @SDL_CreateGPURenderState@, defined at @SDL3\/SDL_render.h 2974:50@
+sDL_CreateGPURenderState
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer to use.
+  -> PtrConst.PtrConst SDL_GPURenderStateCreateInfo
+  -- ^
+  --
+  --           [@createinfo@]: a struct describing the GPU render state to create.
+  -> IO (BG.Ptr SDL_GPURenderState)
+sDL_CreateGPURenderState =
+  hs_bindgen_b6fd9bfda38a61c5
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetGPURenderStateFragmentUniforms@
+foreign import ccall safe "hs_bindgen_18aafc7283600d91"
+  hs_bindgen_18aafc7283600d91_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.Word32
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetGPURenderStateFragmentUniforms@
+hs_bindgen_18aafc7283600d91
+  :: BG.Ptr SDL_GPURenderState
+  -> SDL3.Sys.Bindgen.Stdinc.Uint32
+  -> PtrConst.PtrConst BG.Void
+  -> SDL3.Sys.Bindgen.Stdinc.Uint32
+  -> IO BG.CBool
+hs_bindgen_18aafc7283600d91 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_18aafc7283600d91_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Set fragment shader uniform variables in a custom GPU render state.
+--
+--     The data is copied and will be pushed using SDL_PushGPUFragmentUniformData() during draw call execution.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should be called on the thread that created the renderer.
+--
+--     @since 3.4.0
+--
+--     [C declaration]: @SDL_SetGPURenderStateFragmentUniforms@, defined at @SDL3\/SDL_render.h 2994:34@
+sDL_SetGPURenderStateFragmentUniforms
+  :: BG.Ptr SDL_GPURenderState
+  -- ^
+  --
+  --           [@state@]: the state to modify.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^
+  --
+  --           [@slot_index@]: the fragment uniform slot to push data to.
+  -> PtrConst.PtrConst BG.Void
+  -- ^
+  --
+  --           [@data@]: client data to write.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^
+  --
+  --           [@length@]: the length of the data to write.
+  -> IO BG.CBool
+sDL_SetGPURenderStateFragmentUniforms =
+  hs_bindgen_18aafc7283600d91
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetGPURenderState@
+foreign import ccall safe "hs_bindgen_707dc041c39c56ad"
+  hs_bindgen_707dc041c39c56ad_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_SetGPURenderState@
+hs_bindgen_707dc041c39c56ad
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL_GPURenderState
+  -> IO BG.CBool
+hs_bindgen_707dc041c39c56ad =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_707dc041c39c56ad_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Set custom GPU render state.
+--
+--     This function sets custom GPU render state for subsequent draw calls. This allows using custom shaders with the GPU renderer.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should be called on the thread that created the renderer.
+--
+--     @since 3.4.0
+--
+--     [C declaration]: @SDL_SetGPURenderState@, defined at @SDL3\/SDL_render.h 3012:34@
+sDL_SetGPURenderState
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer to use.
+  -> BG.Ptr SDL_GPURenderState
+  -- ^
+  --
+  --           [@state@]: the state to to use, or NULL to clear custom GPU render state.
+  -> IO BG.CBool
+sDL_SetGPURenderState = hs_bindgen_707dc041c39c56ad
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_DestroyGPURenderState@
+foreign import ccall safe "hs_bindgen_ef5a4d7453634025"
+  hs_bindgen_ef5a4d7453634025_base
+    :: BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Safe_SDL_DestroyGPURenderState@
+hs_bindgen_ef5a4d7453634025
+  :: BG.Ptr SDL_GPURenderState
+  -> IO ()
+hs_bindgen_ef5a4d7453634025 =
+  \x0 ->
+    hs_bindgen_ef5a4d7453634025_base (BG.toFFIType x0)
 
 -- | Destroy custom GPU render state.
 --
diff --git a/src/SDL3/Sys/Bindgen/Render/Unsafe.hs b/src/SDL3/Sys/Bindgen/Render/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Render/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Render/Unsafe.hs
@@ -1,5949 +1,6531 @@
-{-# LANGUAGE TemplateHaskell #-}
-{-# LANGUAGE NoFieldSelectors #-}
-{-# OPTIONS_HADDOCK prune #-}
-
-module SDL3.Sys.Bindgen.Render.Unsafe (
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetNumRenderDrivers,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderDriver,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_CreateWindowAndRenderer,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_CreateRenderer,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_CreateRendererWithProperties,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_CreateGPURenderer,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetGPURendererDevice,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_CreateSoftwareRenderer,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderer,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderWindow,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRendererName,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRendererProperties,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderOutputSize,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetCurrentRenderOutputSize,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_CreateTexture,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_CreateTextureFromSurface,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_CreateTextureWithProperties,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetTextureProperties,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRendererFromTexture,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetTextureSize,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetTexturePalette,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetTexturePalette,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetTextureColorMod,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetTextureColorModFloat,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetTextureColorMod,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetTextureColorModFloat,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetTextureAlphaMod,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetTextureAlphaModFloat,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetTextureAlphaMod,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetTextureAlphaModFloat,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetTextureBlendMode,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetTextureBlendMode,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetTextureScaleMode,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetTextureScaleMode,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_UpdateTexture,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_UpdateYUVTexture,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_UpdateNVTexture,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_LockTexture,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_LockTextureToSurface,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_UnlockTexture,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetRenderTarget,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderTarget,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetRenderLogicalPresentation,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderLogicalPresentation,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderLogicalPresentationRect,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderCoordinatesFromWindow,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderCoordinatesToWindow,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_ConvertEventToRenderCoordinates,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetRenderViewport,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderViewport,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderViewportSet,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderSafeArea,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetRenderClipRect,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderClipRect,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderClipEnabled,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetRenderScale,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderScale,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetRenderDrawColor,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetRenderDrawColorFloat,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderDrawColor,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderDrawColorFloat,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetRenderColorScale,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderColorScale,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetRenderDrawBlendMode,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderDrawBlendMode,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderClear,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderPoint,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderPoints,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderLine,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderLines,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderRect,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderRects,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderFillRect,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderFillRects,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderTexture,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderTextureRotated,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderTextureAffine,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderTextureTiled,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderTexture9Grid,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderTexture9GridTiled,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderGeometry,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderGeometryRaw,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetRenderTextureAddressMode,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderTextureAddressMode,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderReadPixels,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderPresent,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_DestroyTexture,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_DestroyRenderer,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_FlushRenderer,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderMetalLayer,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderMetalCommandEncoder,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_AddVulkanRenderSemaphores,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetRenderVSync,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderVSync,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderDebugText,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetDefaultTextureScaleMode,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetDefaultTextureScaleMode,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_CreateGPURenderState,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetGPURenderStateFragmentUniforms,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetGPURenderState,
-  SDL3.Sys.Bindgen.Render.Unsafe.sDL_DestroyGPURenderState,
-)
-where
-
-import HsBindgen.Runtime.PtrConst qualified as PtrConst
-import HsBindgen.Runtime.Support qualified as BG
-import HsBindgen.Runtime.Support.CAPI qualified
-import SDL3.Sys.Bindgen.Blendmode qualified
-import SDL3.Sys.Bindgen.Events qualified
-import SDL3.Sys.Bindgen.Gpu qualified
-import SDL3.Sys.Bindgen.Pixels qualified
-import SDL3.Sys.Bindgen.Properties qualified
-import SDL3.Sys.Bindgen.Rect qualified
-import SDL3.Sys.Bindgen.Render
-import SDL3.Sys.Bindgen.Stdinc qualified
-import SDL3.Sys.Bindgen.Surface qualified
-import SDL3.Sys.Bindgen.Video qualified
-
-$( HsBindgen.Runtime.Support.CAPI.addCSource
-     ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_render.h>"
-         , "signed int hs_bindgen_b8d027f3d5602f48 (void)"
-         , "{"
-         , "  return (SDL_GetNumRenderDrivers)();"
-         , "}"
-         , "char const *hs_bindgen_dce79b5e75543204 ("
-         , "  signed int arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderDriver)(arg1);"
-         , "}"
-         , "_Bool hs_bindgen_fd4bb4119f707b2a ("
-         , "  char const *arg1,"
-         , "  signed int arg2,"
-         , "  signed int arg3,"
-         , "  SDL_WindowFlags arg4,"
-         , "  SDL_Window **arg5,"
-         , "  SDL_Renderer **arg6"
-         , ")"
-         , "{"
-         , "  return (SDL_CreateWindowAndRenderer)(arg1, arg2, arg3, arg4, arg5, arg6);"
-         , "}"
-         , "SDL_Renderer *hs_bindgen_37b63ac6e8618d68 ("
-         , "  SDL_Window *arg1,"
-         , "  char const *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_CreateRenderer)(arg1, arg2);"
-         , "}"
-         , "SDL_Renderer *hs_bindgen_fe8ca198b1b0c17d ("
-         , "  SDL_PropertiesID arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_CreateRendererWithProperties)(arg1);"
-         , "}"
-         , "#include <SDL3/SDL_version.h>"
-         , "#include <SDL3/SDL_error.h>"
-         , "#include <SDL3/SDL_version.h>"
-         , "#if !SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "typedef struct SDL_GPUDevice SDL_GPUDevice;"
-         , "typedef struct SDL_GPURenderState SDL_GPURenderState;"
-         , "typedef struct SDL_GPURenderStateCreateInfo SDL_GPURenderStateCreateInfo;"
-         , "typedef int SDL_TextureAddressMode;"
-         , "#endif"
-         , "SDL_Renderer *hs_bindgen_40c46710682c09f1 ("
-         , "  SDL_GPUDevice *arg1,"
-         , "  SDL_Window *arg2"
-         , ")"
-         , "{"
-         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "  return (SDL_CreateGPURenderer)(arg1, arg2);"
-         , "#else"
-         , "  (void)arg1; (void)arg2; SDL_SetError(\"SDL_CreateGPURenderer requires SDL >= 3.4.0\"); return 0;"
-         , "#endif"
-         , "}"
-         , "#include <SDL3/SDL_version.h>"
-         , "#include <SDL3/SDL_error.h>"
-         , "#include <SDL3/SDL_version.h>"
-         , "#if !SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "typedef struct SDL_GPUDevice SDL_GPUDevice;"
-         , "typedef struct SDL_GPURenderState SDL_GPURenderState;"
-         , "typedef struct SDL_GPURenderStateCreateInfo SDL_GPURenderStateCreateInfo;"
-         , "typedef int SDL_TextureAddressMode;"
-         , "#endif"
-         , "SDL_GPUDevice *hs_bindgen_76cee8398d82c692 ("
-         , "  SDL_Renderer *arg1"
-         , ")"
-         , "{"
-         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "  return (SDL_GetGPURendererDevice)(arg1);"
-         , "#else"
-         , "  (void)arg1; SDL_SetError(\"SDL_GetGPURendererDevice requires SDL >= 3.4.0\"); return 0;"
-         , "#endif"
-         , "}"
-         , "SDL_Renderer *hs_bindgen_3a402a665e290fa3 ("
-         , "  SDL_Surface *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_CreateSoftwareRenderer)(arg1);"
-         , "}"
-         , "SDL_Renderer *hs_bindgen_30584ed4cc19ca5c ("
-         , "  SDL_Window *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderer)(arg1);"
-         , "}"
-         , "SDL_Window *hs_bindgen_c043f286f3176cd8 ("
-         , "  SDL_Renderer *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderWindow)(arg1);"
-         , "}"
-         , "char const *hs_bindgen_b4d2799733c66a42 ("
-         , "  SDL_Renderer *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRendererName)(arg1);"
-         , "}"
-         , "SDL_PropertiesID hs_bindgen_519d759f13b5a204 ("
-         , "  SDL_Renderer *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRendererProperties)(arg1);"
-         , "}"
-         , "_Bool hs_bindgen_15b72b770c77a09c ("
-         , "  SDL_Renderer *arg1,"
-         , "  signed int *arg2,"
-         , "  signed int *arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderOutputSize)(arg1, arg2, arg3);"
-         , "}"
-         , "_Bool hs_bindgen_09a49b8dd8196ac2 ("
-         , "  SDL_Renderer *arg1,"
-         , "  signed int *arg2,"
-         , "  signed int *arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_GetCurrentRenderOutputSize)(arg1, arg2, arg3);"
-         , "}"
-         , "SDL_Texture *hs_bindgen_3d4ff9d99a3fa98a ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_PixelFormat arg2,"
-         , "  SDL_TextureAccess arg3,"
-         , "  signed int arg4,"
-         , "  signed int arg5"
-         , ")"
-         , "{"
-         , "  return (SDL_CreateTexture)(arg1, arg2, arg3, arg4, arg5);"
-         , "}"
-         , "SDL_Texture *hs_bindgen_46cceb118c5977b8 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_Surface *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_CreateTextureFromSurface)(arg1, arg2);"
-         , "}"
-         , "SDL_Texture *hs_bindgen_52cc37cb33c5a099 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_PropertiesID arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_CreateTextureWithProperties)(arg1, arg2);"
-         , "}"
-         , "SDL_PropertiesID hs_bindgen_7d1578a13c421f10 ("
-         , "  SDL_Texture *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_GetTextureProperties)(arg1);"
-         , "}"
-         , "SDL_Renderer *hs_bindgen_59ae54d4482ab0ef ("
-         , "  SDL_Texture *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRendererFromTexture)(arg1);"
-         , "}"
-         , "_Bool hs_bindgen_132d974026c63235 ("
-         , "  SDL_Texture *arg1,"
-         , "  float *arg2,"
-         , "  float *arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_GetTextureSize)(arg1, arg2, arg3);"
-         , "}"
-         , "#include <SDL3/SDL_version.h>"
-         , "#include <SDL3/SDL_error.h>"
-         , "_Bool hs_bindgen_b9b978978bcb3701 ("
-         , "  SDL_Texture *arg1,"
-         , "  SDL_Palette *arg2"
-         , ")"
-         , "{"
-         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "  return (SDL_SetTexturePalette)(arg1, arg2);"
-         , "#else"
-         , "  (void)arg1; (void)arg2; SDL_SetError(\"SDL_SetTexturePalette requires SDL >= 3.4.0\"); return 0;"
-         , "#endif"
-         , "}"
-         , "#include <SDL3/SDL_version.h>"
-         , "#include <SDL3/SDL_error.h>"
-         , "SDL_Palette *hs_bindgen_38dd0c6a7ed9af72 ("
-         , "  SDL_Texture *arg1"
-         , ")"
-         , "{"
-         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "  return (SDL_GetTexturePalette)(arg1);"
-         , "#else"
-         , "  (void)arg1; SDL_SetError(\"SDL_GetTexturePalette requires SDL >= 3.4.0\"); return 0;"
-         , "#endif"
-         , "}"
-         , "_Bool hs_bindgen_328bc9103549865a ("
-         , "  SDL_Texture *arg1,"
-         , "  Uint8 arg2,"
-         , "  Uint8 arg3,"
-         , "  Uint8 arg4"
-         , ")"
-         , "{"
-         , "  return (SDL_SetTextureColorMod)(arg1, arg2, arg3, arg4);"
-         , "}"
-         , "_Bool hs_bindgen_f0f25fbdb4151d72 ("
-         , "  SDL_Texture *arg1,"
-         , "  float arg2,"
-         , "  float arg3,"
-         , "  float arg4"
-         , ")"
-         , "{"
-         , "  return (SDL_SetTextureColorModFloat)(arg1, arg2, arg3, arg4);"
-         , "}"
-         , "_Bool hs_bindgen_23c41565e3ebaf20 ("
-         , "  SDL_Texture *arg1,"
-         , "  Uint8 *arg2,"
-         , "  Uint8 *arg3,"
-         , "  Uint8 *arg4"
-         , ")"
-         , "{"
-         , "  return (SDL_GetTextureColorMod)(arg1, arg2, arg3, arg4);"
-         , "}"
-         , "_Bool hs_bindgen_40f14359348d1377 ("
-         , "  SDL_Texture *arg1,"
-         , "  float *arg2,"
-         , "  float *arg3,"
-         , "  float *arg4"
-         , ")"
-         , "{"
-         , "  return (SDL_GetTextureColorModFloat)(arg1, arg2, arg3, arg4);"
-         , "}"
-         , "_Bool hs_bindgen_5ed240f184c27e2f ("
-         , "  SDL_Texture *arg1,"
-         , "  Uint8 arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_SetTextureAlphaMod)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_5ea85df5eef9526f ("
-         , "  SDL_Texture *arg1,"
-         , "  float arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_SetTextureAlphaModFloat)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_b3e62a9848e5067e ("
-         , "  SDL_Texture *arg1,"
-         , "  Uint8 *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_GetTextureAlphaMod)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_55b6c4f083626b7a ("
-         , "  SDL_Texture *arg1,"
-         , "  float *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_GetTextureAlphaModFloat)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_34ab5b9eb64f99e7 ("
-         , "  SDL_Texture *arg1,"
-         , "  SDL_BlendMode arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_SetTextureBlendMode)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_9e50ca0241b5eecf ("
-         , "  SDL_Texture *arg1,"
-         , "  SDL_BlendMode *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_GetTextureBlendMode)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_7ec0426bb117fde0 ("
-         , "  SDL_Texture *arg1,"
-         , "  SDL_ScaleMode arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_SetTextureScaleMode)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_d153e754b011263b ("
-         , "  SDL_Texture *arg1,"
-         , "  SDL_ScaleMode *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_GetTextureScaleMode)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_9d30d0aa8075c243 ("
-         , "  SDL_Texture *arg1,"
-         , "  SDL_Rect const *arg2,"
-         , "  void const *arg3,"
-         , "  signed int arg4"
-         , ")"
-         , "{"
-         , "  return (SDL_UpdateTexture)(arg1, arg2, arg3, arg4);"
-         , "}"
-         , "_Bool hs_bindgen_145fdda972278858 ("
-         , "  SDL_Texture *arg1,"
-         , "  SDL_Rect const *arg2,"
-         , "  Uint8 const *arg3,"
-         , "  signed int arg4,"
-         , "  Uint8 const *arg5,"
-         , "  signed int arg6,"
-         , "  Uint8 const *arg7,"
-         , "  signed int arg8"
-         , ")"
-         , "{"
-         , "  return (SDL_UpdateYUVTexture)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);"
-         , "}"
-         , "_Bool hs_bindgen_8e87aea72679c0be ("
-         , "  SDL_Texture *arg1,"
-         , "  SDL_Rect const *arg2,"
-         , "  Uint8 const *arg3,"
-         , "  signed int arg4,"
-         , "  Uint8 const *arg5,"
-         , "  signed int arg6"
-         , ")"
-         , "{"
-         , "  return (SDL_UpdateNVTexture)(arg1, arg2, arg3, arg4, arg5, arg6);"
-         , "}"
-         , "_Bool hs_bindgen_f81dacbd782960a7 ("
-         , "  SDL_Texture *arg1,"
-         , "  SDL_Rect const *arg2,"
-         , "  void **arg3,"
-         , "  signed int *arg4"
-         , ")"
-         , "{"
-         , "  return (SDL_LockTexture)(arg1, arg2, arg3, arg4);"
-         , "}"
-         , "_Bool hs_bindgen_0422047faea9296b ("
-         , "  SDL_Texture *arg1,"
-         , "  SDL_Rect const *arg2,"
-         , "  SDL_Surface **arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_LockTextureToSurface)(arg1, arg2, arg3);"
-         , "}"
-         , "void hs_bindgen_9d1b4d7003c2d0ec ("
-         , "  SDL_Texture *arg1"
-         , ")"
-         , "{"
-         , "  (SDL_UnlockTexture)(arg1);"
-         , "}"
-         , "_Bool hs_bindgen_42456f91219d7d63 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_Texture *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_SetRenderTarget)(arg1, arg2);"
-         , "}"
-         , "SDL_Texture *hs_bindgen_afd608e22c7b34c2 ("
-         , "  SDL_Renderer *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderTarget)(arg1);"
-         , "}"
-         , "_Bool hs_bindgen_99a6a5d6611eb0ad ("
-         , "  SDL_Renderer *arg1,"
-         , "  signed int arg2,"
-         , "  signed int arg3,"
-         , "  SDL_RendererLogicalPresentation arg4"
-         , ")"
-         , "{"
-         , "  return (SDL_SetRenderLogicalPresentation)(arg1, arg2, arg3, arg4);"
-         , "}"
-         , "_Bool hs_bindgen_cbe5162cf71da053 ("
-         , "  SDL_Renderer *arg1,"
-         , "  signed int *arg2,"
-         , "  signed int *arg3,"
-         , "  SDL_RendererLogicalPresentation *arg4"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderLogicalPresentation)(arg1, arg2, arg3, arg4);"
-         , "}"
-         , "_Bool hs_bindgen_60fac3e135efff7b ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_FRect *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderLogicalPresentationRect)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_88c23a7a2bb3f897 ("
-         , "  SDL_Renderer *arg1,"
-         , "  float arg2,"
-         , "  float arg3,"
-         , "  float *arg4,"
-         , "  float *arg5"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderCoordinatesFromWindow)(arg1, arg2, arg3, arg4, arg5);"
-         , "}"
-         , "_Bool hs_bindgen_30a19a6793a8a60a ("
-         , "  SDL_Renderer *arg1,"
-         , "  float arg2,"
-         , "  float arg3,"
-         , "  float *arg4,"
-         , "  float *arg5"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderCoordinatesToWindow)(arg1, arg2, arg3, arg4, arg5);"
-         , "}"
-         , "_Bool hs_bindgen_99e1877354dd4cdb ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_Event *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_ConvertEventToRenderCoordinates)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_da47a291603fd568 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_Rect const *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_SetRenderViewport)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_d36147bdfea02ae0 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_Rect *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderViewport)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_b75de8ea63ffb717 ("
-         , "  SDL_Renderer *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderViewportSet)(arg1);"
-         , "}"
-         , "_Bool hs_bindgen_143575ef07d5400f ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_Rect *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderSafeArea)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_db4ee8d700a535c8 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_Rect const *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_SetRenderClipRect)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_7bd39620f800ed67 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_Rect *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderClipRect)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_011ece38ae24698a ("
-         , "  SDL_Renderer *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderClipEnabled)(arg1);"
-         , "}"
-         , "_Bool hs_bindgen_a2ecfc86b7164248 ("
-         , "  SDL_Renderer *arg1,"
-         , "  float arg2,"
-         , "  float arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_SetRenderScale)(arg1, arg2, arg3);"
-         , "}"
-         , "_Bool hs_bindgen_9b27eba43ce3989c ("
-         , "  SDL_Renderer *arg1,"
-         , "  float *arg2,"
-         , "  float *arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderScale)(arg1, arg2, arg3);"
-         , "}"
-         , "_Bool hs_bindgen_122da056b531e869 ("
-         , "  SDL_Renderer *arg1,"
-         , "  Uint8 arg2,"
-         , "  Uint8 arg3,"
-         , "  Uint8 arg4,"
-         , "  Uint8 arg5"
-         , ")"
-         , "{"
-         , "  return (SDL_SetRenderDrawColor)(arg1, arg2, arg3, arg4, arg5);"
-         , "}"
-         , "_Bool hs_bindgen_069391a3e71d464d ("
-         , "  SDL_Renderer *arg1,"
-         , "  float arg2,"
-         , "  float arg3,"
-         , "  float arg4,"
-         , "  float arg5"
-         , ")"
-         , "{"
-         , "  return (SDL_SetRenderDrawColorFloat)(arg1, arg2, arg3, arg4, arg5);"
-         , "}"
-         , "_Bool hs_bindgen_7f0f910be4b2889e ("
-         , "  SDL_Renderer *arg1,"
-         , "  Uint8 *arg2,"
-         , "  Uint8 *arg3,"
-         , "  Uint8 *arg4,"
-         , "  Uint8 *arg5"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderDrawColor)(arg1, arg2, arg3, arg4, arg5);"
-         , "}"
-         , "_Bool hs_bindgen_7679f2d13375bcd2 ("
-         , "  SDL_Renderer *arg1,"
-         , "  float *arg2,"
-         , "  float *arg3,"
-         , "  float *arg4,"
-         , "  float *arg5"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderDrawColorFloat)(arg1, arg2, arg3, arg4, arg5);"
-         , "}"
-         , "_Bool hs_bindgen_2d134fc6b089039f ("
-         , "  SDL_Renderer *arg1,"
-         , "  float arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_SetRenderColorScale)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_f9539095c565384c ("
-         , "  SDL_Renderer *arg1,"
-         , "  float *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderColorScale)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_1885ca90cb47d78c ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_BlendMode arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_SetRenderDrawBlendMode)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_80ecda0d3d8d870b ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_BlendMode *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderDrawBlendMode)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_82119a8dbd03b3ca ("
-         , "  SDL_Renderer *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderClear)(arg1);"
-         , "}"
-         , "_Bool hs_bindgen_c73e2796ab7f90c1 ("
-         , "  SDL_Renderer *arg1,"
-         , "  float arg2,"
-         , "  float arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderPoint)(arg1, arg2, arg3);"
-         , "}"
-         , "_Bool hs_bindgen_cb752ddd9f3b53be ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_FPoint const *arg2,"
-         , "  signed int arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderPoints)(arg1, arg2, arg3);"
-         , "}"
-         , "_Bool hs_bindgen_8fc8b7b71da27e92 ("
-         , "  SDL_Renderer *arg1,"
-         , "  float arg2,"
-         , "  float arg3,"
-         , "  float arg4,"
-         , "  float arg5"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderLine)(arg1, arg2, arg3, arg4, arg5);"
-         , "}"
-         , "_Bool hs_bindgen_d68b0895520fbd3a ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_FPoint const *arg2,"
-         , "  signed int arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderLines)(arg1, arg2, arg3);"
-         , "}"
-         , "_Bool hs_bindgen_74702b94b10a8a97 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_FRect const *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderRect)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_2ee379e179df5f3c ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_FRect const *arg2,"
-         , "  signed int arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderRects)(arg1, arg2, arg3);"
-         , "}"
-         , "_Bool hs_bindgen_c5b24d3e3930aa12 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_FRect const *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderFillRect)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_afbd05ab4eae453e ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_FRect const *arg2,"
-         , "  signed int arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderFillRects)(arg1, arg2, arg3);"
-         , "}"
-         , "_Bool hs_bindgen_9502ac14df729213 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_Texture *arg2,"
-         , "  SDL_FRect const *arg3,"
-         , "  SDL_FRect const *arg4"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderTexture)(arg1, arg2, arg3, arg4);"
-         , "}"
-         , "_Bool hs_bindgen_bdd81c1a4d95fd9a ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_Texture *arg2,"
-         , "  SDL_FRect const *arg3,"
-         , "  SDL_FRect const *arg4,"
-         , "  double arg5,"
-         , "  SDL_FPoint const *arg6,"
-         , "  SDL_FlipMode arg7"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderTextureRotated)(arg1, arg2, arg3, arg4, arg5, arg6, arg7);"
-         , "}"
-         , "_Bool hs_bindgen_18c2f3b6d0215153 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_Texture *arg2,"
-         , "  SDL_FRect const *arg3,"
-         , "  SDL_FPoint const *arg4,"
-         , "  SDL_FPoint const *arg5,"
-         , "  SDL_FPoint const *arg6"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderTextureAffine)(arg1, arg2, arg3, arg4, arg5, arg6);"
-         , "}"
-         , "_Bool hs_bindgen_f46f867b1d2a5b99 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_Texture *arg2,"
-         , "  SDL_FRect const *arg3,"
-         , "  float arg4,"
-         , "  SDL_FRect const *arg5"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderTextureTiled)(arg1, arg2, arg3, arg4, arg5);"
-         , "}"
-         , "_Bool hs_bindgen_7460ccca85327f67 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_Texture *arg2,"
-         , "  SDL_FRect const *arg3,"
-         , "  float arg4,"
-         , "  float arg5,"
-         , "  float arg6,"
-         , "  float arg7,"
-         , "  float arg8,"
-         , "  SDL_FRect const *arg9"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderTexture9Grid)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);"
-         , "}"
-         , "#include <SDL3/SDL_version.h>"
-         , "#include <SDL3/SDL_error.h>"
-         , "_Bool hs_bindgen_82ec92cefa73aeb4 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_Texture *arg2,"
-         , "  SDL_FRect const *arg3,"
-         , "  float arg4,"
-         , "  float arg5,"
-         , "  float arg6,"
-         , "  float arg7,"
-         , "  float arg8,"
-         , "  SDL_FRect const *arg9,"
-         , "  float arg10"
-         , ")"
-         , "{"
-         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "  return (SDL_RenderTexture9GridTiled)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10);"
-         , "#else"
-         , "  (void)arg1; (void)arg2; (void)arg3; (void)arg4; (void)arg5; (void)arg6; (void)arg7; (void)arg8; (void)arg9; (void)arg10; SDL_SetError(\"SDL_RenderTexture9GridTiled requires SDL >= 3.4.0\"); return 0;"
-         , "#endif"
-         , "}"
-         , "_Bool hs_bindgen_604c256c92b502f9 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_Texture *arg2,"
-         , "  SDL_Vertex const *arg3,"
-         , "  signed int arg4,"
-         , "  signed int const *arg5,"
-         , "  signed int arg6"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderGeometry)(arg1, arg2, arg3, arg4, arg5, arg6);"
-         , "}"
-         , "_Bool hs_bindgen_ae17af9f44d6d343 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_Texture *arg2,"
-         , "  float const *arg3,"
-         , "  signed int arg4,"
-         , "  SDL_FColor const *arg5,"
-         , "  signed int arg6,"
-         , "  float const *arg7,"
-         , "  signed int arg8,"
-         , "  signed int arg9,"
-         , "  void const *arg10,"
-         , "  signed int arg11,"
-         , "  signed int arg12"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderGeometryRaw)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12);"
-         , "}"
-         , "#include <SDL3/SDL_version.h>"
-         , "#include <SDL3/SDL_error.h>"
-         , "#include <SDL3/SDL_version.h>"
-         , "#if !SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "typedef struct SDL_GPUDevice SDL_GPUDevice;"
-         , "typedef struct SDL_GPURenderState SDL_GPURenderState;"
-         , "typedef struct SDL_GPURenderStateCreateInfo SDL_GPURenderStateCreateInfo;"
-         , "typedef int SDL_TextureAddressMode;"
-         , "#endif"
-         , "_Bool hs_bindgen_f5de60362bf89a18 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_TextureAddressMode arg2,"
-         , "  SDL_TextureAddressMode arg3"
-         , ")"
-         , "{"
-         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "  return (SDL_SetRenderTextureAddressMode)(arg1, arg2, arg3);"
-         , "#else"
-         , "  (void)arg1; (void)arg2; (void)arg3; SDL_SetError(\"SDL_SetRenderTextureAddressMode requires SDL >= 3.4.0\"); return 0;"
-         , "#endif"
-         , "}"
-         , "#include <SDL3/SDL_version.h>"
-         , "#include <SDL3/SDL_error.h>"
-         , "#include <SDL3/SDL_version.h>"
-         , "#if !SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "typedef struct SDL_GPUDevice SDL_GPUDevice;"
-         , "typedef struct SDL_GPURenderState SDL_GPURenderState;"
-         , "typedef struct SDL_GPURenderStateCreateInfo SDL_GPURenderStateCreateInfo;"
-         , "typedef int SDL_TextureAddressMode;"
-         , "#endif"
-         , "_Bool hs_bindgen_727bb39b49c44f15 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_TextureAddressMode *arg2,"
-         , "  SDL_TextureAddressMode *arg3"
-         , ")"
-         , "{"
-         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "  return (SDL_GetRenderTextureAddressMode)(arg1, arg2, arg3);"
-         , "#else"
-         , "  (void)arg1; (void)arg2; (void)arg3; SDL_SetError(\"SDL_GetRenderTextureAddressMode requires SDL >= 3.4.0\"); return 0;"
-         , "#endif"
-         , "}"
-         , "SDL_Surface *hs_bindgen_7173be00862c48e8 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_Rect const *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderReadPixels)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_e66060f4d8ba3f83 ("
-         , "  SDL_Renderer *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderPresent)(arg1);"
-         , "}"
-         , "void hs_bindgen_daf903d539dab511 ("
-         , "  SDL_Texture *arg1"
-         , ")"
-         , "{"
-         , "  (SDL_DestroyTexture)(arg1);"
-         , "}"
-         , "void hs_bindgen_1473f45c80ad6575 ("
-         , "  SDL_Renderer *arg1"
-         , ")"
-         , "{"
-         , "  (SDL_DestroyRenderer)(arg1);"
-         , "}"
-         , "_Bool hs_bindgen_78e89be71892a1e6 ("
-         , "  SDL_Renderer *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_FlushRenderer)(arg1);"
-         , "}"
-         , "void *hs_bindgen_47416f026ca1192f ("
-         , "  SDL_Renderer *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderMetalLayer)(arg1);"
-         , "}"
-         , "void *hs_bindgen_c2e3411ac19d746f ("
-         , "  SDL_Renderer *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderMetalCommandEncoder)(arg1);"
-         , "}"
-         , "_Bool hs_bindgen_98b03ff5afd62e07 ("
-         , "  SDL_Renderer *arg1,"
-         , "  Uint32 arg2,"
-         , "  Sint64 arg3,"
-         , "  Sint64 arg4"
-         , ")"
-         , "{"
-         , "  return (SDL_AddVulkanRenderSemaphores)(arg1, arg2, arg3, arg4);"
-         , "}"
-         , "_Bool hs_bindgen_529493ee355e9466 ("
-         , "  SDL_Renderer *arg1,"
-         , "  signed int arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_SetRenderVSync)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_ff41dba2a623c0ab ("
-         , "  SDL_Renderer *arg1,"
-         , "  signed int *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_GetRenderVSync)(arg1, arg2);"
-         , "}"
-         , "_Bool hs_bindgen_a60ea3ca32fd26a5 ("
-         , "  SDL_Renderer *arg1,"
-         , "  float arg2,"
-         , "  float arg3,"
-         , "  char const *arg4"
-         , ")"
-         , "{"
-         , "  return (SDL_RenderDebugText)(arg1, arg2, arg3, arg4);"
-         , "}"
-         , "#include <SDL3/SDL_version.h>"
-         , "#include <SDL3/SDL_error.h>"
-         , "_Bool hs_bindgen_e0aee38e1b73b64f ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_ScaleMode arg2"
-         , ")"
-         , "{"
-         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "  return (SDL_SetDefaultTextureScaleMode)(arg1, arg2);"
-         , "#else"
-         , "  (void)arg1; (void)arg2; SDL_SetError(\"SDL_SetDefaultTextureScaleMode requires SDL >= 3.4.0\"); return 0;"
-         , "#endif"
-         , "}"
-         , "#include <SDL3/SDL_version.h>"
-         , "#include <SDL3/SDL_error.h>"
-         , "_Bool hs_bindgen_51c8f91a397184cb ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_ScaleMode *arg2"
-         , ")"
-         , "{"
-         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "  return (SDL_GetDefaultTextureScaleMode)(arg1, arg2);"
-         , "#else"
-         , "  (void)arg1; (void)arg2; SDL_SetError(\"SDL_GetDefaultTextureScaleMode requires SDL >= 3.4.0\"); return 0;"
-         , "#endif"
-         , "}"
-         , "#include <SDL3/SDL_version.h>"
-         , "#include <SDL3/SDL_error.h>"
-         , "#include <SDL3/SDL_version.h>"
-         , "#if !SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "typedef struct SDL_GPUDevice SDL_GPUDevice;"
-         , "typedef struct SDL_GPURenderState SDL_GPURenderState;"
-         , "typedef struct SDL_GPURenderStateCreateInfo SDL_GPURenderStateCreateInfo;"
-         , "typedef int SDL_TextureAddressMode;"
-         , "#endif"
-         , "SDL_GPURenderState *hs_bindgen_2d970ffb5a76b1e4 ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_GPURenderStateCreateInfo const *arg2"
-         , ")"
-         , "{"
-         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "  return (SDL_CreateGPURenderState)(arg1, arg2);"
-         , "#else"
-         , "  (void)arg1; (void)arg2; SDL_SetError(\"SDL_CreateGPURenderState requires SDL >= 3.4.0\"); return 0;"
-         , "#endif"
-         , "}"
-         , "#include <SDL3/SDL_version.h>"
-         , "#include <SDL3/SDL_error.h>"
-         , "#include <SDL3/SDL_version.h>"
-         , "#if !SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "typedef struct SDL_GPUDevice SDL_GPUDevice;"
-         , "typedef struct SDL_GPURenderState SDL_GPURenderState;"
-         , "typedef struct SDL_GPURenderStateCreateInfo SDL_GPURenderStateCreateInfo;"
-         , "typedef int SDL_TextureAddressMode;"
-         , "#endif"
-         , "_Bool hs_bindgen_312b275c9f55463c ("
-         , "  SDL_GPURenderState *arg1,"
-         , "  Uint32 arg2,"
-         , "  void const *arg3,"
-         , "  Uint32 arg4"
-         , ")"
-         , "{"
-         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "  return (SDL_SetGPURenderStateFragmentUniforms)(arg1, arg2, arg3, arg4);"
-         , "#else"
-         , "  (void)arg1; (void)arg2; (void)arg3; (void)arg4; SDL_SetError(\"SDL_SetGPURenderStateFragmentUniforms requires SDL >= 3.4.0\"); return 0;"
-         , "#endif"
-         , "}"
-         , "#include <SDL3/SDL_version.h>"
-         , "#include <SDL3/SDL_error.h>"
-         , "#include <SDL3/SDL_version.h>"
-         , "#if !SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "typedef struct SDL_GPUDevice SDL_GPUDevice;"
-         , "typedef struct SDL_GPURenderState SDL_GPURenderState;"
-         , "typedef struct SDL_GPURenderStateCreateInfo SDL_GPURenderStateCreateInfo;"
-         , "typedef int SDL_TextureAddressMode;"
-         , "#endif"
-         , "_Bool hs_bindgen_0d6949c161acc59d ("
-         , "  SDL_Renderer *arg1,"
-         , "  SDL_GPURenderState *arg2"
-         , ")"
-         , "{"
-         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "  return (SDL_SetGPURenderState)(arg1, arg2);"
-         , "#else"
-         , "  (void)arg1; (void)arg2; SDL_SetError(\"SDL_SetGPURenderState requires SDL >= 3.4.0\"); return 0;"
-         , "#endif"
-         , "}"
-         , "#include <SDL3/SDL_version.h>"
-         , "#include <SDL3/SDL_error.h>"
-         , "#include <SDL3/SDL_version.h>"
-         , "#if !SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "typedef struct SDL_GPUDevice SDL_GPUDevice;"
-         , "typedef struct SDL_GPURenderState SDL_GPURenderState;"
-         , "typedef struct SDL_GPURenderStateCreateInfo SDL_GPURenderStateCreateInfo;"
-         , "typedef int SDL_TextureAddressMode;"
-         , "#endif"
-         , "void hs_bindgen_eccc60d637069ae8 ("
-         , "  SDL_GPURenderState *arg1"
-         , ")"
-         , "{"
-         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
-         , "  (SDL_DestroyGPURenderState)(arg1);"
-         , "#else"
-         , "  (void)arg1; SDL_SetError(\"SDL_DestroyGPURenderState requires SDL >= 3.4.0\");"
-         , "#endif"
-         , "}"
-         ]
-     )
- )
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetNumRenderDrivers@
-foreign import ccall unsafe "hs_bindgen_b8d027f3d5602f48"
-  hs_bindgen_b8d027f3d5602f48_base
-    :: IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetNumRenderDrivers@
-hs_bindgen_b8d027f3d5602f48 :: IO BG.CInt
-hs_bindgen_b8d027f3d5602f48 =
-  BG.fromFFIType hs_bindgen_b8d027f3d5602f48_base
-
--- | Get the number of 2D rendering drivers available for the current display.
---
---     A render driver is a set of code that handles rendering and texture management on a particular display. Normally there is only one, but some drivers may have several available with different capabilities.
---
---     There may be none if SDL was compiled without render support.
---
---     [Returns]: the number of built in render drivers.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_CreateRenderer', 'sDL_GetRenderDriver'
---
---     [C declaration]: @SDL_GetNumRenderDrivers@, defined at @SDL3\/SDL_render.h 192:33@
-sDL_GetNumRenderDrivers :: IO BG.CInt
-sDL_GetNumRenderDrivers = hs_bindgen_b8d027f3d5602f48
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderDriver@
-foreign import ccall unsafe "hs_bindgen_dce79b5e75543204"
-  hs_bindgen_dce79b5e75543204_base
-    :: BG.Int32
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderDriver@
-hs_bindgen_dce79b5e75543204
-  :: BG.CInt
-  -> IO (PtrConst.PtrConst BG.CChar)
-hs_bindgen_dce79b5e75543204 =
-  BG.fromFFIType hs_bindgen_dce79b5e75543204_base
-
--- | Use this function to get the name of a built in 2D rendering driver.
---
---     The list of rendering drivers is given in the order that they are normally initialized by default; the drivers that seem more reasonable to choose first (as far as the SDL developers believe) are earlier in the list.
---
---     The names of drivers are all simple, low-ASCII identifiers, like \"opengl\", \"direct3d12\" or \"metal\". These never have Unicode characters, and are not meant to be proper names.
---
---     [Returns]: the name of the rendering driver at the requested index, or NULL if an invalid index was specified.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetNumRenderDrivers'
---
---     [C declaration]: @SDL_GetRenderDriver@, defined at @SDL3\/SDL_render.h 216:42@
-sDL_GetRenderDriver
-  :: BG.CInt
-  -- ^
-  --
-  --           [@index@]: the index of the rendering driver; the value ranges from 0 to @SDL_GetNumRenderDrivers()@ - 1.
-  -> IO (PtrConst.PtrConst BG.CChar)
-sDL_GetRenderDriver = hs_bindgen_dce79b5e75543204
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateWindowAndRenderer@
-foreign import ccall unsafe "hs_bindgen_fd4bb4119f707b2a"
-  hs_bindgen_fd4bb4119f707b2a_base
-    :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> BG.Word64
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateWindowAndRenderer@
-hs_bindgen_fd4bb4119f707b2a
-  :: PtrConst.PtrConst BG.CChar
-  -> BG.CInt
-  -> BG.CInt
-  -> SDL3.Sys.Bindgen.Video.SDL_WindowFlags
-  -> BG.Ptr (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window)
-  -> BG.Ptr (BG.Ptr SDL_Renderer)
-  -> IO BG.CBool
-hs_bindgen_fd4bb4119f707b2a =
-  BG.fromFFIType hs_bindgen_fd4bb4119f707b2a_base
-
--- | Create a window and default renderer.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_CreateRenderer', SDL_CreateWindow
---
---     [C declaration]: @SDL_CreateWindowAndRenderer@, defined at @SDL3\/SDL_render.h 238:34@
-sDL_CreateWindowAndRenderer
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@title@]: the title of the window, in UTF-8 encoding.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@width@]: the width of the window.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@height@]: the height of the window.
-  -> SDL3.Sys.Bindgen.Video.SDL_WindowFlags
-  -- ^
-  --
-  --           [@window_flags@]: the flags used to create the window (see SDL_CreateWindow()).
-  -> BG.Ptr (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window)
-  -- ^
-  --
-  --           [@window@]: a pointer filled with the window, or NULL on error.
-  -> BG.Ptr (BG.Ptr SDL_Renderer)
-  -- ^
-  --
-  --           [@renderer@]: a pointer filled with the renderer, or NULL on error.
-  -> IO BG.CBool
-sDL_CreateWindowAndRenderer =
-  hs_bindgen_fd4bb4119f707b2a
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateRenderer@
-foreign import ccall unsafe "hs_bindgen_37b63ac6e8618d68"
-  hs_bindgen_37b63ac6e8618d68_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateRenderer@
-hs_bindgen_37b63ac6e8618d68
-  :: BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
-  -> PtrConst.PtrConst BG.CChar
-  -> IO (BG.Ptr SDL_Renderer)
-hs_bindgen_37b63ac6e8618d68 =
-  BG.fromFFIType hs_bindgen_37b63ac6e8618d68_base
-
--- | Create a 2D rendering context for a window.
---
---     If you want a specific renderer, you can specify its name here. A list of available renderers can be obtained by calling @SDL_GetRenderDriver()@ multiple times, with indices from 0 to @SDL_GetNumRenderDrivers()@ -1. If you don\'t need a specific renderer, specify NULL and SDL will attempt to choose the best option for you, based on what is available on the user\'s system.
---
---     If @name@ is a comma-separated list, SDL will try each name, in the order listed, until one succeeds or all of them fail.
---
---     By default the rendering size matches the window size in pixels, but you can call @SDL_SetRenderLogicalPresentation()@ to change the content size and scaling options.
---
---     [Returns]: a valid rendering context or NULL if there was an error; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_CreateRendererWithProperties', 'sDL_CreateSoftwareRenderer', 'sDL_DestroyRenderer', 'sDL_GetNumRenderDrivers', 'sDL_GetRenderDriver', 'sDL_GetRendererName'
---
---     [C declaration]: @SDL_CreateRenderer@, defined at @SDL3\/SDL_render.h 273:44@
-sDL_CreateRenderer
-  :: BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
-  -- ^
-  --
-  --           [@window@]: the window where rendering is displayed.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@name@]: the name of the rendering driver to initialize, or NULL to let SDL choose one.
-  -> IO (BG.Ptr SDL_Renderer)
-sDL_CreateRenderer = hs_bindgen_37b63ac6e8618d68
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateRendererWithProperties@
-foreign import ccall unsafe "hs_bindgen_fe8ca198b1b0c17d"
-  hs_bindgen_fe8ca198b1b0c17d_base
-    :: BG.Word32
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateRendererWithProperties@
-hs_bindgen_fe8ca198b1b0c17d
-  :: SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
-  -> IO (BG.Ptr SDL_Renderer)
-hs_bindgen_fe8ca198b1b0c17d =
-  BG.fromFFIType hs_bindgen_fe8ca198b1b0c17d_base
-
--- | Create a 2D rendering context for a window, with the specified properties.
---
---     These are the supported properties:
---
---     * @'sDL_PROP_RENDERER_CREATE_NAME_STRING'@: the name of the rendering driver to use, if a specific one is desired
---
---     * @'sDL_PROP_RENDERER_CREATE_WINDOW_POINTER'@: the window where rendering is displayed, required if this isn\'t a software renderer using a surface
---
---     * @'sDL_PROP_RENDERER_CREATE_SURFACE_POINTER'@: the surface where rendering is displayed, if you want a software renderer without a window
---
---     * @'sDL_PROP_RENDERER_CREATE_OUTPUT_COLORSPACE_NUMBER'@: an SDL_Colorspace value describing the colorspace for output to the display, defaults to SDL_COLORSPACE_SRGB. The direct3d11, direct3d12, and metal renderers support SDL_COLORSPACE_SRGB_LINEAR, which is a linear color space and supports HDR output. If you select SDL_COLORSPACE_SRGB_LINEAR, drawing still uses the sRGB colorspace, but values can go beyond 1.0 and float (linear) format textures can be used for HDR content.
---
---     * @'sDL_PROP_RENDERER_CREATE_PRESENT_VSYNC_NUMBER'@: non-zero if you want present synchronized with the refresh rate. This property can take any value that is supported by @SDL_SetRenderVSync()@ for the renderer.
---
---     With the SDL GPU renderer (since SDL 3.4.0):
---
---     * @'sDL_PROP_RENDERER_CREATE_GPU_DEVICE_POINTER'@: the device to use with the renderer, optional.
---
---     * @'sDL_PROP_RENDERER_CREATE_GPU_SHADERS_SPIRV_BOOLEAN'@: the app is able to provide SPIR-V shaders to 'SDL_GPURenderState', optional.
---
---     * @'sDL_PROP_RENDERER_CREATE_GPU_SHADERS_DXIL_BOOLEAN'@: the app is able to provide DXIL shaders to 'SDL_GPURenderState', optional.
---
---     * @'sDL_PROP_RENDERER_CREATE_GPU_SHADERS_MSL_BOOLEAN'@: the app is able to provide MSL shaders to 'SDL_GPURenderState', optional.
---
---     With the vulkan renderer:
---
---     * @'sDL_PROP_RENDERER_CREATE_VULKAN_INSTANCE_POINTER'@: the VkInstance to use with the renderer, optional.
---
---     * @'sDL_PROP_RENDERER_CREATE_VULKAN_SURFACE_NUMBER'@: the VkSurfaceKHR to use with the renderer, optional.
---
---     * @'sDL_PROP_RENDERER_CREATE_VULKAN_PHYSICAL_DEVICE_POINTER'@: the VkPhysicalDevice to use with the renderer, optional.
---
---     * @'sDL_PROP_RENDERER_CREATE_VULKAN_DEVICE_POINTER'@: the VkDevice to use with the renderer, optional.
---
---     * @'sDL_PROP_RENDERER_CREATE_VULKAN_GRAPHICS_QUEUE_FAMILY_INDEX_NUMBER'@: the queue family index used for rendering.
---
---     * @'sDL_PROP_RENDERER_CREATE_VULKAN_PRESENT_QUEUE_FAMILY_INDEX_NUMBER'@: the queue family index used for presentation.
---
---     [Returns]: a valid rendering context or NULL if there was an error; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: SDL_CreateProperties, 'sDL_CreateRenderer', 'sDL_CreateSoftwareRenderer', 'sDL_DestroyRenderer', 'sDL_GetRendererName'
---
---     [C declaration]: @SDL_CreateRendererWithProperties@, defined at @SDL3\/SDL_render.h 337:44@
-sDL_CreateRendererWithProperties
-  :: SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
-  -- ^
-  --
-  --           [@props@]: the properties to use.
-  -> IO (BG.Ptr SDL_Renderer)
-sDL_CreateRendererWithProperties =
-  hs_bindgen_fe8ca198b1b0c17d
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateGPURenderer@
-foreign import ccall unsafe "hs_bindgen_40c46710682c09f1"
-  hs_bindgen_40c46710682c09f1_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateGPURenderer@
-hs_bindgen_40c46710682c09f1
-  :: BG.Ptr SDL3.Sys.Bindgen.Gpu.SDL_GPUDevice
-  -> BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
-  -> IO (BG.Ptr SDL_Renderer)
-hs_bindgen_40c46710682c09f1 =
-  BG.fromFFIType hs_bindgen_40c46710682c09f1_base
-
--- | Create a 2D GPU rendering context.
---
---     The GPU device to use is passed in as a parameter. If this is NULL, then a device will be created normally and can be retrieved using @SDL_GetGPURendererDevice()@.
---
---     The window to use is passed in as a parameter. If this is NULL, then this will become an offscreen renderer. In that case, you should call @SDL_SetRenderTarget()@ to setup rendering to a texture, and then call @SDL_RenderPresent()@ normally to complete drawing a frame.
---
---     [Returns]: a valid rendering context or NULL if there was an error; call SDL_GetError() for more information.
---
---     [Thread safety]: If this function is called with a valid GPU device, it should be called on the thread that created the device. If this function is called with a valid window, it should be called on the thread that created the window.
---
---     @since 3.4.0
---
---     [See also]: 'sDL_CreateRendererWithProperties', 'sDL_GetGPURendererDevice', SDL_CreateGPUShader, 'sDL_CreateGPURenderState', 'sDL_SetGPURenderState'
---
---     [C declaration]: @SDL_CreateGPURenderer@, defined at @SDL3\/SDL_render.h 387:44@
-sDL_CreateGPURenderer
-  :: BG.Ptr SDL3.Sys.Bindgen.Gpu.SDL_GPUDevice
-  -- ^
-  --
-  --           [@device@]: the GPU device to use with the renderer, or NULL to create a device.
-  -> BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
-  -- ^
-  --
-  --           [@window@]: the window where rendering is displayed, or NULL to create an offscreen renderer.
-  -> IO (BG.Ptr SDL_Renderer)
-sDL_CreateGPURenderer = hs_bindgen_40c46710682c09f1
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetGPURendererDevice@
-foreign import ccall unsafe "hs_bindgen_76cee8398d82c692"
-  hs_bindgen_76cee8398d82c692_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetGPURendererDevice@
-hs_bindgen_76cee8398d82c692
-  :: BG.Ptr SDL_Renderer
-  -> IO (BG.Ptr SDL3.Sys.Bindgen.Gpu.SDL_GPUDevice)
-hs_bindgen_76cee8398d82c692 =
-  BG.fromFFIType hs_bindgen_76cee8398d82c692_base
-
--- | Return the GPU device used by a renderer.
---
---     [Returns]: the GPU device used by the renderer, or NULL if the renderer is not a GPU renderer; call SDL_GetError() for more information.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.4.0
---
---     [C declaration]: @SDL_GetGPURendererDevice@, defined at @SDL3\/SDL_render.h 400:45@
-sDL_GetGPURendererDevice
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> IO (BG.Ptr SDL3.Sys.Bindgen.Gpu.SDL_GPUDevice)
-sDL_GetGPURendererDevice =
-  hs_bindgen_76cee8398d82c692
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateSoftwareRenderer@
-foreign import ccall unsafe "hs_bindgen_3a402a665e290fa3"
-  hs_bindgen_3a402a665e290fa3_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateSoftwareRenderer@
-hs_bindgen_3a402a665e290fa3
-  :: BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface
-  -> IO (BG.Ptr SDL_Renderer)
-hs_bindgen_3a402a665e290fa3 =
-  BG.fromFFIType hs_bindgen_3a402a665e290fa3_base
-
--- | Create a 2D software rendering context for a surface.
---
---     Two other APIs which can be used to create 'SDL_Renderer': @SDL_CreateRenderer()@ and @SDL_CreateWindowAndRenderer()@. These can /also/ create a software renderer, but they are intended to be used with an SDL_Window as the final destination and not an SDL_Surface.
---
---     [Returns]: a valid rendering context or NULL if there was an error; call SDL_GetError() for more information.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_DestroyRenderer'
---
---     [C declaration]: @SDL_CreateSoftwareRenderer@, defined at @SDL3\/SDL_render.h 421:44@
-sDL_CreateSoftwareRenderer
-  :: BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface
-  -- ^
-  --
-  --           [@surface@]: the SDL_Surface structure representing the surface where rendering is done.
-  -> IO (BG.Ptr SDL_Renderer)
-sDL_CreateSoftwareRenderer =
-  hs_bindgen_3a402a665e290fa3
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderer@
-foreign import ccall unsafe "hs_bindgen_30584ed4cc19ca5c"
-  hs_bindgen_30584ed4cc19ca5c_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderer@
-hs_bindgen_30584ed4cc19ca5c
-  :: BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
-  -> IO (BG.Ptr SDL_Renderer)
-hs_bindgen_30584ed4cc19ca5c =
-  BG.fromFFIType hs_bindgen_30584ed4cc19ca5c_base
-
--- | Get the renderer associated with a window.
---
---     [Returns]: the rendering context on success or NULL on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_GetRenderer@, defined at @SDL3\/SDL_render.h 434:44@
-sDL_GetRenderer
-  :: BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
-  -- ^
-  --
-  --           [@window@]: the window to query.
-  -> IO (BG.Ptr SDL_Renderer)
-sDL_GetRenderer = hs_bindgen_30584ed4cc19ca5c
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderWindow@
-foreign import ccall unsafe "hs_bindgen_c043f286f3176cd8"
-  hs_bindgen_c043f286f3176cd8_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderWindow@
-hs_bindgen_c043f286f3176cd8
-  :: BG.Ptr SDL_Renderer
-  -> IO (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window)
-hs_bindgen_c043f286f3176cd8 =
-  BG.fromFFIType hs_bindgen_c043f286f3176cd8_base
-
--- | Get the window associated with a renderer.
---
---     [Returns]: the window on success or NULL on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_GetRenderWindow@, defined at @SDL3\/SDL_render.h 447:42@
-sDL_GetRenderWindow
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer to query.
-  -> IO (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window)
-sDL_GetRenderWindow = hs_bindgen_c043f286f3176cd8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRendererName@
-foreign import ccall unsafe "hs_bindgen_b4d2799733c66a42"
-  hs_bindgen_b4d2799733c66a42_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRendererName@
-hs_bindgen_b4d2799733c66a42
-  :: BG.Ptr SDL_Renderer
-  -> IO (PtrConst.PtrConst BG.CChar)
-hs_bindgen_b4d2799733c66a42 =
-  BG.fromFFIType hs_bindgen_b4d2799733c66a42_base
-
--- | Get the name of a renderer.
---
---     [Returns]: the name of the selected renderer, or NULL on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_CreateRenderer', 'sDL_CreateRendererWithProperties'
---
---     [C declaration]: @SDL_GetRendererName@, defined at @SDL3\/SDL_render.h 463:42@
-sDL_GetRendererName
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> IO (PtrConst.PtrConst BG.CChar)
-sDL_GetRendererName = hs_bindgen_b4d2799733c66a42
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRendererProperties@
-foreign import ccall unsafe "hs_bindgen_519d759f13b5a204"
-  hs_bindgen_519d759f13b5a204_base
-    :: BG.Ptr BG.Void
-    -> IO BG.Word32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRendererProperties@
-hs_bindgen_519d759f13b5a204
-  :: BG.Ptr SDL_Renderer
-  -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
-hs_bindgen_519d759f13b5a204 =
-  BG.fromFFIType hs_bindgen_519d759f13b5a204_base
-
--- | Get the properties associated with a renderer.
---
---     The following read-only properties are provided by SDL:
---
---     * @'sDL_PROP_RENDERER_NAME_STRING'@: the name of the rendering driver
---
---     * @'sDL_PROP_RENDERER_WINDOW_POINTER'@: the window where rendering is displayed, if any
---
---     * @'sDL_PROP_RENDERER_SURFACE_POINTER'@: the surface where rendering is displayed, if this is a software renderer without a window
---
---     * @'sDL_PROP_RENDERER_VSYNC_NUMBER'@: the current vsync setting
---
---     * @'sDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER'@: the maximum texture width and height
---
---     * @'sDL_PROP_RENDERER_TEXTURE_FORMATS_POINTER'@: a (const SDL_PixelFormat *) array of pixel formats, terminated with SDL_PIXELFORMAT_UNKNOWN, representing the available texture formats for this renderer.
---
---     * @'sDL_PROP_RENDERER_TEXTURE_WRAPPING_BOOLEAN'@: true if the renderer supports SDL_TEXTURE_ADDRESS_WRAP on non-power-of-two textures.
---
---     * @'sDL_PROP_RENDERER_OUTPUT_COLORSPACE_NUMBER'@: an SDL_Colorspace value describing the colorspace for output to the display, defaults to SDL_COLORSPACE_SRGB.
---
---     * @'sDL_PROP_RENDERER_HDR_ENABLED_BOOLEAN'@: true if the output colorspace is SDL_COLORSPACE_SRGB_LINEAR and the renderer is showing on a display with HDR enabled. This property can change dynamically when SDL_EVENT_WINDOW_HDR_STATE_CHANGED is sent.
---
---     * @'sDL_PROP_RENDERER_SDR_WHITE_POINT_FLOAT'@: the value of SDR white in the SDL_COLORSPACE_SRGB_LINEAR colorspace. When HDR is enabled, this value is automatically multiplied into the color scale. This property can change dynamically when SDL_EVENT_WINDOW_HDR_STATE_CHANGED is sent.
---
---     * @'sDL_PROP_RENDERER_HDR_HEADROOM_FLOAT'@: the additional high dynamic range that can be displayed, in terms of the SDR white point. When HDR is not enabled, this will be 1.0. This property can change dynamically when SDL_EVENT_WINDOW_HDR_STATE_CHANGED is sent.
---
---     With the direct3d renderer:
---
---     * @'sDL_PROP_RENDERER_D3D9_DEVICE_POINTER'@: the IDirect3DDevice9 associated with the renderer
---
---     With the direct3d11 renderer:
---
---     * @'sDL_PROP_RENDERER_D3D11_DEVICE_POINTER'@: the ID3D11Device associated with the renderer
---
---     * @'sDL_PROP_RENDERER_D3D11_SWAPCHAIN_POINTER'@: the IDXGISwapChain1 associated with the renderer. This may change when the window is resized.
---
---     With the direct3d12 renderer:
---
---     * @'sDL_PROP_RENDERER_D3D12_DEVICE_POINTER'@: the ID3D12Device associated with the renderer
---
---     * @'sDL_PROP_RENDERER_D3D12_SWAPCHAIN_POINTER'@: the IDXGISwapChain4 associated with the renderer.
---
---     * @'sDL_PROP_RENDERER_D3D12_COMMAND_QUEUE_POINTER'@: the ID3D12CommandQueue associated with the renderer
---
---     With the vulkan renderer:
---
---     * @'sDL_PROP_RENDERER_VULKAN_INSTANCE_POINTER'@: the VkInstance associated with the renderer
---
---     * @'sDL_PROP_RENDERER_VULKAN_SURFACE_NUMBER'@: the VkSurfaceKHR associated with the renderer
---
---     * @'sDL_PROP_RENDERER_VULKAN_PHYSICAL_DEVICE_POINTER'@: the VkPhysicalDevice associated with the renderer
---
---     * @'sDL_PROP_RENDERER_VULKAN_DEVICE_POINTER'@: the VkDevice associated with the renderer
---
---     * @'sDL_PROP_RENDERER_VULKAN_GRAPHICS_QUEUE_FAMILY_INDEX_NUMBER'@: the queue family index used for rendering
---
---     * @'sDL_PROP_RENDERER_VULKAN_PRESENT_QUEUE_FAMILY_INDEX_NUMBER'@: the queue family index used for presentation
---
---     * @'sDL_PROP_RENDERER_VULKAN_SWAPCHAIN_IMAGE_COUNT_NUMBER'@: the number of swapchain images, or potential frames in flight, used by the Vulkan renderer
---
---     With the gpu renderer:
---
---     * @'sDL_PROP_RENDERER_GPU_DEVICE_POINTER'@: the SDL_GPUDevice associated with the renderer
---
---     [Returns]: a valid property ID on success or 0 on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_GetRendererProperties@, defined at @SDL3\/SDL_render.h 551:46@
-sDL_GetRendererProperties
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
-sDL_GetRendererProperties =
-  hs_bindgen_519d759f13b5a204
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderOutputSize@
-foreign import ccall unsafe "hs_bindgen_15b72b770c77a09c"
-  hs_bindgen_15b72b770c77a09c_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderOutputSize@
-hs_bindgen_15b72b770c77a09c
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr BG.CInt
-  -> BG.Ptr BG.CInt
-  -> IO BG.CBool
-hs_bindgen_15b72b770c77a09c =
-  BG.fromFFIType hs_bindgen_15b72b770c77a09c_base
-
--- | Get the output size in pixels of a rendering context.
---
---     This returns the true output size in pixels, ignoring any render targets or logical size and presentation.
---
---     For the output size of the current rendering target, with logical size adjustments, use @SDL_GetCurrentRenderOutputSize()@ instead.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetCurrentRenderOutputSize'
---
---     [C declaration]: @SDL_GetRenderOutputSize@, defined at @SDL3\/SDL_render.h 600:34@
-sDL_GetRenderOutputSize
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr BG.CInt
-  -- ^
-  --
-  --           [@w@]: a pointer filled in with the width in pixels.
-  -> BG.Ptr BG.CInt
-  -- ^
-  --
-  --           [@h@]: a pointer filled in with the height in pixels.
-  -> IO BG.CBool
-sDL_GetRenderOutputSize = hs_bindgen_15b72b770c77a09c
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetCurrentRenderOutputSize@
-foreign import ccall unsafe "hs_bindgen_09a49b8dd8196ac2"
-  hs_bindgen_09a49b8dd8196ac2_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetCurrentRenderOutputSize@
-hs_bindgen_09a49b8dd8196ac2
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr BG.CInt
-  -> BG.Ptr BG.CInt
-  -> IO BG.CBool
-hs_bindgen_09a49b8dd8196ac2 =
-  BG.fromFFIType hs_bindgen_09a49b8dd8196ac2_base
-
--- | Get the current output size in pixels of a rendering context.
---
---     If a rendering target is active, this will return the size of the rendering target in pixels, otherwise return the value of @SDL_GetRenderOutputSize()@.
---
---     Rendering target or not, the output will be adjusted by the current logical presentation state, dictated by @SDL_SetRenderLogicalPresentation()@.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetRenderOutputSize'
---
---     [C declaration]: @SDL_GetCurrentRenderOutputSize@, defined at @SDL3\/SDL_render.h 623:34@
-sDL_GetCurrentRenderOutputSize
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr BG.CInt
-  -- ^
-  --
-  --           [@w@]: a pointer filled in with the current width.
-  -> BG.Ptr BG.CInt
-  -- ^
-  --
-  --           [@h@]: a pointer filled in with the current height.
-  -> IO BG.CBool
-sDL_GetCurrentRenderOutputSize =
-  hs_bindgen_09a49b8dd8196ac2
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateTexture@
-foreign import ccall unsafe "hs_bindgen_3d4ff9d99a3fa98a"
-  hs_bindgen_3d4ff9d99a3fa98a_base
-    :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Int32
-    -> BG.Int32
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateTexture@
-hs_bindgen_3d4ff9d99a3fa98a
-  :: BG.Ptr SDL_Renderer
-  -> SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
-  -> SDL_TextureAccess
-  -> BG.CInt
-  -> BG.CInt
-  -> IO (BG.Ptr SDL_Texture)
-hs_bindgen_3d4ff9d99a3fa98a =
-  BG.fromFFIType hs_bindgen_3d4ff9d99a3fa98a_base
-
--- | Create a texture for a rendering context.
---
---     The contents of a texture when first created are not defined.
---
---     [Returns]: the created texture or NULL on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_CreateTextureFromSurface', 'sDL_CreateTextureWithProperties', 'sDL_DestroyTexture', 'sDL_GetTextureSize', 'sDL_UpdateTexture'
---
---     [C declaration]: @SDL_CreateTexture@, defined at @SDL3\/SDL_render.h 648:43@
-sDL_CreateTexture
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
-  -- ^
-  --
-  --           [@format@]: one of the enumerated values in SDL_PixelFormat.
-  -> SDL_TextureAccess
-  -- ^
-  --
-  --           [@access@]: one of the enumerated values in 'SDL_TextureAccess'.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@w@]: the width of the texture in pixels.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@h@]: the height of the texture in pixels.
-  -> IO (BG.Ptr SDL_Texture)
-sDL_CreateTexture = hs_bindgen_3d4ff9d99a3fa98a
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateTextureFromSurface@
-foreign import ccall unsafe "hs_bindgen_46cceb118c5977b8"
-  hs_bindgen_46cceb118c5977b8_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateTextureFromSurface@
-hs_bindgen_46cceb118c5977b8
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface
-  -> IO (BG.Ptr SDL_Texture)
-hs_bindgen_46cceb118c5977b8 =
-  BG.fromFFIType hs_bindgen_46cceb118c5977b8_base
-
--- | Create a texture from an existing surface.
---
---     The surface is not modified or freed by this function.
---
---     The 'SDL_TextureAccess' hint for the created texture is @SDL_TEXTUREACCESS_STATIC@.
---
---     The pixel format of the created texture may be different from the pixel format of the surface, and can be queried using the SDL_PROP_TEXTURE_FORMAT_NUMBER property.
---
---     [Returns]: the created texture or NULL on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_CreateTexture', 'sDL_CreateTextureWithProperties', 'sDL_DestroyTexture'
---
---     [C declaration]: @SDL_CreateTextureFromSurface@, defined at @SDL3\/SDL_render.h 676:43@
-sDL_CreateTextureFromSurface
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface
-  -- ^
-  --
-  --           [@surface@]: the SDL_Surface structure containing pixel data used to fill the texture.
-  -> IO (BG.Ptr SDL_Texture)
-sDL_CreateTextureFromSurface =
-  hs_bindgen_46cceb118c5977b8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateTextureWithProperties@
-foreign import ccall unsafe "hs_bindgen_52cc37cb33c5a099"
-  hs_bindgen_52cc37cb33c5a099_base
-    :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateTextureWithProperties@
-hs_bindgen_52cc37cb33c5a099
-  :: BG.Ptr SDL_Renderer
-  -> SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
-  -> IO (BG.Ptr SDL_Texture)
-hs_bindgen_52cc37cb33c5a099 =
-  BG.fromFFIType hs_bindgen_52cc37cb33c5a099_base
-
--- | Create a texture for a rendering context with the specified properties.
---
---     These are the supported properties:
---
---     * @'sDL_PROP_TEXTURE_CREATE_COLORSPACE_NUMBER'@: an SDL_Colorspace value describing the texture colorspace, defaults to SDL_COLORSPACE_SRGB_LINEAR for floating point textures, SDL_COLORSPACE_HDR10 for 10-bit textures, SDL_COLORSPACE_SRGB for other RGB textures and SDL_COLORSPACE_JPEG for YUV textures.
---
---     * @'sDL_PROP_TEXTURE_CREATE_FORMAT_NUMBER'@: one of the enumerated values in SDL_PixelFormat, defaults to the best RGBA format for the renderer
---
---     * @'sDL_PROP_TEXTURE_CREATE_ACCESS_NUMBER'@: one of the enumerated values in 'SDL_TextureAccess', defaults to SDL_TEXTUREACCESS_STATIC
---
---     * @'sDL_PROP_TEXTURE_CREATE_WIDTH_NUMBER'@: the width of the texture in pixels, required
---
---     * @'sDL_PROP_TEXTURE_CREATE_HEIGHT_NUMBER'@: the height of the texture in pixels, required
---
---     * @'sDL_PROP_TEXTURE_CREATE_PALETTE_POINTER'@: an SDL_Palette to use with palettized texture formats. This can be set later with @SDL_SetTexturePalette()@
---
---     * @'sDL_PROP_TEXTURE_CREATE_SDR_WHITE_POINT_FLOAT'@: for HDR10 and floating point textures, this defines the value of 100% diffuse white, with higher values being displayed in the High Dynamic Range headroom. This defaults to 100 for HDR10 textures and 1.0 for floating point textures.
---
---     * @'sDL_PROP_TEXTURE_CREATE_HDR_HEADROOM_FLOAT'@: for HDR10 and floating point textures, this defines the maximum dynamic range used by the content, in terms of the SDR white point. This would be equivalent to maxCLL \/ SDL_PROP_TEXTURE_CREATE_SDR_WHITE_POINT_FLOAT for HDR10 content. If this is defined, any values outside the range supported by the display will be scaled into the available HDR headroom, otherwise they are clipped.
---
---     With the direct3d11 renderer:
---
---     * @'sDL_PROP_TEXTURE_CREATE_D3D11_TEXTURE_POINTER'@: the ID3D11Texture2D associated with the texture, if you want to wrap an existing texture.
---
---     * @'sDL_PROP_TEXTURE_CREATE_D3D11_TEXTURE_U_POINTER'@: the ID3D11Texture2D associated with the U plane of a YUV texture, if you want to wrap an existing texture.
---
---     * @'sDL_PROP_TEXTURE_CREATE_D3D11_TEXTURE_V_POINTER'@: the ID3D11Texture2D associated with the V plane of a YUV texture, if you want to wrap an existing texture.
---
---     With the direct3d12 renderer:
---
---     * @'sDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_POINTER'@: the ID3D12Resource associated with the texture, if you want to wrap an existing texture.
---
---     * @'sDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_U_POINTER'@: the ID3D12Resource associated with the U plane of a YUV texture, if you want to wrap an existing texture.
---
---     * @'sDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_V_POINTER'@: the ID3D12Resource associated with the V plane of a YUV texture, if you want to wrap an existing texture.
---
---     With the metal renderer:
---
---     * @'sDL_PROP_TEXTURE_CREATE_METAL_PIXELBUFFER_POINTER'@: the CVPixelBufferRef associated with the texture, if you want to create a texture from an existing pixel buffer.
---
---     With the opengl renderer:
---
---     * @'sDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_NUMBER'@: the GLuint texture associated with the texture, if you want to wrap an existing texture.
---
---     * @'sDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_UV_NUMBER'@: the GLuint texture associated with the UV plane of an NV12 texture, if you want to wrap an existing texture.
---
---     * @'sDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_U_NUMBER'@: the GLuint texture associated with the U plane of a YUV texture, if you want to wrap an existing texture.
---
---     * @'sDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_V_NUMBER'@: the GLuint texture associated with the V plane of a YUV texture, if you want to wrap an existing texture.
---
---     With the opengles2 renderer:
---
---     * @'sDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_NUMBER'@: the GLuint texture associated with the texture, if you want to wrap an existing texture.
---
---     * @'sDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_UV_NUMBER'@: the GLuint texture associated with the UV plane of an NV12 texture, if you want to wrap an existing texture.
---
---     * @'sDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_U_NUMBER'@: the GLuint texture associated with the U plane of a YUV texture, if you want to wrap an existing texture.
---
---     * @'sDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_V_NUMBER'@: the GLuint texture associated with the V plane of a YUV texture, if you want to wrap an existing texture.
---
---     With the vulkan renderer:
---
---     * @'sDL_PROP_TEXTURE_CREATE_VULKAN_TEXTURE_NUMBER'@: the VkImage associated with the texture, if you want to wrap an existing texture.
---
---     * @'sDL_PROP_TEXTURE_CREATE_VULKAN_LAYOUT_NUMBER'@: the VkImageLayout for the VkImage, defaults to VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL.
---
---     With the GPU renderer:
---
---     * @'sDL_PROP_TEXTURE_CREATE_GPU_TEXTURE_POINTER'@: the SDL_GPUTexture associated with the texture, if you want to wrap an existing texture.
---
---     * @SDL_PROP_TEXTURE_CREATE_GPU_TEXTURE_UV_NUMBER@: the SDL_GPUTexture associated with the UV plane of an NV12 texture, if you want to wrap an existing texture.
---
---     * @SDL_PROP_TEXTURE_CREATE_GPU_TEXTURE_U_NUMBER@: the SDL_GPUTexture associated with the U plane of a YUV texture, if you want to wrap an existing texture.
---
---     * @SDL_PROP_TEXTURE_CREATE_GPU_TEXTURE_V_NUMBER@: the SDL_GPUTexture associated with the V plane of a YUV texture, if you want to wrap an existing texture.
---
---     [Returns]: the created texture or NULL on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: SDL_CreateProperties, 'sDL_CreateTexture', 'sDL_CreateTextureFromSurface', 'sDL_DestroyTexture', 'sDL_GetTextureSize', 'sDL_UpdateTexture'
---
---     [C declaration]: @SDL_CreateTextureWithProperties@, defined at @SDL3\/SDL_render.h 804:43@
-sDL_CreateTextureWithProperties
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
-  -- ^
-  --
-  --           [@props@]: the properties to use.
-  -> IO (BG.Ptr SDL_Texture)
-sDL_CreateTextureWithProperties =
-  hs_bindgen_52cc37cb33c5a099
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTextureProperties@
-foreign import ccall unsafe "hs_bindgen_7d1578a13c421f10"
-  hs_bindgen_7d1578a13c421f10_base
-    :: BG.Ptr BG.Void
-    -> IO BG.Word32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTextureProperties@
-hs_bindgen_7d1578a13c421f10
-  :: BG.Ptr SDL_Texture
-  -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
-hs_bindgen_7d1578a13c421f10 =
-  BG.fromFFIType hs_bindgen_7d1578a13c421f10_base
-
--- | Get the properties associated with a texture.
---
---     The following read-only properties are provided by SDL:
---
---     * @'sDL_PROP_TEXTURE_COLORSPACE_NUMBER'@: an SDL_Colorspace value describing the texture colorspace.
---
---     * @'sDL_PROP_TEXTURE_FORMAT_NUMBER'@: one of the enumerated values in SDL_PixelFormat.
---
---     * @'sDL_PROP_TEXTURE_ACCESS_NUMBER'@: one of the enumerated values in 'SDL_TextureAccess'.
---
---     * @'sDL_PROP_TEXTURE_WIDTH_NUMBER'@: the width of the texture in pixels.
---
---     * @'sDL_PROP_TEXTURE_HEIGHT_NUMBER'@: the height of the texture in pixels.
---
---     * @'sDL_PROP_TEXTURE_SDR_WHITE_POINT_FLOAT'@: for HDR10 and floating point textures, this defines the value of 100% diffuse white, with higher values being displayed in the High Dynamic Range headroom. This defaults to 100 for HDR10 textures and 1.0 for other textures.
---
---     * @'sDL_PROP_TEXTURE_HDR_HEADROOM_FLOAT'@: for HDR10 and floating point textures, this defines the maximum dynamic range used by the content, in terms of the SDR white point. If this is defined, any values outside the range supported by the display will be scaled into the available HDR headroom, otherwise they are clipped. This defaults to 1.0 for SDR textures, 4.0 for HDR10 textures, and no default for floating point textures.
---
---     With the direct3d11 renderer:
---
---     * @'sDL_PROP_TEXTURE_D3D11_TEXTURE_POINTER'@: the ID3D11Texture2D associated with the texture
---
---     * @'sDL_PROP_TEXTURE_D3D11_TEXTURE_U_POINTER'@: the ID3D11Texture2D associated with the U plane of a YUV texture
---
---     * @'sDL_PROP_TEXTURE_D3D11_TEXTURE_V_POINTER'@: the ID3D11Texture2D associated with the V plane of a YUV texture
---
---     With the direct3d12 renderer:
---
---     * @'sDL_PROP_TEXTURE_D3D12_TEXTURE_POINTER'@: the ID3D12Resource associated with the texture
---
---     * @'sDL_PROP_TEXTURE_D3D12_TEXTURE_U_POINTER'@: the ID3D12Resource associated with the U plane of a YUV texture
---
---     * @'sDL_PROP_TEXTURE_D3D12_TEXTURE_V_POINTER'@: the ID3D12Resource associated with the V plane of a YUV texture
---
---     With the vulkan renderer:
---
---     * @'sDL_PROP_TEXTURE_VULKAN_TEXTURE_NUMBER'@: the VkImage associated with the texture
---
---     With the opengl renderer:
---
---     * @'sDL_PROP_TEXTURE_OPENGL_TEXTURE_NUMBER'@: the GLuint texture associated with the texture
---
---     * @'sDL_PROP_TEXTURE_OPENGL_TEXTURE_UV_NUMBER'@: the GLuint texture associated with the UV plane of an NV12 texture
---
---     * @'sDL_PROP_TEXTURE_OPENGL_TEXTURE_U_NUMBER'@: the GLuint texture associated with the U plane of a YUV texture
---
---     * @'sDL_PROP_TEXTURE_OPENGL_TEXTURE_V_NUMBER'@: the GLuint texture associated with the V plane of a YUV texture
---
---     * @'sDL_PROP_TEXTURE_OPENGL_TEXTURE_TARGET_NUMBER'@: the GLenum for the texture target (@GL_TEXTURE_2D@, @GL_TEXTURE_RECTANGLE_ARB@, etc)
---
---     * @'sDL_PROP_TEXTURE_OPENGL_TEX_W_FLOAT'@: the texture coordinate width of the texture (0.0 - 1.0)
---
---     * @'sDL_PROP_TEXTURE_OPENGL_TEX_H_FLOAT'@: the texture coordinate height of the texture (0.0 - 1.0)
---
---     With the opengles2 renderer:
---
---     * @'sDL_PROP_TEXTURE_OPENGLES2_TEXTURE_NUMBER'@: the GLuint texture associated with the texture
---
---     * @'sDL_PROP_TEXTURE_OPENGLES2_TEXTURE_UV_NUMBER'@: the GLuint texture associated with the UV plane of an NV12 texture
---
---     * @'sDL_PROP_TEXTURE_OPENGLES2_TEXTURE_U_NUMBER'@: the GLuint texture associated with the U plane of a YUV texture
---
---     * @'sDL_PROP_TEXTURE_OPENGLES2_TEXTURE_V_NUMBER'@: the GLuint texture associated with the V plane of a YUV texture
---
---     * @'sDL_PROP_TEXTURE_OPENGLES2_TEXTURE_TARGET_NUMBER'@: the GLenum for the texture target (@GL_TEXTURE_2D@, @GL_TEXTURE_EXTERNAL_OES@, etc)
---
---     With the gpu renderer:
---
---     * @'sDL_PROP_TEXTURE_GPU_TEXTURE_POINTER'@: the SDL_GPUTexture associated with the texture
---
---     * @'sDL_PROP_TEXTURE_GPU_TEXTURE_UV_POINTER'@: the SDL_GPUTexture associated with the UV plane of an NV12 texture
---
---     * @'sDL_PROP_TEXTURE_GPU_TEXTURE_U_POINTER'@: the SDL_GPUTexture associated with the U plane of a YUV texture
---
---     * @'sDL_PROP_TEXTURE_GPU_TEXTURE_V_POINTER'@: the SDL_GPUTexture associated with the V plane of a YUV texture
---
---     [Returns]: a valid property ID on success or 0 on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_GetTextureProperties@, defined at @SDL3\/SDL_render.h 933:46@
-sDL_GetTextureProperties
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to query.
-  -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
-sDL_GetTextureProperties =
-  hs_bindgen_7d1578a13c421f10
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRendererFromTexture@
-foreign import ccall unsafe "hs_bindgen_59ae54d4482ab0ef"
-  hs_bindgen_59ae54d4482ab0ef_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRendererFromTexture@
-hs_bindgen_59ae54d4482ab0ef
-  :: BG.Ptr SDL_Texture
-  -> IO (BG.Ptr SDL_Renderer)
-hs_bindgen_59ae54d4482ab0ef =
-  BG.fromFFIType hs_bindgen_59ae54d4482ab0ef_base
-
--- | Get the renderer that created an 'SDL_Texture'.
---
---     [Returns]: a pointer to the 'SDL_Renderer' that created the texture, or NULL on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_GetRendererFromTexture@, defined at @SDL3\/SDL_render.h 977:44@
-sDL_GetRendererFromTexture
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to query.
-  -> IO (BG.Ptr SDL_Renderer)
-sDL_GetRendererFromTexture =
-  hs_bindgen_59ae54d4482ab0ef
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTextureSize@
-foreign import ccall unsafe "hs_bindgen_132d974026c63235"
-  hs_bindgen_132d974026c63235_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTextureSize@
-hs_bindgen_132d974026c63235
-  :: BG.Ptr SDL_Texture
-  -> BG.Ptr BG.CFloat
-  -> BG.Ptr BG.CFloat
-  -> IO BG.CBool
-hs_bindgen_132d974026c63235 =
-  BG.fromFFIType hs_bindgen_132d974026c63235_base
-
--- | Get the size of a texture, as floating point values.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_GetTextureSize@, defined at @SDL3\/SDL_render.h 994:34@
-sDL_GetTextureSize
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to query.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@w@]: a pointer filled in with the width of the texture in pixels. This argument can be NULL if you don\'t need this information.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@h@]: a pointer filled in with the height of the texture in pixels. This argument can be NULL if you don\'t need this information.
-  -> IO BG.CBool
-sDL_GetTextureSize = hs_bindgen_132d974026c63235
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetTexturePalette@
-foreign import ccall unsafe "hs_bindgen_b9b978978bcb3701"
-  hs_bindgen_b9b978978bcb3701_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetTexturePalette@
-hs_bindgen_b9b978978bcb3701
-  :: BG.Ptr SDL_Texture
-  -> BG.Ptr SDL3.Sys.Bindgen.Pixels.SDL_Palette
-  -> IO BG.CBool
-hs_bindgen_b9b978978bcb3701 =
-  BG.fromFFIType hs_bindgen_b9b978978bcb3701_base
-
--- | Set the palette used by a texture.
---
---     Setting the palette keeps an internal reference to the palette, which can be safely destroyed afterwards.
---
---     A single palette can be shared with many textures.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.4.0
---
---     [See also]: SDL_CreatePalette, 'sDL_GetTexturePalette'
---
---     [C declaration]: @SDL_SetTexturePalette@, defined at @SDL3\/SDL_render.h 1016:34@
-sDL_SetTexturePalette
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to update.
-  -> BG.Ptr SDL3.Sys.Bindgen.Pixels.SDL_Palette
-  -- ^
-  --
-  --           [@palette@]: the SDL_Palette structure to use.
-  -> IO BG.CBool
-sDL_SetTexturePalette = hs_bindgen_b9b978978bcb3701
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTexturePalette@
-foreign import ccall unsafe "hs_bindgen_38dd0c6a7ed9af72"
-  hs_bindgen_38dd0c6a7ed9af72_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTexturePalette@
-hs_bindgen_38dd0c6a7ed9af72
-  :: BG.Ptr SDL_Texture
-  -> IO (BG.Ptr SDL3.Sys.Bindgen.Pixels.SDL_Palette)
-hs_bindgen_38dd0c6a7ed9af72 =
-  BG.fromFFIType hs_bindgen_38dd0c6a7ed9af72_base
-
--- | Get the palette used by a texture.
---
---     [Returns]: a pointer to the palette used by the texture, or NULL if there is no palette used.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.4.0
---
---     [See also]: 'sDL_SetTexturePalette'
---
---     [C declaration]: @SDL_GetTexturePalette@, defined at @SDL3\/SDL_render.h 1031:43@
-sDL_GetTexturePalette
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to query.
-  -> IO (BG.Ptr SDL3.Sys.Bindgen.Pixels.SDL_Palette)
-sDL_GetTexturePalette = hs_bindgen_38dd0c6a7ed9af72
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetTextureColorMod@
-foreign import ccall unsafe "hs_bindgen_328bc9103549865a"
-  hs_bindgen_328bc9103549865a_base
-    :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> BG.Word8
-    -> BG.Word8
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetTextureColorMod@
-hs_bindgen_328bc9103549865a
-  :: BG.Ptr SDL_Texture
-  -> SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> IO BG.CBool
-hs_bindgen_328bc9103549865a =
-  BG.fromFFIType hs_bindgen_328bc9103549865a_base
-
--- | Set an additional color value multiplied into render copy operations.
---
---     When this texture is rendered, during the copy operation each source color channel is modulated by the appropriate color value according to the following formula:
---
---     @srcC = srcC * (color \/ 255)@
---
---     Color modulation is not always supported by the renderer; it will return false if color modulation is not supported.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetTextureColorMod', 'sDL_SetTextureAlphaMod', 'sDL_SetTextureColorModFloat'
---
---     [C declaration]: @SDL_SetTextureColorMod@, defined at @SDL3\/SDL_render.h 1060:34@
-sDL_SetTextureColorMod
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to update.
-  -> SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@r@]: the red color value multiplied into copy operations.
-  -> SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@g@]: the green color value multiplied into copy operations.
-  -> SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@b@]: the blue color value multiplied into copy operations.
-  -> IO BG.CBool
-sDL_SetTextureColorMod = hs_bindgen_328bc9103549865a
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetTextureColorModFloat@
-foreign import ccall unsafe "hs_bindgen_f0f25fbdb4151d72"
-  hs_bindgen_f0f25fbdb4151d72_base
-    :: BG.Ptr BG.Void
-    -> Float
-    -> Float
-    -> Float
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetTextureColorModFloat@
-hs_bindgen_f0f25fbdb4151d72
-  :: BG.Ptr SDL_Texture
-  -> BG.CFloat
-  -> BG.CFloat
-  -> BG.CFloat
-  -> IO BG.CBool
-hs_bindgen_f0f25fbdb4151d72 =
-  BG.fromFFIType hs_bindgen_f0f25fbdb4151d72_base
-
--- | Set an additional color value multiplied into render copy operations.
---
---     When this texture is rendered, during the copy operation each source color channel is modulated by the appropriate color value according to the following formula:
---
---     @srcC = srcC * color@
---
---     Color modulation is not always supported by the renderer; it will return false if color modulation is not supported.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetTextureColorModFloat', 'sDL_SetTextureAlphaModFloat', 'sDL_SetTextureColorMod'
---
---     [C declaration]: @SDL_SetTextureColorModFloat@, defined at @SDL3\/SDL_render.h 1090:34@
-sDL_SetTextureColorModFloat
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to update.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@r@]: the red color value multiplied into copy operations.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@g@]: the green color value multiplied into copy operations.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@b@]: the blue color value multiplied into copy operations.
-  -> IO BG.CBool
-sDL_SetTextureColorModFloat =
-  hs_bindgen_f0f25fbdb4151d72
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTextureColorMod@
-foreign import ccall unsafe "hs_bindgen_23c41565e3ebaf20"
-  hs_bindgen_23c41565e3ebaf20_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTextureColorMod@
-hs_bindgen_23c41565e3ebaf20
-  :: BG.Ptr SDL_Texture
-  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> IO BG.CBool
-hs_bindgen_23c41565e3ebaf20 =
-  BG.fromFFIType hs_bindgen_23c41565e3ebaf20_base
-
--- | Get the additional color value multiplied into render copy operations.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetTextureAlphaMod', 'sDL_GetTextureColorModFloat', 'sDL_SetTextureColorMod'
---
---     [C declaration]: @SDL_GetTextureColorMod@, defined at @SDL3\/SDL_render.h 1111:34@
-sDL_GetTextureColorMod
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to query.
-  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@r@]: a pointer filled in with the current red color value.
-  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@g@]: a pointer filled in with the current green color value.
-  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@b@]: a pointer filled in with the current blue color value.
-  -> IO BG.CBool
-sDL_GetTextureColorMod = hs_bindgen_23c41565e3ebaf20
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTextureColorModFloat@
-foreign import ccall unsafe "hs_bindgen_40f14359348d1377"
-  hs_bindgen_40f14359348d1377_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTextureColorModFloat@
-hs_bindgen_40f14359348d1377
-  :: BG.Ptr SDL_Texture
-  -> BG.Ptr BG.CFloat
-  -> BG.Ptr BG.CFloat
-  -> BG.Ptr BG.CFloat
-  -> IO BG.CBool
-hs_bindgen_40f14359348d1377 =
-  BG.fromFFIType hs_bindgen_40f14359348d1377_base
-
--- | Get the additional color value multiplied into render copy operations.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetTextureAlphaModFloat', 'sDL_GetTextureColorMod', 'sDL_SetTextureColorModFloat'
---
---     [C declaration]: @SDL_GetTextureColorModFloat@, defined at @SDL3\/SDL_render.h 1131:34@
-sDL_GetTextureColorModFloat
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to query.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@r@]: a pointer filled in with the current red color value.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@g@]: a pointer filled in with the current green color value.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@b@]: a pointer filled in with the current blue color value.
-  -> IO BG.CBool
-sDL_GetTextureColorModFloat =
-  hs_bindgen_40f14359348d1377
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetTextureAlphaMod@
-foreign import ccall unsafe "hs_bindgen_5ed240f184c27e2f"
-  hs_bindgen_5ed240f184c27e2f_base
-    :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetTextureAlphaMod@
-hs_bindgen_5ed240f184c27e2f
-  :: BG.Ptr SDL_Texture
-  -> SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> IO BG.CBool
-hs_bindgen_5ed240f184c27e2f =
-  BG.fromFFIType hs_bindgen_5ed240f184c27e2f_base
-
--- | Set an additional alpha value multiplied into render copy operations.
---
---     When this texture is rendered, during the copy operation the source alpha value is modulated by this alpha value according to the following formula:
---
---     @srcA = srcA * (alpha \/ 255)@
---
---     Alpha modulation is not always supported by the renderer; it will return false if alpha modulation is not supported.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetTextureAlphaMod', 'sDL_SetTextureAlphaModFloat', 'sDL_SetTextureColorMod'
---
---     [C declaration]: @SDL_SetTextureAlphaMod@, defined at @SDL3\/SDL_render.h 1157:34@
-sDL_SetTextureAlphaMod
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to update.
-  -> SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@alpha@]: the source alpha value multiplied into copy operations.
-  -> IO BG.CBool
-sDL_SetTextureAlphaMod = hs_bindgen_5ed240f184c27e2f
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetTextureAlphaModFloat@
-foreign import ccall unsafe "hs_bindgen_5ea85df5eef9526f"
-  hs_bindgen_5ea85df5eef9526f_base
-    :: BG.Ptr BG.Void
-    -> Float
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetTextureAlphaModFloat@
-hs_bindgen_5ea85df5eef9526f
-  :: BG.Ptr SDL_Texture
-  -> BG.CFloat
-  -> IO BG.CBool
-hs_bindgen_5ea85df5eef9526f =
-  BG.fromFFIType hs_bindgen_5ea85df5eef9526f_base
-
--- | Set an additional alpha value multiplied into render copy operations.
---
---     When this texture is rendered, during the copy operation the source alpha value is modulated by this alpha value according to the following formula:
---
---     @srcA = srcA * alpha@
---
---     Alpha modulation is not always supported by the renderer; it will return false if alpha modulation is not supported.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetTextureAlphaModFloat', 'sDL_SetTextureAlphaMod', 'sDL_SetTextureColorModFloat'
---
---     [C declaration]: @SDL_SetTextureAlphaModFloat@, defined at @SDL3\/SDL_render.h 1183:34@
-sDL_SetTextureAlphaModFloat
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to update.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@alpha@]: the source alpha value multiplied into copy operations.
-  -> IO BG.CBool
-sDL_SetTextureAlphaModFloat =
-  hs_bindgen_5ea85df5eef9526f
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTextureAlphaMod@
-foreign import ccall unsafe "hs_bindgen_b3e62a9848e5067e"
-  hs_bindgen_b3e62a9848e5067e_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTextureAlphaMod@
-hs_bindgen_b3e62a9848e5067e
-  :: BG.Ptr SDL_Texture
-  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> IO BG.CBool
-hs_bindgen_b3e62a9848e5067e =
-  BG.fromFFIType hs_bindgen_b3e62a9848e5067e_base
-
--- | Get the additional alpha value multiplied into render copy operations.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetTextureAlphaModFloat', 'sDL_GetTextureColorMod', 'sDL_SetTextureAlphaMod'
---
---     [C declaration]: @SDL_GetTextureAlphaMod@, defined at @SDL3\/SDL_render.h 1201:34@
-sDL_GetTextureAlphaMod
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to query.
-  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@alpha@]: a pointer filled in with the current alpha value.
-  -> IO BG.CBool
-sDL_GetTextureAlphaMod = hs_bindgen_b3e62a9848e5067e
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTextureAlphaModFloat@
-foreign import ccall unsafe "hs_bindgen_55b6c4f083626b7a"
-  hs_bindgen_55b6c4f083626b7a_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTextureAlphaModFloat@
-hs_bindgen_55b6c4f083626b7a
-  :: BG.Ptr SDL_Texture
-  -> BG.Ptr BG.CFloat
-  -> IO BG.CBool
-hs_bindgen_55b6c4f083626b7a =
-  BG.fromFFIType hs_bindgen_55b6c4f083626b7a_base
-
--- | Get the additional alpha value multiplied into render copy operations.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetTextureAlphaMod', 'sDL_GetTextureColorModFloat', 'sDL_SetTextureAlphaModFloat'
---
---     [C declaration]: @SDL_GetTextureAlphaModFloat@, defined at @SDL3\/SDL_render.h 1219:34@
-sDL_GetTextureAlphaModFloat
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to query.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@alpha@]: a pointer filled in with the current alpha value.
-  -> IO BG.CBool
-sDL_GetTextureAlphaModFloat =
-  hs_bindgen_55b6c4f083626b7a
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetTextureBlendMode@
-foreign import ccall unsafe "hs_bindgen_34ab5b9eb64f99e7"
-  hs_bindgen_34ab5b9eb64f99e7_base
-    :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetTextureBlendMode@
-hs_bindgen_34ab5b9eb64f99e7
-  :: BG.Ptr SDL_Texture
-  -> SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
-  -> IO BG.CBool
-hs_bindgen_34ab5b9eb64f99e7 =
-  BG.fromFFIType hs_bindgen_34ab5b9eb64f99e7_base
-
--- | Set the blend mode for a texture, used by @SDL_RenderTexture()@.
---
---     This blend mode is used for any drawing that involves this texture.
---
---     If the blend mode is not supported, the closest supported mode is chosen and this function returns false.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetTextureBlendMode', 'sDL_SetRenderDrawBlendMode'
---
---     [C declaration]: @SDL_SetTextureBlendMode@, defined at @SDL3\/SDL_render.h 1241:34@
-sDL_SetTextureBlendMode
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to update.
-  -> SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
-  -- ^
-  --
-  --           [@blendMode@]: the SDL_BlendMode to use for texture blending.
-  -> IO BG.CBool
-sDL_SetTextureBlendMode = hs_bindgen_34ab5b9eb64f99e7
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTextureBlendMode@
-foreign import ccall unsafe "hs_bindgen_9e50ca0241b5eecf"
-  hs_bindgen_9e50ca0241b5eecf_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTextureBlendMode@
-hs_bindgen_9e50ca0241b5eecf
-  :: BG.Ptr SDL_Texture
-  -> BG.Ptr SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
-  -> IO BG.CBool
-hs_bindgen_9e50ca0241b5eecf =
-  BG.fromFFIType hs_bindgen_9e50ca0241b5eecf_base
-
--- | Get the blend mode used for texture copy operations.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_SetTextureBlendMode'
---
---     [C declaration]: @SDL_GetTextureBlendMode@, defined at @SDL3\/SDL_render.h 1257:34@
-sDL_GetTextureBlendMode
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to query.
-  -> BG.Ptr SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
-  -- ^
-  --
-  --           [@blendMode@]: a pointer filled in with the current SDL_BlendMode.
-  -> IO BG.CBool
-sDL_GetTextureBlendMode = hs_bindgen_9e50ca0241b5eecf
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetTextureScaleMode@
-foreign import ccall unsafe "hs_bindgen_7ec0426bb117fde0"
-  hs_bindgen_7ec0426bb117fde0_base
-    :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetTextureScaleMode@
-hs_bindgen_7ec0426bb117fde0
-  :: BG.Ptr SDL_Texture
-  -> SDL3.Sys.Bindgen.Surface.SDL_ScaleMode
-  -> IO BG.CBool
-hs_bindgen_7ec0426bb117fde0 =
-  BG.fromFFIType hs_bindgen_7ec0426bb117fde0_base
-
--- | Set the scale mode used for texture scale operations.
---
---     The default texture scale mode is SDL_SCALEMODE_LINEAR.
---
---     If the scale mode is not supported, the closest supported mode is chosen.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetTextureScaleMode'
---
---     [C declaration]: @SDL_SetTextureScaleMode@, defined at @SDL3\/SDL_render.h 1277:34@
-sDL_SetTextureScaleMode
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to update.
-  -> SDL3.Sys.Bindgen.Surface.SDL_ScaleMode
-  -- ^
-  --
-  --           [@scaleMode@]: the SDL_ScaleMode to use for texture scaling.
-  -> IO BG.CBool
-sDL_SetTextureScaleMode = hs_bindgen_7ec0426bb117fde0
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTextureScaleMode@
-foreign import ccall unsafe "hs_bindgen_d153e754b011263b"
-  hs_bindgen_d153e754b011263b_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTextureScaleMode@
-hs_bindgen_d153e754b011263b
-  :: BG.Ptr SDL_Texture
-  -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_ScaleMode
-  -> IO BG.CBool
-hs_bindgen_d153e754b011263b =
-  BG.fromFFIType hs_bindgen_d153e754b011263b_base
-
--- | Get the scale mode used for texture scale operations.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_SetTextureScaleMode'
---
---     [C declaration]: @SDL_GetTextureScaleMode@, defined at @SDL3\/SDL_render.h 1293:34@
-sDL_GetTextureScaleMode
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to query.
-  -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_ScaleMode
-  -- ^
-  --
-  --           [@scaleMode@]: a pointer filled in with the current scale mode.
-  -> IO BG.CBool
-sDL_GetTextureScaleMode = hs_bindgen_d153e754b011263b
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_UpdateTexture@
-foreign import ccall unsafe "hs_bindgen_9d30d0aa8075c243"
-  hs_bindgen_9d30d0aa8075c243_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_UpdateTexture@
-hs_bindgen_9d30d0aa8075c243
-  :: BG.Ptr SDL_Texture
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -> PtrConst.PtrConst BG.Void
-  -> BG.CInt
-  -> IO BG.CBool
-hs_bindgen_9d30d0aa8075c243 =
-  BG.fromFFIType hs_bindgen_9d30d0aa8075c243_base
-
--- | Update the given texture rectangle with new pixel data.
---
---     The pixel data must be in the pixel format of the texture, which can be queried using the SDL_PROP_TEXTURE_FORMAT_NUMBER property.
---
---     This is a fairly slow function, intended for use with static textures that do not change often.
---
---     If the texture is intended to be updated often, it is preferred to create the texture as streaming and use the locking functions referenced below. While this function will work with streaming textures, for optimization reasons you may not get the pixels back if you lock the texture afterward.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_LockTexture', 'sDL_UnlockTexture', 'sDL_UpdateNVTexture', 'sDL_UpdateYUVTexture'
---
---     [C declaration]: @SDL_UpdateTexture@, defined at @SDL3\/SDL_render.h 1327:34@
-sDL_UpdateTexture
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to update.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -- ^
-  --
-  --           [@rect@]: an SDL_Rect structure representing the area to update, or NULL to update the entire texture.
-  -> PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@pixels@]: the raw pixel data in the format of the texture.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@pitch@]: the number of bytes in a row of pixel data, including padding between lines.
-  -> IO BG.CBool
-sDL_UpdateTexture = hs_bindgen_9d30d0aa8075c243
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_UpdateYUVTexture@
-foreign import ccall unsafe "hs_bindgen_145fdda972278858"
-  hs_bindgen_145fdda972278858_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_UpdateYUVTexture@
-hs_bindgen_145fdda972278858
-  :: BG.Ptr SDL_Texture
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> BG.CInt
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> BG.CInt
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> BG.CInt
-  -> IO BG.CBool
-hs_bindgen_145fdda972278858 =
-  BG.fromFFIType hs_bindgen_145fdda972278858_base
-
--- | Update a rectangle within a planar YV12 or IYUV texture with new pixel data.
---
---     You can use @SDL_UpdateTexture()@ as long as your pixel data is a contiguous block of Y and U\/V planes in the proper order, but this function is available if your pixel data is not contiguous.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_UpdateNVTexture', 'sDL_UpdateTexture'
---
---     [C declaration]: @SDL_UpdateYUVTexture@, defined at @SDL3\/SDL_render.h 1359:34@
-sDL_UpdateYUVTexture
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to update.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -- ^
-  --
-  --           [@rect@]: a pointer to the rectangle of pixels to update, or NULL to update the entire texture.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@Yplane@]: the raw pixel data for the Y plane.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@Ypitch@]: the number of bytes between rows of pixel data for the Y plane.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@Uplane@]: the raw pixel data for the U plane.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@Upitch@]: the number of bytes between rows of pixel data for the U plane.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@Vplane@]: the raw pixel data for the V plane.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@Vpitch@]: the number of bytes between rows of pixel data for the V plane.
-  -> IO BG.CBool
-sDL_UpdateYUVTexture = hs_bindgen_145fdda972278858
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_UpdateNVTexture@
-foreign import ccall unsafe "hs_bindgen_8e87aea72679c0be"
-  hs_bindgen_8e87aea72679c0be_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_UpdateNVTexture@
-hs_bindgen_8e87aea72679c0be
-  :: BG.Ptr SDL_Texture
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> BG.CInt
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> BG.CInt
-  -> IO BG.CBool
-hs_bindgen_8e87aea72679c0be =
-  BG.fromFFIType hs_bindgen_8e87aea72679c0be_base
-
--- | Update a rectangle within a planar NV12 or NV21 texture with new pixels.
---
---     You can use @SDL_UpdateTexture()@ as long as your pixel data is a contiguous block of NV12\/21 planes in the proper order, but this function is available if your pixel data is not contiguous.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_UpdateTexture', 'sDL_UpdateYUVTexture'
---
---     [C declaration]: @SDL_UpdateNVTexture@, defined at @SDL3\/SDL_render.h 1391:34@
-sDL_UpdateNVTexture
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to update.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -- ^
-  --
-  --           [@rect@]: a pointer to the rectangle of pixels to update, or NULL to update the entire texture.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@Yplane@]: the raw pixel data for the Y plane.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@Ypitch@]: the number of bytes between rows of pixel data for the Y plane.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@UVplane@]: the raw pixel data for the UV plane.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@UVpitch@]: the number of bytes between rows of pixel data for the UV plane.
-  -> IO BG.CBool
-sDL_UpdateNVTexture = hs_bindgen_8e87aea72679c0be
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_LockTexture@
-foreign import ccall unsafe "hs_bindgen_f81dacbd782960a7"
-  hs_bindgen_f81dacbd782960a7_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_LockTexture@
-hs_bindgen_f81dacbd782960a7
-  :: BG.Ptr SDL_Texture
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -> BG.Ptr (BG.Ptr BG.Void)
-  -> BG.Ptr BG.CInt
-  -> IO BG.CBool
-hs_bindgen_f81dacbd782960a7 =
-  BG.fromFFIType hs_bindgen_f81dacbd782960a7_base
-
--- | Lock a portion of the texture for __write-only__ pixel access.
---
---     As an optimization, the pixels made available for editing don\'t necessarily contain the old texture data. This is a write-only operation, and if you need to keep a copy of the texture data you should do that at the application level.
---
---     You must use @SDL_UnlockTexture()@ to unlock the pixels and apply any changes.
---
---     [Returns]: true on success or false if the texture is not valid or was not created with @SDL_TEXTUREACCESS_STREAMING@; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_LockTextureToSurface', 'sDL_UnlockTexture'
---
---     [C declaration]: @SDL_LockTexture@, defined at @SDL3\/SDL_render.h 1426:34@
-sDL_LockTexture
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to lock for access, which was created with @SDL_TEXTUREACCESS_STREAMING@.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -- ^
-  --
-  --           [@rect@]: an SDL_Rect structure representing the area to lock for access; NULL to lock the entire texture.
-  -> BG.Ptr (BG.Ptr BG.Void)
-  -- ^
-  --
-  --           [@pixels@]: this is filled in with a pointer to the locked pixels, appropriately offset by the locked area.
-  -> BG.Ptr BG.CInt
-  -- ^
-  --
-  --           [@pitch@]: this is filled in with the pitch of the locked pixels; the pitch is the length of one row in bytes.
-  -> IO BG.CBool
-sDL_LockTexture = hs_bindgen_f81dacbd782960a7
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_LockTextureToSurface@
-foreign import ccall unsafe "hs_bindgen_0422047faea9296b"
-  hs_bindgen_0422047faea9296b_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_LockTextureToSurface@
-hs_bindgen_0422047faea9296b
-  :: BG.Ptr SDL_Texture
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -> BG.Ptr (BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface)
-  -> IO BG.CBool
-hs_bindgen_0422047faea9296b =
-  BG.fromFFIType hs_bindgen_0422047faea9296b_base
-
--- | Lock a portion of the texture for __write-only__ pixel access, and expose it as a SDL surface.
---
---     Besides providing an SDL_Surface instead of raw pixel data, this function operates like SDL_LockTexture.
---
---     As an optimization, the pixels made available for editing don\'t necessarily contain the old texture data. This is a write-only operation, and if you need to keep a copy of the texture data you should do that at the application level.
---
---     You must use @SDL_UnlockTexture()@ to unlock the pixels and apply any changes.
---
---     The returned surface is freed internally after calling @SDL_UnlockTexture()@ or @SDL_DestroyTexture()@. The caller should not free it.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_LockTexture', 'sDL_UnlockTexture'
---
---     [C declaration]: @SDL_LockTextureToSurface@, defined at @SDL3\/SDL_render.h 1464:34@
-sDL_LockTextureToSurface
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to lock for access, which must be created with @SDL_TEXTUREACCESS_STREAMING@.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -- ^
-  --
-  --           [@rect@]: a pointer to the rectangle to lock for access. If the rect is NULL, the entire texture will be locked.
-  -> BG.Ptr (BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface)
-  -- ^
-  --
-  --           [@surface@]: a pointer to an SDL surface of size __rect__. Don\'t assume any specific pixel content.
-  -> IO BG.CBool
-sDL_LockTextureToSurface =
-  hs_bindgen_0422047faea9296b
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_UnlockTexture@
-foreign import ccall unsafe "hs_bindgen_9d1b4d7003c2d0ec"
-  hs_bindgen_9d1b4d7003c2d0ec_base
-    :: BG.Ptr BG.Void
-    -> IO ()
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_UnlockTexture@
-hs_bindgen_9d1b4d7003c2d0ec
-  :: BG.Ptr SDL_Texture
-  -> IO ()
-hs_bindgen_9d1b4d7003c2d0ec =
-  BG.fromFFIType hs_bindgen_9d1b4d7003c2d0ec_base
-
--- | Unlock a texture, uploading the changes to video memory, if needed.
---
---     __Warning__: Please note that @SDL_LockTexture()@ is intended to be write-only; it will not guarantee the previous contents of the texture will be provided. You must fully initialize any area of a texture that you lock before unlocking it, as the pixels might otherwise be uninitialized memory.
---
---     Which is to say: locking and immediately unlocking a texture can result in corrupted textures, depending on the renderer in use.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_LockTexture'
---
---     [C declaration]: @SDL_UnlockTexture@, defined at @SDL3\/SDL_render.h 1485:34@
-sDL_UnlockTexture
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: a texture locked by @SDL_LockTexture()@.
-  -> IO ()
-sDL_UnlockTexture = hs_bindgen_9d1b4d7003c2d0ec
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderTarget@
-foreign import ccall unsafe "hs_bindgen_42456f91219d7d63"
-  hs_bindgen_42456f91219d7d63_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderTarget@
-hs_bindgen_42456f91219d7d63
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL_Texture
-  -> IO BG.CBool
-hs_bindgen_42456f91219d7d63 =
-  BG.fromFFIType hs_bindgen_42456f91219d7d63_base
-
--- | Set a texture as the current rendering target.
---
---     The default render target is the window for which the renderer was created. To stop rendering to a texture and render to the window again, call this function with a NULL @texture@.
---
---     Viewport, cliprect, scale, and logical presentation are unique to each render target. Get and set functions for these states apply to the current render target set by this function, and those states persist on each target when the current render target changes.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetRenderTarget'
---
---     [C declaration]: @SDL_SetRenderTarget@, defined at @SDL3\/SDL_render.h 1512:34@
-sDL_SetRenderTarget
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the targeted texture, which must be created with the @SDL_TEXTUREACCESS_TARGET@ flag, or NULL to render to the window instead of a texture.
-  -> IO BG.CBool
-sDL_SetRenderTarget = hs_bindgen_42456f91219d7d63
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderTarget@
-foreign import ccall unsafe "hs_bindgen_afd608e22c7b34c2"
-  hs_bindgen_afd608e22c7b34c2_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderTarget@
-hs_bindgen_afd608e22c7b34c2
-  :: BG.Ptr SDL_Renderer
-  -> IO (BG.Ptr SDL_Texture)
-hs_bindgen_afd608e22c7b34c2 =
-  BG.fromFFIType hs_bindgen_afd608e22c7b34c2_base
-
--- | Get the current render target.
---
---     The default render target is the window for which the renderer was created, and is reported a NULL here.
---
---     [Returns]: the current render target or NULL for the default render target.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_SetRenderTarget'
---
---     [C declaration]: @SDL_GetRenderTarget@, defined at @SDL3\/SDL_render.h 1529:43@
-sDL_GetRenderTarget
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> IO (BG.Ptr SDL_Texture)
-sDL_GetRenderTarget = hs_bindgen_afd608e22c7b34c2
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderLogicalPresentation@
-foreign import ccall unsafe "hs_bindgen_99a6a5d6611eb0ad"
-  hs_bindgen_99a6a5d6611eb0ad_base
-    :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> BG.Word32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderLogicalPresentation@
-hs_bindgen_99a6a5d6611eb0ad
-  :: BG.Ptr SDL_Renderer
-  -> BG.CInt
-  -> BG.CInt
-  -> SDL_RendererLogicalPresentation
-  -> IO BG.CBool
-hs_bindgen_99a6a5d6611eb0ad =
-  BG.fromFFIType hs_bindgen_99a6a5d6611eb0ad_base
-
--- | Set a device-independent resolution and presentation mode for rendering.
---
---     This function sets the width and height of the logical rendering output. The renderer will act as if the current render target is always the requested dimensions, scaling to the actual resolution as necessary.
---
---     This can be useful for games that expect a fixed size, but would like to scale the output to whatever is available, regardless of how a user resizes a window, or if the display is high DPI.
---
---     Logical presentation can be used with both render target textures and the renderer\'s window; the state is unique to each render target, and this function sets the state for the current render target. It might be useful to draw to a texture that matches the window dimensions with logical presentation enabled, and then draw that texture across the entire window with logical presentation disabled. Be careful not to render both with logical presentation enabled, however, as this could produce double-letterboxing, etc.
---
---     You can disable logical coordinates by setting the mode to SDL_LOGICAL_PRESENTATION_DISABLED, and in that case you get the full pixel resolution of the render target; it is safe to toggle logical presentation during the rendering of a frame: perhaps most of the rendering is done to specific dimensions but to make fonts look sharp, the app turns off logical presentation while drawing text, for example.
---
---     You can convert coordinates in an event into rendering coordinates using @SDL_ConvertEventToRenderCoordinates()@.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_ConvertEventToRenderCoordinates', 'sDL_GetRenderLogicalPresentation', 'sDL_GetRenderLogicalPresentationRect'
---
---     [C declaration]: @SDL_SetRenderLogicalPresentation@, defined at @SDL3\/SDL_render.h 1576:34@
-sDL_SetRenderLogicalPresentation
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@w@]: the width of the logical resolution.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@h@]: the height of the logical resolution.
-  -> SDL_RendererLogicalPresentation
-  -- ^
-  --
-  --           [@mode@]: the presentation mode used.
-  -> IO BG.CBool
-sDL_SetRenderLogicalPresentation =
-  hs_bindgen_99a6a5d6611eb0ad
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderLogicalPresentation@
-foreign import ccall unsafe "hs_bindgen_cbe5162cf71da053"
-  hs_bindgen_cbe5162cf71da053_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderLogicalPresentation@
-hs_bindgen_cbe5162cf71da053
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr BG.CInt
-  -> BG.Ptr BG.CInt
-  -> BG.Ptr SDL_RendererLogicalPresentation
-  -> IO BG.CBool
-hs_bindgen_cbe5162cf71da053 =
-  BG.fromFFIType hs_bindgen_cbe5162cf71da053_base
-
--- | Get device independent resolution and presentation mode for rendering.
---
---     This function gets the width and height of the logical rendering output, or 0 if a logical resolution is not enabled.
---
---     Each render target has its own logical presentation state. This function gets the state for the current render target.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_SetRenderLogicalPresentation'
---
---     [C declaration]: @SDL_GetRenderLogicalPresentation@, defined at @SDL3\/SDL_render.h 1601:34@
-sDL_GetRenderLogicalPresentation
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr BG.CInt
-  -- ^
-  --
-  --           [@w@]: an int filled with the logical presentation width.
-  -> BG.Ptr BG.CInt
-  -- ^
-  --
-  --           [@h@]: an int filled with the logical presentation height.
-  -> BG.Ptr SDL_RendererLogicalPresentation
-  -- ^
-  --
-  --           [@mode@]: a variable filled with the logical presentation mode being used.
-  -> IO BG.CBool
-sDL_GetRenderLogicalPresentation =
-  hs_bindgen_cbe5162cf71da053
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderLogicalPresentationRect@
-foreign import ccall unsafe "hs_bindgen_60fac3e135efff7b"
-  hs_bindgen_60fac3e135efff7b_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderLogicalPresentationRect@
-hs_bindgen_60fac3e135efff7b
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -> IO BG.CBool
-hs_bindgen_60fac3e135efff7b =
-  BG.fromFFIType hs_bindgen_60fac3e135efff7b_base
-
--- | Get the final presentation rectangle for rendering.
---
---     This function returns the calculated rectangle used for logical presentation, based on the presentation mode and output size. If logical presentation is disabled, it will fill the rectangle with the output size, in pixels.
---
---     Each render target has its own logical presentation state. This function gets the rectangle for the current render target.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_SetRenderLogicalPresentation'
---
---     [C declaration]: @SDL_GetRenderLogicalPresentationRect@, defined at @SDL3\/SDL_render.h 1626:34@
-sDL_GetRenderLogicalPresentationRect
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -- ^
-  --
-  --           [@rect@]: a pointer filled in with the final presentation rectangle, may be NULL.
-  -> IO BG.CBool
-sDL_GetRenderLogicalPresentationRect =
-  hs_bindgen_60fac3e135efff7b
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderCoordinatesFromWindow@
-foreign import ccall unsafe "hs_bindgen_88c23a7a2bb3f897"
-  hs_bindgen_88c23a7a2bb3f897_base
-    :: BG.Ptr BG.Void
-    -> Float
-    -> Float
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderCoordinatesFromWindow@
-hs_bindgen_88c23a7a2bb3f897
-  :: BG.Ptr SDL_Renderer
-  -> BG.CFloat
-  -> BG.CFloat
-  -> BG.Ptr BG.CFloat
-  -> BG.Ptr BG.CFloat
-  -> IO BG.CBool
-hs_bindgen_88c23a7a2bb3f897 =
-  BG.fromFFIType hs_bindgen_88c23a7a2bb3f897_base
-
--- | Get a point in render coordinates when given a point in window coordinates.
---
---     This takes into account several states:
---
---     * The window dimensions.
---
---     * The logical presentation settings (SDL_SetRenderLogicalPresentation)
---
---     * The scale (SDL_SetRenderScale)
---
---     * The viewport (SDL_SetRenderViewport)
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_SetRenderLogicalPresentation', 'sDL_SetRenderScale'
---
---     [C declaration]: @SDL_RenderCoordinatesFromWindow@, defined at @SDL3\/SDL_render.h 1653:34@
-sDL_RenderCoordinatesFromWindow
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@window_x@]: the x coordinate in window coordinates.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@window_y@]: the y coordinate in window coordinates.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@x@]: a pointer filled with the x coordinate in render coordinates.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@y@]: a pointer filled with the y coordinate in render coordinates.
-  -> IO BG.CBool
-sDL_RenderCoordinatesFromWindow =
-  hs_bindgen_88c23a7a2bb3f897
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderCoordinatesToWindow@
-foreign import ccall unsafe "hs_bindgen_30a19a6793a8a60a"
-  hs_bindgen_30a19a6793a8a60a_base
-    :: BG.Ptr BG.Void
-    -> Float
-    -> Float
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderCoordinatesToWindow@
-hs_bindgen_30a19a6793a8a60a
-  :: BG.Ptr SDL_Renderer
-  -> BG.CFloat
-  -> BG.CFloat
-  -> BG.Ptr BG.CFloat
-  -> BG.Ptr BG.CFloat
-  -> IO BG.CBool
-hs_bindgen_30a19a6793a8a60a =
-  BG.fromFFIType hs_bindgen_30a19a6793a8a60a_base
-
--- | Get a point in window coordinates when given a point in render coordinates.
---
---     This takes into account several states:
---
---     * The window dimensions.
---
---     * The logical presentation settings (SDL_SetRenderLogicalPresentation)
---
---     * The scale (SDL_SetRenderScale)
---
---     * The viewport (SDL_SetRenderViewport)
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_SetRenderLogicalPresentation', 'sDL_SetRenderScale', 'sDL_SetRenderViewport'
---
---     [C declaration]: @SDL_RenderCoordinatesToWindow@, defined at @SDL3\/SDL_render.h 1683:34@
-sDL_RenderCoordinatesToWindow
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@x@]: the x coordinate in render coordinates.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@y@]: the y coordinate in render coordinates.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@window_x@]: a pointer filled with the x coordinate in window coordinates.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@window_y@]: a pointer filled with the y coordinate in window coordinates.
-  -> IO BG.CBool
-sDL_RenderCoordinatesToWindow =
-  hs_bindgen_30a19a6793a8a60a
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_ConvertEventToRenderCoordinates@
-foreign import ccall unsafe "hs_bindgen_99e1877354dd4cdb"
-  hs_bindgen_99e1877354dd4cdb_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_ConvertEventToRenderCoordinates@
-hs_bindgen_99e1877354dd4cdb
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL3.Sys.Bindgen.Events.SDL_Event
-  -> IO BG.CBool
-hs_bindgen_99e1877354dd4cdb =
-  BG.fromFFIType hs_bindgen_99e1877354dd4cdb_base
-
--- | Convert the coordinates in an event to render coordinates.
---
---     This takes into account several states:
---
---     * The window dimensions.
---
---     * The logical presentation settings (SDL_SetRenderLogicalPresentation)
---
---     * The scale (SDL_SetRenderScale)
---
---     * The viewport (SDL_SetRenderViewport)
---
---     Various event types are converted with this function: mouse, touch, pen, etc.
---
---     Touch coordinates are converted from normalized coordinates in the window to non-normalized rendering coordinates.
---
---     Relative mouse coordinates (xrel and yrel event fields) are /also/ converted. Applications that do not want these fields converted should use @SDL_RenderCoordinatesFromWindow()@ on the specific event fields instead of converting the entire event structure.
---
---     Once converted, coordinates may be outside the rendering area.
---
---     [Returns]: true if the event is converted or doesn\'t need conversion, or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderCoordinatesFromWindow'
---
---     [C declaration]: @SDL_ConvertEventToRenderCoordinates@, defined at @SDL3\/SDL_render.h 1719:34@
-sDL_ConvertEventToRenderCoordinates
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr SDL3.Sys.Bindgen.Events.SDL_Event
-  -- ^
-  --
-  --           [@event@]: the event to modify.
-  -> IO BG.CBool
-sDL_ConvertEventToRenderCoordinates =
-  hs_bindgen_99e1877354dd4cdb
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderViewport@
-foreign import ccall unsafe "hs_bindgen_da47a291603fd568"
-  hs_bindgen_da47a291603fd568_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderViewport@
-hs_bindgen_da47a291603fd568
-  :: BG.Ptr SDL_Renderer
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -> IO BG.CBool
-hs_bindgen_da47a291603fd568 =
-  BG.fromFFIType hs_bindgen_da47a291603fd568_base
-
--- | Set the drawing area for rendering on the current target.
---
---     Drawing will clip to this area (separately from any clipping done with SDL_SetRenderClipRect), and the top left of the area will become coordinate (0, 0) for future drawing commands.
---
---     The area\'s width and height must be >= 0.
---
---     Each render target has its own viewport. This function sets the viewport for the current render target.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetRenderViewport', 'sDL_RenderViewportSet'
---
---     [C declaration]: @SDL_SetRenderViewport@, defined at @SDL3\/SDL_render.h 1746:34@
-sDL_SetRenderViewport
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -- ^
-  --
-  --           [@rect@]: the SDL_Rect structure representing the drawing area, or NULL to set the viewport to the entire target.
-  -> IO BG.CBool
-sDL_SetRenderViewport = hs_bindgen_da47a291603fd568
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderViewport@
-foreign import ccall unsafe "hs_bindgen_d36147bdfea02ae0"
-  hs_bindgen_d36147bdfea02ae0_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderViewport@
-hs_bindgen_d36147bdfea02ae0
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -> IO BG.CBool
-hs_bindgen_d36147bdfea02ae0 =
-  BG.fromFFIType hs_bindgen_d36147bdfea02ae0_base
-
--- | Get the drawing area for the current target.
---
---     Each render target has its own viewport. This function gets the viewport for the current render target.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderViewportSet', 'sDL_SetRenderViewport'
---
---     [C declaration]: @SDL_GetRenderViewport@, defined at @SDL3\/SDL_render.h 1766:34@
-sDL_GetRenderViewport
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -- ^
-  --
-  --           [@rect@]: an SDL_Rect structure filled in with the current drawing area.
-  -> IO BG.CBool
-sDL_GetRenderViewport = hs_bindgen_d36147bdfea02ae0
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderViewportSet@
-foreign import ccall unsafe "hs_bindgen_b75de8ea63ffb717"
-  hs_bindgen_b75de8ea63ffb717_base
-    :: BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderViewportSet@
-hs_bindgen_b75de8ea63ffb717
-  :: BG.Ptr SDL_Renderer
-  -> IO BG.CBool
-hs_bindgen_b75de8ea63ffb717 =
-  BG.fromFFIType hs_bindgen_b75de8ea63ffb717_base
-
--- | Return whether an explicit rectangle was set as the viewport.
---
---     This is useful if you\'re saving and restoring the viewport and want to know whether you should restore a specific rectangle or NULL.
---
---     Each render target has its own viewport. This function checks the viewport for the current render target.
---
---     [Returns]: true if the viewport was set to a specific rectangle, or false if it was set to NULL (the entire target).
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetRenderViewport', 'sDL_SetRenderViewport'
---
---     [C declaration]: @SDL_RenderViewportSet@, defined at @SDL3\/SDL_render.h 1788:34@
-sDL_RenderViewportSet
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> IO BG.CBool
-sDL_RenderViewportSet = hs_bindgen_b75de8ea63ffb717
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderSafeArea@
-foreign import ccall unsafe "hs_bindgen_143575ef07d5400f"
-  hs_bindgen_143575ef07d5400f_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderSafeArea@
-hs_bindgen_143575ef07d5400f
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -> IO BG.CBool
-hs_bindgen_143575ef07d5400f =
-  BG.fromFFIType hs_bindgen_143575ef07d5400f_base
-
--- | Get the safe area for rendering within the current viewport.
---
---     Some devices have portions of the screen which are partially obscured or not interactive, possibly due to on-screen controls, curved edges, camera notches, TV overscan, etc. This function provides the area of the current viewport which is safe to have interactible content. You should continue rendering into the rest of the render target, but it should not contain visually important or interactible content.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_GetRenderSafeArea@, defined at @SDL3\/SDL_render.h 1810:34@
-sDL_GetRenderSafeArea
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -- ^
-  --
-  --           [@rect@]: a pointer filled in with the area that is safe for interactive content.
-  -> IO BG.CBool
-sDL_GetRenderSafeArea = hs_bindgen_143575ef07d5400f
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderClipRect@
-foreign import ccall unsafe "hs_bindgen_db4ee8d700a535c8"
-  hs_bindgen_db4ee8d700a535c8_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderClipRect@
-hs_bindgen_db4ee8d700a535c8
-  :: BG.Ptr SDL_Renderer
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -> IO BG.CBool
-hs_bindgen_db4ee8d700a535c8 =
-  BG.fromFFIType hs_bindgen_db4ee8d700a535c8_base
-
--- | Set the clip rectangle for rendering on the specified target.
---
---     Each render target has its own clip rectangle. This function sets the cliprect for the current render target.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetRenderClipRect', 'sDL_RenderClipEnabled'
---
---     [C declaration]: @SDL_SetRenderClipRect@, defined at @SDL3\/SDL_render.h 1831:34@
-sDL_SetRenderClipRect
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -- ^
-  --
-  --           [@rect@]: an SDL_Rect structure representing the clip area, relative to the viewport, or NULL to disable clipping.
-  -> IO BG.CBool
-sDL_SetRenderClipRect = hs_bindgen_db4ee8d700a535c8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderClipRect@
-foreign import ccall unsafe "hs_bindgen_7bd39620f800ed67"
-  hs_bindgen_7bd39620f800ed67_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderClipRect@
-hs_bindgen_7bd39620f800ed67
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -> IO BG.CBool
-hs_bindgen_7bd39620f800ed67 =
-  BG.fromFFIType hs_bindgen_7bd39620f800ed67_base
-
--- | Get the clip rectangle for the current target.
---
---     Each render target has its own clip rectangle. This function gets the cliprect for the current render target.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderClipEnabled', 'sDL_SetRenderClipRect'
---
---     [C declaration]: @SDL_GetRenderClipRect@, defined at @SDL3\/SDL_render.h 1852:34@
-sDL_GetRenderClipRect
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -- ^
-  --
-  --           [@rect@]: an SDL_Rect structure filled in with the current clipping area or an empty rectangle if clipping is disabled.
-  -> IO BG.CBool
-sDL_GetRenderClipRect = hs_bindgen_7bd39620f800ed67
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderClipEnabled@
-foreign import ccall unsafe "hs_bindgen_011ece38ae24698a"
-  hs_bindgen_011ece38ae24698a_base
-    :: BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderClipEnabled@
-hs_bindgen_011ece38ae24698a
-  :: BG.Ptr SDL_Renderer
-  -> IO BG.CBool
-hs_bindgen_011ece38ae24698a =
-  BG.fromFFIType hs_bindgen_011ece38ae24698a_base
-
--- | Get whether clipping is enabled on the given render target.
---
---     Each render target has its own clip rectangle. This function checks the cliprect for the current render target.
---
---     [Returns]: true if clipping is enabled or false if not; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetRenderClipRect', 'sDL_SetRenderClipRect'
---
---     [C declaration]: @SDL_RenderClipEnabled@, defined at @SDL3\/SDL_render.h 1871:34@
-sDL_RenderClipEnabled
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> IO BG.CBool
-sDL_RenderClipEnabled = hs_bindgen_011ece38ae24698a
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderScale@
-foreign import ccall unsafe "hs_bindgen_a2ecfc86b7164248"
-  hs_bindgen_a2ecfc86b7164248_base
-    :: BG.Ptr BG.Void
-    -> Float
-    -> Float
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderScale@
-hs_bindgen_a2ecfc86b7164248
-  :: BG.Ptr SDL_Renderer
-  -> BG.CFloat
-  -> BG.CFloat
-  -> IO BG.CBool
-hs_bindgen_a2ecfc86b7164248 =
-  BG.fromFFIType hs_bindgen_a2ecfc86b7164248_base
-
--- | Set the drawing scale for rendering on the current target.
---
---     The drawing coordinates are scaled by the x\/y scaling factors before they are used by the renderer. This allows resolution independent drawing with a single coordinate system.
---
---     If this results in scaling or subpixel drawing by the rendering backend, it will be handled using the appropriate quality hints. For best results use integer scaling factors.
---
---     Each render target has its own scale. This function sets the scale for the current render target.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetRenderScale'
---
---     [C declaration]: @SDL_SetRenderScale@, defined at @SDL3\/SDL_render.h 1899:34@
-sDL_SetRenderScale
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@scaleX@]: the horizontal scaling factor.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@scaleY@]: the vertical scaling factor.
-  -> IO BG.CBool
-sDL_SetRenderScale = hs_bindgen_a2ecfc86b7164248
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderScale@
-foreign import ccall unsafe "hs_bindgen_9b27eba43ce3989c"
-  hs_bindgen_9b27eba43ce3989c_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderScale@
-hs_bindgen_9b27eba43ce3989c
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr BG.CFloat
-  -> BG.Ptr BG.CFloat
-  -> IO BG.CBool
-hs_bindgen_9b27eba43ce3989c =
-  BG.fromFFIType hs_bindgen_9b27eba43ce3989c_base
-
--- | Get the drawing scale for the current target.
---
---     Each render target has its own scale. This function gets the scale for the current render target.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_SetRenderScale'
---
---     [C declaration]: @SDL_GetRenderScale@, defined at @SDL3\/SDL_render.h 1919:34@
-sDL_GetRenderScale
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@scaleX@]: a pointer filled in with the horizontal scaling factor.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@scaleY@]: a pointer filled in with the vertical scaling factor.
-  -> IO BG.CBool
-sDL_GetRenderScale = hs_bindgen_9b27eba43ce3989c
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderDrawColor@
-foreign import ccall unsafe "hs_bindgen_122da056b531e869"
-  hs_bindgen_122da056b531e869_base
-    :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> BG.Word8
-    -> BG.Word8
-    -> BG.Word8
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderDrawColor@
-hs_bindgen_122da056b531e869
-  :: BG.Ptr SDL_Renderer
-  -> SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> IO BG.CBool
-hs_bindgen_122da056b531e869 =
-  BG.fromFFIType hs_bindgen_122da056b531e869_base
-
--- | Set the color used for drawing operations.
---
---     Set the color for drawing or filling rectangles, lines, and points, and for @SDL_RenderClear()@.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetRenderDrawColor', 'sDL_SetRenderDrawColorFloat'
---
---     [C declaration]: @SDL_SetRenderDrawColor@, defined at @SDL3\/SDL_render.h 1944:34@
-sDL_SetRenderDrawColor
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@r@]: the red value used to draw on the rendering target.
-  -> SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@g@]: the green value used to draw on the rendering target.
-  -> SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@b@]: the blue value used to draw on the rendering target.
-  -> SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@a@]: the alpha value used to draw on the rendering target; usually @SDL_ALPHA_OPAQUE@ (255). Use SDL_SetRenderDrawBlendMode to specify how the alpha channel is used.
-  -> IO BG.CBool
-sDL_SetRenderDrawColor = hs_bindgen_122da056b531e869
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderDrawColorFloat@
-foreign import ccall unsafe "hs_bindgen_069391a3e71d464d"
-  hs_bindgen_069391a3e71d464d_base
-    :: BG.Ptr BG.Void
-    -> Float
-    -> Float
-    -> Float
-    -> Float
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderDrawColorFloat@
-hs_bindgen_069391a3e71d464d
-  :: BG.Ptr SDL_Renderer
-  -> BG.CFloat
-  -> BG.CFloat
-  -> BG.CFloat
-  -> BG.CFloat
-  -> IO BG.CBool
-hs_bindgen_069391a3e71d464d =
-  BG.fromFFIType hs_bindgen_069391a3e71d464d_base
-
--- | Set the color used for drawing operations (Rect, Line and Clear).
---
---     Set the color for drawing or filling rectangles, lines, and points, and for @SDL_RenderClear()@.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetRenderDrawColorFloat', 'sDL_SetRenderDrawColor'
---
---     [C declaration]: @SDL_SetRenderDrawColorFloat@, defined at @SDL3\/SDL_render.h 1969:34@
-sDL_SetRenderDrawColorFloat
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@r@]: the red value used to draw on the rendering target.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@g@]: the green value used to draw on the rendering target.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@b@]: the blue value used to draw on the rendering target.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@a@]: the alpha value used to draw on the rendering target. Use SDL_SetRenderDrawBlendMode to specify how the alpha channel is used.
-  -> IO BG.CBool
-sDL_SetRenderDrawColorFloat =
-  hs_bindgen_069391a3e71d464d
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderDrawColor@
-foreign import ccall unsafe "hs_bindgen_7f0f910be4b2889e"
-  hs_bindgen_7f0f910be4b2889e_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderDrawColor@
-hs_bindgen_7f0f910be4b2889e
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
-  -> IO BG.CBool
-hs_bindgen_7f0f910be4b2889e =
-  BG.fromFFIType hs_bindgen_7f0f910be4b2889e_base
-
--- | Get the color used for drawing operations (Rect, Line and Clear).
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetRenderDrawColorFloat', 'sDL_SetRenderDrawColor'
---
---     [C declaration]: @SDL_GetRenderDrawColor@, defined at @SDL3\/SDL_render.h 1993:34@
-sDL_GetRenderDrawColor
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@r@]: a pointer filled in with the red value used to draw on the rendering target.
-  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@g@]: a pointer filled in with the green value used to draw on the rendering target.
-  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@b@]: a pointer filled in with the blue value used to draw on the rendering target.
-  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
-  -- ^
-  --
-  --           [@a@]: a pointer filled in with the alpha value used to draw on the rendering target; usually @SDL_ALPHA_OPAQUE@ (255).
-  -> IO BG.CBool
-sDL_GetRenderDrawColor = hs_bindgen_7f0f910be4b2889e
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderDrawColorFloat@
-foreign import ccall unsafe "hs_bindgen_7679f2d13375bcd2"
-  hs_bindgen_7679f2d13375bcd2_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderDrawColorFloat@
-hs_bindgen_7679f2d13375bcd2
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr BG.CFloat
-  -> BG.Ptr BG.CFloat
-  -> BG.Ptr BG.CFloat
-  -> BG.Ptr BG.CFloat
-  -> IO BG.CBool
-hs_bindgen_7679f2d13375bcd2 =
-  BG.fromFFIType hs_bindgen_7679f2d13375bcd2_base
-
--- | Get the color used for drawing operations (Rect, Line and Clear).
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_SetRenderDrawColorFloat', 'sDL_GetRenderDrawColor'
---
---     [C declaration]: @SDL_GetRenderDrawColorFloat@, defined at @SDL3\/SDL_render.h 2017:34@
-sDL_GetRenderDrawColorFloat
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@r@]: a pointer filled in with the red value used to draw on the rendering target.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@g@]: a pointer filled in with the green value used to draw on the rendering target.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@b@]: a pointer filled in with the blue value used to draw on the rendering target.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@a@]: a pointer filled in with the alpha value used to draw on the rendering target.
-  -> IO BG.CBool
-sDL_GetRenderDrawColorFloat =
-  hs_bindgen_7679f2d13375bcd2
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderColorScale@
-foreign import ccall unsafe "hs_bindgen_2d134fc6b089039f"
-  hs_bindgen_2d134fc6b089039f_base
-    :: BG.Ptr BG.Void
-    -> Float
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderColorScale@
-hs_bindgen_2d134fc6b089039f
-  :: BG.Ptr SDL_Renderer
-  -> BG.CFloat
-  -> IO BG.CBool
-hs_bindgen_2d134fc6b089039f =
-  BG.fromFFIType hs_bindgen_2d134fc6b089039f_base
-
--- | Set the color scale used for render operations.
---
---     The color scale is an additional scale multiplied into the pixel color value while rendering. This can be used to adjust the brightness of colors during HDR rendering, or changing HDR video brightness when playing on an SDR display.
---
---     The color scale does not affect the alpha channel, only the color brightness.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetRenderColorScale'
---
---     [C declaration]: @SDL_SetRenderColorScale@, defined at @SDL3\/SDL_render.h 2041:34@
-sDL_SetRenderColorScale
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@scale@]: the color scale value.
-  -> IO BG.CBool
-sDL_SetRenderColorScale = hs_bindgen_2d134fc6b089039f
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderColorScale@
-foreign import ccall unsafe "hs_bindgen_f9539095c565384c"
-  hs_bindgen_f9539095c565384c_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderColorScale@
-hs_bindgen_f9539095c565384c
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr BG.CFloat
-  -> IO BG.CBool
-hs_bindgen_f9539095c565384c =
-  BG.fromFFIType hs_bindgen_f9539095c565384c_base
-
--- | Get the color scale used for render operations.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_SetRenderColorScale'
---
---     [C declaration]: @SDL_GetRenderColorScale@, defined at @SDL3\/SDL_render.h 2057:34@
-sDL_GetRenderColorScale
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@scale@]: a pointer filled in with the current color scale value.
-  -> IO BG.CBool
-sDL_GetRenderColorScale = hs_bindgen_f9539095c565384c
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderDrawBlendMode@
-foreign import ccall unsafe "hs_bindgen_1885ca90cb47d78c"
-  hs_bindgen_1885ca90cb47d78c_base
-    :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderDrawBlendMode@
-hs_bindgen_1885ca90cb47d78c
-  :: BG.Ptr SDL_Renderer
-  -> SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
-  -> IO BG.CBool
-hs_bindgen_1885ca90cb47d78c =
-  BG.fromFFIType hs_bindgen_1885ca90cb47d78c_base
-
--- | Set the blend mode used for drawing operations.
---
---     This blend mode is used for any drawing that doesn\'t involve textures.
---
---     If the blend mode is not supported, the closest supported mode is chosen.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetRenderDrawBlendMode', 'sDL_SetTextureBlendMode'
---
---     [C declaration]: @SDL_SetRenderDrawBlendMode@, defined at @SDL3\/SDL_render.h 2078:34@
-sDL_SetRenderDrawBlendMode
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
-  -- ^
-  --
-  --           [@blendMode@]: the SDL_BlendMode to use for blending.
-  -> IO BG.CBool
-sDL_SetRenderDrawBlendMode =
-  hs_bindgen_1885ca90cb47d78c
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderDrawBlendMode@
-foreign import ccall unsafe "hs_bindgen_80ecda0d3d8d870b"
-  hs_bindgen_80ecda0d3d8d870b_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderDrawBlendMode@
-hs_bindgen_80ecda0d3d8d870b
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
-  -> IO BG.CBool
-hs_bindgen_80ecda0d3d8d870b =
-  BG.fromFFIType hs_bindgen_80ecda0d3d8d870b_base
-
--- | Get the blend mode used for drawing operations.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_SetRenderDrawBlendMode'
---
---     [C declaration]: @SDL_GetRenderDrawBlendMode@, defined at @SDL3\/SDL_render.h 2094:34@
-sDL_GetRenderDrawBlendMode
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
-  -- ^
-  --
-  --           [@blendMode@]: a pointer filled in with the current SDL_BlendMode.
-  -> IO BG.CBool
-sDL_GetRenderDrawBlendMode =
-  hs_bindgen_80ecda0d3d8d870b
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderClear@
-foreign import ccall unsafe "hs_bindgen_82119a8dbd03b3ca"
-  hs_bindgen_82119a8dbd03b3ca_base
-    :: BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderClear@
-hs_bindgen_82119a8dbd03b3ca
-  :: BG.Ptr SDL_Renderer
-  -> IO BG.CBool
-hs_bindgen_82119a8dbd03b3ca =
-  BG.fromFFIType hs_bindgen_82119a8dbd03b3ca_base
-
--- | Clear the current rendering target with the drawing color.
---
---     This function clears the entire rendering target, ignoring the viewport and the clip rectangle. Note, that clearing will also set\/fill all pixels of the rendering target to current renderer draw color, so make sure to invoke @SDL_SetRenderDrawColor()@ when needed.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_SetRenderDrawColor'
---
---     [C declaration]: @SDL_RenderClear@, defined at @SDL3\/SDL_render.h 2114:34@
-sDL_RenderClear
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> IO BG.CBool
-sDL_RenderClear = hs_bindgen_82119a8dbd03b3ca
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderPoint@
-foreign import ccall unsafe "hs_bindgen_c73e2796ab7f90c1"
-  hs_bindgen_c73e2796ab7f90c1_base
-    :: BG.Ptr BG.Void
-    -> Float
-    -> Float
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderPoint@
-hs_bindgen_c73e2796ab7f90c1
-  :: BG.Ptr SDL_Renderer
-  -> BG.CFloat
-  -> BG.CFloat
-  -> IO BG.CBool
-hs_bindgen_c73e2796ab7f90c1 =
-  BG.fromFFIType hs_bindgen_c73e2796ab7f90c1_base
-
--- | Draw a point on the current rendering target at subpixel precision.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderPoints'
---
---     [C declaration]: @SDL_RenderPoint@, defined at @SDL3\/SDL_render.h 2131:34@
-sDL_RenderPoint
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer which should draw a point.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@x@]: the x coordinate of the point.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@y@]: the y coordinate of the point.
-  -> IO BG.CBool
-sDL_RenderPoint = hs_bindgen_c73e2796ab7f90c1
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderPoints@
-foreign import ccall unsafe "hs_bindgen_cb752ddd9f3b53be"
-  hs_bindgen_cb752ddd9f3b53be_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderPoints@
-hs_bindgen_cb752ddd9f3b53be
-  :: BG.Ptr SDL_Renderer
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
-  -> BG.CInt
-  -> IO BG.CBool
-hs_bindgen_cb752ddd9f3b53be =
-  BG.fromFFIType hs_bindgen_cb752ddd9f3b53be_base
-
--- | Draw multiple points on the current rendering target at subpixel precision.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderPoint'
---
---     [C declaration]: @SDL_RenderPoints@, defined at @SDL3\/SDL_render.h 2148:34@
-sDL_RenderPoints
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer which should draw multiple points.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
-  -- ^
-  --
-  --           [@points@]: the points to draw.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@count@]: the number of points to draw.
-  -> IO BG.CBool
-sDL_RenderPoints = hs_bindgen_cb752ddd9f3b53be
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderLine@
-foreign import ccall unsafe "hs_bindgen_8fc8b7b71da27e92"
-  hs_bindgen_8fc8b7b71da27e92_base
-    :: BG.Ptr BG.Void
-    -> Float
-    -> Float
-    -> Float
-    -> Float
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderLine@
-hs_bindgen_8fc8b7b71da27e92
-  :: BG.Ptr SDL_Renderer
-  -> BG.CFloat
-  -> BG.CFloat
-  -> BG.CFloat
-  -> BG.CFloat
-  -> IO BG.CBool
-hs_bindgen_8fc8b7b71da27e92 =
-  BG.fromFFIType hs_bindgen_8fc8b7b71da27e92_base
-
--- | Draw a line on the current rendering target at subpixel precision.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderLines'
---
---     [C declaration]: @SDL_RenderLine@, defined at @SDL3\/SDL_render.h 2167:34@
-sDL_RenderLine
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer which should draw a line.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@x1@]: the x coordinate of the start point.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@y1@]: the y coordinate of the start point.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@x2@]: the x coordinate of the end point.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@y2@]: the y coordinate of the end point.
-  -> IO BG.CBool
-sDL_RenderLine = hs_bindgen_8fc8b7b71da27e92
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderLines@
-foreign import ccall unsafe "hs_bindgen_d68b0895520fbd3a"
-  hs_bindgen_d68b0895520fbd3a_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderLines@
-hs_bindgen_d68b0895520fbd3a
-  :: BG.Ptr SDL_Renderer
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
-  -> BG.CInt
-  -> IO BG.CBool
-hs_bindgen_d68b0895520fbd3a =
-  BG.fromFFIType hs_bindgen_d68b0895520fbd3a_base
-
--- | Draw a series of connected lines on the current rendering target at subpixel precision.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderLine'
---
---     [C declaration]: @SDL_RenderLines@, defined at @SDL3\/SDL_render.h 2185:34@
-sDL_RenderLines
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer which should draw multiple lines.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
-  -- ^
-  --
-  --           [@points@]: the points along the lines.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@count@]: the number of points, drawing count-1 lines.
-  -> IO BG.CBool
-sDL_RenderLines = hs_bindgen_d68b0895520fbd3a
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderRect@
-foreign import ccall unsafe "hs_bindgen_74702b94b10a8a97"
-  hs_bindgen_74702b94b10a8a97_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderRect@
-hs_bindgen_74702b94b10a8a97
-  :: BG.Ptr SDL_Renderer
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -> IO BG.CBool
-hs_bindgen_74702b94b10a8a97 =
-  BG.fromFFIType hs_bindgen_74702b94b10a8a97_base
-
--- | Draw a rectangle on the current rendering target at subpixel precision.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderRects'
---
---     [C declaration]: @SDL_RenderRect@, defined at @SDL3\/SDL_render.h 2202:34@
-sDL_RenderRect
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer which should draw a rectangle.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -- ^
-  --
-  --           [@rect@]: a pointer to the destination rectangle, or NULL to outline the entire rendering target.
-  -> IO BG.CBool
-sDL_RenderRect = hs_bindgen_74702b94b10a8a97
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderRects@
-foreign import ccall unsafe "hs_bindgen_2ee379e179df5f3c"
-  hs_bindgen_2ee379e179df5f3c_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderRects@
-hs_bindgen_2ee379e179df5f3c
-  :: BG.Ptr SDL_Renderer
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -> BG.CInt
-  -> IO BG.CBool
-hs_bindgen_2ee379e179df5f3c =
-  BG.fromFFIType hs_bindgen_2ee379e179df5f3c_base
-
--- | Draw some number of rectangles on the current rendering target at subpixel precision.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderRect'
---
---     [C declaration]: @SDL_RenderRects@, defined at @SDL3\/SDL_render.h 2220:34@
-sDL_RenderRects
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer which should draw multiple rectangles.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -- ^
-  --
-  --           [@rects@]: a pointer to an array of destination rectangles.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@count@]: the number of rectangles.
-  -> IO BG.CBool
-sDL_RenderRects = hs_bindgen_2ee379e179df5f3c
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderFillRect@
-foreign import ccall unsafe "hs_bindgen_c5b24d3e3930aa12"
-  hs_bindgen_c5b24d3e3930aa12_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderFillRect@
-hs_bindgen_c5b24d3e3930aa12
-  :: BG.Ptr SDL_Renderer
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -> IO BG.CBool
-hs_bindgen_c5b24d3e3930aa12 =
-  BG.fromFFIType hs_bindgen_c5b24d3e3930aa12_base
-
--- | Fill a rectangle on the current rendering target with the drawing color at subpixel precision.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderFillRects'
---
---     [C declaration]: @SDL_RenderFillRect@, defined at @SDL3\/SDL_render.h 2238:34@
-sDL_RenderFillRect
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer which should fill a rectangle.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -- ^
-  --
-  --           [@rect@]: a pointer to the destination rectangle, or NULL for the entire rendering target.
-  -> IO BG.CBool
-sDL_RenderFillRect = hs_bindgen_c5b24d3e3930aa12
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderFillRects@
-foreign import ccall unsafe "hs_bindgen_afbd05ab4eae453e"
-  hs_bindgen_afbd05ab4eae453e_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderFillRects@
-hs_bindgen_afbd05ab4eae453e
-  :: BG.Ptr SDL_Renderer
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -> BG.CInt
-  -> IO BG.CBool
-hs_bindgen_afbd05ab4eae453e =
-  BG.fromFFIType hs_bindgen_afbd05ab4eae453e_base
-
--- | Fill some number of rectangles on the current rendering target with the drawing color at subpixel precision.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderFillRect'
---
---     [C declaration]: @SDL_RenderFillRects@, defined at @SDL3\/SDL_render.h 2256:34@
-sDL_RenderFillRects
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer which should fill multiple rectangles.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -- ^
-  --
-  --           [@rects@]: a pointer to an array of destination rectangles.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@count@]: the number of rectangles.
-  -> IO BG.CBool
-sDL_RenderFillRects = hs_bindgen_afbd05ab4eae453e
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderTexture@
-foreign import ccall unsafe "hs_bindgen_9502ac14df729213"
-  hs_bindgen_9502ac14df729213_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderTexture@
-hs_bindgen_9502ac14df729213
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL_Texture
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -> IO BG.CBool
-hs_bindgen_9502ac14df729213 =
-  BG.fromFFIType hs_bindgen_9502ac14df729213_base
-
--- | Copy a portion of the texture to the current rendering target at subpixel precision.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderTextureRotated', 'sDL_RenderTextureTiled'
---
---     [C declaration]: @SDL_RenderTexture@, defined at @SDL3\/SDL_render.h 2278:34@
-sDL_RenderTexture
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer which should copy parts of a texture.
-  -> BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the source texture.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -- ^
-  --
-  --           [@srcrect@]: a pointer to the source rectangle, or NULL for the entire texture.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -- ^
-  --
-  --           [@dstrect@]: a pointer to the destination rectangle, or NULL for the entire rendering target.
-  -> IO BG.CBool
-sDL_RenderTexture = hs_bindgen_9502ac14df729213
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderTextureRotated@
-foreign import ccall unsafe "hs_bindgen_bdd81c1a4d95fd9a"
-  hs_bindgen_bdd81c1a4d95fd9a_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> Double
-    -> BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderTextureRotated@
-hs_bindgen_bdd81c1a4d95fd9a
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL_Texture
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -> BG.CDouble
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
-  -> SDL3.Sys.Bindgen.Surface.SDL_FlipMode
-  -> IO BG.CBool
-hs_bindgen_bdd81c1a4d95fd9a =
-  BG.fromFFIType hs_bindgen_bdd81c1a4d95fd9a_base
-
--- | Copy a portion of the source texture to the current rendering target, with rotation and flipping, at subpixel precision.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderTexture'
---
---     [C declaration]: @SDL_RenderTextureRotated@, defined at @SDL3\/SDL_render.h 2306:34@
-sDL_RenderTextureRotated
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer which should copy parts of a texture.
-  -> BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the source texture.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -- ^
-  --
-  --           [@srcrect@]: a pointer to the source rectangle, or NULL for the entire texture.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -- ^
-  --
-  --           [@dstrect@]: a pointer to the destination rectangle, or NULL for the entire rendering target.
-  -> BG.CDouble
-  -- ^
-  --
-  --           [@angle@]: an angle in degrees that indicates the rotation that will be applied to dstrect, rotating it in a clockwise direction.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
-  -- ^
-  --
-  --           [@center@]: a pointer to a point indicating the point around which dstrect will be rotated (if NULL, rotation will be done around dstrect.w\/2, dstrect.h\/2).
-  -> SDL3.Sys.Bindgen.Surface.SDL_FlipMode
-  -- ^
-  --
-  --           [@flip@]: an SDL_FlipMode value stating which flipping actions should be performed on the texture.
-  -> IO BG.CBool
-sDL_RenderTextureRotated =
-  hs_bindgen_bdd81c1a4d95fd9a
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderTextureAffine@
-foreign import ccall unsafe "hs_bindgen_18c2f3b6d0215153"
-  hs_bindgen_18c2f3b6d0215153_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderTextureAffine@
-hs_bindgen_18c2f3b6d0215153
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL_Texture
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
-  -> IO BG.CBool
-hs_bindgen_18c2f3b6d0215153 =
-  BG.fromFFIType hs_bindgen_18c2f3b6d0215153_base
-
--- | Copy a portion of the source texture to the current rendering target, with affine transform, at subpixel precision.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: You may only call this function from the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderTexture'
---
---     [C declaration]: @SDL_RenderTextureAffine@, defined at @SDL3\/SDL_render.h 2337:34@
-sDL_RenderTextureAffine
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer which should copy parts of a texture.
-  -> BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the source texture.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -- ^
-  --
-  --           [@srcrect@]: a pointer to the source rectangle, or NULL for the entire texture.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
-  -- ^
-  --
-  --           [@origin@]: a pointer to a point indicating where the top-left corner of srcrect should be mapped to, or NULL for the rendering target\'s origin.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
-  -- ^
-  --
-  --           [@right@]: a pointer to a point indicating where the top-right corner of srcrect should be mapped to, or NULL for the rendering target\'s top-right corner.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
-  -- ^
-  --
-  --           [@down@]: a pointer to a point indicating where the bottom-left corner of srcrect should be mapped to, or NULL for the rendering target\'s bottom-left corner.
-  -> IO BG.CBool
-sDL_RenderTextureAffine = hs_bindgen_18c2f3b6d0215153
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderTextureTiled@
-foreign import ccall unsafe "hs_bindgen_f46f867b1d2a5b99"
-  hs_bindgen_f46f867b1d2a5b99_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> Float
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderTextureTiled@
-hs_bindgen_f46f867b1d2a5b99
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL_Texture
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -> BG.CFloat
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -> IO BG.CBool
-hs_bindgen_f46f867b1d2a5b99 =
-  BG.fromFFIType hs_bindgen_f46f867b1d2a5b99_base
-
--- | Tile a portion of the texture to the current rendering target at subpixel precision.
---
---     The pixels in @srcrect@ will be repeated as many times as needed to completely fill @dstrect@.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderTexture'
---
---     [C declaration]: @SDL_RenderTextureTiled@, defined at @SDL3\/SDL_render.h 2366:34@
-sDL_RenderTextureTiled
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer which should copy parts of a texture.
-  -> BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the source texture.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -- ^
-  --
-  --           [@srcrect@]: a pointer to the source rectangle, or NULL for the entire texture.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@scale@]: the scale used to transform srcrect into the destination rectangle, e.g. a 32x32 texture with a scale of 2 would fill 64x64 tiles.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -- ^
-  --
-  --           [@dstrect@]: a pointer to the destination rectangle, or NULL for the entire rendering target.
-  -> IO BG.CBool
-sDL_RenderTextureTiled = hs_bindgen_f46f867b1d2a5b99
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderTexture9Grid@
-foreign import ccall unsafe "hs_bindgen_7460ccca85327f67"
-  hs_bindgen_7460ccca85327f67_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> Float
-    -> Float
-    -> Float
-    -> Float
-    -> Float
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderTexture9Grid@
-hs_bindgen_7460ccca85327f67
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL_Texture
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -> BG.CFloat
-  -> BG.CFloat
-  -> BG.CFloat
-  -> BG.CFloat
-  -> BG.CFloat
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -> IO BG.CBool
-hs_bindgen_7460ccca85327f67 =
-  BG.fromFFIType hs_bindgen_7460ccca85327f67_base
-
--- | Perform a scaled copy using the 9-grid algorithm to the current rendering target at subpixel precision.
---
---     The pixels in the texture are split into a 3x3 grid, using the different corner sizes for each corner, and the sides and center making up the remaining pixels. The corners are then scaled using @scale@ and fit into the corners of the destination rectangle. The sides and center are then stretched into place to cover the remaining destination rectangle.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderTexture', 'sDL_RenderTexture9GridTiled'
---
---     [C declaration]: @SDL_RenderTexture9Grid@, defined at @SDL3\/SDL_render.h 2401:34@
-sDL_RenderTexture9Grid
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer which should copy parts of a texture.
-  -> BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the source texture.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -- ^
-  --
-  --           [@srcrect@]: the SDL_Rect structure representing the rectangle to be used for the 9-grid, or NULL to use the entire texture.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@left_width@]: the width, in pixels, of the left corners in @srcrect@.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@right_width@]: the width, in pixels, of the right corners in @srcrect@.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@top_height@]: the height, in pixels, of the top corners in @srcrect@.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@bottom_height@]: the height, in pixels, of the bottom corners in @srcrect@.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@scale@]: the scale used to transform the corner of @srcrect@ into the corner of @dstrect@, or 0.0f for an unscaled copy.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -- ^
-  --
-  --           [@dstrect@]: a pointer to the destination rectangle, or NULL for the entire rendering target.
-  -> IO BG.CBool
-sDL_RenderTexture9Grid = hs_bindgen_7460ccca85327f67
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderTexture9GridTiled@
-foreign import ccall unsafe "hs_bindgen_82ec92cefa73aeb4"
-  hs_bindgen_82ec92cefa73aeb4_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> Float
-    -> Float
-    -> Float
-    -> Float
-    -> Float
-    -> BG.Ptr BG.Void
-    -> Float
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderTexture9GridTiled@
-hs_bindgen_82ec92cefa73aeb4
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL_Texture
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -> BG.CFloat
-  -> BG.CFloat
-  -> BG.CFloat
-  -> BG.CFloat
-  -> BG.CFloat
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -> BG.CFloat
-  -> IO BG.CBool
-hs_bindgen_82ec92cefa73aeb4 =
-  BG.fromFFIType hs_bindgen_82ec92cefa73aeb4_base
-
--- | Perform a scaled copy using the 9-grid algorithm to the current rendering target at subpixel precision.
---
---     The pixels in the texture are split into a 3x3 grid, using the different corner sizes for each corner, and the sides and center making up the remaining pixels. The corners are then scaled using @scale@ and fit into the corners of the destination rectangle. The sides and center are then tiled into place to cover the remaining destination rectangle.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.4.0
---
---     [See also]: 'sDL_RenderTexture', 'sDL_RenderTexture9Grid'
---
---     [C declaration]: @SDL_RenderTexture9GridTiled@, defined at @SDL3\/SDL_render.h 2439:34@
-sDL_RenderTexture9GridTiled
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer which should copy parts of a texture.
-  -> BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the source texture.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -- ^
-  --
-  --           [@srcrect@]: the SDL_Rect structure representing the rectangle to be used for the 9-grid, or NULL to use the entire texture.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@left_width@]: the width, in pixels, of the left corners in @srcrect@.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@right_width@]: the width, in pixels, of the right corners in @srcrect@.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@top_height@]: the height, in pixels, of the top corners in @srcrect@.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@bottom_height@]: the height, in pixels, of the bottom corners in @srcrect@.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@scale@]: the scale used to transform the corner of @srcrect@ into the corner of @dstrect@, or 0.0f for an unscaled copy.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
-  -- ^
-  --
-  --           [@dstrect@]: a pointer to the destination rectangle, or NULL for the entire rendering target.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@tileScale@]: the scale used to transform the borders and center of @srcrect@ into the borders and middle of @dstrect@, or 1.0f for an unscaled copy.
-  -> IO BG.CBool
-sDL_RenderTexture9GridTiled =
-  hs_bindgen_82ec92cefa73aeb4
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderGeometry@
-foreign import ccall unsafe "hs_bindgen_604c256c92b502f9"
-  hs_bindgen_604c256c92b502f9_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderGeometry@
-hs_bindgen_604c256c92b502f9
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL_Texture
-  -> PtrConst.PtrConst SDL_Vertex
-  -> BG.CInt
-  -> PtrConst.PtrConst BG.CInt
-  -> BG.CInt
-  -> IO BG.CBool
-hs_bindgen_604c256c92b502f9 =
-  BG.fromFFIType hs_bindgen_604c256c92b502f9_base
-
--- | Render a list of triangles, optionally using a texture and indices into the vertex array Color and alpha modulation is done per vertex (SDL_SetTextureColorMod and SDL_SetTextureAlphaMod are ignored).
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderGeometryRaw', 'sDL_SetRenderTextureAddressMode'
---
---     [C declaration]: @SDL_RenderGeometry@, defined at @SDL3\/SDL_render.h 2464:34@
-sDL_RenderGeometry
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: (optional) The SDL texture to use.
-  -> PtrConst.PtrConst SDL_Vertex
-  -- ^
-  --
-  --           [@vertices@]: vertices.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@num_vertices@]: number of vertices.
-  -> PtrConst.PtrConst BG.CInt
-  -- ^
-  --
-  --           [@indices@]: (optional) An array of integer indices into the \'vertices\' array, if NULL all vertices will be rendered in sequential order.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@num_indices@]: number of indices.
-  -> IO BG.CBool
-sDL_RenderGeometry = hs_bindgen_604c256c92b502f9
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderGeometryRaw@
-foreign import ccall unsafe "hs_bindgen_ae17af9f44d6d343"
-  hs_bindgen_ae17af9f44d6d343_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderGeometryRaw@
-hs_bindgen_ae17af9f44d6d343
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL_Texture
-  -> PtrConst.PtrConst BG.CFloat
-  -> BG.CInt
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Pixels.SDL_FColor
-  -> BG.CInt
-  -> PtrConst.PtrConst BG.CFloat
-  -> BG.CInt
-  -> BG.CInt
-  -> PtrConst.PtrConst BG.Void
-  -> BG.CInt
-  -> BG.CInt
-  -> IO BG.CBool
-hs_bindgen_ae17af9f44d6d343 =
-  BG.fromFFIType hs_bindgen_ae17af9f44d6d343_base
-
--- | Render a list of triangles, optionally using a texture and indices into the vertex arrays Color and alpha modulation is done per vertex (SDL_SetTextureColorMod and SDL_SetTextureAlphaMod are ignored).
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_RenderGeometry', 'sDL_SetRenderTextureAddressMode'
---
---     [C declaration]: @SDL_RenderGeometryRaw@, defined at @SDL3\/SDL_render.h 2497:34@
-sDL_RenderGeometryRaw
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: (optional) The SDL texture to use.
-  -> PtrConst.PtrConst BG.CFloat
-  -- ^
-  --
-  --           [@xy@]: vertex positions.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@xy_stride@]: byte size to move from one element to the next element.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Pixels.SDL_FColor
-  -- ^
-  --
-  --           [@color@]: vertex colors (as SDL_FColor).
-  -> BG.CInt
-  -- ^
-  --
-  --           [@color_stride@]: byte size to move from one element to the next element.
-  -> PtrConst.PtrConst BG.CFloat
-  -- ^
-  --
-  --           [@uv@]: vertex normalized texture coordinates.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@uv_stride@]: byte size to move from one element to the next element.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@num_vertices@]: number of vertices.
-  -> PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@indices@]: (optional) An array of indices into the \'vertices\' arrays, if NULL all vertices will be rendered in sequential order.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@num_indices@]: number of indices.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@size_indices@]: index size: 1 (byte), 2 (short), 4 (int).
-  -> IO BG.CBool
-sDL_RenderGeometryRaw = hs_bindgen_ae17af9f44d6d343
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderTextureAddressMode@
-foreign import ccall unsafe "hs_bindgen_f5de60362bf89a18"
-  hs_bindgen_f5de60362bf89a18_base
-    :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderTextureAddressMode@
-hs_bindgen_f5de60362bf89a18
-  :: BG.Ptr SDL_Renderer
-  -> SDL_TextureAddressMode
-  -> SDL_TextureAddressMode
-  -> IO BG.CBool
-hs_bindgen_f5de60362bf89a18 =
-  BG.fromFFIType hs_bindgen_f5de60362bf89a18_base
-
--- | Set the texture addressing mode used in @SDL_RenderGeometry()@.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.4.0
---
---     [See also]: 'sDL_RenderGeometry', 'sDL_RenderGeometryRaw', 'sDL_GetRenderTextureAddressMode'
---
---     [C declaration]: @SDL_SetRenderTextureAddressMode@, defined at @SDL3\/SDL_render.h 2524:34@
-sDL_SetRenderTextureAddressMode
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> SDL_TextureAddressMode
-  -- ^
-  --
-  --           [@u_mode@]: the 'SDL_TextureAddressMode' to use for horizontal texture coordinates in @SDL_RenderGeometry()@.
-  -> SDL_TextureAddressMode
-  -- ^
-  --
-  --           [@v_mode@]: the 'SDL_TextureAddressMode' to use for vertical texture coordinates in @SDL_RenderGeometry()@.
-  -> IO BG.CBool
-sDL_SetRenderTextureAddressMode =
-  hs_bindgen_f5de60362bf89a18
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderTextureAddressMode@
-foreign import ccall unsafe "hs_bindgen_727bb39b49c44f15"
-  hs_bindgen_727bb39b49c44f15_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderTextureAddressMode@
-hs_bindgen_727bb39b49c44f15
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL_TextureAddressMode
-  -> BG.Ptr SDL_TextureAddressMode
-  -> IO BG.CBool
-hs_bindgen_727bb39b49c44f15 =
-  BG.fromFFIType hs_bindgen_727bb39b49c44f15_base
-
--- | Get the texture addressing mode used in @SDL_RenderGeometry()@.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.4.0
---
---     [See also]: 'sDL_SetRenderTextureAddressMode'
---
---     [C declaration]: @SDL_GetRenderTextureAddressMode@, defined at @SDL3\/SDL_render.h 2545:34@
-sDL_GetRenderTextureAddressMode
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> BG.Ptr SDL_TextureAddressMode
-  -- ^
-  --
-  --           [@u_mode@]: a pointer filled in with the 'SDL_TextureAddressMode' to use for horizontal texture coordinates in @SDL_RenderGeometry()@, may be NULL.
-  -> BG.Ptr SDL_TextureAddressMode
-  -- ^
-  --
-  --           [@v_mode@]: a pointer filled in with the 'SDL_TextureAddressMode' to use for vertical texture coordinates in @SDL_RenderGeometry()@, may be NULL.
-  -> IO BG.CBool
-sDL_GetRenderTextureAddressMode =
-  hs_bindgen_727bb39b49c44f15
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderReadPixels@
-foreign import ccall unsafe "hs_bindgen_7173be00862c48e8"
-  hs_bindgen_7173be00862c48e8_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderReadPixels@
-hs_bindgen_7173be00862c48e8
-  :: BG.Ptr SDL_Renderer
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -> IO (BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface)
-hs_bindgen_7173be00862c48e8 =
-  BG.fromFFIType hs_bindgen_7173be00862c48e8_base
-
--- | Read pixels from the current rendering target.
---
---     The returned surface contains pixels inside the desired area clipped to the current viewport, and should be freed with SDL_DestroySurface().
---
---     Note that this returns the actual pixels on the screen, so if you are using logical presentation you should use @SDL_GetRenderLogicalPresentationRect()@ to get the area containing your content.
---
---     __WARNING__: This is a very slow operation, and should not be used frequently. If you\'re using this on the main rendering target, it should be called after rendering and before @SDL_RenderPresent()@.
---
---     [Returns]: a new SDL_Surface on success or NULL on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_RenderReadPixels@, defined at @SDL3\/SDL_render.h 2572:43@
-sDL_RenderReadPixels
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
-  -- ^
-  --
-  --           [@rect@]: an SDL_Rect structure representing the area to read, which will be clipped to the current viewport, or NULL for the entire viewport.
-  -> IO (BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface)
-sDL_RenderReadPixels = hs_bindgen_7173be00862c48e8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderPresent@
-foreign import ccall unsafe "hs_bindgen_e66060f4d8ba3f83"
-  hs_bindgen_e66060f4d8ba3f83_base
-    :: BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderPresent@
-hs_bindgen_e66060f4d8ba3f83
-  :: BG.Ptr SDL_Renderer
-  -> IO BG.CBool
-hs_bindgen_e66060f4d8ba3f83 =
-  BG.fromFFIType hs_bindgen_e66060f4d8ba3f83_base
-
--- | Update the screen with any rendering performed since the previous call.
---
---     SDL\'s rendering functions operate on a backbuffer; that is, calling a rendering function such as @SDL_RenderLine()@ does not directly put a line on the screen, but rather updates the backbuffer. As such, you compose your entire scene and /present/ the composed backbuffer to the screen as a complete picture.
---
---     Therefore, when using SDL\'s rendering API, one does all drawing intended for the frame, and then calls this function once per frame to present the final drawing to the user.
---
---     The backbuffer should be considered invalidated after each present; do not assume that previous contents will exist between frames. You are strongly encouraged to call @SDL_RenderClear()@ to initialize the backbuffer before starting each new frame\'s drawing, even if you plan to overwrite every pixel.
---
---     Please note, that in case of rendering to a texture - there is __no need__ to call @'sDL_RenderPresent'@ after drawing needed objects to a texture, and should not be done; you are only required to change back the rendering target to default via @SDL_SetRenderTarget(renderer, NULL)@ afterwards, as textures by themselves do not have a concept of backbuffers. Calling SDL_RenderPresent while rendering to a texture will fail.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_CreateRenderer', 'sDL_RenderClear', 'sDL_RenderFillRect', 'sDL_RenderFillRects', 'sDL_RenderLine', 'sDL_RenderLines', 'sDL_RenderPoint', 'sDL_RenderPoints', 'sDL_RenderRect', 'sDL_RenderRects', 'sDL_SetRenderDrawBlendMode', 'sDL_SetRenderDrawColor'
---
---     [C declaration]: @SDL_RenderPresent@, defined at @SDL3\/SDL_render.h 2621:34@
-sDL_RenderPresent
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> IO BG.CBool
-sDL_RenderPresent = hs_bindgen_e66060f4d8ba3f83
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_DestroyTexture@
-foreign import ccall unsafe "hs_bindgen_daf903d539dab511"
-  hs_bindgen_daf903d539dab511_base
-    :: BG.Ptr BG.Void
-    -> IO ()
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_DestroyTexture@
-hs_bindgen_daf903d539dab511
-  :: BG.Ptr SDL_Texture
-  -> IO ()
-hs_bindgen_daf903d539dab511 =
-  BG.fromFFIType hs_bindgen_daf903d539dab511_base
-
--- | Destroy the specified texture.
---
---     Passing NULL or an otherwise invalid texture will set the SDL error message to \"Invalid texture\".
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_CreateTexture', 'sDL_CreateTextureFromSurface'
---
---     [C declaration]: @SDL_DestroyTexture@, defined at @SDL3\/SDL_render.h 2638:34@
-sDL_DestroyTexture
-  :: BG.Ptr SDL_Texture
-  -- ^
-  --
-  --           [@texture@]: the texture to destroy.
-  -> IO ()
-sDL_DestroyTexture = hs_bindgen_daf903d539dab511
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_DestroyRenderer@
-foreign import ccall unsafe "hs_bindgen_1473f45c80ad6575"
-  hs_bindgen_1473f45c80ad6575_base
-    :: BG.Ptr BG.Void
-    -> IO ()
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_DestroyRenderer@
-hs_bindgen_1473f45c80ad6575
-  :: BG.Ptr SDL_Renderer
-  -> IO ()
-hs_bindgen_1473f45c80ad6575 =
-  BG.fromFFIType hs_bindgen_1473f45c80ad6575_base
-
--- | Destroy the rendering context for a window and free all associated textures.
---
---     This should be called before destroying the associated window.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_CreateRenderer'
---
---     [C declaration]: @SDL_DestroyRenderer@, defined at @SDL3\/SDL_render.h 2654:34@
-sDL_DestroyRenderer
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> IO ()
-sDL_DestroyRenderer = hs_bindgen_1473f45c80ad6575
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_FlushRenderer@
-foreign import ccall unsafe "hs_bindgen_78e89be71892a1e6"
-  hs_bindgen_78e89be71892a1e6_base
-    :: BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_FlushRenderer@
-hs_bindgen_78e89be71892a1e6
-  :: BG.Ptr SDL_Renderer
-  -> IO BG.CBool
-hs_bindgen_78e89be71892a1e6 =
-  BG.fromFFIType hs_bindgen_78e89be71892a1e6_base
-
--- | Force the rendering context to flush any pending commands and state.
---
---     You do not need to (and in fact, shouldn\'t) call this function unless you are planning to call into OpenGL\/Direct3D\/Metal\/whatever directly, in addition to using an 'SDL_Renderer'.
---
---     This is for a very-specific case: if you are using SDL\'s render API, and you plan to make OpenGL\/D3D\/whatever calls in addition to SDL render API calls. If this applies, you should call this function between calls to SDL\'s render API and the low-level API you\'re using in cooperation.
---
---     In all other cases, you can ignore this function.
---
---     This call makes SDL flush any pending rendering work it was queueing up to do later in a single batch, and marks any internal cached state as invalid, so it\'ll prepare all its state again later, from scratch.
---
---     This means you do not need to save state in your rendering code to protect the SDL renderer. However, there lots of arbitrary pieces of Direct3D and OpenGL state that can confuse things; you should use your best judgment and be prepared to make changes if specific state needs to be protected.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_FlushRenderer@, defined at @SDL3\/SDL_render.h 2687:34@
-sDL_FlushRenderer
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> IO BG.CBool
-sDL_FlushRenderer = hs_bindgen_78e89be71892a1e6
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderMetalLayer@
-foreign import ccall unsafe "hs_bindgen_47416f026ca1192f"
-  hs_bindgen_47416f026ca1192f_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderMetalLayer@
-hs_bindgen_47416f026ca1192f
-  :: BG.Ptr SDL_Renderer
-  -> IO (BG.Ptr BG.Void)
-hs_bindgen_47416f026ca1192f =
-  BG.fromFFIType hs_bindgen_47416f026ca1192f_base
-
--- | Get the CAMetalLayer associated with the given Metal renderer.
---
---     This function returns @void *@, so SDL doesn\'t have to include Metal\'s headers, but it can be safely cast to a @CAMetalLayer *@.
---
---     [Returns]: a @CAMetalLayer *@ on success, or NULL if the renderer isn\'t a Metal renderer.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetRenderMetalCommandEncoder'
---
---     [C declaration]: @SDL_GetRenderMetalLayer@, defined at @SDL3\/SDL_render.h 2705:36@
-sDL_GetRenderMetalLayer
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer to query.
-  -> IO (BG.Ptr BG.Void)
-sDL_GetRenderMetalLayer = hs_bindgen_47416f026ca1192f
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderMetalCommandEncoder@
-foreign import ccall unsafe "hs_bindgen_c2e3411ac19d746f"
-  hs_bindgen_c2e3411ac19d746f_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderMetalCommandEncoder@
-hs_bindgen_c2e3411ac19d746f
-  :: BG.Ptr SDL_Renderer
-  -> IO (BG.Ptr BG.Void)
-hs_bindgen_c2e3411ac19d746f =
-  BG.fromFFIType hs_bindgen_c2e3411ac19d746f_base
-
--- | Get the Metal command encoder for the current frame.
---
---     This function returns @void *@, so SDL doesn\'t have to include Metal\'s headers, but it can be safely cast to an @id\<MTLRenderCommandEncoder>@.
---
---     This will return NULL if Metal refuses to give SDL a drawable to render to, which might happen if the window is hidden\/minimized\/offscreen. This doesn\'t apply to command encoders for render targets, just the window\'s backbuffer. Check your return values!
---
---     [Returns]: an @id\<MTLRenderCommandEncoder>@ on success, or NULL if the renderer isn\'t a Metal renderer or there was an error.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetRenderMetalLayer'
---
---     [C declaration]: @SDL_GetRenderMetalCommandEncoder@, defined at @SDL3\/SDL_render.h 2728:36@
-sDL_GetRenderMetalCommandEncoder
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer to query.
-  -> IO (BG.Ptr BG.Void)
-sDL_GetRenderMetalCommandEncoder =
-  hs_bindgen_c2e3411ac19d746f
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_AddVulkanRenderSemaphores@
-foreign import ccall unsafe "hs_bindgen_98b03ff5afd62e07"
-  hs_bindgen_98b03ff5afd62e07_base
-    :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Int64
-    -> BG.Int64
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_AddVulkanRenderSemaphores@
-hs_bindgen_98b03ff5afd62e07
-  :: BG.Ptr SDL_Renderer
-  -> SDL3.Sys.Bindgen.Stdinc.Uint32
-  -> SDL3.Sys.Bindgen.Stdinc.Sint64
-  -> SDL3.Sys.Bindgen.Stdinc.Sint64
-  -> IO BG.CBool
-hs_bindgen_98b03ff5afd62e07 =
-  BG.fromFFIType hs_bindgen_98b03ff5afd62e07_base
-
--- | Add a set of synchronization semaphores for the current frame.
---
---     The Vulkan renderer will wait for @wait_semaphore@ before submitting rendering commands and signal @signal_semaphore@ after rendering commands are complete for this frame.
---
---     This should be called each frame that you want semaphore synchronization. The Vulkan renderer may have multiple frames in flight on the GPU, so you should have multiple semaphores that are used for synchronization. Querying SDL_PROP_RENDERER_VULKAN_SWAPCHAIN_IMAGE_COUNT_NUMBER will give you the maximum number of semaphores you\'ll need.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: It is __NOT__ safe to call this function from two threads at once.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_AddVulkanRenderSemaphores@, defined at @SDL3\/SDL_render.h 2759:34@
-sDL_AddVulkanRenderSemaphores
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the rendering context.
-  -> SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^
-  --
-  --           [@wait_stage_mask@]: the VkPipelineStageFlags for the wait.
-  -> SDL3.Sys.Bindgen.Stdinc.Sint64
-  -- ^
-  --
-  --           [@wait_semaphore@]: a VkSempahore to wait on before rendering the current frame, or 0 if not needed.
-  -> SDL3.Sys.Bindgen.Stdinc.Sint64
-  -- ^
-  --
-  --           [@signal_semaphore@]: a VkSempahore that SDL will signal when rendering for the current frame is complete, or 0 if not needed.
-  -> IO BG.CBool
-sDL_AddVulkanRenderSemaphores =
-  hs_bindgen_98b03ff5afd62e07
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderVSync@
-foreign import ccall unsafe "hs_bindgen_529493ee355e9466"
-  hs_bindgen_529493ee355e9466_base
-    :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderVSync@
-hs_bindgen_529493ee355e9466
-  :: BG.Ptr SDL_Renderer
-  -> BG.CInt
-  -> IO BG.CBool
-hs_bindgen_529493ee355e9466 =
-  BG.fromFFIType hs_bindgen_529493ee355e9466_base
-
--- | Toggle VSync of the given renderer.
---
---     When a renderer is created, vsync defaults to SDL_RENDERER_VSYNC_DISABLED.
---
---     The @vsync@ parameter can be 1 to synchronize present with every vertical refresh, 2 to synchronize present with every second vertical refresh, etc., SDL_RENDERER_VSYNC_ADAPTIVE for late swap tearing (adaptive vsync), or SDL_RENDERER_VSYNC_DISABLED to disable. Not every value is supported by every driver, so you should check the return value to see whether the requested setting is supported.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetRenderVSync'
---
---     [C declaration]: @SDL_SetRenderVSync@, defined at @SDL3\/SDL_render.h 2784:34@
-sDL_SetRenderVSync
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer to toggle.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@vsync@]: the vertical refresh sync interval.
-  -> IO BG.CBool
-sDL_SetRenderVSync = hs_bindgen_529493ee355e9466
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderVSync@
-foreign import ccall unsafe "hs_bindgen_ff41dba2a623c0ab"
-  hs_bindgen_ff41dba2a623c0ab_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderVSync@
-hs_bindgen_ff41dba2a623c0ab
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr BG.CInt
-  -> IO BG.CBool
-hs_bindgen_ff41dba2a623c0ab =
-  BG.fromFFIType hs_bindgen_ff41dba2a623c0ab_base
-
--- | Get VSync of the given renderer.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_SetRenderVSync'
---
---     [C declaration]: @SDL_GetRenderVSync@, defined at @SDL3\/SDL_render.h 2804:34@
-sDL_GetRenderVSync
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer to toggle.
-  -> BG.Ptr BG.CInt
-  -- ^
-  --
-  --           [@vsync@]: an int filled with the current vertical refresh sync interval. See @SDL_SetRenderVSync()@ for the meaning of the value.
-  -> IO BG.CBool
-sDL_GetRenderVSync = hs_bindgen_ff41dba2a623c0ab
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderDebugText@
-foreign import ccall unsafe "hs_bindgen_a60ea3ca32fd26a5"
-  hs_bindgen_a60ea3ca32fd26a5_base
-    :: BG.Ptr BG.Void
-    -> Float
-    -> Float
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderDebugText@
-hs_bindgen_a60ea3ca32fd26a5
-  :: BG.Ptr SDL_Renderer
-  -> BG.CFloat
-  -> BG.CFloat
-  -> PtrConst.PtrConst BG.CChar
-  -> IO BG.CBool
-hs_bindgen_a60ea3ca32fd26a5 =
-  BG.fromFFIType hs_bindgen_a60ea3ca32fd26a5_base
-
--- | Draw debug text to an 'SDL_Renderer'.
---
---     This function will render a string of text to an 'SDL_Renderer'. Note that this is a convenience function for debugging, with severe limitations, and not intended to be used for production apps and games.
---
---     Among these limitations:
---
---     * It accepts UTF-8 strings, but will only renders ASCII characters.
---
---     * It has a single, tiny size (8x8 pixels). You can use logical presentation or @SDL_SetRenderScale()@ to adjust it.
---
---     * It uses a simple, hardcoded bitmap font. It does not allow different font selections and it does not support truetype, for proper scaling.
---
---     * It does no word-wrapping and does not treat newline characters as a line break. If the text goes out of the window, it\'s gone.
---
---     For serious text rendering, there are several good options, such as SDL_ttf, stb_truetype, or other external libraries.
---
---     On first use, this will create an internal texture for rendering glyphs. This texture will live until the renderer is destroyed.
---
---     The text is drawn in the color specified by @SDL_SetRenderDrawColor()@.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.2.0
---
---     [See also]: @SDL_RenderDebugTextFormat@, 'sDL_DEBUG_TEXT_FONT_CHARACTER_SIZE'
---
---     [C declaration]: @SDL_RenderDebugText@, defined at @SDL3\/SDL_render.h 2856:34@
-sDL_RenderDebugText
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer which should draw a line of text.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@x@]: the x coordinate where the top-left corner of the text will draw.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@y@]: the y coordinate where the top-left corner of the text will draw.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: the string to render.
-  -> IO BG.CBool
-sDL_RenderDebugText = hs_bindgen_a60ea3ca32fd26a5
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetDefaultTextureScaleMode@
-foreign import ccall unsafe "hs_bindgen_e0aee38e1b73b64f"
-  hs_bindgen_e0aee38e1b73b64f_base
-    :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetDefaultTextureScaleMode@
-hs_bindgen_e0aee38e1b73b64f
-  :: BG.Ptr SDL_Renderer
-  -> SDL3.Sys.Bindgen.Surface.SDL_ScaleMode
-  -> IO BG.CBool
-hs_bindgen_e0aee38e1b73b64f =
-  BG.fromFFIType hs_bindgen_e0aee38e1b73b64f_base
-
--- | Set default scale mode for new textures for given renderer.
---
---     When a renderer is created, scale_mode defaults to SDL_SCALEMODE_LINEAR.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.4.0
---
---     [See also]: 'sDL_GetDefaultTextureScaleMode'
---
---     [C declaration]: @SDL_SetDefaultTextureScaleMode@, defined at @SDL3\/SDL_render.h 2902:34@
-sDL_SetDefaultTextureScaleMode
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer to update.
-  -> SDL3.Sys.Bindgen.Surface.SDL_ScaleMode
-  -- ^
-  --
-  --           [@scale_mode@]: the scale mode to change to for new textures.
-  -> IO BG.CBool
-sDL_SetDefaultTextureScaleMode =
-  hs_bindgen_e0aee38e1b73b64f
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetDefaultTextureScaleMode@
-foreign import ccall unsafe "hs_bindgen_51c8f91a397184cb"
-  hs_bindgen_51c8f91a397184cb_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetDefaultTextureScaleMode@
-hs_bindgen_51c8f91a397184cb
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_ScaleMode
-  -> IO BG.CBool
-hs_bindgen_51c8f91a397184cb =
-  BG.fromFFIType hs_bindgen_51c8f91a397184cb_base
-
--- | Get default texture scale mode of the given renderer.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should only be called on the main thread.
---
---     @since 3.4.0
---
---     [See also]: 'sDL_SetDefaultTextureScaleMode'
---
---     [C declaration]: @SDL_GetDefaultTextureScaleMode@, defined at @SDL3\/SDL_render.h 2920:34@
-sDL_GetDefaultTextureScaleMode
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer to get data from.
-  -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_ScaleMode
-  -- ^
-  --
-  --           [@scale_mode@]: a SDL_ScaleMode filled with current default scale mode. See @SDL_SetDefaultTextureScaleMode()@ for the meaning of the value.
-  -> IO BG.CBool
-sDL_GetDefaultTextureScaleMode =
-  hs_bindgen_51c8f91a397184cb
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateGPURenderState@
-foreign import ccall unsafe "hs_bindgen_2d970ffb5a76b1e4"
-  hs_bindgen_2d970ffb5a76b1e4_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateGPURenderState@
-hs_bindgen_2d970ffb5a76b1e4
-  :: BG.Ptr SDL_Renderer
-  -> PtrConst.PtrConst SDL_GPURenderStateCreateInfo
-  -> IO (BG.Ptr SDL_GPURenderState)
-hs_bindgen_2d970ffb5a76b1e4 =
-  BG.fromFFIType hs_bindgen_2d970ffb5a76b1e4_base
-
--- | Create custom GPU render state.
---
---     [Returns]: a custom GPU render state or NULL on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should be called on the thread that created the renderer.
---
---     @since 3.4.0
---
---     [See also]: 'sDL_SetGPURenderStateFragmentUniforms', 'sDL_SetGPURenderState', 'sDL_DestroyGPURenderState'
---
---     [C declaration]: @SDL_CreateGPURenderState@, defined at @SDL3\/SDL_render.h 2974:50@
-sDL_CreateGPURenderState
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer to use.
-  -> PtrConst.PtrConst SDL_GPURenderStateCreateInfo
-  -- ^
-  --
-  --           [@createinfo@]: a struct describing the GPU render state to create.
-  -> IO (BG.Ptr SDL_GPURenderState)
-sDL_CreateGPURenderState =
-  hs_bindgen_2d970ffb5a76b1e4
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetGPURenderStateFragmentUniforms@
-foreign import ccall unsafe "hs_bindgen_312b275c9f55463c"
-  hs_bindgen_312b275c9f55463c_base
-    :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetGPURenderStateFragmentUniforms@
-hs_bindgen_312b275c9f55463c
-  :: BG.Ptr SDL_GPURenderState
-  -> SDL3.Sys.Bindgen.Stdinc.Uint32
-  -> PtrConst.PtrConst BG.Void
-  -> SDL3.Sys.Bindgen.Stdinc.Uint32
-  -> IO BG.CBool
-hs_bindgen_312b275c9f55463c =
-  BG.fromFFIType hs_bindgen_312b275c9f55463c_base
-
--- | Set fragment shader uniform variables in a custom GPU render state.
---
---     The data is copied and will be pushed using SDL_PushGPUFragmentUniformData() during draw call execution.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should be called on the thread that created the renderer.
---
---     @since 3.4.0
---
---     [C declaration]: @SDL_SetGPURenderStateFragmentUniforms@, defined at @SDL3\/SDL_render.h 2994:34@
-sDL_SetGPURenderStateFragmentUniforms
-  :: BG.Ptr SDL_GPURenderState
-  -- ^
-  --
-  --           [@state@]: the state to modify.
-  -> SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^
-  --
-  --           [@slot_index@]: the fragment uniform slot to push data to.
-  -> PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@data@]: client data to write.
-  -> SDL3.Sys.Bindgen.Stdinc.Uint32
-  -- ^
-  --
-  --           [@length@]: the length of the data to write.
-  -> IO BG.CBool
-sDL_SetGPURenderStateFragmentUniforms =
-  hs_bindgen_312b275c9f55463c
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetGPURenderState@
-foreign import ccall unsafe "hs_bindgen_0d6949c161acc59d"
-  hs_bindgen_0d6949c161acc59d_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetGPURenderState@
-hs_bindgen_0d6949c161acc59d
-  :: BG.Ptr SDL_Renderer
-  -> BG.Ptr SDL_GPURenderState
-  -> IO BG.CBool
-hs_bindgen_0d6949c161acc59d =
-  BG.fromFFIType hs_bindgen_0d6949c161acc59d_base
-
--- | Set custom GPU render state.
---
---     This function sets custom GPU render state for subsequent draw calls. This allows using custom shaders with the GPU renderer.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: This function should be called on the thread that created the renderer.
---
---     @since 3.4.0
---
---     [C declaration]: @SDL_SetGPURenderState@, defined at @SDL3\/SDL_render.h 3012:34@
-sDL_SetGPURenderState
-  :: BG.Ptr SDL_Renderer
-  -- ^
-  --
-  --           [@renderer@]: the renderer to use.
-  -> BG.Ptr SDL_GPURenderState
-  -- ^
-  --
-  --           [@state@]: the state to to use, or NULL to clear custom GPU render state.
-  -> IO BG.CBool
-sDL_SetGPURenderState = hs_bindgen_0d6949c161acc59d
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_DestroyGPURenderState@
-foreign import ccall unsafe "hs_bindgen_eccc60d637069ae8"
-  hs_bindgen_eccc60d637069ae8_base
-    :: BG.Ptr BG.Void
-    -> IO ()
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_DestroyGPURenderState@
-hs_bindgen_eccc60d637069ae8
-  :: BG.Ptr SDL_GPURenderState
-  -> IO ()
-hs_bindgen_eccc60d637069ae8 =
-  BG.fromFFIType hs_bindgen_eccc60d637069ae8_base
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.Render.Unsafe (
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetNumRenderDrivers,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderDriver,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_CreateWindowAndRenderer,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_CreateRenderer,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_CreateRendererWithProperties,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_CreateGPURenderer,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetGPURendererDevice,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_CreateSoftwareRenderer,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderer,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderWindow,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRendererName,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRendererProperties,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderOutputSize,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetCurrentRenderOutputSize,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_CreateTexture,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_CreateTextureFromSurface,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_CreateTextureWithProperties,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetTextureProperties,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRendererFromTexture,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetTextureSize,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetTexturePalette,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetTexturePalette,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetTextureColorMod,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetTextureColorModFloat,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetTextureColorMod,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetTextureColorModFloat,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetTextureAlphaMod,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetTextureAlphaModFloat,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetTextureAlphaMod,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetTextureAlphaModFloat,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetTextureBlendMode,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetTextureBlendMode,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetTextureScaleMode,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetTextureScaleMode,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_UpdateTexture,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_UpdateYUVTexture,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_UpdateNVTexture,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_LockTexture,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_LockTextureToSurface,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_UnlockTexture,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetRenderTarget,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderTarget,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetRenderLogicalPresentation,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderLogicalPresentation,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderLogicalPresentationRect,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderCoordinatesFromWindow,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderCoordinatesToWindow,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_ConvertEventToRenderCoordinates,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetRenderViewport,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderViewport,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderViewportSet,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderSafeArea,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetRenderClipRect,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderClipRect,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderClipEnabled,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetRenderScale,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderScale,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetRenderDrawColor,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetRenderDrawColorFloat,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderDrawColor,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderDrawColorFloat,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetRenderColorScale,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderColorScale,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetRenderDrawBlendMode,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderDrawBlendMode,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderClear,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderPoint,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderPoints,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderLine,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderLines,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderRect,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderRects,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderFillRect,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderFillRects,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderTexture,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderTextureRotated,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderTextureAffine,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderTextureTiled,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderTexture9Grid,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderTexture9GridTiled,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderGeometry,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderGeometryRaw,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetRenderTextureAddressMode,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderTextureAddressMode,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderReadPixels,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderPresent,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_DestroyTexture,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_DestroyRenderer,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_FlushRenderer,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderMetalLayer,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderMetalCommandEncoder,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_AddVulkanRenderSemaphores,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetRenderVSync,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetRenderVSync,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_RenderDebugText,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetDefaultTextureScaleMode,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_GetDefaultTextureScaleMode,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_CreateGPURenderState,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetGPURenderStateFragmentUniforms,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_SetGPURenderState,
+  SDL3.Sys.Bindgen.Render.Unsafe.sDL_DestroyGPURenderState,
+)
+where
+
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
+import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+import SDL3.Sys.Bindgen.Blendmode qualified
+import SDL3.Sys.Bindgen.Events qualified
+import SDL3.Sys.Bindgen.Gpu qualified
+import SDL3.Sys.Bindgen.Pixels qualified
+import SDL3.Sys.Bindgen.Properties qualified
+import SDL3.Sys.Bindgen.Rect qualified
+import SDL3.Sys.Bindgen.Render
+import SDL3.Sys.Bindgen.Stdinc qualified
+import SDL3.Sys.Bindgen.Surface qualified
+import SDL3.Sys.Bindgen.Video qualified
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_render.h>"
+         , "signed int hs_bindgen_b8d027f3d5602f48 (void)"
+         , "{"
+         , "  return (SDL_GetNumRenderDrivers)();"
+         , "}"
+         , "char const *hs_bindgen_dce79b5e75543204 ("
+         , "  signed int arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderDriver)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_fd4bb4119f707b2a ("
+         , "  char const *arg1,"
+         , "  signed int arg2,"
+         , "  signed int arg3,"
+         , "  SDL_WindowFlags arg4,"
+         , "  SDL_Window **arg5,"
+         , "  SDL_Renderer **arg6"
+         , ")"
+         , "{"
+         , "  return (SDL_CreateWindowAndRenderer)(arg1, arg2, arg3, arg4, arg5, arg6);"
+         , "}"
+         , "SDL_Renderer *hs_bindgen_37b63ac6e8618d68 ("
+         , "  SDL_Window *arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_CreateRenderer)(arg1, arg2);"
+         , "}"
+         , "SDL_Renderer *hs_bindgen_fe8ca198b1b0c17d ("
+         , "  SDL_PropertiesID arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_CreateRendererWithProperties)(arg1);"
+         , "}"
+         , "#include <SDL3/SDL_version.h>"
+         , "#include <SDL3/SDL_error.h>"
+         , "#include <SDL3/SDL_version.h>"
+         , "#if !SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "typedef struct SDL_GPUDevice SDL_GPUDevice;"
+         , "typedef struct SDL_GPURenderState SDL_GPURenderState;"
+         , "typedef struct SDL_GPURenderStateCreateInfo SDL_GPURenderStateCreateInfo;"
+         , "typedef int SDL_TextureAddressMode;"
+         , "#endif"
+         , "SDL_Renderer *hs_bindgen_40c46710682c09f1 ("
+         , "  SDL_GPUDevice *arg1,"
+         , "  SDL_Window *arg2"
+         , ")"
+         , "{"
+         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "  return (SDL_CreateGPURenderer)(arg1, arg2);"
+         , "#else"
+         , "  (void)arg1; (void)arg2; SDL_SetError(\"SDL_CreateGPURenderer requires SDL >= 3.4.0\"); return 0;"
+         , "#endif"
+         , "}"
+         , "#include <SDL3/SDL_version.h>"
+         , "#include <SDL3/SDL_error.h>"
+         , "#include <SDL3/SDL_version.h>"
+         , "#if !SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "typedef struct SDL_GPUDevice SDL_GPUDevice;"
+         , "typedef struct SDL_GPURenderState SDL_GPURenderState;"
+         , "typedef struct SDL_GPURenderStateCreateInfo SDL_GPURenderStateCreateInfo;"
+         , "typedef int SDL_TextureAddressMode;"
+         , "#endif"
+         , "SDL_GPUDevice *hs_bindgen_76cee8398d82c692 ("
+         , "  SDL_Renderer *arg1"
+         , ")"
+         , "{"
+         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "  return (SDL_GetGPURendererDevice)(arg1);"
+         , "#else"
+         , "  (void)arg1; SDL_SetError(\"SDL_GetGPURendererDevice requires SDL >= 3.4.0\"); return 0;"
+         , "#endif"
+         , "}"
+         , "SDL_Renderer *hs_bindgen_3a402a665e290fa3 ("
+         , "  SDL_Surface *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_CreateSoftwareRenderer)(arg1);"
+         , "}"
+         , "SDL_Renderer *hs_bindgen_30584ed4cc19ca5c ("
+         , "  SDL_Window *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderer)(arg1);"
+         , "}"
+         , "SDL_Window *hs_bindgen_c043f286f3176cd8 ("
+         , "  SDL_Renderer *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderWindow)(arg1);"
+         , "}"
+         , "char const *hs_bindgen_b4d2799733c66a42 ("
+         , "  SDL_Renderer *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRendererName)(arg1);"
+         , "}"
+         , "SDL_PropertiesID hs_bindgen_519d759f13b5a204 ("
+         , "  SDL_Renderer *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRendererProperties)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_15b72b770c77a09c ("
+         , "  SDL_Renderer *arg1,"
+         , "  signed int *arg2,"
+         , "  signed int *arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderOutputSize)(arg1, arg2, arg3);"
+         , "}"
+         , "_Bool hs_bindgen_09a49b8dd8196ac2 ("
+         , "  SDL_Renderer *arg1,"
+         , "  signed int *arg2,"
+         , "  signed int *arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_GetCurrentRenderOutputSize)(arg1, arg2, arg3);"
+         , "}"
+         , "SDL_Texture *hs_bindgen_3d4ff9d99a3fa98a ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_PixelFormat arg2,"
+         , "  SDL_TextureAccess arg3,"
+         , "  signed int arg4,"
+         , "  signed int arg5"
+         , ")"
+         , "{"
+         , "  return (SDL_CreateTexture)(arg1, arg2, arg3, arg4, arg5);"
+         , "}"
+         , "SDL_Texture *hs_bindgen_46cceb118c5977b8 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_Surface *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_CreateTextureFromSurface)(arg1, arg2);"
+         , "}"
+         , "SDL_Texture *hs_bindgen_52cc37cb33c5a099 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_PropertiesID arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_CreateTextureWithProperties)(arg1, arg2);"
+         , "}"
+         , "SDL_PropertiesID hs_bindgen_7d1578a13c421f10 ("
+         , "  SDL_Texture *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_GetTextureProperties)(arg1);"
+         , "}"
+         , "SDL_Renderer *hs_bindgen_59ae54d4482ab0ef ("
+         , "  SDL_Texture *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRendererFromTexture)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_132d974026c63235 ("
+         , "  SDL_Texture *arg1,"
+         , "  float *arg2,"
+         , "  float *arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_GetTextureSize)(arg1, arg2, arg3);"
+         , "}"
+         , "#include <SDL3/SDL_version.h>"
+         , "#include <SDL3/SDL_error.h>"
+         , "_Bool hs_bindgen_b9b978978bcb3701 ("
+         , "  SDL_Texture *arg1,"
+         , "  SDL_Palette *arg2"
+         , ")"
+         , "{"
+         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "  return (SDL_SetTexturePalette)(arg1, arg2);"
+         , "#else"
+         , "  (void)arg1; (void)arg2; SDL_SetError(\"SDL_SetTexturePalette requires SDL >= 3.4.0\"); return 0;"
+         , "#endif"
+         , "}"
+         , "#include <SDL3/SDL_version.h>"
+         , "#include <SDL3/SDL_error.h>"
+         , "SDL_Palette *hs_bindgen_38dd0c6a7ed9af72 ("
+         , "  SDL_Texture *arg1"
+         , ")"
+         , "{"
+         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "  return (SDL_GetTexturePalette)(arg1);"
+         , "#else"
+         , "  (void)arg1; SDL_SetError(\"SDL_GetTexturePalette requires SDL >= 3.4.0\"); return 0;"
+         , "#endif"
+         , "}"
+         , "_Bool hs_bindgen_328bc9103549865a ("
+         , "  SDL_Texture *arg1,"
+         , "  Uint8 arg2,"
+         , "  Uint8 arg3,"
+         , "  Uint8 arg4"
+         , ")"
+         , "{"
+         , "  return (SDL_SetTextureColorMod)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "_Bool hs_bindgen_f0f25fbdb4151d72 ("
+         , "  SDL_Texture *arg1,"
+         , "  float arg2,"
+         , "  float arg3,"
+         , "  float arg4"
+         , ")"
+         , "{"
+         , "  return (SDL_SetTextureColorModFloat)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "_Bool hs_bindgen_23c41565e3ebaf20 ("
+         , "  SDL_Texture *arg1,"
+         , "  Uint8 *arg2,"
+         , "  Uint8 *arg3,"
+         , "  Uint8 *arg4"
+         , ")"
+         , "{"
+         , "  return (SDL_GetTextureColorMod)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "_Bool hs_bindgen_40f14359348d1377 ("
+         , "  SDL_Texture *arg1,"
+         , "  float *arg2,"
+         , "  float *arg3,"
+         , "  float *arg4"
+         , ")"
+         , "{"
+         , "  return (SDL_GetTextureColorModFloat)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "_Bool hs_bindgen_5ed240f184c27e2f ("
+         , "  SDL_Texture *arg1,"
+         , "  Uint8 arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_SetTextureAlphaMod)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_5ea85df5eef9526f ("
+         , "  SDL_Texture *arg1,"
+         , "  float arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_SetTextureAlphaModFloat)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_b3e62a9848e5067e ("
+         , "  SDL_Texture *arg1,"
+         , "  Uint8 *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_GetTextureAlphaMod)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_55b6c4f083626b7a ("
+         , "  SDL_Texture *arg1,"
+         , "  float *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_GetTextureAlphaModFloat)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_34ab5b9eb64f99e7 ("
+         , "  SDL_Texture *arg1,"
+         , "  SDL_BlendMode arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_SetTextureBlendMode)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_9e50ca0241b5eecf ("
+         , "  SDL_Texture *arg1,"
+         , "  SDL_BlendMode *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_GetTextureBlendMode)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_7ec0426bb117fde0 ("
+         , "  SDL_Texture *arg1,"
+         , "  SDL_ScaleMode arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_SetTextureScaleMode)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_d153e754b011263b ("
+         , "  SDL_Texture *arg1,"
+         , "  SDL_ScaleMode *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_GetTextureScaleMode)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_9d30d0aa8075c243 ("
+         , "  SDL_Texture *arg1,"
+         , "  SDL_Rect const *arg2,"
+         , "  void const *arg3,"
+         , "  signed int arg4"
+         , ")"
+         , "{"
+         , "  return (SDL_UpdateTexture)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "_Bool hs_bindgen_145fdda972278858 ("
+         , "  SDL_Texture *arg1,"
+         , "  SDL_Rect const *arg2,"
+         , "  Uint8 const *arg3,"
+         , "  signed int arg4,"
+         , "  Uint8 const *arg5,"
+         , "  signed int arg6,"
+         , "  Uint8 const *arg7,"
+         , "  signed int arg8"
+         , ")"
+         , "{"
+         , "  return (SDL_UpdateYUVTexture)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);"
+         , "}"
+         , "_Bool hs_bindgen_8e87aea72679c0be ("
+         , "  SDL_Texture *arg1,"
+         , "  SDL_Rect const *arg2,"
+         , "  Uint8 const *arg3,"
+         , "  signed int arg4,"
+         , "  Uint8 const *arg5,"
+         , "  signed int arg6"
+         , ")"
+         , "{"
+         , "  return (SDL_UpdateNVTexture)(arg1, arg2, arg3, arg4, arg5, arg6);"
+         , "}"
+         , "_Bool hs_bindgen_f81dacbd782960a7 ("
+         , "  SDL_Texture *arg1,"
+         , "  SDL_Rect const *arg2,"
+         , "  void **arg3,"
+         , "  signed int *arg4"
+         , ")"
+         , "{"
+         , "  return (SDL_LockTexture)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "_Bool hs_bindgen_0422047faea9296b ("
+         , "  SDL_Texture *arg1,"
+         , "  SDL_Rect const *arg2,"
+         , "  SDL_Surface **arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_LockTextureToSurface)(arg1, arg2, arg3);"
+         , "}"
+         , "void hs_bindgen_9d1b4d7003c2d0ec ("
+         , "  SDL_Texture *arg1"
+         , ")"
+         , "{"
+         , "  (SDL_UnlockTexture)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_42456f91219d7d63 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_Texture *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_SetRenderTarget)(arg1, arg2);"
+         , "}"
+         , "SDL_Texture *hs_bindgen_afd608e22c7b34c2 ("
+         , "  SDL_Renderer *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderTarget)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_99a6a5d6611eb0ad ("
+         , "  SDL_Renderer *arg1,"
+         , "  signed int arg2,"
+         , "  signed int arg3,"
+         , "  SDL_RendererLogicalPresentation arg4"
+         , ")"
+         , "{"
+         , "  return (SDL_SetRenderLogicalPresentation)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "_Bool hs_bindgen_cbe5162cf71da053 ("
+         , "  SDL_Renderer *arg1,"
+         , "  signed int *arg2,"
+         , "  signed int *arg3,"
+         , "  SDL_RendererLogicalPresentation *arg4"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderLogicalPresentation)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "_Bool hs_bindgen_60fac3e135efff7b ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_FRect *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderLogicalPresentationRect)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_88c23a7a2bb3f897 ("
+         , "  SDL_Renderer *arg1,"
+         , "  float arg2,"
+         , "  float arg3,"
+         , "  float *arg4,"
+         , "  float *arg5"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderCoordinatesFromWindow)(arg1, arg2, arg3, arg4, arg5);"
+         , "}"
+         , "_Bool hs_bindgen_30a19a6793a8a60a ("
+         , "  SDL_Renderer *arg1,"
+         , "  float arg2,"
+         , "  float arg3,"
+         , "  float *arg4,"
+         , "  float *arg5"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderCoordinatesToWindow)(arg1, arg2, arg3, arg4, arg5);"
+         , "}"
+         , "_Bool hs_bindgen_99e1877354dd4cdb ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_Event *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_ConvertEventToRenderCoordinates)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_da47a291603fd568 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_Rect const *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_SetRenderViewport)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_d36147bdfea02ae0 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_Rect *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderViewport)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_b75de8ea63ffb717 ("
+         , "  SDL_Renderer *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderViewportSet)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_143575ef07d5400f ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_Rect *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderSafeArea)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_db4ee8d700a535c8 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_Rect const *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_SetRenderClipRect)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_7bd39620f800ed67 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_Rect *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderClipRect)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_011ece38ae24698a ("
+         , "  SDL_Renderer *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderClipEnabled)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_a2ecfc86b7164248 ("
+         , "  SDL_Renderer *arg1,"
+         , "  float arg2,"
+         , "  float arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_SetRenderScale)(arg1, arg2, arg3);"
+         , "}"
+         , "_Bool hs_bindgen_9b27eba43ce3989c ("
+         , "  SDL_Renderer *arg1,"
+         , "  float *arg2,"
+         , "  float *arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderScale)(arg1, arg2, arg3);"
+         , "}"
+         , "_Bool hs_bindgen_122da056b531e869 ("
+         , "  SDL_Renderer *arg1,"
+         , "  Uint8 arg2,"
+         , "  Uint8 arg3,"
+         , "  Uint8 arg4,"
+         , "  Uint8 arg5"
+         , ")"
+         , "{"
+         , "  return (SDL_SetRenderDrawColor)(arg1, arg2, arg3, arg4, arg5);"
+         , "}"
+         , "_Bool hs_bindgen_069391a3e71d464d ("
+         , "  SDL_Renderer *arg1,"
+         , "  float arg2,"
+         , "  float arg3,"
+         , "  float arg4,"
+         , "  float arg5"
+         , ")"
+         , "{"
+         , "  return (SDL_SetRenderDrawColorFloat)(arg1, arg2, arg3, arg4, arg5);"
+         , "}"
+         , "_Bool hs_bindgen_7f0f910be4b2889e ("
+         , "  SDL_Renderer *arg1,"
+         , "  Uint8 *arg2,"
+         , "  Uint8 *arg3,"
+         , "  Uint8 *arg4,"
+         , "  Uint8 *arg5"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderDrawColor)(arg1, arg2, arg3, arg4, arg5);"
+         , "}"
+         , "_Bool hs_bindgen_7679f2d13375bcd2 ("
+         , "  SDL_Renderer *arg1,"
+         , "  float *arg2,"
+         , "  float *arg3,"
+         , "  float *arg4,"
+         , "  float *arg5"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderDrawColorFloat)(arg1, arg2, arg3, arg4, arg5);"
+         , "}"
+         , "_Bool hs_bindgen_2d134fc6b089039f ("
+         , "  SDL_Renderer *arg1,"
+         , "  float arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_SetRenderColorScale)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_f9539095c565384c ("
+         , "  SDL_Renderer *arg1,"
+         , "  float *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderColorScale)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_1885ca90cb47d78c ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_BlendMode arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_SetRenderDrawBlendMode)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_80ecda0d3d8d870b ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_BlendMode *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderDrawBlendMode)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_82119a8dbd03b3ca ("
+         , "  SDL_Renderer *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderClear)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_c73e2796ab7f90c1 ("
+         , "  SDL_Renderer *arg1,"
+         , "  float arg2,"
+         , "  float arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderPoint)(arg1, arg2, arg3);"
+         , "}"
+         , "_Bool hs_bindgen_cb752ddd9f3b53be ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_FPoint const *arg2,"
+         , "  signed int arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderPoints)(arg1, arg2, arg3);"
+         , "}"
+         , "_Bool hs_bindgen_8fc8b7b71da27e92 ("
+         , "  SDL_Renderer *arg1,"
+         , "  float arg2,"
+         , "  float arg3,"
+         , "  float arg4,"
+         , "  float arg5"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderLine)(arg1, arg2, arg3, arg4, arg5);"
+         , "}"
+         , "_Bool hs_bindgen_d68b0895520fbd3a ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_FPoint const *arg2,"
+         , "  signed int arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderLines)(arg1, arg2, arg3);"
+         , "}"
+         , "_Bool hs_bindgen_74702b94b10a8a97 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_FRect const *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderRect)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_2ee379e179df5f3c ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_FRect const *arg2,"
+         , "  signed int arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderRects)(arg1, arg2, arg3);"
+         , "}"
+         , "_Bool hs_bindgen_c5b24d3e3930aa12 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_FRect const *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderFillRect)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_afbd05ab4eae453e ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_FRect const *arg2,"
+         , "  signed int arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderFillRects)(arg1, arg2, arg3);"
+         , "}"
+         , "_Bool hs_bindgen_9502ac14df729213 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_Texture *arg2,"
+         , "  SDL_FRect const *arg3,"
+         , "  SDL_FRect const *arg4"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderTexture)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "_Bool hs_bindgen_bdd81c1a4d95fd9a ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_Texture *arg2,"
+         , "  SDL_FRect const *arg3,"
+         , "  SDL_FRect const *arg4,"
+         , "  double arg5,"
+         , "  SDL_FPoint const *arg6,"
+         , "  SDL_FlipMode arg7"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderTextureRotated)(arg1, arg2, arg3, arg4, arg5, arg6, arg7);"
+         , "}"
+         , "_Bool hs_bindgen_18c2f3b6d0215153 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_Texture *arg2,"
+         , "  SDL_FRect const *arg3,"
+         , "  SDL_FPoint const *arg4,"
+         , "  SDL_FPoint const *arg5,"
+         , "  SDL_FPoint const *arg6"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderTextureAffine)(arg1, arg2, arg3, arg4, arg5, arg6);"
+         , "}"
+         , "_Bool hs_bindgen_f46f867b1d2a5b99 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_Texture *arg2,"
+         , "  SDL_FRect const *arg3,"
+         , "  float arg4,"
+         , "  SDL_FRect const *arg5"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderTextureTiled)(arg1, arg2, arg3, arg4, arg5);"
+         , "}"
+         , "_Bool hs_bindgen_7460ccca85327f67 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_Texture *arg2,"
+         , "  SDL_FRect const *arg3,"
+         , "  float arg4,"
+         , "  float arg5,"
+         , "  float arg6,"
+         , "  float arg7,"
+         , "  float arg8,"
+         , "  SDL_FRect const *arg9"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderTexture9Grid)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);"
+         , "}"
+         , "#include <SDL3/SDL_version.h>"
+         , "#include <SDL3/SDL_error.h>"
+         , "_Bool hs_bindgen_82ec92cefa73aeb4 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_Texture *arg2,"
+         , "  SDL_FRect const *arg3,"
+         , "  float arg4,"
+         , "  float arg5,"
+         , "  float arg6,"
+         , "  float arg7,"
+         , "  float arg8,"
+         , "  SDL_FRect const *arg9,"
+         , "  float arg10"
+         , ")"
+         , "{"
+         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "  return (SDL_RenderTexture9GridTiled)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10);"
+         , "#else"
+         , "  (void)arg1; (void)arg2; (void)arg3; (void)arg4; (void)arg5; (void)arg6; (void)arg7; (void)arg8; (void)arg9; (void)arg10; SDL_SetError(\"SDL_RenderTexture9GridTiled requires SDL >= 3.4.0\"); return 0;"
+         , "#endif"
+         , "}"
+         , "_Bool hs_bindgen_604c256c92b502f9 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_Texture *arg2,"
+         , "  SDL_Vertex const *arg3,"
+         , "  signed int arg4,"
+         , "  signed int const *arg5,"
+         , "  signed int arg6"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderGeometry)(arg1, arg2, arg3, arg4, arg5, arg6);"
+         , "}"
+         , "_Bool hs_bindgen_ae17af9f44d6d343 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_Texture *arg2,"
+         , "  float const *arg3,"
+         , "  signed int arg4,"
+         , "  SDL_FColor const *arg5,"
+         , "  signed int arg6,"
+         , "  float const *arg7,"
+         , "  signed int arg8,"
+         , "  signed int arg9,"
+         , "  void const *arg10,"
+         , "  signed int arg11,"
+         , "  signed int arg12"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderGeometryRaw)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12);"
+         , "}"
+         , "#include <SDL3/SDL_version.h>"
+         , "#include <SDL3/SDL_error.h>"
+         , "#include <SDL3/SDL_version.h>"
+         , "#if !SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "typedef struct SDL_GPUDevice SDL_GPUDevice;"
+         , "typedef struct SDL_GPURenderState SDL_GPURenderState;"
+         , "typedef struct SDL_GPURenderStateCreateInfo SDL_GPURenderStateCreateInfo;"
+         , "typedef int SDL_TextureAddressMode;"
+         , "#endif"
+         , "_Bool hs_bindgen_f5de60362bf89a18 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_TextureAddressMode arg2,"
+         , "  SDL_TextureAddressMode arg3"
+         , ")"
+         , "{"
+         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "  return (SDL_SetRenderTextureAddressMode)(arg1, arg2, arg3);"
+         , "#else"
+         , "  (void)arg1; (void)arg2; (void)arg3; SDL_SetError(\"SDL_SetRenderTextureAddressMode requires SDL >= 3.4.0\"); return 0;"
+         , "#endif"
+         , "}"
+         , "#include <SDL3/SDL_version.h>"
+         , "#include <SDL3/SDL_error.h>"
+         , "#include <SDL3/SDL_version.h>"
+         , "#if !SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "typedef struct SDL_GPUDevice SDL_GPUDevice;"
+         , "typedef struct SDL_GPURenderState SDL_GPURenderState;"
+         , "typedef struct SDL_GPURenderStateCreateInfo SDL_GPURenderStateCreateInfo;"
+         , "typedef int SDL_TextureAddressMode;"
+         , "#endif"
+         , "_Bool hs_bindgen_727bb39b49c44f15 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_TextureAddressMode *arg2,"
+         , "  SDL_TextureAddressMode *arg3"
+         , ")"
+         , "{"
+         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "  return (SDL_GetRenderTextureAddressMode)(arg1, arg2, arg3);"
+         , "#else"
+         , "  (void)arg1; (void)arg2; (void)arg3; SDL_SetError(\"SDL_GetRenderTextureAddressMode requires SDL >= 3.4.0\"); return 0;"
+         , "#endif"
+         , "}"
+         , "SDL_Surface *hs_bindgen_7173be00862c48e8 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_Rect const *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderReadPixels)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_e66060f4d8ba3f83 ("
+         , "  SDL_Renderer *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderPresent)(arg1);"
+         , "}"
+         , "void hs_bindgen_daf903d539dab511 ("
+         , "  SDL_Texture *arg1"
+         , ")"
+         , "{"
+         , "  (SDL_DestroyTexture)(arg1);"
+         , "}"
+         , "void hs_bindgen_1473f45c80ad6575 ("
+         , "  SDL_Renderer *arg1"
+         , ")"
+         , "{"
+         , "  (SDL_DestroyRenderer)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_78e89be71892a1e6 ("
+         , "  SDL_Renderer *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_FlushRenderer)(arg1);"
+         , "}"
+         , "void *hs_bindgen_47416f026ca1192f ("
+         , "  SDL_Renderer *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderMetalLayer)(arg1);"
+         , "}"
+         , "void *hs_bindgen_c2e3411ac19d746f ("
+         , "  SDL_Renderer *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderMetalCommandEncoder)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_98b03ff5afd62e07 ("
+         , "  SDL_Renderer *arg1,"
+         , "  Uint32 arg2,"
+         , "  Sint64 arg3,"
+         , "  Sint64 arg4"
+         , ")"
+         , "{"
+         , "  return (SDL_AddVulkanRenderSemaphores)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "_Bool hs_bindgen_529493ee355e9466 ("
+         , "  SDL_Renderer *arg1,"
+         , "  signed int arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_SetRenderVSync)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_ff41dba2a623c0ab ("
+         , "  SDL_Renderer *arg1,"
+         , "  signed int *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_GetRenderVSync)(arg1, arg2);"
+         , "}"
+         , "_Bool hs_bindgen_a60ea3ca32fd26a5 ("
+         , "  SDL_Renderer *arg1,"
+         , "  float arg2,"
+         , "  float arg3,"
+         , "  char const *arg4"
+         , ")"
+         , "{"
+         , "  return (SDL_RenderDebugText)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "#include <SDL3/SDL_version.h>"
+         , "#include <SDL3/SDL_error.h>"
+         , "_Bool hs_bindgen_e0aee38e1b73b64f ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_ScaleMode arg2"
+         , ")"
+         , "{"
+         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "  return (SDL_SetDefaultTextureScaleMode)(arg1, arg2);"
+         , "#else"
+         , "  (void)arg1; (void)arg2; SDL_SetError(\"SDL_SetDefaultTextureScaleMode requires SDL >= 3.4.0\"); return 0;"
+         , "#endif"
+         , "}"
+         , "#include <SDL3/SDL_version.h>"
+         , "#include <SDL3/SDL_error.h>"
+         , "_Bool hs_bindgen_51c8f91a397184cb ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_ScaleMode *arg2"
+         , ")"
+         , "{"
+         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "  return (SDL_GetDefaultTextureScaleMode)(arg1, arg2);"
+         , "#else"
+         , "  (void)arg1; (void)arg2; SDL_SetError(\"SDL_GetDefaultTextureScaleMode requires SDL >= 3.4.0\"); return 0;"
+         , "#endif"
+         , "}"
+         , "#include <SDL3/SDL_version.h>"
+         , "#include <SDL3/SDL_error.h>"
+         , "#include <SDL3/SDL_version.h>"
+         , "#if !SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "typedef struct SDL_GPUDevice SDL_GPUDevice;"
+         , "typedef struct SDL_GPURenderState SDL_GPURenderState;"
+         , "typedef struct SDL_GPURenderStateCreateInfo SDL_GPURenderStateCreateInfo;"
+         , "typedef int SDL_TextureAddressMode;"
+         , "#endif"
+         , "SDL_GPURenderState *hs_bindgen_2d970ffb5a76b1e4 ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_GPURenderStateCreateInfo const *arg2"
+         , ")"
+         , "{"
+         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "  return (SDL_CreateGPURenderState)(arg1, arg2);"
+         , "#else"
+         , "  (void)arg1; (void)arg2; SDL_SetError(\"SDL_CreateGPURenderState requires SDL >= 3.4.0\"); return 0;"
+         , "#endif"
+         , "}"
+         , "#include <SDL3/SDL_version.h>"
+         , "#include <SDL3/SDL_error.h>"
+         , "#include <SDL3/SDL_version.h>"
+         , "#if !SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "typedef struct SDL_GPUDevice SDL_GPUDevice;"
+         , "typedef struct SDL_GPURenderState SDL_GPURenderState;"
+         , "typedef struct SDL_GPURenderStateCreateInfo SDL_GPURenderStateCreateInfo;"
+         , "typedef int SDL_TextureAddressMode;"
+         , "#endif"
+         , "_Bool hs_bindgen_312b275c9f55463c ("
+         , "  SDL_GPURenderState *arg1,"
+         , "  Uint32 arg2,"
+         , "  void const *arg3,"
+         , "  Uint32 arg4"
+         , ")"
+         , "{"
+         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "  return (SDL_SetGPURenderStateFragmentUniforms)(arg1, arg2, arg3, arg4);"
+         , "#else"
+         , "  (void)arg1; (void)arg2; (void)arg3; (void)arg4; SDL_SetError(\"SDL_SetGPURenderStateFragmentUniforms requires SDL >= 3.4.0\"); return 0;"
+         , "#endif"
+         , "}"
+         , "#include <SDL3/SDL_version.h>"
+         , "#include <SDL3/SDL_error.h>"
+         , "#include <SDL3/SDL_version.h>"
+         , "#if !SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "typedef struct SDL_GPUDevice SDL_GPUDevice;"
+         , "typedef struct SDL_GPURenderState SDL_GPURenderState;"
+         , "typedef struct SDL_GPURenderStateCreateInfo SDL_GPURenderStateCreateInfo;"
+         , "typedef int SDL_TextureAddressMode;"
+         , "#endif"
+         , "_Bool hs_bindgen_0d6949c161acc59d ("
+         , "  SDL_Renderer *arg1,"
+         , "  SDL_GPURenderState *arg2"
+         , ")"
+         , "{"
+         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "  return (SDL_SetGPURenderState)(arg1, arg2);"
+         , "#else"
+         , "  (void)arg1; (void)arg2; SDL_SetError(\"SDL_SetGPURenderState requires SDL >= 3.4.0\"); return 0;"
+         , "#endif"
+         , "}"
+         , "#include <SDL3/SDL_version.h>"
+         , "#include <SDL3/SDL_error.h>"
+         , "#include <SDL3/SDL_version.h>"
+         , "#if !SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "typedef struct SDL_GPUDevice SDL_GPUDevice;"
+         , "typedef struct SDL_GPURenderState SDL_GPURenderState;"
+         , "typedef struct SDL_GPURenderStateCreateInfo SDL_GPURenderStateCreateInfo;"
+         , "typedef int SDL_TextureAddressMode;"
+         , "#endif"
+         , "void hs_bindgen_eccc60d637069ae8 ("
+         , "  SDL_GPURenderState *arg1"
+         , ")"
+         , "{"
+         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
+         , "  (SDL_DestroyGPURenderState)(arg1);"
+         , "#else"
+         , "  (void)arg1; SDL_SetError(\"SDL_DestroyGPURenderState requires SDL >= 3.4.0\");"
+         , "#endif"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetNumRenderDrivers@
+foreign import ccall unsafe "hs_bindgen_b8d027f3d5602f48"
+  hs_bindgen_b8d027f3d5602f48_base
+    :: IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetNumRenderDrivers@
+hs_bindgen_b8d027f3d5602f48 :: IO BG.CInt
+hs_bindgen_b8d027f3d5602f48 =
+  fmap BG.fromFFIType hs_bindgen_b8d027f3d5602f48_base
+
+-- | Get the number of 2D rendering drivers available for the current display.
+--
+--     A render driver is a set of code that handles rendering and texture management on a particular display. Normally there is only one, but some drivers may have several available with different capabilities.
+--
+--     There may be none if SDL was compiled without render support.
+--
+--     [Returns]: the number of built in render drivers.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_CreateRenderer', 'sDL_GetRenderDriver'
+--
+--     [C declaration]: @SDL_GetNumRenderDrivers@, defined at @SDL3\/SDL_render.h 192:33@
+sDL_GetNumRenderDrivers :: IO BG.CInt
+sDL_GetNumRenderDrivers = hs_bindgen_b8d027f3d5602f48
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderDriver@
+foreign import ccall unsafe "hs_bindgen_dce79b5e75543204"
+  hs_bindgen_dce79b5e75543204_base
+    :: BG.CInt
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderDriver@
+hs_bindgen_dce79b5e75543204
+  :: BG.CInt
+  -> IO (PtrConst.PtrConst BG.CChar)
+hs_bindgen_dce79b5e75543204 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_dce79b5e75543204_base (BG.toFFIType x0))
+
+-- | Use this function to get the name of a built in 2D rendering driver.
+--
+--     The list of rendering drivers is given in the order that they are normally initialized by default; the drivers that seem more reasonable to choose first (as far as the SDL developers believe) are earlier in the list.
+--
+--     The names of drivers are all simple, low-ASCII identifiers, like \"opengl\", \"direct3d12\" or \"metal\". These never have Unicode characters, and are not meant to be proper names.
+--
+--     [Returns]: the name of the rendering driver at the requested index, or NULL if an invalid index was specified.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetNumRenderDrivers'
+--
+--     [C declaration]: @SDL_GetRenderDriver@, defined at @SDL3\/SDL_render.h 216:42@
+sDL_GetRenderDriver
+  :: BG.CInt
+  -- ^
+  --
+  --           [@index@]: the index of the rendering driver; the value ranges from 0 to @SDL_GetNumRenderDrivers()@ - 1.
+  -> IO (PtrConst.PtrConst BG.CChar)
+sDL_GetRenderDriver = hs_bindgen_dce79b5e75543204
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateWindowAndRenderer@
+foreign import ccall unsafe "hs_bindgen_fd4bb4119f707b2a"
+  hs_bindgen_fd4bb4119f707b2a_base
+    :: BG.Ptr BG.Void
+    -> BG.CInt
+    -> BG.CInt
+    -> HsBindgen.Runtime.LibC.Word64
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateWindowAndRenderer@
+hs_bindgen_fd4bb4119f707b2a
+  :: PtrConst.PtrConst BG.CChar
+  -> BG.CInt
+  -> BG.CInt
+  -> SDL3.Sys.Bindgen.Video.SDL_WindowFlags
+  -> BG.Ptr (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window)
+  -> BG.Ptr (BG.Ptr SDL_Renderer)
+  -> IO BG.CBool
+hs_bindgen_fd4bb4119f707b2a =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_fd4bb4119f707b2a_base
+                    (BG.toFFIType x0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                    (BG.toFFIType x4)
+                    (BG.toFFIType x5)
+                )
+
+-- | Create a window and default renderer.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_CreateRenderer', SDL_CreateWindow
+--
+--     [C declaration]: @SDL_CreateWindowAndRenderer@, defined at @SDL3\/SDL_render.h 238:34@
+sDL_CreateWindowAndRenderer
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@title@]: the title of the window, in UTF-8 encoding.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@width@]: the width of the window.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@height@]: the height of the window.
+  -> SDL3.Sys.Bindgen.Video.SDL_WindowFlags
+  -- ^
+  --
+  --           [@window_flags@]: the flags used to create the window (see SDL_CreateWindow()).
+  -> BG.Ptr (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window)
+  -- ^
+  --
+  --           [@window@]: a pointer filled with the window, or NULL on error.
+  -> BG.Ptr (BG.Ptr SDL_Renderer)
+  -- ^
+  --
+  --           [@renderer@]: a pointer filled with the renderer, or NULL on error.
+  -> IO BG.CBool
+sDL_CreateWindowAndRenderer =
+  hs_bindgen_fd4bb4119f707b2a
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateRenderer@
+foreign import ccall unsafe "hs_bindgen_37b63ac6e8618d68"
+  hs_bindgen_37b63ac6e8618d68_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateRenderer@
+hs_bindgen_37b63ac6e8618d68
+  :: BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
+  -> PtrConst.PtrConst BG.CChar
+  -> IO (BG.Ptr SDL_Renderer)
+hs_bindgen_37b63ac6e8618d68 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_37b63ac6e8618d68_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Create a 2D rendering context for a window.
+--
+--     If you want a specific renderer, you can specify its name here. A list of available renderers can be obtained by calling @SDL_GetRenderDriver()@ multiple times, with indices from 0 to @SDL_GetNumRenderDrivers()@ -1. If you don\'t need a specific renderer, specify NULL and SDL will attempt to choose the best option for you, based on what is available on the user\'s system.
+--
+--     If @name@ is a comma-separated list, SDL will try each name, in the order listed, until one succeeds or all of them fail.
+--
+--     By default the rendering size matches the window size in pixels, but you can call @SDL_SetRenderLogicalPresentation()@ to change the content size and scaling options.
+--
+--     [Returns]: a valid rendering context or NULL if there was an error; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_CreateRendererWithProperties', 'sDL_CreateSoftwareRenderer', 'sDL_DestroyRenderer', 'sDL_GetNumRenderDrivers', 'sDL_GetRenderDriver', 'sDL_GetRendererName'
+--
+--     [C declaration]: @SDL_CreateRenderer@, defined at @SDL3\/SDL_render.h 273:44@
+sDL_CreateRenderer
+  :: BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
+  -- ^
+  --
+  --           [@window@]: the window where rendering is displayed.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@name@]: the name of the rendering driver to initialize, or NULL to let SDL choose one.
+  -> IO (BG.Ptr SDL_Renderer)
+sDL_CreateRenderer = hs_bindgen_37b63ac6e8618d68
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateRendererWithProperties@
+foreign import ccall unsafe "hs_bindgen_fe8ca198b1b0c17d"
+  hs_bindgen_fe8ca198b1b0c17d_base
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateRendererWithProperties@
+hs_bindgen_fe8ca198b1b0c17d
+  :: SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
+  -> IO (BG.Ptr SDL_Renderer)
+hs_bindgen_fe8ca198b1b0c17d =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_fe8ca198b1b0c17d_base (BG.toFFIType x0))
+
+-- | Create a 2D rendering context for a window, with the specified properties.
+--
+--     These are the supported properties:
+--
+--     * @'sDL_PROP_RENDERER_CREATE_NAME_STRING'@: the name of the rendering driver to use, if a specific one is desired
+--
+--     * @'sDL_PROP_RENDERER_CREATE_WINDOW_POINTER'@: the window where rendering is displayed, required if this isn\'t a software renderer using a surface
+--
+--     * @'sDL_PROP_RENDERER_CREATE_SURFACE_POINTER'@: the surface where rendering is displayed, if you want a software renderer without a window
+--
+--     * @'sDL_PROP_RENDERER_CREATE_OUTPUT_COLORSPACE_NUMBER'@: an SDL_Colorspace value describing the colorspace for output to the display, defaults to SDL_COLORSPACE_SRGB. The direct3d11, direct3d12, and metal renderers support SDL_COLORSPACE_SRGB_LINEAR, which is a linear color space and supports HDR output. If you select SDL_COLORSPACE_SRGB_LINEAR, drawing still uses the sRGB colorspace, but values can go beyond 1.0 and float (linear) format textures can be used for HDR content.
+--
+--     * @'sDL_PROP_RENDERER_CREATE_PRESENT_VSYNC_NUMBER'@: non-zero if you want present synchronized with the refresh rate. This property can take any value that is supported by @SDL_SetRenderVSync()@ for the renderer.
+--
+--     With the SDL GPU renderer (since SDL 3.4.0):
+--
+--     * @'sDL_PROP_RENDERER_CREATE_GPU_DEVICE_POINTER'@: the device to use with the renderer, optional.
+--
+--     * @'sDL_PROP_RENDERER_CREATE_GPU_SHADERS_SPIRV_BOOLEAN'@: the app is able to provide SPIR-V shaders to 'SDL_GPURenderState', optional.
+--
+--     * @'sDL_PROP_RENDERER_CREATE_GPU_SHADERS_DXIL_BOOLEAN'@: the app is able to provide DXIL shaders to 'SDL_GPURenderState', optional.
+--
+--     * @'sDL_PROP_RENDERER_CREATE_GPU_SHADERS_MSL_BOOLEAN'@: the app is able to provide MSL shaders to 'SDL_GPURenderState', optional.
+--
+--     With the vulkan renderer:
+--
+--     * @'sDL_PROP_RENDERER_CREATE_VULKAN_INSTANCE_POINTER'@: the VkInstance to use with the renderer, optional.
+--
+--     * @'sDL_PROP_RENDERER_CREATE_VULKAN_SURFACE_NUMBER'@: the VkSurfaceKHR to use with the renderer, optional.
+--
+--     * @'sDL_PROP_RENDERER_CREATE_VULKAN_PHYSICAL_DEVICE_POINTER'@: the VkPhysicalDevice to use with the renderer, optional.
+--
+--     * @'sDL_PROP_RENDERER_CREATE_VULKAN_DEVICE_POINTER'@: the VkDevice to use with the renderer, optional.
+--
+--     * @'sDL_PROP_RENDERER_CREATE_VULKAN_GRAPHICS_QUEUE_FAMILY_INDEX_NUMBER'@: the queue family index used for rendering.
+--
+--     * @'sDL_PROP_RENDERER_CREATE_VULKAN_PRESENT_QUEUE_FAMILY_INDEX_NUMBER'@: the queue family index used for presentation.
+--
+--     [Returns]: a valid rendering context or NULL if there was an error; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_CreateProperties, 'sDL_CreateRenderer', 'sDL_CreateSoftwareRenderer', 'sDL_DestroyRenderer', 'sDL_GetRendererName'
+--
+--     [C declaration]: @SDL_CreateRendererWithProperties@, defined at @SDL3\/SDL_render.h 337:44@
+sDL_CreateRendererWithProperties
+  :: SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
+  -- ^
+  --
+  --           [@props@]: the properties to use.
+  -> IO (BG.Ptr SDL_Renderer)
+sDL_CreateRendererWithProperties =
+  hs_bindgen_fe8ca198b1b0c17d
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateGPURenderer@
+foreign import ccall unsafe "hs_bindgen_40c46710682c09f1"
+  hs_bindgen_40c46710682c09f1_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateGPURenderer@
+hs_bindgen_40c46710682c09f1
+  :: BG.Ptr SDL3.Sys.Bindgen.Gpu.SDL_GPUDevice
+  -> BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
+  -> IO (BG.Ptr SDL_Renderer)
+hs_bindgen_40c46710682c09f1 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_40c46710682c09f1_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Create a 2D GPU rendering context.
+--
+--     The GPU device to use is passed in as a parameter. If this is NULL, then a device will be created normally and can be retrieved using @SDL_GetGPURendererDevice()@.
+--
+--     The window to use is passed in as a parameter. If this is NULL, then this will become an offscreen renderer. In that case, you should call @SDL_SetRenderTarget()@ to setup rendering to a texture, and then call @SDL_RenderPresent()@ normally to complete drawing a frame.
+--
+--     [Returns]: a valid rendering context or NULL if there was an error; call SDL_GetError() for more information.
+--
+--     [Thread safety]: If this function is called with a valid GPU device, it should be called on the thread that created the device. If this function is called with a valid window, it should be called on the thread that created the window.
+--
+--     @since 3.4.0
+--
+--     [See also]: 'sDL_CreateRendererWithProperties', 'sDL_GetGPURendererDevice', SDL_CreateGPUShader, 'sDL_CreateGPURenderState', 'sDL_SetGPURenderState'
+--
+--     [C declaration]: @SDL_CreateGPURenderer@, defined at @SDL3\/SDL_render.h 387:44@
+sDL_CreateGPURenderer
+  :: BG.Ptr SDL3.Sys.Bindgen.Gpu.SDL_GPUDevice
+  -- ^
+  --
+  --           [@device@]: the GPU device to use with the renderer, or NULL to create a device.
+  -> BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
+  -- ^
+  --
+  --           [@window@]: the window where rendering is displayed, or NULL to create an offscreen renderer.
+  -> IO (BG.Ptr SDL_Renderer)
+sDL_CreateGPURenderer = hs_bindgen_40c46710682c09f1
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetGPURendererDevice@
+foreign import ccall unsafe "hs_bindgen_76cee8398d82c692"
+  hs_bindgen_76cee8398d82c692_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetGPURendererDevice@
+hs_bindgen_76cee8398d82c692
+  :: BG.Ptr SDL_Renderer
+  -> IO (BG.Ptr SDL3.Sys.Bindgen.Gpu.SDL_GPUDevice)
+hs_bindgen_76cee8398d82c692 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_76cee8398d82c692_base (BG.toFFIType x0))
+
+-- | Return the GPU device used by a renderer.
+--
+--     [Returns]: the GPU device used by the renderer, or NULL if the renderer is not a GPU renderer; call SDL_GetError() for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.4.0
+--
+--     [C declaration]: @SDL_GetGPURendererDevice@, defined at @SDL3\/SDL_render.h 400:45@
+sDL_GetGPURendererDevice
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> IO (BG.Ptr SDL3.Sys.Bindgen.Gpu.SDL_GPUDevice)
+sDL_GetGPURendererDevice =
+  hs_bindgen_76cee8398d82c692
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateSoftwareRenderer@
+foreign import ccall unsafe "hs_bindgen_3a402a665e290fa3"
+  hs_bindgen_3a402a665e290fa3_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateSoftwareRenderer@
+hs_bindgen_3a402a665e290fa3
+  :: BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface
+  -> IO (BG.Ptr SDL_Renderer)
+hs_bindgen_3a402a665e290fa3 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3a402a665e290fa3_base (BG.toFFIType x0))
+
+-- | Create a 2D software rendering context for a surface.
+--
+--     Two other APIs which can be used to create 'SDL_Renderer': @SDL_CreateRenderer()@ and @SDL_CreateWindowAndRenderer()@. These can /also/ create a software renderer, but they are intended to be used with an SDL_Window as the final destination and not an SDL_Surface.
+--
+--     [Returns]: a valid rendering context or NULL if there was an error; call SDL_GetError() for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_DestroyRenderer'
+--
+--     [C declaration]: @SDL_CreateSoftwareRenderer@, defined at @SDL3\/SDL_render.h 421:44@
+sDL_CreateSoftwareRenderer
+  :: BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface
+  -- ^
+  --
+  --           [@surface@]: the SDL_Surface structure representing the surface where rendering is done.
+  -> IO (BG.Ptr SDL_Renderer)
+sDL_CreateSoftwareRenderer =
+  hs_bindgen_3a402a665e290fa3
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderer@
+foreign import ccall unsafe "hs_bindgen_30584ed4cc19ca5c"
+  hs_bindgen_30584ed4cc19ca5c_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderer@
+hs_bindgen_30584ed4cc19ca5c
+  :: BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
+  -> IO (BG.Ptr SDL_Renderer)
+hs_bindgen_30584ed4cc19ca5c =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_30584ed4cc19ca5c_base (BG.toFFIType x0))
+
+-- | Get the renderer associated with a window.
+--
+--     [Returns]: the rendering context on success or NULL on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_GetRenderer@, defined at @SDL3\/SDL_render.h 434:44@
+sDL_GetRenderer
+  :: BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window
+  -- ^
+  --
+  --           [@window@]: the window to query.
+  -> IO (BG.Ptr SDL_Renderer)
+sDL_GetRenderer = hs_bindgen_30584ed4cc19ca5c
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderWindow@
+foreign import ccall unsafe "hs_bindgen_c043f286f3176cd8"
+  hs_bindgen_c043f286f3176cd8_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderWindow@
+hs_bindgen_c043f286f3176cd8
+  :: BG.Ptr SDL_Renderer
+  -> IO (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window)
+hs_bindgen_c043f286f3176cd8 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c043f286f3176cd8_base (BG.toFFIType x0))
+
+-- | Get the window associated with a renderer.
+--
+--     [Returns]: the window on success or NULL on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_GetRenderWindow@, defined at @SDL3\/SDL_render.h 447:42@
+sDL_GetRenderWindow
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer to query.
+  -> IO (BG.Ptr SDL3.Sys.Bindgen.Video.SDL_Window)
+sDL_GetRenderWindow = hs_bindgen_c043f286f3176cd8
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRendererName@
+foreign import ccall unsafe "hs_bindgen_b4d2799733c66a42"
+  hs_bindgen_b4d2799733c66a42_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRendererName@
+hs_bindgen_b4d2799733c66a42
+  :: BG.Ptr SDL_Renderer
+  -> IO (PtrConst.PtrConst BG.CChar)
+hs_bindgen_b4d2799733c66a42 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_b4d2799733c66a42_base (BG.toFFIType x0))
+
+-- | Get the name of a renderer.
+--
+--     [Returns]: the name of the selected renderer, or NULL on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_CreateRenderer', 'sDL_CreateRendererWithProperties'
+--
+--     [C declaration]: @SDL_GetRendererName@, defined at @SDL3\/SDL_render.h 463:42@
+sDL_GetRendererName
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> IO (PtrConst.PtrConst BG.CChar)
+sDL_GetRendererName = hs_bindgen_b4d2799733c66a42
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRendererProperties@
+foreign import ccall unsafe "hs_bindgen_519d759f13b5a204"
+  hs_bindgen_519d759f13b5a204_base
+    :: BG.Ptr BG.Void
+    -> IO HsBindgen.Runtime.LibC.Word32
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRendererProperties@
+hs_bindgen_519d759f13b5a204
+  :: BG.Ptr SDL_Renderer
+  -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
+hs_bindgen_519d759f13b5a204 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_519d759f13b5a204_base (BG.toFFIType x0))
+
+-- | Get the properties associated with a renderer.
+--
+--     The following read-only properties are provided by SDL:
+--
+--     * @'sDL_PROP_RENDERER_NAME_STRING'@: the name of the rendering driver
+--
+--     * @'sDL_PROP_RENDERER_WINDOW_POINTER'@: the window where rendering is displayed, if any
+--
+--     * @'sDL_PROP_RENDERER_SURFACE_POINTER'@: the surface where rendering is displayed, if this is a software renderer without a window
+--
+--     * @'sDL_PROP_RENDERER_VSYNC_NUMBER'@: the current vsync setting
+--
+--     * @'sDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER'@: the maximum texture width and height
+--
+--     * @'sDL_PROP_RENDERER_TEXTURE_FORMATS_POINTER'@: a (const SDL_PixelFormat *) array of pixel formats, terminated with SDL_PIXELFORMAT_UNKNOWN, representing the available texture formats for this renderer.
+--
+--     * @'sDL_PROP_RENDERER_TEXTURE_WRAPPING_BOOLEAN'@: true if the renderer supports SDL_TEXTURE_ADDRESS_WRAP on non-power-of-two textures.
+--
+--     * @'sDL_PROP_RENDERER_OUTPUT_COLORSPACE_NUMBER'@: an SDL_Colorspace value describing the colorspace for output to the display, defaults to SDL_COLORSPACE_SRGB.
+--
+--     * @'sDL_PROP_RENDERER_HDR_ENABLED_BOOLEAN'@: true if the output colorspace is SDL_COLORSPACE_SRGB_LINEAR and the renderer is showing on a display with HDR enabled. This property can change dynamically when SDL_EVENT_WINDOW_HDR_STATE_CHANGED is sent.
+--
+--     * @'sDL_PROP_RENDERER_SDR_WHITE_POINT_FLOAT'@: the value of SDR white in the SDL_COLORSPACE_SRGB_LINEAR colorspace. When HDR is enabled, this value is automatically multiplied into the color scale. This property can change dynamically when SDL_EVENT_WINDOW_HDR_STATE_CHANGED is sent.
+--
+--     * @'sDL_PROP_RENDERER_HDR_HEADROOM_FLOAT'@: the additional high dynamic range that can be displayed, in terms of the SDR white point. When HDR is not enabled, this will be 1.0. This property can change dynamically when SDL_EVENT_WINDOW_HDR_STATE_CHANGED is sent.
+--
+--     With the direct3d renderer:
+--
+--     * @'sDL_PROP_RENDERER_D3D9_DEVICE_POINTER'@: the IDirect3DDevice9 associated with the renderer
+--
+--     With the direct3d11 renderer:
+--
+--     * @'sDL_PROP_RENDERER_D3D11_DEVICE_POINTER'@: the ID3D11Device associated with the renderer
+--
+--     * @'sDL_PROP_RENDERER_D3D11_SWAPCHAIN_POINTER'@: the IDXGISwapChain1 associated with the renderer. This may change when the window is resized.
+--
+--     With the direct3d12 renderer:
+--
+--     * @'sDL_PROP_RENDERER_D3D12_DEVICE_POINTER'@: the ID3D12Device associated with the renderer
+--
+--     * @'sDL_PROP_RENDERER_D3D12_SWAPCHAIN_POINTER'@: the IDXGISwapChain4 associated with the renderer.
+--
+--     * @'sDL_PROP_RENDERER_D3D12_COMMAND_QUEUE_POINTER'@: the ID3D12CommandQueue associated with the renderer
+--
+--     With the vulkan renderer:
+--
+--     * @'sDL_PROP_RENDERER_VULKAN_INSTANCE_POINTER'@: the VkInstance associated with the renderer
+--
+--     * @'sDL_PROP_RENDERER_VULKAN_SURFACE_NUMBER'@: the VkSurfaceKHR associated with the renderer
+--
+--     * @'sDL_PROP_RENDERER_VULKAN_PHYSICAL_DEVICE_POINTER'@: the VkPhysicalDevice associated with the renderer
+--
+--     * @'sDL_PROP_RENDERER_VULKAN_DEVICE_POINTER'@: the VkDevice associated with the renderer
+--
+--     * @'sDL_PROP_RENDERER_VULKAN_GRAPHICS_QUEUE_FAMILY_INDEX_NUMBER'@: the queue family index used for rendering
+--
+--     * @'sDL_PROP_RENDERER_VULKAN_PRESENT_QUEUE_FAMILY_INDEX_NUMBER'@: the queue family index used for presentation
+--
+--     * @'sDL_PROP_RENDERER_VULKAN_SWAPCHAIN_IMAGE_COUNT_NUMBER'@: the number of swapchain images, or potential frames in flight, used by the Vulkan renderer
+--
+--     With the gpu renderer:
+--
+--     * @'sDL_PROP_RENDERER_GPU_DEVICE_POINTER'@: the SDL_GPUDevice associated with the renderer
+--
+--     [Returns]: a valid property ID on success or 0 on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_GetRendererProperties@, defined at @SDL3\/SDL_render.h 551:46@
+sDL_GetRendererProperties
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
+sDL_GetRendererProperties =
+  hs_bindgen_519d759f13b5a204
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderOutputSize@
+foreign import ccall unsafe "hs_bindgen_15b72b770c77a09c"
+  hs_bindgen_15b72b770c77a09c_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderOutputSize@
+hs_bindgen_15b72b770c77a09c
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr BG.CInt
+  -> BG.Ptr BG.CInt
+  -> IO BG.CBool
+hs_bindgen_15b72b770c77a09c =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_15b72b770c77a09c_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Get the output size in pixels of a rendering context.
+--
+--     This returns the true output size in pixels, ignoring any render targets or logical size and presentation.
+--
+--     For the output size of the current rendering target, with logical size adjustments, use @SDL_GetCurrentRenderOutputSize()@ instead.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetCurrentRenderOutputSize'
+--
+--     [C declaration]: @SDL_GetRenderOutputSize@, defined at @SDL3\/SDL_render.h 600:34@
+sDL_GetRenderOutputSize
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr BG.CInt
+  -- ^
+  --
+  --           [@w@]: a pointer filled in with the width in pixels.
+  -> BG.Ptr BG.CInt
+  -- ^
+  --
+  --           [@h@]: a pointer filled in with the height in pixels.
+  -> IO BG.CBool
+sDL_GetRenderOutputSize = hs_bindgen_15b72b770c77a09c
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetCurrentRenderOutputSize@
+foreign import ccall unsafe "hs_bindgen_09a49b8dd8196ac2"
+  hs_bindgen_09a49b8dd8196ac2_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetCurrentRenderOutputSize@
+hs_bindgen_09a49b8dd8196ac2
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr BG.CInt
+  -> BG.Ptr BG.CInt
+  -> IO BG.CBool
+hs_bindgen_09a49b8dd8196ac2 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_09a49b8dd8196ac2_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Get the current output size in pixels of a rendering context.
+--
+--     If a rendering target is active, this will return the size of the rendering target in pixels, otherwise return the value of @SDL_GetRenderOutputSize()@.
+--
+--     Rendering target or not, the output will be adjusted by the current logical presentation state, dictated by @SDL_SetRenderLogicalPresentation()@.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetRenderOutputSize'
+--
+--     [C declaration]: @SDL_GetCurrentRenderOutputSize@, defined at @SDL3\/SDL_render.h 623:34@
+sDL_GetCurrentRenderOutputSize
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr BG.CInt
+  -- ^
+  --
+  --           [@w@]: a pointer filled in with the current width.
+  -> BG.Ptr BG.CInt
+  -- ^
+  --
+  --           [@h@]: a pointer filled in with the current height.
+  -> IO BG.CBool
+sDL_GetCurrentRenderOutputSize =
+  hs_bindgen_09a49b8dd8196ac2
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateTexture@
+foreign import ccall unsafe "hs_bindgen_3d4ff9d99a3fa98a"
+  hs_bindgen_3d4ff9d99a3fa98a_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.Support.CUInt
+    -> BG.CUInt
+    -> BG.CInt
+    -> BG.CInt
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateTexture@
+hs_bindgen_3d4ff9d99a3fa98a
+  :: BG.Ptr SDL_Renderer
+  -> SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -> SDL_TextureAccess
+  -> BG.CInt
+  -> BG.CInt
+  -> IO (BG.Ptr SDL_Texture)
+hs_bindgen_3d4ff9d99a3fa98a =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_3d4ff9d99a3fa98a_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
+
+-- | Create a texture for a rendering context.
+--
+--     The contents of a texture when first created are not defined.
+--
+--     [Returns]: the created texture or NULL on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_CreateTextureFromSurface', 'sDL_CreateTextureWithProperties', 'sDL_DestroyTexture', 'sDL_GetTextureSize', 'sDL_UpdateTexture'
+--
+--     [C declaration]: @SDL_CreateTexture@, defined at @SDL3\/SDL_render.h 648:43@
+sDL_CreateTexture
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -- ^
+  --
+  --           [@format@]: one of the enumerated values in SDL_PixelFormat.
+  -> SDL_TextureAccess
+  -- ^
+  --
+  --           [@access@]: one of the enumerated values in 'SDL_TextureAccess'.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@w@]: the width of the texture in pixels.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@h@]: the height of the texture in pixels.
+  -> IO (BG.Ptr SDL_Texture)
+sDL_CreateTexture = hs_bindgen_3d4ff9d99a3fa98a
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateTextureFromSurface@
+foreign import ccall unsafe "hs_bindgen_46cceb118c5977b8"
+  hs_bindgen_46cceb118c5977b8_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateTextureFromSurface@
+hs_bindgen_46cceb118c5977b8
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface
+  -> IO (BG.Ptr SDL_Texture)
+hs_bindgen_46cceb118c5977b8 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_46cceb118c5977b8_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Create a texture from an existing surface.
+--
+--     The surface is not modified or freed by this function.
+--
+--     The 'SDL_TextureAccess' hint for the created texture is @SDL_TEXTUREACCESS_STATIC@.
+--
+--     The pixel format of the created texture may be different from the pixel format of the surface, and can be queried using the SDL_PROP_TEXTURE_FORMAT_NUMBER property.
+--
+--     [Returns]: the created texture or NULL on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_CreateTexture', 'sDL_CreateTextureWithProperties', 'sDL_DestroyTexture'
+--
+--     [C declaration]: @SDL_CreateTextureFromSurface@, defined at @SDL3\/SDL_render.h 676:43@
+sDL_CreateTextureFromSurface
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface
+  -- ^
+  --
+  --           [@surface@]: the SDL_Surface structure containing pixel data used to fill the texture.
+  -> IO (BG.Ptr SDL_Texture)
+sDL_CreateTextureFromSurface =
+  hs_bindgen_46cceb118c5977b8
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateTextureWithProperties@
+foreign import ccall unsafe "hs_bindgen_52cc37cb33c5a099"
+  hs_bindgen_52cc37cb33c5a099_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateTextureWithProperties@
+hs_bindgen_52cc37cb33c5a099
+  :: BG.Ptr SDL_Renderer
+  -> SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
+  -> IO (BG.Ptr SDL_Texture)
+hs_bindgen_52cc37cb33c5a099 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_52cc37cb33c5a099_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Create a texture for a rendering context with the specified properties.
+--
+--     These are the supported properties:
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_COLORSPACE_NUMBER'@: an SDL_Colorspace value describing the texture colorspace, defaults to SDL_COLORSPACE_SRGB_LINEAR for floating point textures, SDL_COLORSPACE_HDR10 for 10-bit textures, SDL_COLORSPACE_SRGB for other RGB textures and SDL_COLORSPACE_JPEG for YUV textures.
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_FORMAT_NUMBER'@: one of the enumerated values in SDL_PixelFormat, defaults to the best RGBA format for the renderer
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_ACCESS_NUMBER'@: one of the enumerated values in 'SDL_TextureAccess', defaults to SDL_TEXTUREACCESS_STATIC
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_WIDTH_NUMBER'@: the width of the texture in pixels, required
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_HEIGHT_NUMBER'@: the height of the texture in pixels, required
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_PALETTE_POINTER'@: an SDL_Palette to use with palettized texture formats. This can be set later with @SDL_SetTexturePalette()@
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_SDR_WHITE_POINT_FLOAT'@: for HDR10 and floating point textures, this defines the value of 100% diffuse white, with higher values being displayed in the High Dynamic Range headroom. This defaults to 100 for HDR10 textures and 1.0 for floating point textures.
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_HDR_HEADROOM_FLOAT'@: for HDR10 and floating point textures, this defines the maximum dynamic range used by the content, in terms of the SDR white point. This would be equivalent to maxCLL \/ SDL_PROP_TEXTURE_CREATE_SDR_WHITE_POINT_FLOAT for HDR10 content. If this is defined, any values outside the range supported by the display will be scaled into the available HDR headroom, otherwise they are clipped.
+--
+--     With the direct3d11 renderer:
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_D3D11_TEXTURE_POINTER'@: the ID3D11Texture2D associated with the texture, if you want to wrap an existing texture.
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_D3D11_TEXTURE_U_POINTER'@: the ID3D11Texture2D associated with the U plane of a YUV texture, if you want to wrap an existing texture.
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_D3D11_TEXTURE_V_POINTER'@: the ID3D11Texture2D associated with the V plane of a YUV texture, if you want to wrap an existing texture.
+--
+--     With the direct3d12 renderer:
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_POINTER'@: the ID3D12Resource associated with the texture, if you want to wrap an existing texture.
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_U_POINTER'@: the ID3D12Resource associated with the U plane of a YUV texture, if you want to wrap an existing texture.
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_V_POINTER'@: the ID3D12Resource associated with the V plane of a YUV texture, if you want to wrap an existing texture.
+--
+--     With the metal renderer:
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_METAL_PIXELBUFFER_POINTER'@: the CVPixelBufferRef associated with the texture, if you want to create a texture from an existing pixel buffer.
+--
+--     With the opengl renderer:
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_NUMBER'@: the GLuint texture associated with the texture, if you want to wrap an existing texture.
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_UV_NUMBER'@: the GLuint texture associated with the UV plane of an NV12 texture, if you want to wrap an existing texture.
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_U_NUMBER'@: the GLuint texture associated with the U plane of a YUV texture, if you want to wrap an existing texture.
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_V_NUMBER'@: the GLuint texture associated with the V plane of a YUV texture, if you want to wrap an existing texture.
+--
+--     With the opengles2 renderer:
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_NUMBER'@: the GLuint texture associated with the texture, if you want to wrap an existing texture.
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_UV_NUMBER'@: the GLuint texture associated with the UV plane of an NV12 texture, if you want to wrap an existing texture.
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_U_NUMBER'@: the GLuint texture associated with the U plane of a YUV texture, if you want to wrap an existing texture.
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_V_NUMBER'@: the GLuint texture associated with the V plane of a YUV texture, if you want to wrap an existing texture.
+--
+--     With the vulkan renderer:
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_VULKAN_TEXTURE_NUMBER'@: the VkImage associated with the texture, if you want to wrap an existing texture.
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_VULKAN_LAYOUT_NUMBER'@: the VkImageLayout for the VkImage, defaults to VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL.
+--
+--     With the GPU renderer:
+--
+--     * @'sDL_PROP_TEXTURE_CREATE_GPU_TEXTURE_POINTER'@: the SDL_GPUTexture associated with the texture, if you want to wrap an existing texture.
+--
+--     * @SDL_PROP_TEXTURE_CREATE_GPU_TEXTURE_UV_NUMBER@: the SDL_GPUTexture associated with the UV plane of an NV12 texture, if you want to wrap an existing texture.
+--
+--     * @SDL_PROP_TEXTURE_CREATE_GPU_TEXTURE_U_NUMBER@: the SDL_GPUTexture associated with the U plane of a YUV texture, if you want to wrap an existing texture.
+--
+--     * @SDL_PROP_TEXTURE_CREATE_GPU_TEXTURE_V_NUMBER@: the SDL_GPUTexture associated with the V plane of a YUV texture, if you want to wrap an existing texture.
+--
+--     [Returns]: the created texture or NULL on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_CreateProperties, 'sDL_CreateTexture', 'sDL_CreateTextureFromSurface', 'sDL_DestroyTexture', 'sDL_GetTextureSize', 'sDL_UpdateTexture'
+--
+--     [C declaration]: @SDL_CreateTextureWithProperties@, defined at @SDL3\/SDL_render.h 804:43@
+sDL_CreateTextureWithProperties
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
+  -- ^
+  --
+  --           [@props@]: the properties to use.
+  -> IO (BG.Ptr SDL_Texture)
+sDL_CreateTextureWithProperties =
+  hs_bindgen_52cc37cb33c5a099
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTextureProperties@
+foreign import ccall unsafe "hs_bindgen_7d1578a13c421f10"
+  hs_bindgen_7d1578a13c421f10_base
+    :: BG.Ptr BG.Void
+    -> IO HsBindgen.Runtime.LibC.Word32
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTextureProperties@
+hs_bindgen_7d1578a13c421f10
+  :: BG.Ptr SDL_Texture
+  -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
+hs_bindgen_7d1578a13c421f10 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_7d1578a13c421f10_base (BG.toFFIType x0))
+
+-- | Get the properties associated with a texture.
+--
+--     The following read-only properties are provided by SDL:
+--
+--     * @'sDL_PROP_TEXTURE_COLORSPACE_NUMBER'@: an SDL_Colorspace value describing the texture colorspace.
+--
+--     * @'sDL_PROP_TEXTURE_FORMAT_NUMBER'@: one of the enumerated values in SDL_PixelFormat.
+--
+--     * @'sDL_PROP_TEXTURE_ACCESS_NUMBER'@: one of the enumerated values in 'SDL_TextureAccess'.
+--
+--     * @'sDL_PROP_TEXTURE_WIDTH_NUMBER'@: the width of the texture in pixels.
+--
+--     * @'sDL_PROP_TEXTURE_HEIGHT_NUMBER'@: the height of the texture in pixels.
+--
+--     * @'sDL_PROP_TEXTURE_SDR_WHITE_POINT_FLOAT'@: for HDR10 and floating point textures, this defines the value of 100% diffuse white, with higher values being displayed in the High Dynamic Range headroom. This defaults to 100 for HDR10 textures and 1.0 for other textures.
+--
+--     * @'sDL_PROP_TEXTURE_HDR_HEADROOM_FLOAT'@: for HDR10 and floating point textures, this defines the maximum dynamic range used by the content, in terms of the SDR white point. If this is defined, any values outside the range supported by the display will be scaled into the available HDR headroom, otherwise they are clipped. This defaults to 1.0 for SDR textures, 4.0 for HDR10 textures, and no default for floating point textures.
+--
+--     With the direct3d11 renderer:
+--
+--     * @'sDL_PROP_TEXTURE_D3D11_TEXTURE_POINTER'@: the ID3D11Texture2D associated with the texture
+--
+--     * @'sDL_PROP_TEXTURE_D3D11_TEXTURE_U_POINTER'@: the ID3D11Texture2D associated with the U plane of a YUV texture
+--
+--     * @'sDL_PROP_TEXTURE_D3D11_TEXTURE_V_POINTER'@: the ID3D11Texture2D associated with the V plane of a YUV texture
+--
+--     With the direct3d12 renderer:
+--
+--     * @'sDL_PROP_TEXTURE_D3D12_TEXTURE_POINTER'@: the ID3D12Resource associated with the texture
+--
+--     * @'sDL_PROP_TEXTURE_D3D12_TEXTURE_U_POINTER'@: the ID3D12Resource associated with the U plane of a YUV texture
+--
+--     * @'sDL_PROP_TEXTURE_D3D12_TEXTURE_V_POINTER'@: the ID3D12Resource associated with the V plane of a YUV texture
+--
+--     With the vulkan renderer:
+--
+--     * @'sDL_PROP_TEXTURE_VULKAN_TEXTURE_NUMBER'@: the VkImage associated with the texture
+--
+--     With the opengl renderer:
+--
+--     * @'sDL_PROP_TEXTURE_OPENGL_TEXTURE_NUMBER'@: the GLuint texture associated with the texture
+--
+--     * @'sDL_PROP_TEXTURE_OPENGL_TEXTURE_UV_NUMBER'@: the GLuint texture associated with the UV plane of an NV12 texture
+--
+--     * @'sDL_PROP_TEXTURE_OPENGL_TEXTURE_U_NUMBER'@: the GLuint texture associated with the U plane of a YUV texture
+--
+--     * @'sDL_PROP_TEXTURE_OPENGL_TEXTURE_V_NUMBER'@: the GLuint texture associated with the V plane of a YUV texture
+--
+--     * @'sDL_PROP_TEXTURE_OPENGL_TEXTURE_TARGET_NUMBER'@: the GLenum for the texture target (@GL_TEXTURE_2D@, @GL_TEXTURE_RECTANGLE_ARB@, etc)
+--
+--     * @'sDL_PROP_TEXTURE_OPENGL_TEX_W_FLOAT'@: the texture coordinate width of the texture (0.0 - 1.0)
+--
+--     * @'sDL_PROP_TEXTURE_OPENGL_TEX_H_FLOAT'@: the texture coordinate height of the texture (0.0 - 1.0)
+--
+--     With the opengles2 renderer:
+--
+--     * @'sDL_PROP_TEXTURE_OPENGLES2_TEXTURE_NUMBER'@: the GLuint texture associated with the texture
+--
+--     * @'sDL_PROP_TEXTURE_OPENGLES2_TEXTURE_UV_NUMBER'@: the GLuint texture associated with the UV plane of an NV12 texture
+--
+--     * @'sDL_PROP_TEXTURE_OPENGLES2_TEXTURE_U_NUMBER'@: the GLuint texture associated with the U plane of a YUV texture
+--
+--     * @'sDL_PROP_TEXTURE_OPENGLES2_TEXTURE_V_NUMBER'@: the GLuint texture associated with the V plane of a YUV texture
+--
+--     * @'sDL_PROP_TEXTURE_OPENGLES2_TEXTURE_TARGET_NUMBER'@: the GLenum for the texture target (@GL_TEXTURE_2D@, @GL_TEXTURE_EXTERNAL_OES@, etc)
+--
+--     With the gpu renderer:
+--
+--     * @'sDL_PROP_TEXTURE_GPU_TEXTURE_POINTER'@: the SDL_GPUTexture associated with the texture
+--
+--     * @'sDL_PROP_TEXTURE_GPU_TEXTURE_UV_POINTER'@: the SDL_GPUTexture associated with the UV plane of an NV12 texture
+--
+--     * @'sDL_PROP_TEXTURE_GPU_TEXTURE_U_POINTER'@: the SDL_GPUTexture associated with the U plane of a YUV texture
+--
+--     * @'sDL_PROP_TEXTURE_GPU_TEXTURE_V_POINTER'@: the SDL_GPUTexture associated with the V plane of a YUV texture
+--
+--     [Returns]: a valid property ID on success or 0 on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_GetTextureProperties@, defined at @SDL3\/SDL_render.h 933:46@
+sDL_GetTextureProperties
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to query.
+  -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
+sDL_GetTextureProperties =
+  hs_bindgen_7d1578a13c421f10
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRendererFromTexture@
+foreign import ccall unsafe "hs_bindgen_59ae54d4482ab0ef"
+  hs_bindgen_59ae54d4482ab0ef_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRendererFromTexture@
+hs_bindgen_59ae54d4482ab0ef
+  :: BG.Ptr SDL_Texture
+  -> IO (BG.Ptr SDL_Renderer)
+hs_bindgen_59ae54d4482ab0ef =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_59ae54d4482ab0ef_base (BG.toFFIType x0))
+
+-- | Get the renderer that created an 'SDL_Texture'.
+--
+--     [Returns]: a pointer to the 'SDL_Renderer' that created the texture, or NULL on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_GetRendererFromTexture@, defined at @SDL3\/SDL_render.h 977:44@
+sDL_GetRendererFromTexture
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to query.
+  -> IO (BG.Ptr SDL_Renderer)
+sDL_GetRendererFromTexture =
+  hs_bindgen_59ae54d4482ab0ef
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTextureSize@
+foreign import ccall unsafe "hs_bindgen_132d974026c63235"
+  hs_bindgen_132d974026c63235_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTextureSize@
+hs_bindgen_132d974026c63235
+  :: BG.Ptr SDL_Texture
+  -> BG.Ptr BG.CFloat
+  -> BG.Ptr BG.CFloat
+  -> IO BG.CBool
+hs_bindgen_132d974026c63235 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_132d974026c63235_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Get the size of a texture, as floating point values.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_GetTextureSize@, defined at @SDL3\/SDL_render.h 994:34@
+sDL_GetTextureSize
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to query.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@w@]: a pointer filled in with the width of the texture in pixels. This argument can be NULL if you don\'t need this information.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@h@]: a pointer filled in with the height of the texture in pixels. This argument can be NULL if you don\'t need this information.
+  -> IO BG.CBool
+sDL_GetTextureSize = hs_bindgen_132d974026c63235
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetTexturePalette@
+foreign import ccall unsafe "hs_bindgen_b9b978978bcb3701"
+  hs_bindgen_b9b978978bcb3701_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetTexturePalette@
+hs_bindgen_b9b978978bcb3701
+  :: BG.Ptr SDL_Texture
+  -> BG.Ptr SDL3.Sys.Bindgen.Pixels.SDL_Palette
+  -> IO BG.CBool
+hs_bindgen_b9b978978bcb3701 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_b9b978978bcb3701_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Set the palette used by a texture.
+--
+--     Setting the palette keeps an internal reference to the palette, which can be safely destroyed afterwards.
+--
+--     A single palette can be shared with many textures.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.4.0
+--
+--     [See also]: SDL_CreatePalette, 'sDL_GetTexturePalette'
+--
+--     [C declaration]: @SDL_SetTexturePalette@, defined at @SDL3\/SDL_render.h 1016:34@
+sDL_SetTexturePalette
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to update.
+  -> BG.Ptr SDL3.Sys.Bindgen.Pixels.SDL_Palette
+  -- ^
+  --
+  --           [@palette@]: the SDL_Palette structure to use.
+  -> IO BG.CBool
+sDL_SetTexturePalette = hs_bindgen_b9b978978bcb3701
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTexturePalette@
+foreign import ccall unsafe "hs_bindgen_38dd0c6a7ed9af72"
+  hs_bindgen_38dd0c6a7ed9af72_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTexturePalette@
+hs_bindgen_38dd0c6a7ed9af72
+  :: BG.Ptr SDL_Texture
+  -> IO (BG.Ptr SDL3.Sys.Bindgen.Pixels.SDL_Palette)
+hs_bindgen_38dd0c6a7ed9af72 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_38dd0c6a7ed9af72_base (BG.toFFIType x0))
+
+-- | Get the palette used by a texture.
+--
+--     [Returns]: a pointer to the palette used by the texture, or NULL if there is no palette used.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.4.0
+--
+--     [See also]: 'sDL_SetTexturePalette'
+--
+--     [C declaration]: @SDL_GetTexturePalette@, defined at @SDL3\/SDL_render.h 1031:43@
+sDL_GetTexturePalette
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to query.
+  -> IO (BG.Ptr SDL3.Sys.Bindgen.Pixels.SDL_Palette)
+sDL_GetTexturePalette = hs_bindgen_38dd0c6a7ed9af72
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetTextureColorMod@
+foreign import ccall unsafe "hs_bindgen_328bc9103549865a"
+  hs_bindgen_328bc9103549865a_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetTextureColorMod@
+hs_bindgen_328bc9103549865a
+  :: BG.Ptr SDL_Texture
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> IO BG.CBool
+hs_bindgen_328bc9103549865a =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_328bc9103549865a_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Set an additional color value multiplied into render copy operations.
+--
+--     When this texture is rendered, during the copy operation each source color channel is modulated by the appropriate color value according to the following formula:
+--
+--     @srcC = srcC * (color \/ 255)@
+--
+--     Color modulation is not always supported by the renderer; it will return false if color modulation is not supported.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetTextureColorMod', 'sDL_SetTextureAlphaMod', 'sDL_SetTextureColorModFloat'
+--
+--     [C declaration]: @SDL_SetTextureColorMod@, defined at @SDL3\/SDL_render.h 1060:34@
+sDL_SetTextureColorMod
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to update.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@r@]: the red color value multiplied into copy operations.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@g@]: the green color value multiplied into copy operations.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@b@]: the blue color value multiplied into copy operations.
+  -> IO BG.CBool
+sDL_SetTextureColorMod = hs_bindgen_328bc9103549865a
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetTextureColorModFloat@
+foreign import ccall unsafe "hs_bindgen_f0f25fbdb4151d72"
+  hs_bindgen_f0f25fbdb4151d72_base
+    :: BG.Ptr BG.Void
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.CFloat
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetTextureColorModFloat@
+hs_bindgen_f0f25fbdb4151d72
+  :: BG.Ptr SDL_Texture
+  -> BG.CFloat
+  -> BG.CFloat
+  -> BG.CFloat
+  -> IO BG.CBool
+hs_bindgen_f0f25fbdb4151d72 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_f0f25fbdb4151d72_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Set an additional color value multiplied into render copy operations.
+--
+--     When this texture is rendered, during the copy operation each source color channel is modulated by the appropriate color value according to the following formula:
+--
+--     @srcC = srcC * color@
+--
+--     Color modulation is not always supported by the renderer; it will return false if color modulation is not supported.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetTextureColorModFloat', 'sDL_SetTextureAlphaModFloat', 'sDL_SetTextureColorMod'
+--
+--     [C declaration]: @SDL_SetTextureColorModFloat@, defined at @SDL3\/SDL_render.h 1090:34@
+sDL_SetTextureColorModFloat
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to update.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@r@]: the red color value multiplied into copy operations.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@g@]: the green color value multiplied into copy operations.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@b@]: the blue color value multiplied into copy operations.
+  -> IO BG.CBool
+sDL_SetTextureColorModFloat =
+  hs_bindgen_f0f25fbdb4151d72
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTextureColorMod@
+foreign import ccall unsafe "hs_bindgen_23c41565e3ebaf20"
+  hs_bindgen_23c41565e3ebaf20_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTextureColorMod@
+hs_bindgen_23c41565e3ebaf20
+  :: BG.Ptr SDL_Texture
+  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> IO BG.CBool
+hs_bindgen_23c41565e3ebaf20 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_23c41565e3ebaf20_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Get the additional color value multiplied into render copy operations.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetTextureAlphaMod', 'sDL_GetTextureColorModFloat', 'sDL_SetTextureColorMod'
+--
+--     [C declaration]: @SDL_GetTextureColorMod@, defined at @SDL3\/SDL_render.h 1111:34@
+sDL_GetTextureColorMod
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to query.
+  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@r@]: a pointer filled in with the current red color value.
+  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@g@]: a pointer filled in with the current green color value.
+  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@b@]: a pointer filled in with the current blue color value.
+  -> IO BG.CBool
+sDL_GetTextureColorMod = hs_bindgen_23c41565e3ebaf20
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTextureColorModFloat@
+foreign import ccall unsafe "hs_bindgen_40f14359348d1377"
+  hs_bindgen_40f14359348d1377_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTextureColorModFloat@
+hs_bindgen_40f14359348d1377
+  :: BG.Ptr SDL_Texture
+  -> BG.Ptr BG.CFloat
+  -> BG.Ptr BG.CFloat
+  -> BG.Ptr BG.CFloat
+  -> IO BG.CBool
+hs_bindgen_40f14359348d1377 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_40f14359348d1377_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Get the additional color value multiplied into render copy operations.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetTextureAlphaModFloat', 'sDL_GetTextureColorMod', 'sDL_SetTextureColorModFloat'
+--
+--     [C declaration]: @SDL_GetTextureColorModFloat@, defined at @SDL3\/SDL_render.h 1131:34@
+sDL_GetTextureColorModFloat
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to query.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@r@]: a pointer filled in with the current red color value.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@g@]: a pointer filled in with the current green color value.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@b@]: a pointer filled in with the current blue color value.
+  -> IO BG.CBool
+sDL_GetTextureColorModFloat =
+  hs_bindgen_40f14359348d1377
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetTextureAlphaMod@
+foreign import ccall unsafe "hs_bindgen_5ed240f184c27e2f"
+  hs_bindgen_5ed240f184c27e2f_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.Word8
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetTextureAlphaMod@
+hs_bindgen_5ed240f184c27e2f
+  :: BG.Ptr SDL_Texture
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> IO BG.CBool
+hs_bindgen_5ed240f184c27e2f =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_5ed240f184c27e2f_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Set an additional alpha value multiplied into render copy operations.
+--
+--     When this texture is rendered, during the copy operation the source alpha value is modulated by this alpha value according to the following formula:
+--
+--     @srcA = srcA * (alpha \/ 255)@
+--
+--     Alpha modulation is not always supported by the renderer; it will return false if alpha modulation is not supported.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetTextureAlphaMod', 'sDL_SetTextureAlphaModFloat', 'sDL_SetTextureColorMod'
+--
+--     [C declaration]: @SDL_SetTextureAlphaMod@, defined at @SDL3\/SDL_render.h 1157:34@
+sDL_SetTextureAlphaMod
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to update.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@alpha@]: the source alpha value multiplied into copy operations.
+  -> IO BG.CBool
+sDL_SetTextureAlphaMod = hs_bindgen_5ed240f184c27e2f
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetTextureAlphaModFloat@
+foreign import ccall unsafe "hs_bindgen_5ea85df5eef9526f"
+  hs_bindgen_5ea85df5eef9526f_base
+    :: BG.Ptr BG.Void
+    -> BG.CFloat
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetTextureAlphaModFloat@
+hs_bindgen_5ea85df5eef9526f
+  :: BG.Ptr SDL_Texture
+  -> BG.CFloat
+  -> IO BG.CBool
+hs_bindgen_5ea85df5eef9526f =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_5ea85df5eef9526f_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Set an additional alpha value multiplied into render copy operations.
+--
+--     When this texture is rendered, during the copy operation the source alpha value is modulated by this alpha value according to the following formula:
+--
+--     @srcA = srcA * alpha@
+--
+--     Alpha modulation is not always supported by the renderer; it will return false if alpha modulation is not supported.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetTextureAlphaModFloat', 'sDL_SetTextureAlphaMod', 'sDL_SetTextureColorModFloat'
+--
+--     [C declaration]: @SDL_SetTextureAlphaModFloat@, defined at @SDL3\/SDL_render.h 1183:34@
+sDL_SetTextureAlphaModFloat
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to update.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@alpha@]: the source alpha value multiplied into copy operations.
+  -> IO BG.CBool
+sDL_SetTextureAlphaModFloat =
+  hs_bindgen_5ea85df5eef9526f
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTextureAlphaMod@
+foreign import ccall unsafe "hs_bindgen_b3e62a9848e5067e"
+  hs_bindgen_b3e62a9848e5067e_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTextureAlphaMod@
+hs_bindgen_b3e62a9848e5067e
+  :: BG.Ptr SDL_Texture
+  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> IO BG.CBool
+hs_bindgen_b3e62a9848e5067e =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_b3e62a9848e5067e_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Get the additional alpha value multiplied into render copy operations.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetTextureAlphaModFloat', 'sDL_GetTextureColorMod', 'sDL_SetTextureAlphaMod'
+--
+--     [C declaration]: @SDL_GetTextureAlphaMod@, defined at @SDL3\/SDL_render.h 1201:34@
+sDL_GetTextureAlphaMod
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to query.
+  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@alpha@]: a pointer filled in with the current alpha value.
+  -> IO BG.CBool
+sDL_GetTextureAlphaMod = hs_bindgen_b3e62a9848e5067e
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTextureAlphaModFloat@
+foreign import ccall unsafe "hs_bindgen_55b6c4f083626b7a"
+  hs_bindgen_55b6c4f083626b7a_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTextureAlphaModFloat@
+hs_bindgen_55b6c4f083626b7a
+  :: BG.Ptr SDL_Texture
+  -> BG.Ptr BG.CFloat
+  -> IO BG.CBool
+hs_bindgen_55b6c4f083626b7a =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_55b6c4f083626b7a_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Get the additional alpha value multiplied into render copy operations.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetTextureAlphaMod', 'sDL_GetTextureColorModFloat', 'sDL_SetTextureAlphaModFloat'
+--
+--     [C declaration]: @SDL_GetTextureAlphaModFloat@, defined at @SDL3\/SDL_render.h 1219:34@
+sDL_GetTextureAlphaModFloat
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to query.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@alpha@]: a pointer filled in with the current alpha value.
+  -> IO BG.CBool
+sDL_GetTextureAlphaModFloat =
+  hs_bindgen_55b6c4f083626b7a
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetTextureBlendMode@
+foreign import ccall unsafe "hs_bindgen_34ab5b9eb64f99e7"
+  hs_bindgen_34ab5b9eb64f99e7_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetTextureBlendMode@
+hs_bindgen_34ab5b9eb64f99e7
+  :: BG.Ptr SDL_Texture
+  -> SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
+  -> IO BG.CBool
+hs_bindgen_34ab5b9eb64f99e7 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_34ab5b9eb64f99e7_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Set the blend mode for a texture, used by @SDL_RenderTexture()@.
+--
+--     This blend mode is used for any drawing that involves this texture.
+--
+--     If the blend mode is not supported, the closest supported mode is chosen and this function returns false.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetTextureBlendMode', 'sDL_SetRenderDrawBlendMode'
+--
+--     [C declaration]: @SDL_SetTextureBlendMode@, defined at @SDL3\/SDL_render.h 1241:34@
+sDL_SetTextureBlendMode
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to update.
+  -> SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
+  -- ^
+  --
+  --           [@blendMode@]: the SDL_BlendMode to use for texture blending.
+  -> IO BG.CBool
+sDL_SetTextureBlendMode = hs_bindgen_34ab5b9eb64f99e7
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTextureBlendMode@
+foreign import ccall unsafe "hs_bindgen_9e50ca0241b5eecf"
+  hs_bindgen_9e50ca0241b5eecf_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTextureBlendMode@
+hs_bindgen_9e50ca0241b5eecf
+  :: BG.Ptr SDL_Texture
+  -> BG.Ptr SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
+  -> IO BG.CBool
+hs_bindgen_9e50ca0241b5eecf =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_9e50ca0241b5eecf_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Get the blend mode used for texture copy operations.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_SetTextureBlendMode'
+--
+--     [C declaration]: @SDL_GetTextureBlendMode@, defined at @SDL3\/SDL_render.h 1257:34@
+sDL_GetTextureBlendMode
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to query.
+  -> BG.Ptr SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
+  -- ^
+  --
+  --           [@blendMode@]: a pointer filled in with the current SDL_BlendMode.
+  -> IO BG.CBool
+sDL_GetTextureBlendMode = hs_bindgen_9e50ca0241b5eecf
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetTextureScaleMode@
+foreign import ccall unsafe "hs_bindgen_7ec0426bb117fde0"
+  hs_bindgen_7ec0426bb117fde0_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.Support.CInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetTextureScaleMode@
+hs_bindgen_7ec0426bb117fde0
+  :: BG.Ptr SDL_Texture
+  -> SDL3.Sys.Bindgen.Surface.SDL_ScaleMode
+  -> IO BG.CBool
+hs_bindgen_7ec0426bb117fde0 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_7ec0426bb117fde0_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Set the scale mode used for texture scale operations.
+--
+--     The default texture scale mode is SDL_SCALEMODE_LINEAR.
+--
+--     If the scale mode is not supported, the closest supported mode is chosen.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetTextureScaleMode'
+--
+--     [C declaration]: @SDL_SetTextureScaleMode@, defined at @SDL3\/SDL_render.h 1277:34@
+sDL_SetTextureScaleMode
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to update.
+  -> SDL3.Sys.Bindgen.Surface.SDL_ScaleMode
+  -- ^
+  --
+  --           [@scaleMode@]: the SDL_ScaleMode to use for texture scaling.
+  -> IO BG.CBool
+sDL_SetTextureScaleMode = hs_bindgen_7ec0426bb117fde0
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTextureScaleMode@
+foreign import ccall unsafe "hs_bindgen_d153e754b011263b"
+  hs_bindgen_d153e754b011263b_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetTextureScaleMode@
+hs_bindgen_d153e754b011263b
+  :: BG.Ptr SDL_Texture
+  -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_ScaleMode
+  -> IO BG.CBool
+hs_bindgen_d153e754b011263b =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_d153e754b011263b_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Get the scale mode used for texture scale operations.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_SetTextureScaleMode'
+--
+--     [C declaration]: @SDL_GetTextureScaleMode@, defined at @SDL3\/SDL_render.h 1293:34@
+sDL_GetTextureScaleMode
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to query.
+  -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_ScaleMode
+  -- ^
+  --
+  --           [@scaleMode@]: a pointer filled in with the current scale mode.
+  -> IO BG.CBool
+sDL_GetTextureScaleMode = hs_bindgen_d153e754b011263b
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_UpdateTexture@
+foreign import ccall unsafe "hs_bindgen_9d30d0aa8075c243"
+  hs_bindgen_9d30d0aa8075c243_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_UpdateTexture@
+hs_bindgen_9d30d0aa8075c243
+  :: BG.Ptr SDL_Texture
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -> PtrConst.PtrConst BG.Void
+  -> BG.CInt
+  -> IO BG.CBool
+hs_bindgen_9d30d0aa8075c243 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_9d30d0aa8075c243_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Update the given texture rectangle with new pixel data.
+--
+--     The pixel data must be in the pixel format of the texture, which can be queried using the SDL_PROP_TEXTURE_FORMAT_NUMBER property.
+--
+--     This is a fairly slow function, intended for use with static textures that do not change often.
+--
+--     If the texture is intended to be updated often, it is preferred to create the texture as streaming and use the locking functions referenced below. While this function will work with streaming textures, for optimization reasons you may not get the pixels back if you lock the texture afterward.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_LockTexture', 'sDL_UnlockTexture', 'sDL_UpdateNVTexture', 'sDL_UpdateYUVTexture'
+--
+--     [C declaration]: @SDL_UpdateTexture@, defined at @SDL3\/SDL_render.h 1327:34@
+sDL_UpdateTexture
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to update.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -- ^
+  --
+  --           [@rect@]: an SDL_Rect structure representing the area to update, or NULL to update the entire texture.
+  -> PtrConst.PtrConst BG.Void
+  -- ^
+  --
+  --           [@pixels@]: the raw pixel data in the format of the texture.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@pitch@]: the number of bytes in a row of pixel data, including padding between lines.
+  -> IO BG.CBool
+sDL_UpdateTexture = hs_bindgen_9d30d0aa8075c243
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_UpdateYUVTexture@
+foreign import ccall unsafe "hs_bindgen_145fdda972278858"
+  hs_bindgen_145fdda972278858_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_UpdateYUVTexture@
+hs_bindgen_145fdda972278858
+  :: BG.Ptr SDL_Texture
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> BG.CInt
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> BG.CInt
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> BG.CInt
+  -> IO BG.CBool
+hs_bindgen_145fdda972278858 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                \x7 ->
+                  fmap
+                    BG.fromFFIType
+                    ( hs_bindgen_145fdda972278858_base
+                        (BG.toFFIType x0)
+                        (BG.toFFIType x1)
+                        (BG.toFFIType x2)
+                        (BG.toFFIType x3)
+                        (BG.toFFIType x4)
+                        (BG.toFFIType x5)
+                        (BG.toFFIType x6)
+                        (BG.toFFIType x7)
+                    )
+
+-- | Update a rectangle within a planar YV12 or IYUV texture with new pixel data.
+--
+--     You can use @SDL_UpdateTexture()@ as long as your pixel data is a contiguous block of Y and U\/V planes in the proper order, but this function is available if your pixel data is not contiguous.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_UpdateNVTexture', 'sDL_UpdateTexture'
+--
+--     [C declaration]: @SDL_UpdateYUVTexture@, defined at @SDL3\/SDL_render.h 1359:34@
+sDL_UpdateYUVTexture
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to update.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -- ^
+  --
+  --           [@rect@]: a pointer to the rectangle of pixels to update, or NULL to update the entire texture.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@Yplane@]: the raw pixel data for the Y plane.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@Ypitch@]: the number of bytes between rows of pixel data for the Y plane.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@Uplane@]: the raw pixel data for the U plane.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@Upitch@]: the number of bytes between rows of pixel data for the U plane.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@Vplane@]: the raw pixel data for the V plane.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@Vpitch@]: the number of bytes between rows of pixel data for the V plane.
+  -> IO BG.CBool
+sDL_UpdateYUVTexture = hs_bindgen_145fdda972278858
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_UpdateNVTexture@
+foreign import ccall unsafe "hs_bindgen_8e87aea72679c0be"
+  hs_bindgen_8e87aea72679c0be_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_UpdateNVTexture@
+hs_bindgen_8e87aea72679c0be
+  :: BG.Ptr SDL_Texture
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> BG.CInt
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> BG.CInt
+  -> IO BG.CBool
+hs_bindgen_8e87aea72679c0be =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_8e87aea72679c0be_base
+                    (BG.toFFIType x0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                    (BG.toFFIType x4)
+                    (BG.toFFIType x5)
+                )
+
+-- | Update a rectangle within a planar NV12 or NV21 texture with new pixels.
+--
+--     You can use @SDL_UpdateTexture()@ as long as your pixel data is a contiguous block of NV12\/21 planes in the proper order, but this function is available if your pixel data is not contiguous.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_UpdateTexture', 'sDL_UpdateYUVTexture'
+--
+--     [C declaration]: @SDL_UpdateNVTexture@, defined at @SDL3\/SDL_render.h 1391:34@
+sDL_UpdateNVTexture
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to update.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -- ^
+  --
+  --           [@rect@]: a pointer to the rectangle of pixels to update, or NULL to update the entire texture.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@Yplane@]: the raw pixel data for the Y plane.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@Ypitch@]: the number of bytes between rows of pixel data for the Y plane.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@UVplane@]: the raw pixel data for the UV plane.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@UVpitch@]: the number of bytes between rows of pixel data for the UV plane.
+  -> IO BG.CBool
+sDL_UpdateNVTexture = hs_bindgen_8e87aea72679c0be
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_LockTexture@
+foreign import ccall unsafe "hs_bindgen_f81dacbd782960a7"
+  hs_bindgen_f81dacbd782960a7_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_LockTexture@
+hs_bindgen_f81dacbd782960a7
+  :: BG.Ptr SDL_Texture
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -> BG.Ptr (BG.Ptr BG.Void)
+  -> BG.Ptr BG.CInt
+  -> IO BG.CBool
+hs_bindgen_f81dacbd782960a7 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_f81dacbd782960a7_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Lock a portion of the texture for __write-only__ pixel access.
+--
+--     As an optimization, the pixels made available for editing don\'t necessarily contain the old texture data. This is a write-only operation, and if you need to keep a copy of the texture data you should do that at the application level.
+--
+--     You must use @SDL_UnlockTexture()@ to unlock the pixels and apply any changes.
+--
+--     [Returns]: true on success or false if the texture is not valid or was not created with @SDL_TEXTUREACCESS_STREAMING@; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_LockTextureToSurface', 'sDL_UnlockTexture'
+--
+--     [C declaration]: @SDL_LockTexture@, defined at @SDL3\/SDL_render.h 1426:34@
+sDL_LockTexture
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to lock for access, which was created with @SDL_TEXTUREACCESS_STREAMING@.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -- ^
+  --
+  --           [@rect@]: an SDL_Rect structure representing the area to lock for access; NULL to lock the entire texture.
+  -> BG.Ptr (BG.Ptr BG.Void)
+  -- ^
+  --
+  --           [@pixels@]: this is filled in with a pointer to the locked pixels, appropriately offset by the locked area.
+  -> BG.Ptr BG.CInt
+  -- ^
+  --
+  --           [@pitch@]: this is filled in with the pitch of the locked pixels; the pitch is the length of one row in bytes.
+  -> IO BG.CBool
+sDL_LockTexture = hs_bindgen_f81dacbd782960a7
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_LockTextureToSurface@
+foreign import ccall unsafe "hs_bindgen_0422047faea9296b"
+  hs_bindgen_0422047faea9296b_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_LockTextureToSurface@
+hs_bindgen_0422047faea9296b
+  :: BG.Ptr SDL_Texture
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -> BG.Ptr (BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface)
+  -> IO BG.CBool
+hs_bindgen_0422047faea9296b =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_0422047faea9296b_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Lock a portion of the texture for __write-only__ pixel access, and expose it as a SDL surface.
+--
+--     Besides providing an SDL_Surface instead of raw pixel data, this function operates like SDL_LockTexture.
+--
+--     As an optimization, the pixels made available for editing don\'t necessarily contain the old texture data. This is a write-only operation, and if you need to keep a copy of the texture data you should do that at the application level.
+--
+--     You must use @SDL_UnlockTexture()@ to unlock the pixels and apply any changes.
+--
+--     The returned surface is freed internally after calling @SDL_UnlockTexture()@ or @SDL_DestroyTexture()@. The caller should not free it.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_LockTexture', 'sDL_UnlockTexture'
+--
+--     [C declaration]: @SDL_LockTextureToSurface@, defined at @SDL3\/SDL_render.h 1464:34@
+sDL_LockTextureToSurface
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to lock for access, which must be created with @SDL_TEXTUREACCESS_STREAMING@.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -- ^
+  --
+  --           [@rect@]: a pointer to the rectangle to lock for access. If the rect is NULL, the entire texture will be locked.
+  -> BG.Ptr (BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface)
+  -- ^
+  --
+  --           [@surface@]: a pointer to an SDL surface of size __rect__. Don\'t assume any specific pixel content.
+  -> IO BG.CBool
+sDL_LockTextureToSurface =
+  hs_bindgen_0422047faea9296b
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_UnlockTexture@
+foreign import ccall unsafe "hs_bindgen_9d1b4d7003c2d0ec"
+  hs_bindgen_9d1b4d7003c2d0ec_base
+    :: BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_UnlockTexture@
+hs_bindgen_9d1b4d7003c2d0ec
+  :: BG.Ptr SDL_Texture
+  -> IO ()
+hs_bindgen_9d1b4d7003c2d0ec =
+  \x0 ->
+    hs_bindgen_9d1b4d7003c2d0ec_base (BG.toFFIType x0)
+
+-- | Unlock a texture, uploading the changes to video memory, if needed.
+--
+--     __Warning__: Please note that @SDL_LockTexture()@ is intended to be write-only; it will not guarantee the previous contents of the texture will be provided. You must fully initialize any area of a texture that you lock before unlocking it, as the pixels might otherwise be uninitialized memory.
+--
+--     Which is to say: locking and immediately unlocking a texture can result in corrupted textures, depending on the renderer in use.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_LockTexture'
+--
+--     [C declaration]: @SDL_UnlockTexture@, defined at @SDL3\/SDL_render.h 1485:34@
+sDL_UnlockTexture
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: a texture locked by @SDL_LockTexture()@.
+  -> IO ()
+sDL_UnlockTexture = hs_bindgen_9d1b4d7003c2d0ec
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderTarget@
+foreign import ccall unsafe "hs_bindgen_42456f91219d7d63"
+  hs_bindgen_42456f91219d7d63_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderTarget@
+hs_bindgen_42456f91219d7d63
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL_Texture
+  -> IO BG.CBool
+hs_bindgen_42456f91219d7d63 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_42456f91219d7d63_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Set a texture as the current rendering target.
+--
+--     The default render target is the window for which the renderer was created. To stop rendering to a texture and render to the window again, call this function with a NULL @texture@.
+--
+--     Viewport, cliprect, scale, and logical presentation are unique to each render target. Get and set functions for these states apply to the current render target set by this function, and those states persist on each target when the current render target changes.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetRenderTarget'
+--
+--     [C declaration]: @SDL_SetRenderTarget@, defined at @SDL3\/SDL_render.h 1512:34@
+sDL_SetRenderTarget
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the targeted texture, which must be created with the @SDL_TEXTUREACCESS_TARGET@ flag, or NULL to render to the window instead of a texture.
+  -> IO BG.CBool
+sDL_SetRenderTarget = hs_bindgen_42456f91219d7d63
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderTarget@
+foreign import ccall unsafe "hs_bindgen_afd608e22c7b34c2"
+  hs_bindgen_afd608e22c7b34c2_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderTarget@
+hs_bindgen_afd608e22c7b34c2
+  :: BG.Ptr SDL_Renderer
+  -> IO (BG.Ptr SDL_Texture)
+hs_bindgen_afd608e22c7b34c2 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_afd608e22c7b34c2_base (BG.toFFIType x0))
+
+-- | Get the current render target.
+--
+--     The default render target is the window for which the renderer was created, and is reported a NULL here.
+--
+--     [Returns]: the current render target or NULL for the default render target.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_SetRenderTarget'
+--
+--     [C declaration]: @SDL_GetRenderTarget@, defined at @SDL3\/SDL_render.h 1529:43@
+sDL_GetRenderTarget
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> IO (BG.Ptr SDL_Texture)
+sDL_GetRenderTarget = hs_bindgen_afd608e22c7b34c2
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderLogicalPresentation@
+foreign import ccall unsafe "hs_bindgen_99a6a5d6611eb0ad"
+  hs_bindgen_99a6a5d6611eb0ad_base
+    :: BG.Ptr BG.Void
+    -> BG.CInt
+    -> BG.CInt
+    -> BG.CUInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderLogicalPresentation@
+hs_bindgen_99a6a5d6611eb0ad
+  :: BG.Ptr SDL_Renderer
+  -> BG.CInt
+  -> BG.CInt
+  -> SDL_RendererLogicalPresentation
+  -> IO BG.CBool
+hs_bindgen_99a6a5d6611eb0ad =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_99a6a5d6611eb0ad_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Set a device-independent resolution and presentation mode for rendering.
+--
+--     This function sets the width and height of the logical rendering output. The renderer will act as if the current render target is always the requested dimensions, scaling to the actual resolution as necessary.
+--
+--     This can be useful for games that expect a fixed size, but would like to scale the output to whatever is available, regardless of how a user resizes a window, or if the display is high DPI.
+--
+--     Logical presentation can be used with both render target textures and the renderer\'s window; the state is unique to each render target, and this function sets the state for the current render target. It might be useful to draw to a texture that matches the window dimensions with logical presentation enabled, and then draw that texture across the entire window with logical presentation disabled. Be careful not to render both with logical presentation enabled, however, as this could produce double-letterboxing, etc.
+--
+--     You can disable logical coordinates by setting the mode to SDL_LOGICAL_PRESENTATION_DISABLED, and in that case you get the full pixel resolution of the render target; it is safe to toggle logical presentation during the rendering of a frame: perhaps most of the rendering is done to specific dimensions but to make fonts look sharp, the app turns off logical presentation while drawing text, for example.
+--
+--     You can convert coordinates in an event into rendering coordinates using @SDL_ConvertEventToRenderCoordinates()@.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_ConvertEventToRenderCoordinates', 'sDL_GetRenderLogicalPresentation', 'sDL_GetRenderLogicalPresentationRect'
+--
+--     [C declaration]: @SDL_SetRenderLogicalPresentation@, defined at @SDL3\/SDL_render.h 1576:34@
+sDL_SetRenderLogicalPresentation
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@w@]: the width of the logical resolution.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@h@]: the height of the logical resolution.
+  -> SDL_RendererLogicalPresentation
+  -- ^
+  --
+  --           [@mode@]: the presentation mode used.
+  -> IO BG.CBool
+sDL_SetRenderLogicalPresentation =
+  hs_bindgen_99a6a5d6611eb0ad
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderLogicalPresentation@
+foreign import ccall unsafe "hs_bindgen_cbe5162cf71da053"
+  hs_bindgen_cbe5162cf71da053_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderLogicalPresentation@
+hs_bindgen_cbe5162cf71da053
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr BG.CInt
+  -> BG.Ptr BG.CInt
+  -> BG.Ptr SDL_RendererLogicalPresentation
+  -> IO BG.CBool
+hs_bindgen_cbe5162cf71da053 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_cbe5162cf71da053_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Get device independent resolution and presentation mode for rendering.
+--
+--     This function gets the width and height of the logical rendering output, or 0 if a logical resolution is not enabled.
+--
+--     Each render target has its own logical presentation state. This function gets the state for the current render target.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_SetRenderLogicalPresentation'
+--
+--     [C declaration]: @SDL_GetRenderLogicalPresentation@, defined at @SDL3\/SDL_render.h 1601:34@
+sDL_GetRenderLogicalPresentation
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr BG.CInt
+  -- ^
+  --
+  --           [@w@]: an int filled with the logical presentation width.
+  -> BG.Ptr BG.CInt
+  -- ^
+  --
+  --           [@h@]: an int filled with the logical presentation height.
+  -> BG.Ptr SDL_RendererLogicalPresentation
+  -- ^
+  --
+  --           [@mode@]: a variable filled with the logical presentation mode being used.
+  -> IO BG.CBool
+sDL_GetRenderLogicalPresentation =
+  hs_bindgen_cbe5162cf71da053
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderLogicalPresentationRect@
+foreign import ccall unsafe "hs_bindgen_60fac3e135efff7b"
+  hs_bindgen_60fac3e135efff7b_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderLogicalPresentationRect@
+hs_bindgen_60fac3e135efff7b
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -> IO BG.CBool
+hs_bindgen_60fac3e135efff7b =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_60fac3e135efff7b_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Get the final presentation rectangle for rendering.
+--
+--     This function returns the calculated rectangle used for logical presentation, based on the presentation mode and output size. If logical presentation is disabled, it will fill the rectangle with the output size, in pixels.
+--
+--     Each render target has its own logical presentation state. This function gets the rectangle for the current render target.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_SetRenderLogicalPresentation'
+--
+--     [C declaration]: @SDL_GetRenderLogicalPresentationRect@, defined at @SDL3\/SDL_render.h 1626:34@
+sDL_GetRenderLogicalPresentationRect
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -- ^
+  --
+  --           [@rect@]: a pointer filled in with the final presentation rectangle, may be NULL.
+  -> IO BG.CBool
+sDL_GetRenderLogicalPresentationRect =
+  hs_bindgen_60fac3e135efff7b
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderCoordinatesFromWindow@
+foreign import ccall unsafe "hs_bindgen_88c23a7a2bb3f897"
+  hs_bindgen_88c23a7a2bb3f897_base
+    :: BG.Ptr BG.Void
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderCoordinatesFromWindow@
+hs_bindgen_88c23a7a2bb3f897
+  :: BG.Ptr SDL_Renderer
+  -> BG.CFloat
+  -> BG.CFloat
+  -> BG.Ptr BG.CFloat
+  -> BG.Ptr BG.CFloat
+  -> IO BG.CBool
+hs_bindgen_88c23a7a2bb3f897 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_88c23a7a2bb3f897_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
+
+-- | Get a point in render coordinates when given a point in window coordinates.
+--
+--     This takes into account several states:
+--
+--     * The window dimensions.
+--
+--     * The logical presentation settings (SDL_SetRenderLogicalPresentation)
+--
+--     * The scale (SDL_SetRenderScale)
+--
+--     * The viewport (SDL_SetRenderViewport)
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_SetRenderLogicalPresentation', 'sDL_SetRenderScale'
+--
+--     [C declaration]: @SDL_RenderCoordinatesFromWindow@, defined at @SDL3\/SDL_render.h 1653:34@
+sDL_RenderCoordinatesFromWindow
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@window_x@]: the x coordinate in window coordinates.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@window_y@]: the y coordinate in window coordinates.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@x@]: a pointer filled with the x coordinate in render coordinates.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@y@]: a pointer filled with the y coordinate in render coordinates.
+  -> IO BG.CBool
+sDL_RenderCoordinatesFromWindow =
+  hs_bindgen_88c23a7a2bb3f897
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderCoordinatesToWindow@
+foreign import ccall unsafe "hs_bindgen_30a19a6793a8a60a"
+  hs_bindgen_30a19a6793a8a60a_base
+    :: BG.Ptr BG.Void
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderCoordinatesToWindow@
+hs_bindgen_30a19a6793a8a60a
+  :: BG.Ptr SDL_Renderer
+  -> BG.CFloat
+  -> BG.CFloat
+  -> BG.Ptr BG.CFloat
+  -> BG.Ptr BG.CFloat
+  -> IO BG.CBool
+hs_bindgen_30a19a6793a8a60a =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_30a19a6793a8a60a_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
+
+-- | Get a point in window coordinates when given a point in render coordinates.
+--
+--     This takes into account several states:
+--
+--     * The window dimensions.
+--
+--     * The logical presentation settings (SDL_SetRenderLogicalPresentation)
+--
+--     * The scale (SDL_SetRenderScale)
+--
+--     * The viewport (SDL_SetRenderViewport)
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_SetRenderLogicalPresentation', 'sDL_SetRenderScale', 'sDL_SetRenderViewport'
+--
+--     [C declaration]: @SDL_RenderCoordinatesToWindow@, defined at @SDL3\/SDL_render.h 1683:34@
+sDL_RenderCoordinatesToWindow
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@x@]: the x coordinate in render coordinates.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@y@]: the y coordinate in render coordinates.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@window_x@]: a pointer filled with the x coordinate in window coordinates.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@window_y@]: a pointer filled with the y coordinate in window coordinates.
+  -> IO BG.CBool
+sDL_RenderCoordinatesToWindow =
+  hs_bindgen_30a19a6793a8a60a
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_ConvertEventToRenderCoordinates@
+foreign import ccall unsafe "hs_bindgen_99e1877354dd4cdb"
+  hs_bindgen_99e1877354dd4cdb_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_ConvertEventToRenderCoordinates@
+hs_bindgen_99e1877354dd4cdb
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL3.Sys.Bindgen.Events.SDL_Event
+  -> IO BG.CBool
+hs_bindgen_99e1877354dd4cdb =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_99e1877354dd4cdb_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Convert the coordinates in an event to render coordinates.
+--
+--     This takes into account several states:
+--
+--     * The window dimensions.
+--
+--     * The logical presentation settings (SDL_SetRenderLogicalPresentation)
+--
+--     * The scale (SDL_SetRenderScale)
+--
+--     * The viewport (SDL_SetRenderViewport)
+--
+--     Various event types are converted with this function: mouse, touch, pen, etc.
+--
+--     Touch coordinates are converted from normalized coordinates in the window to non-normalized rendering coordinates.
+--
+--     Relative mouse coordinates (xrel and yrel event fields) are /also/ converted. Applications that do not want these fields converted should use @SDL_RenderCoordinatesFromWindow()@ on the specific event fields instead of converting the entire event structure.
+--
+--     Once converted, coordinates may be outside the rendering area.
+--
+--     [Returns]: true if the event is converted or doesn\'t need conversion, or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderCoordinatesFromWindow'
+--
+--     [C declaration]: @SDL_ConvertEventToRenderCoordinates@, defined at @SDL3\/SDL_render.h 1719:34@
+sDL_ConvertEventToRenderCoordinates
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr SDL3.Sys.Bindgen.Events.SDL_Event
+  -- ^
+  --
+  --           [@event@]: the event to modify.
+  -> IO BG.CBool
+sDL_ConvertEventToRenderCoordinates =
+  hs_bindgen_99e1877354dd4cdb
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderViewport@
+foreign import ccall unsafe "hs_bindgen_da47a291603fd568"
+  hs_bindgen_da47a291603fd568_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderViewport@
+hs_bindgen_da47a291603fd568
+  :: BG.Ptr SDL_Renderer
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -> IO BG.CBool
+hs_bindgen_da47a291603fd568 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_da47a291603fd568_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Set the drawing area for rendering on the current target.
+--
+--     Drawing will clip to this area (separately from any clipping done with SDL_SetRenderClipRect), and the top left of the area will become coordinate (0, 0) for future drawing commands.
+--
+--     The area\'s width and height must be >= 0.
+--
+--     Each render target has its own viewport. This function sets the viewport for the current render target.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetRenderViewport', 'sDL_RenderViewportSet'
+--
+--     [C declaration]: @SDL_SetRenderViewport@, defined at @SDL3\/SDL_render.h 1746:34@
+sDL_SetRenderViewport
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -- ^
+  --
+  --           [@rect@]: the SDL_Rect structure representing the drawing area, or NULL to set the viewport to the entire target.
+  -> IO BG.CBool
+sDL_SetRenderViewport = hs_bindgen_da47a291603fd568
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderViewport@
+foreign import ccall unsafe "hs_bindgen_d36147bdfea02ae0"
+  hs_bindgen_d36147bdfea02ae0_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderViewport@
+hs_bindgen_d36147bdfea02ae0
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -> IO BG.CBool
+hs_bindgen_d36147bdfea02ae0 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_d36147bdfea02ae0_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Get the drawing area for the current target.
+--
+--     Each render target has its own viewport. This function gets the viewport for the current render target.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderViewportSet', 'sDL_SetRenderViewport'
+--
+--     [C declaration]: @SDL_GetRenderViewport@, defined at @SDL3\/SDL_render.h 1766:34@
+sDL_GetRenderViewport
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -- ^
+  --
+  --           [@rect@]: an SDL_Rect structure filled in with the current drawing area.
+  -> IO BG.CBool
+sDL_GetRenderViewport = hs_bindgen_d36147bdfea02ae0
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderViewportSet@
+foreign import ccall unsafe "hs_bindgen_b75de8ea63ffb717"
+  hs_bindgen_b75de8ea63ffb717_base
+    :: BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderViewportSet@
+hs_bindgen_b75de8ea63ffb717
+  :: BG.Ptr SDL_Renderer
+  -> IO BG.CBool
+hs_bindgen_b75de8ea63ffb717 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_b75de8ea63ffb717_base (BG.toFFIType x0))
+
+-- | Return whether an explicit rectangle was set as the viewport.
+--
+--     This is useful if you\'re saving and restoring the viewport and want to know whether you should restore a specific rectangle or NULL.
+--
+--     Each render target has its own viewport. This function checks the viewport for the current render target.
+--
+--     [Returns]: true if the viewport was set to a specific rectangle, or false if it was set to NULL (the entire target).
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetRenderViewport', 'sDL_SetRenderViewport'
+--
+--     [C declaration]: @SDL_RenderViewportSet@, defined at @SDL3\/SDL_render.h 1788:34@
+sDL_RenderViewportSet
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> IO BG.CBool
+sDL_RenderViewportSet = hs_bindgen_b75de8ea63ffb717
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderSafeArea@
+foreign import ccall unsafe "hs_bindgen_143575ef07d5400f"
+  hs_bindgen_143575ef07d5400f_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderSafeArea@
+hs_bindgen_143575ef07d5400f
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -> IO BG.CBool
+hs_bindgen_143575ef07d5400f =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_143575ef07d5400f_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Get the safe area for rendering within the current viewport.
+--
+--     Some devices have portions of the screen which are partially obscured or not interactive, possibly due to on-screen controls, curved edges, camera notches, TV overscan, etc. This function provides the area of the current viewport which is safe to have interactible content. You should continue rendering into the rest of the render target, but it should not contain visually important or interactible content.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_GetRenderSafeArea@, defined at @SDL3\/SDL_render.h 1810:34@
+sDL_GetRenderSafeArea
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -- ^
+  --
+  --           [@rect@]: a pointer filled in with the area that is safe for interactive content.
+  -> IO BG.CBool
+sDL_GetRenderSafeArea = hs_bindgen_143575ef07d5400f
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderClipRect@
+foreign import ccall unsafe "hs_bindgen_db4ee8d700a535c8"
+  hs_bindgen_db4ee8d700a535c8_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderClipRect@
+hs_bindgen_db4ee8d700a535c8
+  :: BG.Ptr SDL_Renderer
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -> IO BG.CBool
+hs_bindgen_db4ee8d700a535c8 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_db4ee8d700a535c8_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Set the clip rectangle for rendering on the specified target.
+--
+--     Each render target has its own clip rectangle. This function sets the cliprect for the current render target.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetRenderClipRect', 'sDL_RenderClipEnabled'
+--
+--     [C declaration]: @SDL_SetRenderClipRect@, defined at @SDL3\/SDL_render.h 1831:34@
+sDL_SetRenderClipRect
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -- ^
+  --
+  --           [@rect@]: an SDL_Rect structure representing the clip area, relative to the viewport, or NULL to disable clipping.
+  -> IO BG.CBool
+sDL_SetRenderClipRect = hs_bindgen_db4ee8d700a535c8
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderClipRect@
+foreign import ccall unsafe "hs_bindgen_7bd39620f800ed67"
+  hs_bindgen_7bd39620f800ed67_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderClipRect@
+hs_bindgen_7bd39620f800ed67
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -> IO BG.CBool
+hs_bindgen_7bd39620f800ed67 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_7bd39620f800ed67_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Get the clip rectangle for the current target.
+--
+--     Each render target has its own clip rectangle. This function gets the cliprect for the current render target.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderClipEnabled', 'sDL_SetRenderClipRect'
+--
+--     [C declaration]: @SDL_GetRenderClipRect@, defined at @SDL3\/SDL_render.h 1852:34@
+sDL_GetRenderClipRect
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -- ^
+  --
+  --           [@rect@]: an SDL_Rect structure filled in with the current clipping area or an empty rectangle if clipping is disabled.
+  -> IO BG.CBool
+sDL_GetRenderClipRect = hs_bindgen_7bd39620f800ed67
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderClipEnabled@
+foreign import ccall unsafe "hs_bindgen_011ece38ae24698a"
+  hs_bindgen_011ece38ae24698a_base
+    :: BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderClipEnabled@
+hs_bindgen_011ece38ae24698a
+  :: BG.Ptr SDL_Renderer
+  -> IO BG.CBool
+hs_bindgen_011ece38ae24698a =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_011ece38ae24698a_base (BG.toFFIType x0))
+
+-- | Get whether clipping is enabled on the given render target.
+--
+--     Each render target has its own clip rectangle. This function checks the cliprect for the current render target.
+--
+--     [Returns]: true if clipping is enabled or false if not; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetRenderClipRect', 'sDL_SetRenderClipRect'
+--
+--     [C declaration]: @SDL_RenderClipEnabled@, defined at @SDL3\/SDL_render.h 1871:34@
+sDL_RenderClipEnabled
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> IO BG.CBool
+sDL_RenderClipEnabled = hs_bindgen_011ece38ae24698a
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderScale@
+foreign import ccall unsafe "hs_bindgen_a2ecfc86b7164248"
+  hs_bindgen_a2ecfc86b7164248_base
+    :: BG.Ptr BG.Void
+    -> BG.CFloat
+    -> BG.CFloat
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderScale@
+hs_bindgen_a2ecfc86b7164248
+  :: BG.Ptr SDL_Renderer
+  -> BG.CFloat
+  -> BG.CFloat
+  -> IO BG.CBool
+hs_bindgen_a2ecfc86b7164248 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_a2ecfc86b7164248_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Set the drawing scale for rendering on the current target.
+--
+--     The drawing coordinates are scaled by the x\/y scaling factors before they are used by the renderer. This allows resolution independent drawing with a single coordinate system.
+--
+--     If this results in scaling or subpixel drawing by the rendering backend, it will be handled using the appropriate quality hints. For best results use integer scaling factors.
+--
+--     Each render target has its own scale. This function sets the scale for the current render target.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetRenderScale'
+--
+--     [C declaration]: @SDL_SetRenderScale@, defined at @SDL3\/SDL_render.h 1899:34@
+sDL_SetRenderScale
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@scaleX@]: the horizontal scaling factor.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@scaleY@]: the vertical scaling factor.
+  -> IO BG.CBool
+sDL_SetRenderScale = hs_bindgen_a2ecfc86b7164248
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderScale@
+foreign import ccall unsafe "hs_bindgen_9b27eba43ce3989c"
+  hs_bindgen_9b27eba43ce3989c_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderScale@
+hs_bindgen_9b27eba43ce3989c
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr BG.CFloat
+  -> BG.Ptr BG.CFloat
+  -> IO BG.CBool
+hs_bindgen_9b27eba43ce3989c =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_9b27eba43ce3989c_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Get the drawing scale for the current target.
+--
+--     Each render target has its own scale. This function gets the scale for the current render target.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_SetRenderScale'
+--
+--     [C declaration]: @SDL_GetRenderScale@, defined at @SDL3\/SDL_render.h 1919:34@
+sDL_GetRenderScale
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@scaleX@]: a pointer filled in with the horizontal scaling factor.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@scaleY@]: a pointer filled in with the vertical scaling factor.
+  -> IO BG.CBool
+sDL_GetRenderScale = hs_bindgen_9b27eba43ce3989c
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderDrawColor@
+foreign import ccall unsafe "hs_bindgen_122da056b531e869"
+  hs_bindgen_122da056b531e869_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderDrawColor@
+hs_bindgen_122da056b531e869
+  :: BG.Ptr SDL_Renderer
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> IO BG.CBool
+hs_bindgen_122da056b531e869 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_122da056b531e869_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
+
+-- | Set the color used for drawing operations.
+--
+--     Set the color for drawing or filling rectangles, lines, and points, and for @SDL_RenderClear()@.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetRenderDrawColor', 'sDL_SetRenderDrawColorFloat'
+--
+--     [C declaration]: @SDL_SetRenderDrawColor@, defined at @SDL3\/SDL_render.h 1944:34@
+sDL_SetRenderDrawColor
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@r@]: the red value used to draw on the rendering target.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@g@]: the green value used to draw on the rendering target.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@b@]: the blue value used to draw on the rendering target.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@a@]: the alpha value used to draw on the rendering target; usually @SDL_ALPHA_OPAQUE@ (255). Use SDL_SetRenderDrawBlendMode to specify how the alpha channel is used.
+  -> IO BG.CBool
+sDL_SetRenderDrawColor = hs_bindgen_122da056b531e869
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderDrawColorFloat@
+foreign import ccall unsafe "hs_bindgen_069391a3e71d464d"
+  hs_bindgen_069391a3e71d464d_base
+    :: BG.Ptr BG.Void
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.CFloat
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderDrawColorFloat@
+hs_bindgen_069391a3e71d464d
+  :: BG.Ptr SDL_Renderer
+  -> BG.CFloat
+  -> BG.CFloat
+  -> BG.CFloat
+  -> BG.CFloat
+  -> IO BG.CBool
+hs_bindgen_069391a3e71d464d =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_069391a3e71d464d_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
+
+-- | Set the color used for drawing operations (Rect, Line and Clear).
+--
+--     Set the color for drawing or filling rectangles, lines, and points, and for @SDL_RenderClear()@.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetRenderDrawColorFloat', 'sDL_SetRenderDrawColor'
+--
+--     [C declaration]: @SDL_SetRenderDrawColorFloat@, defined at @SDL3\/SDL_render.h 1969:34@
+sDL_SetRenderDrawColorFloat
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@r@]: the red value used to draw on the rendering target.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@g@]: the green value used to draw on the rendering target.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@b@]: the blue value used to draw on the rendering target.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@a@]: the alpha value used to draw on the rendering target. Use SDL_SetRenderDrawBlendMode to specify how the alpha channel is used.
+  -> IO BG.CBool
+sDL_SetRenderDrawColorFloat =
+  hs_bindgen_069391a3e71d464d
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderDrawColor@
+foreign import ccall unsafe "hs_bindgen_7f0f910be4b2889e"
+  hs_bindgen_7f0f910be4b2889e_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderDrawColor@
+hs_bindgen_7f0f910be4b2889e
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> IO BG.CBool
+hs_bindgen_7f0f910be4b2889e =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_7f0f910be4b2889e_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
+
+-- | Get the color used for drawing operations (Rect, Line and Clear).
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetRenderDrawColorFloat', 'sDL_SetRenderDrawColor'
+--
+--     [C declaration]: @SDL_GetRenderDrawColor@, defined at @SDL3\/SDL_render.h 1993:34@
+sDL_GetRenderDrawColor
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@r@]: a pointer filled in with the red value used to draw on the rendering target.
+  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@g@]: a pointer filled in with the green value used to draw on the rendering target.
+  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@b@]: a pointer filled in with the blue value used to draw on the rendering target.
+  -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@a@]: a pointer filled in with the alpha value used to draw on the rendering target; usually @SDL_ALPHA_OPAQUE@ (255).
+  -> IO BG.CBool
+sDL_GetRenderDrawColor = hs_bindgen_7f0f910be4b2889e
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderDrawColorFloat@
+foreign import ccall unsafe "hs_bindgen_7679f2d13375bcd2"
+  hs_bindgen_7679f2d13375bcd2_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderDrawColorFloat@
+hs_bindgen_7679f2d13375bcd2
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr BG.CFloat
+  -> BG.Ptr BG.CFloat
+  -> BG.Ptr BG.CFloat
+  -> BG.Ptr BG.CFloat
+  -> IO BG.CBool
+hs_bindgen_7679f2d13375bcd2 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_7679f2d13375bcd2_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
+
+-- | Get the color used for drawing operations (Rect, Line and Clear).
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_SetRenderDrawColorFloat', 'sDL_GetRenderDrawColor'
+--
+--     [C declaration]: @SDL_GetRenderDrawColorFloat@, defined at @SDL3\/SDL_render.h 2017:34@
+sDL_GetRenderDrawColorFloat
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@r@]: a pointer filled in with the red value used to draw on the rendering target.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@g@]: a pointer filled in with the green value used to draw on the rendering target.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@b@]: a pointer filled in with the blue value used to draw on the rendering target.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@a@]: a pointer filled in with the alpha value used to draw on the rendering target.
+  -> IO BG.CBool
+sDL_GetRenderDrawColorFloat =
+  hs_bindgen_7679f2d13375bcd2
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderColorScale@
+foreign import ccall unsafe "hs_bindgen_2d134fc6b089039f"
+  hs_bindgen_2d134fc6b089039f_base
+    :: BG.Ptr BG.Void
+    -> BG.CFloat
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderColorScale@
+hs_bindgen_2d134fc6b089039f
+  :: BG.Ptr SDL_Renderer
+  -> BG.CFloat
+  -> IO BG.CBool
+hs_bindgen_2d134fc6b089039f =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_2d134fc6b089039f_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Set the color scale used for render operations.
+--
+--     The color scale is an additional scale multiplied into the pixel color value while rendering. This can be used to adjust the brightness of colors during HDR rendering, or changing HDR video brightness when playing on an SDR display.
+--
+--     The color scale does not affect the alpha channel, only the color brightness.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetRenderColorScale'
+--
+--     [C declaration]: @SDL_SetRenderColorScale@, defined at @SDL3\/SDL_render.h 2041:34@
+sDL_SetRenderColorScale
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@scale@]: the color scale value.
+  -> IO BG.CBool
+sDL_SetRenderColorScale = hs_bindgen_2d134fc6b089039f
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderColorScale@
+foreign import ccall unsafe "hs_bindgen_f9539095c565384c"
+  hs_bindgen_f9539095c565384c_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderColorScale@
+hs_bindgen_f9539095c565384c
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr BG.CFloat
+  -> IO BG.CBool
+hs_bindgen_f9539095c565384c =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_f9539095c565384c_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Get the color scale used for render operations.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_SetRenderColorScale'
+--
+--     [C declaration]: @SDL_GetRenderColorScale@, defined at @SDL3\/SDL_render.h 2057:34@
+sDL_GetRenderColorScale
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@scale@]: a pointer filled in with the current color scale value.
+  -> IO BG.CBool
+sDL_GetRenderColorScale = hs_bindgen_f9539095c565384c
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderDrawBlendMode@
+foreign import ccall unsafe "hs_bindgen_1885ca90cb47d78c"
+  hs_bindgen_1885ca90cb47d78c_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderDrawBlendMode@
+hs_bindgen_1885ca90cb47d78c
+  :: BG.Ptr SDL_Renderer
+  -> SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
+  -> IO BG.CBool
+hs_bindgen_1885ca90cb47d78c =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_1885ca90cb47d78c_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Set the blend mode used for drawing operations.
+--
+--     This blend mode is used for any drawing that doesn\'t involve textures.
+--
+--     If the blend mode is not supported, the closest supported mode is chosen.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetRenderDrawBlendMode', 'sDL_SetTextureBlendMode'
+--
+--     [C declaration]: @SDL_SetRenderDrawBlendMode@, defined at @SDL3\/SDL_render.h 2078:34@
+sDL_SetRenderDrawBlendMode
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
+  -- ^
+  --
+  --           [@blendMode@]: the SDL_BlendMode to use for blending.
+  -> IO BG.CBool
+sDL_SetRenderDrawBlendMode =
+  hs_bindgen_1885ca90cb47d78c
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderDrawBlendMode@
+foreign import ccall unsafe "hs_bindgen_80ecda0d3d8d870b"
+  hs_bindgen_80ecda0d3d8d870b_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderDrawBlendMode@
+hs_bindgen_80ecda0d3d8d870b
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
+  -> IO BG.CBool
+hs_bindgen_80ecda0d3d8d870b =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_80ecda0d3d8d870b_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Get the blend mode used for drawing operations.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_SetRenderDrawBlendMode'
+--
+--     [C declaration]: @SDL_GetRenderDrawBlendMode@, defined at @SDL3\/SDL_render.h 2094:34@
+sDL_GetRenderDrawBlendMode
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
+  -- ^
+  --
+  --           [@blendMode@]: a pointer filled in with the current SDL_BlendMode.
+  -> IO BG.CBool
+sDL_GetRenderDrawBlendMode =
+  hs_bindgen_80ecda0d3d8d870b
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderClear@
+foreign import ccall unsafe "hs_bindgen_82119a8dbd03b3ca"
+  hs_bindgen_82119a8dbd03b3ca_base
+    :: BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderClear@
+hs_bindgen_82119a8dbd03b3ca
+  :: BG.Ptr SDL_Renderer
+  -> IO BG.CBool
+hs_bindgen_82119a8dbd03b3ca =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_82119a8dbd03b3ca_base (BG.toFFIType x0))
+
+-- | Clear the current rendering target with the drawing color.
+--
+--     This function clears the entire rendering target, ignoring the viewport and the clip rectangle. Note, that clearing will also set\/fill all pixels of the rendering target to current renderer draw color, so make sure to invoke @SDL_SetRenderDrawColor()@ when needed.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_SetRenderDrawColor'
+--
+--     [C declaration]: @SDL_RenderClear@, defined at @SDL3\/SDL_render.h 2114:34@
+sDL_RenderClear
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> IO BG.CBool
+sDL_RenderClear = hs_bindgen_82119a8dbd03b3ca
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderPoint@
+foreign import ccall unsafe "hs_bindgen_c73e2796ab7f90c1"
+  hs_bindgen_c73e2796ab7f90c1_base
+    :: BG.Ptr BG.Void
+    -> BG.CFloat
+    -> BG.CFloat
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderPoint@
+hs_bindgen_c73e2796ab7f90c1
+  :: BG.Ptr SDL_Renderer
+  -> BG.CFloat
+  -> BG.CFloat
+  -> IO BG.CBool
+hs_bindgen_c73e2796ab7f90c1 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_c73e2796ab7f90c1_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Draw a point on the current rendering target at subpixel precision.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderPoints'
+--
+--     [C declaration]: @SDL_RenderPoint@, defined at @SDL3\/SDL_render.h 2131:34@
+sDL_RenderPoint
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer which should draw a point.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@x@]: the x coordinate of the point.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@y@]: the y coordinate of the point.
+  -> IO BG.CBool
+sDL_RenderPoint = hs_bindgen_c73e2796ab7f90c1
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderPoints@
+foreign import ccall unsafe "hs_bindgen_cb752ddd9f3b53be"
+  hs_bindgen_cb752ddd9f3b53be_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderPoints@
+hs_bindgen_cb752ddd9f3b53be
+  :: BG.Ptr SDL_Renderer
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
+  -> BG.CInt
+  -> IO BG.CBool
+hs_bindgen_cb752ddd9f3b53be =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_cb752ddd9f3b53be_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Draw multiple points on the current rendering target at subpixel precision.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderPoint'
+--
+--     [C declaration]: @SDL_RenderPoints@, defined at @SDL3\/SDL_render.h 2148:34@
+sDL_RenderPoints
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer which should draw multiple points.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
+  -- ^
+  --
+  --           [@points@]: the points to draw.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@count@]: the number of points to draw.
+  -> IO BG.CBool
+sDL_RenderPoints = hs_bindgen_cb752ddd9f3b53be
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderLine@
+foreign import ccall unsafe "hs_bindgen_8fc8b7b71da27e92"
+  hs_bindgen_8fc8b7b71da27e92_base
+    :: BG.Ptr BG.Void
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.CFloat
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderLine@
+hs_bindgen_8fc8b7b71da27e92
+  :: BG.Ptr SDL_Renderer
+  -> BG.CFloat
+  -> BG.CFloat
+  -> BG.CFloat
+  -> BG.CFloat
+  -> IO BG.CBool
+hs_bindgen_8fc8b7b71da27e92 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_8fc8b7b71da27e92_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
+
+-- | Draw a line on the current rendering target at subpixel precision.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderLines'
+--
+--     [C declaration]: @SDL_RenderLine@, defined at @SDL3\/SDL_render.h 2167:34@
+sDL_RenderLine
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer which should draw a line.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@x1@]: the x coordinate of the start point.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@y1@]: the y coordinate of the start point.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@x2@]: the x coordinate of the end point.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@y2@]: the y coordinate of the end point.
+  -> IO BG.CBool
+sDL_RenderLine = hs_bindgen_8fc8b7b71da27e92
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderLines@
+foreign import ccall unsafe "hs_bindgen_d68b0895520fbd3a"
+  hs_bindgen_d68b0895520fbd3a_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderLines@
+hs_bindgen_d68b0895520fbd3a
+  :: BG.Ptr SDL_Renderer
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
+  -> BG.CInt
+  -> IO BG.CBool
+hs_bindgen_d68b0895520fbd3a =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_d68b0895520fbd3a_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Draw a series of connected lines on the current rendering target at subpixel precision.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderLine'
+--
+--     [C declaration]: @SDL_RenderLines@, defined at @SDL3\/SDL_render.h 2185:34@
+sDL_RenderLines
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer which should draw multiple lines.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
+  -- ^
+  --
+  --           [@points@]: the points along the lines.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@count@]: the number of points, drawing count-1 lines.
+  -> IO BG.CBool
+sDL_RenderLines = hs_bindgen_d68b0895520fbd3a
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderRect@
+foreign import ccall unsafe "hs_bindgen_74702b94b10a8a97"
+  hs_bindgen_74702b94b10a8a97_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderRect@
+hs_bindgen_74702b94b10a8a97
+  :: BG.Ptr SDL_Renderer
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -> IO BG.CBool
+hs_bindgen_74702b94b10a8a97 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_74702b94b10a8a97_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Draw a rectangle on the current rendering target at subpixel precision.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderRects'
+--
+--     [C declaration]: @SDL_RenderRect@, defined at @SDL3\/SDL_render.h 2202:34@
+sDL_RenderRect
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer which should draw a rectangle.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -- ^
+  --
+  --           [@rect@]: a pointer to the destination rectangle, or NULL to outline the entire rendering target.
+  -> IO BG.CBool
+sDL_RenderRect = hs_bindgen_74702b94b10a8a97
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderRects@
+foreign import ccall unsafe "hs_bindgen_2ee379e179df5f3c"
+  hs_bindgen_2ee379e179df5f3c_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderRects@
+hs_bindgen_2ee379e179df5f3c
+  :: BG.Ptr SDL_Renderer
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -> BG.CInt
+  -> IO BG.CBool
+hs_bindgen_2ee379e179df5f3c =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_2ee379e179df5f3c_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Draw some number of rectangles on the current rendering target at subpixel precision.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderRect'
+--
+--     [C declaration]: @SDL_RenderRects@, defined at @SDL3\/SDL_render.h 2220:34@
+sDL_RenderRects
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer which should draw multiple rectangles.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -- ^
+  --
+  --           [@rects@]: a pointer to an array of destination rectangles.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@count@]: the number of rectangles.
+  -> IO BG.CBool
+sDL_RenderRects = hs_bindgen_2ee379e179df5f3c
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderFillRect@
+foreign import ccall unsafe "hs_bindgen_c5b24d3e3930aa12"
+  hs_bindgen_c5b24d3e3930aa12_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderFillRect@
+hs_bindgen_c5b24d3e3930aa12
+  :: BG.Ptr SDL_Renderer
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -> IO BG.CBool
+hs_bindgen_c5b24d3e3930aa12 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_c5b24d3e3930aa12_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Fill a rectangle on the current rendering target with the drawing color at subpixel precision.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderFillRects'
+--
+--     [C declaration]: @SDL_RenderFillRect@, defined at @SDL3\/SDL_render.h 2238:34@
+sDL_RenderFillRect
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer which should fill a rectangle.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -- ^
+  --
+  --           [@rect@]: a pointer to the destination rectangle, or NULL for the entire rendering target.
+  -> IO BG.CBool
+sDL_RenderFillRect = hs_bindgen_c5b24d3e3930aa12
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderFillRects@
+foreign import ccall unsafe "hs_bindgen_afbd05ab4eae453e"
+  hs_bindgen_afbd05ab4eae453e_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderFillRects@
+hs_bindgen_afbd05ab4eae453e
+  :: BG.Ptr SDL_Renderer
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -> BG.CInt
+  -> IO BG.CBool
+hs_bindgen_afbd05ab4eae453e =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_afbd05ab4eae453e_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Fill some number of rectangles on the current rendering target with the drawing color at subpixel precision.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderFillRect'
+--
+--     [C declaration]: @SDL_RenderFillRects@, defined at @SDL3\/SDL_render.h 2256:34@
+sDL_RenderFillRects
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer which should fill multiple rectangles.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -- ^
+  --
+  --           [@rects@]: a pointer to an array of destination rectangles.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@count@]: the number of rectangles.
+  -> IO BG.CBool
+sDL_RenderFillRects = hs_bindgen_afbd05ab4eae453e
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderTexture@
+foreign import ccall unsafe "hs_bindgen_9502ac14df729213"
+  hs_bindgen_9502ac14df729213_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderTexture@
+hs_bindgen_9502ac14df729213
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL_Texture
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -> IO BG.CBool
+hs_bindgen_9502ac14df729213 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_9502ac14df729213_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Copy a portion of the texture to the current rendering target at subpixel precision.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderTextureRotated', 'sDL_RenderTextureTiled'
+--
+--     [C declaration]: @SDL_RenderTexture@, defined at @SDL3\/SDL_render.h 2278:34@
+sDL_RenderTexture
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer which should copy parts of a texture.
+  -> BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the source texture.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -- ^
+  --
+  --           [@srcrect@]: a pointer to the source rectangle, or NULL for the entire texture.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -- ^
+  --
+  --           [@dstrect@]: a pointer to the destination rectangle, or NULL for the entire rendering target.
+  -> IO BG.CBool
+sDL_RenderTexture = hs_bindgen_9502ac14df729213
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderTextureRotated@
+foreign import ccall unsafe "hs_bindgen_bdd81c1a4d95fd9a"
+  hs_bindgen_bdd81c1a4d95fd9a_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.CDouble
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.Support.CUInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderTextureRotated@
+hs_bindgen_bdd81c1a4d95fd9a
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL_Texture
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -> BG.CDouble
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
+  -> SDL3.Sys.Bindgen.Surface.SDL_FlipMode
+  -> IO BG.CBool
+hs_bindgen_bdd81c1a4d95fd9a =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                fmap
+                  BG.fromFFIType
+                  ( hs_bindgen_bdd81c1a4d95fd9a_base
+                      (BG.toFFIType x0)
+                      (BG.toFFIType x1)
+                      (BG.toFFIType x2)
+                      (BG.toFFIType x3)
+                      (BG.toFFIType x4)
+                      (BG.toFFIType x5)
+                      (BG.toFFIType x6)
+                  )
+
+-- | Copy a portion of the source texture to the current rendering target, with rotation and flipping, at subpixel precision.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderTexture'
+--
+--     [C declaration]: @SDL_RenderTextureRotated@, defined at @SDL3\/SDL_render.h 2306:34@
+sDL_RenderTextureRotated
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer which should copy parts of a texture.
+  -> BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the source texture.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -- ^
+  --
+  --           [@srcrect@]: a pointer to the source rectangle, or NULL for the entire texture.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -- ^
+  --
+  --           [@dstrect@]: a pointer to the destination rectangle, or NULL for the entire rendering target.
+  -> BG.CDouble
+  -- ^
+  --
+  --           [@angle@]: an angle in degrees that indicates the rotation that will be applied to dstrect, rotating it in a clockwise direction.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
+  -- ^
+  --
+  --           [@center@]: a pointer to a point indicating the point around which dstrect will be rotated (if NULL, rotation will be done around dstrect.w\/2, dstrect.h\/2).
+  -> SDL3.Sys.Bindgen.Surface.SDL_FlipMode
+  -- ^
+  --
+  --           [@flip@]: an SDL_FlipMode value stating which flipping actions should be performed on the texture.
+  -> IO BG.CBool
+sDL_RenderTextureRotated =
+  hs_bindgen_bdd81c1a4d95fd9a
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderTextureAffine@
+foreign import ccall unsafe "hs_bindgen_18c2f3b6d0215153"
+  hs_bindgen_18c2f3b6d0215153_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderTextureAffine@
+hs_bindgen_18c2f3b6d0215153
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL_Texture
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
+  -> IO BG.CBool
+hs_bindgen_18c2f3b6d0215153 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_18c2f3b6d0215153_base
+                    (BG.toFFIType x0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                    (BG.toFFIType x4)
+                    (BG.toFFIType x5)
+                )
+
+-- | Copy a portion of the source texture to the current rendering target, with affine transform, at subpixel precision.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: You may only call this function from the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderTexture'
+--
+--     [C declaration]: @SDL_RenderTextureAffine@, defined at @SDL3\/SDL_render.h 2337:34@
+sDL_RenderTextureAffine
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer which should copy parts of a texture.
+  -> BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the source texture.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -- ^
+  --
+  --           [@srcrect@]: a pointer to the source rectangle, or NULL for the entire texture.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
+  -- ^
+  --
+  --           [@origin@]: a pointer to a point indicating where the top-left corner of srcrect should be mapped to, or NULL for the rendering target\'s origin.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
+  -- ^
+  --
+  --           [@right@]: a pointer to a point indicating where the top-right corner of srcrect should be mapped to, or NULL for the rendering target\'s top-right corner.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FPoint
+  -- ^
+  --
+  --           [@down@]: a pointer to a point indicating where the bottom-left corner of srcrect should be mapped to, or NULL for the rendering target\'s bottom-left corner.
+  -> IO BG.CBool
+sDL_RenderTextureAffine = hs_bindgen_18c2f3b6d0215153
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderTextureTiled@
+foreign import ccall unsafe "hs_bindgen_f46f867b1d2a5b99"
+  hs_bindgen_f46f867b1d2a5b99_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.CFloat
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderTextureTiled@
+hs_bindgen_f46f867b1d2a5b99
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL_Texture
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -> BG.CFloat
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -> IO BG.CBool
+hs_bindgen_f46f867b1d2a5b99 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_f46f867b1d2a5b99_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
+
+-- | Tile a portion of the texture to the current rendering target at subpixel precision.
+--
+--     The pixels in @srcrect@ will be repeated as many times as needed to completely fill @dstrect@.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderTexture'
+--
+--     [C declaration]: @SDL_RenderTextureTiled@, defined at @SDL3\/SDL_render.h 2366:34@
+sDL_RenderTextureTiled
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer which should copy parts of a texture.
+  -> BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the source texture.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -- ^
+  --
+  --           [@srcrect@]: a pointer to the source rectangle, or NULL for the entire texture.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@scale@]: the scale used to transform srcrect into the destination rectangle, e.g. a 32x32 texture with a scale of 2 would fill 64x64 tiles.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -- ^
+  --
+  --           [@dstrect@]: a pointer to the destination rectangle, or NULL for the entire rendering target.
+  -> IO BG.CBool
+sDL_RenderTextureTiled = hs_bindgen_f46f867b1d2a5b99
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderTexture9Grid@
+foreign import ccall unsafe "hs_bindgen_7460ccca85327f67"
+  hs_bindgen_7460ccca85327f67_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderTexture9Grid@
+hs_bindgen_7460ccca85327f67
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL_Texture
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -> BG.CFloat
+  -> BG.CFloat
+  -> BG.CFloat
+  -> BG.CFloat
+  -> BG.CFloat
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -> IO BG.CBool
+hs_bindgen_7460ccca85327f67 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                \x7 ->
+                  \x8 ->
+                    fmap
+                      BG.fromFFIType
+                      ( hs_bindgen_7460ccca85327f67_base
+                          (BG.toFFIType x0)
+                          (BG.toFFIType x1)
+                          (BG.toFFIType x2)
+                          (BG.toFFIType x3)
+                          (BG.toFFIType x4)
+                          (BG.toFFIType x5)
+                          (BG.toFFIType x6)
+                          (BG.toFFIType x7)
+                          (BG.toFFIType x8)
+                      )
+
+-- | Perform a scaled copy using the 9-grid algorithm to the current rendering target at subpixel precision.
+--
+--     The pixels in the texture are split into a 3x3 grid, using the different corner sizes for each corner, and the sides and center making up the remaining pixels. The corners are then scaled using @scale@ and fit into the corners of the destination rectangle. The sides and center are then stretched into place to cover the remaining destination rectangle.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderTexture', 'sDL_RenderTexture9GridTiled'
+--
+--     [C declaration]: @SDL_RenderTexture9Grid@, defined at @SDL3\/SDL_render.h 2401:34@
+sDL_RenderTexture9Grid
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer which should copy parts of a texture.
+  -> BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the source texture.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -- ^
+  --
+  --           [@srcrect@]: the SDL_Rect structure representing the rectangle to be used for the 9-grid, or NULL to use the entire texture.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@left_width@]: the width, in pixels, of the left corners in @srcrect@.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@right_width@]: the width, in pixels, of the right corners in @srcrect@.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@top_height@]: the height, in pixels, of the top corners in @srcrect@.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@bottom_height@]: the height, in pixels, of the bottom corners in @srcrect@.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@scale@]: the scale used to transform the corner of @srcrect@ into the corner of @dstrect@, or 0.0f for an unscaled copy.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -- ^
+  --
+  --           [@dstrect@]: a pointer to the destination rectangle, or NULL for the entire rendering target.
+  -> IO BG.CBool
+sDL_RenderTexture9Grid = hs_bindgen_7460ccca85327f67
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderTexture9GridTiled@
+foreign import ccall unsafe "hs_bindgen_82ec92cefa73aeb4"
+  hs_bindgen_82ec92cefa73aeb4_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.Ptr BG.Void
+    -> BG.CFloat
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderTexture9GridTiled@
+hs_bindgen_82ec92cefa73aeb4
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL_Texture
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -> BG.CFloat
+  -> BG.CFloat
+  -> BG.CFloat
+  -> BG.CFloat
+  -> BG.CFloat
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -> BG.CFloat
+  -> IO BG.CBool
+hs_bindgen_82ec92cefa73aeb4 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                \x7 ->
+                  \x8 ->
+                    \x9 ->
+                      fmap
+                        BG.fromFFIType
+                        ( hs_bindgen_82ec92cefa73aeb4_base
+                            (BG.toFFIType x0)
+                            (BG.toFFIType x1)
+                            (BG.toFFIType x2)
+                            (BG.toFFIType x3)
+                            (BG.toFFIType x4)
+                            (BG.toFFIType x5)
+                            (BG.toFFIType x6)
+                            (BG.toFFIType x7)
+                            (BG.toFFIType x8)
+                            (BG.toFFIType x9)
+                        )
+
+-- | Perform a scaled copy using the 9-grid algorithm to the current rendering target at subpixel precision.
+--
+--     The pixels in the texture are split into a 3x3 grid, using the different corner sizes for each corner, and the sides and center making up the remaining pixels. The corners are then scaled using @scale@ and fit into the corners of the destination rectangle. The sides and center are then tiled into place to cover the remaining destination rectangle.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.4.0
+--
+--     [See also]: 'sDL_RenderTexture', 'sDL_RenderTexture9Grid'
+--
+--     [C declaration]: @SDL_RenderTexture9GridTiled@, defined at @SDL3\/SDL_render.h 2439:34@
+sDL_RenderTexture9GridTiled
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer which should copy parts of a texture.
+  -> BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the source texture.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -- ^
+  --
+  --           [@srcrect@]: the SDL_Rect structure representing the rectangle to be used for the 9-grid, or NULL to use the entire texture.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@left_width@]: the width, in pixels, of the left corners in @srcrect@.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@right_width@]: the width, in pixels, of the right corners in @srcrect@.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@top_height@]: the height, in pixels, of the top corners in @srcrect@.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@bottom_height@]: the height, in pixels, of the bottom corners in @srcrect@.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@scale@]: the scale used to transform the corner of @srcrect@ into the corner of @dstrect@, or 0.0f for an unscaled copy.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_FRect
+  -- ^
+  --
+  --           [@dstrect@]: a pointer to the destination rectangle, or NULL for the entire rendering target.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@tileScale@]: the scale used to transform the borders and center of @srcrect@ into the borders and middle of @dstrect@, or 1.0f for an unscaled copy.
+  -> IO BG.CBool
+sDL_RenderTexture9GridTiled =
+  hs_bindgen_82ec92cefa73aeb4
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderGeometry@
+foreign import ccall unsafe "hs_bindgen_604c256c92b502f9"
+  hs_bindgen_604c256c92b502f9_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderGeometry@
+hs_bindgen_604c256c92b502f9
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL_Texture
+  -> PtrConst.PtrConst SDL_Vertex
+  -> BG.CInt
+  -> PtrConst.PtrConst BG.CInt
+  -> BG.CInt
+  -> IO BG.CBool
+hs_bindgen_604c256c92b502f9 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_604c256c92b502f9_base
+                    (BG.toFFIType x0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                    (BG.toFFIType x4)
+                    (BG.toFFIType x5)
+                )
+
+-- | Render a list of triangles, optionally using a texture and indices into the vertex array Color and alpha modulation is done per vertex (SDL_SetTextureColorMod and SDL_SetTextureAlphaMod are ignored).
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderGeometryRaw', 'sDL_SetRenderTextureAddressMode'
+--
+--     [C declaration]: @SDL_RenderGeometry@, defined at @SDL3\/SDL_render.h 2464:34@
+sDL_RenderGeometry
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: (optional) The SDL texture to use.
+  -> PtrConst.PtrConst SDL_Vertex
+  -- ^
+  --
+  --           [@vertices@]: vertices.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@num_vertices@]: number of vertices.
+  -> PtrConst.PtrConst BG.CInt
+  -- ^
+  --
+  --           [@indices@]: (optional) An array of integer indices into the \'vertices\' array, if NULL all vertices will be rendered in sequential order.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@num_indices@]: number of indices.
+  -> IO BG.CBool
+sDL_RenderGeometry = hs_bindgen_604c256c92b502f9
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderGeometryRaw@
+foreign import ccall unsafe "hs_bindgen_ae17af9f44d6d343"
+  hs_bindgen_ae17af9f44d6d343_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> BG.CInt
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> BG.CInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderGeometryRaw@
+hs_bindgen_ae17af9f44d6d343
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL_Texture
+  -> PtrConst.PtrConst BG.CFloat
+  -> BG.CInt
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Pixels.SDL_FColor
+  -> BG.CInt
+  -> PtrConst.PtrConst BG.CFloat
+  -> BG.CInt
+  -> BG.CInt
+  -> PtrConst.PtrConst BG.Void
+  -> BG.CInt
+  -> BG.CInt
+  -> IO BG.CBool
+hs_bindgen_ae17af9f44d6d343 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                \x7 ->
+                  \x8 ->
+                    \x9 ->
+                      \x10 ->
+                        \x11 ->
+                          fmap
+                            BG.fromFFIType
+                            ( hs_bindgen_ae17af9f44d6d343_base
+                                (BG.toFFIType x0)
+                                (BG.toFFIType x1)
+                                (BG.toFFIType x2)
+                                (BG.toFFIType x3)
+                                (BG.toFFIType x4)
+                                (BG.toFFIType x5)
+                                (BG.toFFIType x6)
+                                (BG.toFFIType x7)
+                                (BG.toFFIType x8)
+                                (BG.toFFIType x9)
+                                (BG.toFFIType x10)
+                                (BG.toFFIType x11)
+                            )
+
+-- | Render a list of triangles, optionally using a texture and indices into the vertex arrays Color and alpha modulation is done per vertex (SDL_SetTextureColorMod and SDL_SetTextureAlphaMod are ignored).
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_RenderGeometry', 'sDL_SetRenderTextureAddressMode'
+--
+--     [C declaration]: @SDL_RenderGeometryRaw@, defined at @SDL3\/SDL_render.h 2497:34@
+sDL_RenderGeometryRaw
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: (optional) The SDL texture to use.
+  -> PtrConst.PtrConst BG.CFloat
+  -- ^
+  --
+  --           [@xy@]: vertex positions.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@xy_stride@]: byte size to move from one element to the next element.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Pixels.SDL_FColor
+  -- ^
+  --
+  --           [@color@]: vertex colors (as SDL_FColor).
+  -> BG.CInt
+  -- ^
+  --
+  --           [@color_stride@]: byte size to move from one element to the next element.
+  -> PtrConst.PtrConst BG.CFloat
+  -- ^
+  --
+  --           [@uv@]: vertex normalized texture coordinates.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@uv_stride@]: byte size to move from one element to the next element.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@num_vertices@]: number of vertices.
+  -> PtrConst.PtrConst BG.Void
+  -- ^
+  --
+  --           [@indices@]: (optional) An array of indices into the \'vertices\' arrays, if NULL all vertices will be rendered in sequential order.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@num_indices@]: number of indices.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@size_indices@]: index size: 1 (byte), 2 (short), 4 (int).
+  -> IO BG.CBool
+sDL_RenderGeometryRaw = hs_bindgen_ae17af9f44d6d343
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderTextureAddressMode@
+foreign import ccall unsafe "hs_bindgen_f5de60362bf89a18"
+  hs_bindgen_f5de60362bf89a18_base
+    :: BG.Ptr BG.Void
+    -> BG.CInt
+    -> BG.CInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderTextureAddressMode@
+hs_bindgen_f5de60362bf89a18
+  :: BG.Ptr SDL_Renderer
+  -> SDL_TextureAddressMode
+  -> SDL_TextureAddressMode
+  -> IO BG.CBool
+hs_bindgen_f5de60362bf89a18 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_f5de60362bf89a18_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Set the texture addressing mode used in @SDL_RenderGeometry()@.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.4.0
+--
+--     [See also]: 'sDL_RenderGeometry', 'sDL_RenderGeometryRaw', 'sDL_GetRenderTextureAddressMode'
+--
+--     [C declaration]: @SDL_SetRenderTextureAddressMode@, defined at @SDL3\/SDL_render.h 2524:34@
+sDL_SetRenderTextureAddressMode
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> SDL_TextureAddressMode
+  -- ^
+  --
+  --           [@u_mode@]: the 'SDL_TextureAddressMode' to use for horizontal texture coordinates in @SDL_RenderGeometry()@.
+  -> SDL_TextureAddressMode
+  -- ^
+  --
+  --           [@v_mode@]: the 'SDL_TextureAddressMode' to use for vertical texture coordinates in @SDL_RenderGeometry()@.
+  -> IO BG.CBool
+sDL_SetRenderTextureAddressMode =
+  hs_bindgen_f5de60362bf89a18
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderTextureAddressMode@
+foreign import ccall unsafe "hs_bindgen_727bb39b49c44f15"
+  hs_bindgen_727bb39b49c44f15_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderTextureAddressMode@
+hs_bindgen_727bb39b49c44f15
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL_TextureAddressMode
+  -> BG.Ptr SDL_TextureAddressMode
+  -> IO BG.CBool
+hs_bindgen_727bb39b49c44f15 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_727bb39b49c44f15_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Get the texture addressing mode used in @SDL_RenderGeometry()@.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.4.0
+--
+--     [See also]: 'sDL_SetRenderTextureAddressMode'
+--
+--     [C declaration]: @SDL_GetRenderTextureAddressMode@, defined at @SDL3\/SDL_render.h 2545:34@
+sDL_GetRenderTextureAddressMode
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> BG.Ptr SDL_TextureAddressMode
+  -- ^
+  --
+  --           [@u_mode@]: a pointer filled in with the 'SDL_TextureAddressMode' to use for horizontal texture coordinates in @SDL_RenderGeometry()@, may be NULL.
+  -> BG.Ptr SDL_TextureAddressMode
+  -- ^
+  --
+  --           [@v_mode@]: a pointer filled in with the 'SDL_TextureAddressMode' to use for vertical texture coordinates in @SDL_RenderGeometry()@, may be NULL.
+  -> IO BG.CBool
+sDL_GetRenderTextureAddressMode =
+  hs_bindgen_727bb39b49c44f15
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderReadPixels@
+foreign import ccall unsafe "hs_bindgen_7173be00862c48e8"
+  hs_bindgen_7173be00862c48e8_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderReadPixels@
+hs_bindgen_7173be00862c48e8
+  :: BG.Ptr SDL_Renderer
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -> IO (BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface)
+hs_bindgen_7173be00862c48e8 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_7173be00862c48e8_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Read pixels from the current rendering target.
+--
+--     The returned surface contains pixels inside the desired area clipped to the current viewport, and should be freed with SDL_DestroySurface().
+--
+--     Note that this returns the actual pixels on the screen, so if you are using logical presentation you should use @SDL_GetRenderLogicalPresentationRect()@ to get the area containing your content.
+--
+--     __WARNING__: This is a very slow operation, and should not be used frequently. If you\'re using this on the main rendering target, it should be called after rendering and before @SDL_RenderPresent()@.
+--
+--     [Returns]: a new SDL_Surface on success or NULL on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_RenderReadPixels@, defined at @SDL3\/SDL_render.h 2572:43@
+sDL_RenderReadPixels
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
+  -- ^
+  --
+  --           [@rect@]: an SDL_Rect structure representing the area to read, which will be clipped to the current viewport, or NULL for the entire viewport.
+  -> IO (BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface)
+sDL_RenderReadPixels = hs_bindgen_7173be00862c48e8
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderPresent@
+foreign import ccall unsafe "hs_bindgen_e66060f4d8ba3f83"
+  hs_bindgen_e66060f4d8ba3f83_base
+    :: BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderPresent@
+hs_bindgen_e66060f4d8ba3f83
+  :: BG.Ptr SDL_Renderer
+  -> IO BG.CBool
+hs_bindgen_e66060f4d8ba3f83 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_e66060f4d8ba3f83_base (BG.toFFIType x0))
+
+-- | Update the screen with any rendering performed since the previous call.
+--
+--     SDL\'s rendering functions operate on a backbuffer; that is, calling a rendering function such as @SDL_RenderLine()@ does not directly put a line on the screen, but rather updates the backbuffer. As such, you compose your entire scene and /present/ the composed backbuffer to the screen as a complete picture.
+--
+--     Therefore, when using SDL\'s rendering API, one does all drawing intended for the frame, and then calls this function once per frame to present the final drawing to the user.
+--
+--     The backbuffer should be considered invalidated after each present; do not assume that previous contents will exist between frames. You are strongly encouraged to call @SDL_RenderClear()@ to initialize the backbuffer before starting each new frame\'s drawing, even if you plan to overwrite every pixel.
+--
+--     Please note, that in case of rendering to a texture - there is __no need__ to call @'sDL_RenderPresent'@ after drawing needed objects to a texture, and should not be done; you are only required to change back the rendering target to default via @SDL_SetRenderTarget(renderer, NULL)@ afterwards, as textures by themselves do not have a concept of backbuffers. Calling SDL_RenderPresent while rendering to a texture will fail.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_CreateRenderer', 'sDL_RenderClear', 'sDL_RenderFillRect', 'sDL_RenderFillRects', 'sDL_RenderLine', 'sDL_RenderLines', 'sDL_RenderPoint', 'sDL_RenderPoints', 'sDL_RenderRect', 'sDL_RenderRects', 'sDL_SetRenderDrawBlendMode', 'sDL_SetRenderDrawColor'
+--
+--     [C declaration]: @SDL_RenderPresent@, defined at @SDL3\/SDL_render.h 2621:34@
+sDL_RenderPresent
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> IO BG.CBool
+sDL_RenderPresent = hs_bindgen_e66060f4d8ba3f83
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_DestroyTexture@
+foreign import ccall unsafe "hs_bindgen_daf903d539dab511"
+  hs_bindgen_daf903d539dab511_base
+    :: BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_DestroyTexture@
+hs_bindgen_daf903d539dab511
+  :: BG.Ptr SDL_Texture
+  -> IO ()
+hs_bindgen_daf903d539dab511 =
+  \x0 ->
+    hs_bindgen_daf903d539dab511_base (BG.toFFIType x0)
+
+-- | Destroy the specified texture.
+--
+--     Passing NULL or an otherwise invalid texture will set the SDL error message to \"Invalid texture\".
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_CreateTexture', 'sDL_CreateTextureFromSurface'
+--
+--     [C declaration]: @SDL_DestroyTexture@, defined at @SDL3\/SDL_render.h 2638:34@
+sDL_DestroyTexture
+  :: BG.Ptr SDL_Texture
+  -- ^
+  --
+  --           [@texture@]: the texture to destroy.
+  -> IO ()
+sDL_DestroyTexture = hs_bindgen_daf903d539dab511
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_DestroyRenderer@
+foreign import ccall unsafe "hs_bindgen_1473f45c80ad6575"
+  hs_bindgen_1473f45c80ad6575_base
+    :: BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_DestroyRenderer@
+hs_bindgen_1473f45c80ad6575
+  :: BG.Ptr SDL_Renderer
+  -> IO ()
+hs_bindgen_1473f45c80ad6575 =
+  \x0 ->
+    hs_bindgen_1473f45c80ad6575_base (BG.toFFIType x0)
+
+-- | Destroy the rendering context for a window and free all associated textures.
+--
+--     This should be called before destroying the associated window.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_CreateRenderer'
+--
+--     [C declaration]: @SDL_DestroyRenderer@, defined at @SDL3\/SDL_render.h 2654:34@
+sDL_DestroyRenderer
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> IO ()
+sDL_DestroyRenderer = hs_bindgen_1473f45c80ad6575
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_FlushRenderer@
+foreign import ccall unsafe "hs_bindgen_78e89be71892a1e6"
+  hs_bindgen_78e89be71892a1e6_base
+    :: BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_FlushRenderer@
+hs_bindgen_78e89be71892a1e6
+  :: BG.Ptr SDL_Renderer
+  -> IO BG.CBool
+hs_bindgen_78e89be71892a1e6 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_78e89be71892a1e6_base (BG.toFFIType x0))
+
+-- | Force the rendering context to flush any pending commands and state.
+--
+--     You do not need to (and in fact, shouldn\'t) call this function unless you are planning to call into OpenGL\/Direct3D\/Metal\/whatever directly, in addition to using an 'SDL_Renderer'.
+--
+--     This is for a very-specific case: if you are using SDL\'s render API, and you plan to make OpenGL\/D3D\/whatever calls in addition to SDL render API calls. If this applies, you should call this function between calls to SDL\'s render API and the low-level API you\'re using in cooperation.
+--
+--     In all other cases, you can ignore this function.
+--
+--     This call makes SDL flush any pending rendering work it was queueing up to do later in a single batch, and marks any internal cached state as invalid, so it\'ll prepare all its state again later, from scratch.
+--
+--     This means you do not need to save state in your rendering code to protect the SDL renderer. However, there lots of arbitrary pieces of Direct3D and OpenGL state that can confuse things; you should use your best judgment and be prepared to make changes if specific state needs to be protected.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_FlushRenderer@, defined at @SDL3\/SDL_render.h 2687:34@
+sDL_FlushRenderer
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> IO BG.CBool
+sDL_FlushRenderer = hs_bindgen_78e89be71892a1e6
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderMetalLayer@
+foreign import ccall unsafe "hs_bindgen_47416f026ca1192f"
+  hs_bindgen_47416f026ca1192f_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderMetalLayer@
+hs_bindgen_47416f026ca1192f
+  :: BG.Ptr SDL_Renderer
+  -> IO (BG.Ptr BG.Void)
+hs_bindgen_47416f026ca1192f =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_47416f026ca1192f_base (BG.toFFIType x0))
+
+-- | Get the CAMetalLayer associated with the given Metal renderer.
+--
+--     This function returns @void *@, so SDL doesn\'t have to include Metal\'s headers, but it can be safely cast to a @CAMetalLayer *@.
+--
+--     [Returns]: a @CAMetalLayer *@ on success, or NULL if the renderer isn\'t a Metal renderer.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetRenderMetalCommandEncoder'
+--
+--     [C declaration]: @SDL_GetRenderMetalLayer@, defined at @SDL3\/SDL_render.h 2705:36@
+sDL_GetRenderMetalLayer
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer to query.
+  -> IO (BG.Ptr BG.Void)
+sDL_GetRenderMetalLayer = hs_bindgen_47416f026ca1192f
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderMetalCommandEncoder@
+foreign import ccall unsafe "hs_bindgen_c2e3411ac19d746f"
+  hs_bindgen_c2e3411ac19d746f_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderMetalCommandEncoder@
+hs_bindgen_c2e3411ac19d746f
+  :: BG.Ptr SDL_Renderer
+  -> IO (BG.Ptr BG.Void)
+hs_bindgen_c2e3411ac19d746f =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c2e3411ac19d746f_base (BG.toFFIType x0))
+
+-- | Get the Metal command encoder for the current frame.
+--
+--     This function returns @void *@, so SDL doesn\'t have to include Metal\'s headers, but it can be safely cast to an @id\<MTLRenderCommandEncoder>@.
+--
+--     This will return NULL if Metal refuses to give SDL a drawable to render to, which might happen if the window is hidden\/minimized\/offscreen. This doesn\'t apply to command encoders for render targets, just the window\'s backbuffer. Check your return values!
+--
+--     [Returns]: an @id\<MTLRenderCommandEncoder>@ on success, or NULL if the renderer isn\'t a Metal renderer or there was an error.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetRenderMetalLayer'
+--
+--     [C declaration]: @SDL_GetRenderMetalCommandEncoder@, defined at @SDL3\/SDL_render.h 2728:36@
+sDL_GetRenderMetalCommandEncoder
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer to query.
+  -> IO (BG.Ptr BG.Void)
+sDL_GetRenderMetalCommandEncoder =
+  hs_bindgen_c2e3411ac19d746f
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_AddVulkanRenderSemaphores@
+foreign import ccall unsafe "hs_bindgen_98b03ff5afd62e07"
+  hs_bindgen_98b03ff5afd62e07_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Int64
+    -> HsBindgen.Runtime.LibC.Int64
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_AddVulkanRenderSemaphores@
+hs_bindgen_98b03ff5afd62e07
+  :: BG.Ptr SDL_Renderer
+  -> SDL3.Sys.Bindgen.Stdinc.Uint32
+  -> SDL3.Sys.Bindgen.Stdinc.Sint64
+  -> SDL3.Sys.Bindgen.Stdinc.Sint64
+  -> IO BG.CBool
+hs_bindgen_98b03ff5afd62e07 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_98b03ff5afd62e07_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Add a set of synchronization semaphores for the current frame.
+--
+--     The Vulkan renderer will wait for @wait_semaphore@ before submitting rendering commands and signal @signal_semaphore@ after rendering commands are complete for this frame.
+--
+--     This should be called each frame that you want semaphore synchronization. The Vulkan renderer may have multiple frames in flight on the GPU, so you should have multiple semaphores that are used for synchronization. Querying SDL_PROP_RENDERER_VULKAN_SWAPCHAIN_IMAGE_COUNT_NUMBER will give you the maximum number of semaphores you\'ll need.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: It is __NOT__ safe to call this function from two threads at once.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_AddVulkanRenderSemaphores@, defined at @SDL3\/SDL_render.h 2759:34@
+sDL_AddVulkanRenderSemaphores
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the rendering context.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^
+  --
+  --           [@wait_stage_mask@]: the VkPipelineStageFlags for the wait.
+  -> SDL3.Sys.Bindgen.Stdinc.Sint64
+  -- ^
+  --
+  --           [@wait_semaphore@]: a VkSempahore to wait on before rendering the current frame, or 0 if not needed.
+  -> SDL3.Sys.Bindgen.Stdinc.Sint64
+  -- ^
+  --
+  --           [@signal_semaphore@]: a VkSempahore that SDL will signal when rendering for the current frame is complete, or 0 if not needed.
+  -> IO BG.CBool
+sDL_AddVulkanRenderSemaphores =
+  hs_bindgen_98b03ff5afd62e07
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderVSync@
+foreign import ccall unsafe "hs_bindgen_529493ee355e9466"
+  hs_bindgen_529493ee355e9466_base
+    :: BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetRenderVSync@
+hs_bindgen_529493ee355e9466
+  :: BG.Ptr SDL_Renderer
+  -> BG.CInt
+  -> IO BG.CBool
+hs_bindgen_529493ee355e9466 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_529493ee355e9466_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Toggle VSync of the given renderer.
+--
+--     When a renderer is created, vsync defaults to SDL_RENDERER_VSYNC_DISABLED.
+--
+--     The @vsync@ parameter can be 1 to synchronize present with every vertical refresh, 2 to synchronize present with every second vertical refresh, etc., SDL_RENDERER_VSYNC_ADAPTIVE for late swap tearing (adaptive vsync), or SDL_RENDERER_VSYNC_DISABLED to disable. Not every value is supported by every driver, so you should check the return value to see whether the requested setting is supported.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetRenderVSync'
+--
+--     [C declaration]: @SDL_SetRenderVSync@, defined at @SDL3\/SDL_render.h 2784:34@
+sDL_SetRenderVSync
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer to toggle.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@vsync@]: the vertical refresh sync interval.
+  -> IO BG.CBool
+sDL_SetRenderVSync = hs_bindgen_529493ee355e9466
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderVSync@
+foreign import ccall unsafe "hs_bindgen_ff41dba2a623c0ab"
+  hs_bindgen_ff41dba2a623c0ab_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetRenderVSync@
+hs_bindgen_ff41dba2a623c0ab
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr BG.CInt
+  -> IO BG.CBool
+hs_bindgen_ff41dba2a623c0ab =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_ff41dba2a623c0ab_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Get VSync of the given renderer.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_SetRenderVSync'
+--
+--     [C declaration]: @SDL_GetRenderVSync@, defined at @SDL3\/SDL_render.h 2804:34@
+sDL_GetRenderVSync
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer to toggle.
+  -> BG.Ptr BG.CInt
+  -- ^
+  --
+  --           [@vsync@]: an int filled with the current vertical refresh sync interval. See @SDL_SetRenderVSync()@ for the meaning of the value.
+  -> IO BG.CBool
+sDL_GetRenderVSync = hs_bindgen_ff41dba2a623c0ab
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderDebugText@
+foreign import ccall unsafe "hs_bindgen_a60ea3ca32fd26a5"
+  hs_bindgen_a60ea3ca32fd26a5_base
+    :: BG.Ptr BG.Void
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_RenderDebugText@
+hs_bindgen_a60ea3ca32fd26a5
+  :: BG.Ptr SDL_Renderer
+  -> BG.CFloat
+  -> BG.CFloat
+  -> PtrConst.PtrConst BG.CChar
+  -> IO BG.CBool
+hs_bindgen_a60ea3ca32fd26a5 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_a60ea3ca32fd26a5_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Draw debug text to an 'SDL_Renderer'.
+--
+--     This function will render a string of text to an 'SDL_Renderer'. Note that this is a convenience function for debugging, with severe limitations, and not intended to be used for production apps and games.
+--
+--     Among these limitations:
+--
+--     * It accepts UTF-8 strings, but will only renders ASCII characters.
+--
+--     * It has a single, tiny size (8x8 pixels). You can use logical presentation or @SDL_SetRenderScale()@ to adjust it.
+--
+--     * It uses a simple, hardcoded bitmap font. It does not allow different font selections and it does not support truetype, for proper scaling.
+--
+--     * It does no word-wrapping and does not treat newline characters as a line break. If the text goes out of the window, it\'s gone.
+--
+--     For serious text rendering, there are several good options, such as SDL_ttf, stb_truetype, or other external libraries.
+--
+--     On first use, this will create an internal texture for rendering glyphs. This texture will live until the renderer is destroyed.
+--
+--     The text is drawn in the color specified by @SDL_SetRenderDrawColor()@.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: @SDL_RenderDebugTextFormat@, 'sDL_DEBUG_TEXT_FONT_CHARACTER_SIZE'
+--
+--     [C declaration]: @SDL_RenderDebugText@, defined at @SDL3\/SDL_render.h 2856:34@
+sDL_RenderDebugText
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer which should draw a line of text.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@x@]: the x coordinate where the top-left corner of the text will draw.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@y@]: the y coordinate where the top-left corner of the text will draw.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: the string to render.
+  -> IO BG.CBool
+sDL_RenderDebugText = hs_bindgen_a60ea3ca32fd26a5
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetDefaultTextureScaleMode@
+foreign import ccall unsafe "hs_bindgen_e0aee38e1b73b64f"
+  hs_bindgen_e0aee38e1b73b64f_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.Support.CInt
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetDefaultTextureScaleMode@
+hs_bindgen_e0aee38e1b73b64f
+  :: BG.Ptr SDL_Renderer
+  -> SDL3.Sys.Bindgen.Surface.SDL_ScaleMode
+  -> IO BG.CBool
+hs_bindgen_e0aee38e1b73b64f =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_e0aee38e1b73b64f_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Set default scale mode for new textures for given renderer.
+--
+--     When a renderer is created, scale_mode defaults to SDL_SCALEMODE_LINEAR.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.4.0
+--
+--     [See also]: 'sDL_GetDefaultTextureScaleMode'
+--
+--     [C declaration]: @SDL_SetDefaultTextureScaleMode@, defined at @SDL3\/SDL_render.h 2902:34@
+sDL_SetDefaultTextureScaleMode
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer to update.
+  -> SDL3.Sys.Bindgen.Surface.SDL_ScaleMode
+  -- ^
+  --
+  --           [@scale_mode@]: the scale mode to change to for new textures.
+  -> IO BG.CBool
+sDL_SetDefaultTextureScaleMode =
+  hs_bindgen_e0aee38e1b73b64f
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetDefaultTextureScaleMode@
+foreign import ccall unsafe "hs_bindgen_51c8f91a397184cb"
+  hs_bindgen_51c8f91a397184cb_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_GetDefaultTextureScaleMode@
+hs_bindgen_51c8f91a397184cb
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_ScaleMode
+  -> IO BG.CBool
+hs_bindgen_51c8f91a397184cb =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_51c8f91a397184cb_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Get default texture scale mode of the given renderer.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should only be called on the main thread.
+--
+--     @since 3.4.0
+--
+--     [See also]: 'sDL_SetDefaultTextureScaleMode'
+--
+--     [C declaration]: @SDL_GetDefaultTextureScaleMode@, defined at @SDL3\/SDL_render.h 2920:34@
+sDL_GetDefaultTextureScaleMode
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer to get data from.
+  -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_ScaleMode
+  -- ^
+  --
+  --           [@scale_mode@]: a SDL_ScaleMode filled with current default scale mode. See @SDL_SetDefaultTextureScaleMode()@ for the meaning of the value.
+  -> IO BG.CBool
+sDL_GetDefaultTextureScaleMode =
+  hs_bindgen_51c8f91a397184cb
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateGPURenderState@
+foreign import ccall unsafe "hs_bindgen_2d970ffb5a76b1e4"
+  hs_bindgen_2d970ffb5a76b1e4_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_CreateGPURenderState@
+hs_bindgen_2d970ffb5a76b1e4
+  :: BG.Ptr SDL_Renderer
+  -> PtrConst.PtrConst SDL_GPURenderStateCreateInfo
+  -> IO (BG.Ptr SDL_GPURenderState)
+hs_bindgen_2d970ffb5a76b1e4 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_2d970ffb5a76b1e4_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Create custom GPU render state.
+--
+--     [Returns]: a custom GPU render state or NULL on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should be called on the thread that created the renderer.
+--
+--     @since 3.4.0
+--
+--     [See also]: 'sDL_SetGPURenderStateFragmentUniforms', 'sDL_SetGPURenderState', 'sDL_DestroyGPURenderState'
+--
+--     [C declaration]: @SDL_CreateGPURenderState@, defined at @SDL3\/SDL_render.h 2974:50@
+sDL_CreateGPURenderState
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer to use.
+  -> PtrConst.PtrConst SDL_GPURenderStateCreateInfo
+  -- ^
+  --
+  --           [@createinfo@]: a struct describing the GPU render state to create.
+  -> IO (BG.Ptr SDL_GPURenderState)
+sDL_CreateGPURenderState =
+  hs_bindgen_2d970ffb5a76b1e4
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetGPURenderStateFragmentUniforms@
+foreign import ccall unsafe "hs_bindgen_312b275c9f55463c"
+  hs_bindgen_312b275c9f55463c_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.Word32
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetGPURenderStateFragmentUniforms@
+hs_bindgen_312b275c9f55463c
+  :: BG.Ptr SDL_GPURenderState
+  -> SDL3.Sys.Bindgen.Stdinc.Uint32
+  -> PtrConst.PtrConst BG.Void
+  -> SDL3.Sys.Bindgen.Stdinc.Uint32
+  -> IO BG.CBool
+hs_bindgen_312b275c9f55463c =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_312b275c9f55463c_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Set fragment shader uniform variables in a custom GPU render state.
+--
+--     The data is copied and will be pushed using SDL_PushGPUFragmentUniformData() during draw call execution.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should be called on the thread that created the renderer.
+--
+--     @since 3.4.0
+--
+--     [C declaration]: @SDL_SetGPURenderStateFragmentUniforms@, defined at @SDL3\/SDL_render.h 2994:34@
+sDL_SetGPURenderStateFragmentUniforms
+  :: BG.Ptr SDL_GPURenderState
+  -- ^
+  --
+  --           [@state@]: the state to modify.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^
+  --
+  --           [@slot_index@]: the fragment uniform slot to push data to.
+  -> PtrConst.PtrConst BG.Void
+  -- ^
+  --
+  --           [@data@]: client data to write.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint32
+  -- ^
+  --
+  --           [@length@]: the length of the data to write.
+  -> IO BG.CBool
+sDL_SetGPURenderStateFragmentUniforms =
+  hs_bindgen_312b275c9f55463c
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetGPURenderState@
+foreign import ccall unsafe "hs_bindgen_0d6949c161acc59d"
+  hs_bindgen_0d6949c161acc59d_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_SetGPURenderState@
+hs_bindgen_0d6949c161acc59d
+  :: BG.Ptr SDL_Renderer
+  -> BG.Ptr SDL_GPURenderState
+  -> IO BG.CBool
+hs_bindgen_0d6949c161acc59d =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_0d6949c161acc59d_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Set custom GPU render state.
+--
+--     This function sets custom GPU render state for subsequent draw calls. This allows using custom shaders with the GPU renderer.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: This function should be called on the thread that created the renderer.
+--
+--     @since 3.4.0
+--
+--     [C declaration]: @SDL_SetGPURenderState@, defined at @SDL3\/SDL_render.h 3012:34@
+sDL_SetGPURenderState
+  :: BG.Ptr SDL_Renderer
+  -- ^
+  --
+  --           [@renderer@]: the renderer to use.
+  -> BG.Ptr SDL_GPURenderState
+  -- ^
+  --
+  --           [@state@]: the state to to use, or NULL to clear custom GPU render state.
+  -> IO BG.CBool
+sDL_SetGPURenderState = hs_bindgen_0d6949c161acc59d
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_DestroyGPURenderState@
+foreign import ccall unsafe "hs_bindgen_eccc60d637069ae8"
+  hs_bindgen_eccc60d637069ae8_base
+    :: BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Render_Unsafe_SDL_DestroyGPURenderState@
+hs_bindgen_eccc60d637069ae8
+  :: BG.Ptr SDL_GPURenderState
+  -> IO ()
+hs_bindgen_eccc60d637069ae8 =
+  \x0 ->
+    hs_bindgen_eccc60d637069ae8_base (BG.toFFIType x0)
 
 -- | Destroy custom GPU render state.
 --
diff --git a/src/SDL3/Sys/Bindgen/Runtime/HasFFIType.hs b/src/SDL3/Sys/Bindgen/Runtime/HasFFIType.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/Runtime/HasFFIType.hs
@@ -0,0 +1,12 @@
+-- | Facade over @HsBindgen.Runtime.HasFFIType@ from the vendored hs-bindgen runtime.
+--
+-- Intended for qualified import:
+--
+-- > import qualified SDL3.Sys.Bindgen.Runtime.HasFFIType as HasFFIType
+--
+-- For licensing information, see LICENSE_hs-bindgen-runtime in this package's root.
+module SDL3.Sys.Bindgen.Runtime.HasFFIType (
+  module HsBindgen.Runtime.HasFFIType,
+) where
+
+import HsBindgen.Runtime.HasFFIType
diff --git a/src/SDL3/Sys/Bindgen/Runtime/Macro.hs b/src/SDL3/Sys/Bindgen/Runtime/Macro.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/Runtime/Macro.hs
@@ -0,0 +1,12 @@
+-- | Facade over @HsBindgen.Runtime.Macro@ from the vendored hs-bindgen runtime.
+--
+-- Intended for qualified import:
+--
+-- > import qualified SDL3.Sys.Bindgen.Runtime.Macro as Macro
+--
+-- For licensing information, see LICENSE_hs-bindgen-runtime in this package's root.
+module SDL3.Sys.Bindgen.Runtime.Macro (
+  module HsBindgen.Runtime.Macro,
+) where
+
+import HsBindgen.Runtime.Macro
diff --git a/src/SDL3/Sys/Bindgen/Runtime/Overloading.hs b/src/SDL3/Sys/Bindgen/Runtime/Overloading.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/Runtime/Overloading.hs
@@ -0,0 +1,12 @@
+-- | Facade over @HsBindgen.Runtime.Overloading@ from the vendored hs-bindgen runtime.
+--
+-- Intended for qualified import:
+--
+-- > import qualified SDL3.Sys.Bindgen.Runtime.Overloading as Overloading
+--
+-- For licensing information, see LICENSE_hs-bindgen-runtime in this package's root.
+module SDL3.Sys.Bindgen.Runtime.Overloading (
+  module HsBindgen.Runtime.Overloading,
+) where
+
+import HsBindgen.Runtime.Overloading
diff --git a/src/SDL3/Sys/Bindgen/Runtime/Struct.hs b/src/SDL3/Sys/Bindgen/Runtime/Struct.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/Runtime/Struct.hs
@@ -0,0 +1,12 @@
+-- | Facade over @HsBindgen.Runtime.Struct@ from the vendored hs-bindgen runtime.
+--
+-- Intended for qualified import:
+--
+-- > import qualified SDL3.Sys.Bindgen.Runtime.Struct as Struct
+--
+-- For licensing information, see LICENSE_hs-bindgen-runtime in this package's root.
+module SDL3.Sys.Bindgen.Runtime.Struct (
+  module HsBindgen.Runtime.Struct,
+) where
+
+import HsBindgen.Runtime.Struct
diff --git a/src/SDL3/Sys/Bindgen/Scancode.hs b/src/SDL3/Sys/Bindgen/Scancode.hs
--- a/src/SDL3/Sys/Bindgen/Scancode.hs
+++ b/src/SDL3/Sys/Bindgen/Scancode.hs
@@ -16,6 +16,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | Defines keyboard scancodes.
 --
@@ -191,6 +192,7 @@
   pattern SDL3.Sys.Bindgen.Scancode.SDL_SCANCODE_CLEARAGAIN,
   pattern SDL3.Sys.Bindgen.Scancode.SDL_SCANCODE_CRSEL,
   pattern SDL3.Sys.Bindgen.Scancode.SDL_SCANCODE_EXSEL,
+  pattern SDL3.Sys.Bindgen.Scancode.SDL_SCANCODE_FRONT,
   pattern SDL3.Sys.Bindgen.Scancode.SDL_SCANCODE_KP_00,
   pattern SDL3.Sys.Bindgen.Scancode.SDL_SCANCODE_KP_000,
   pattern SDL3.Sys.Bindgen.Scancode.SDL_SCANCODE_THOUSANDSSEPARATOR,
@@ -284,6 +286,8 @@
 )
 where
 
+import Prelude (Eq, Int, Ord, Read, Show, pure, (<*>), type (~))
+
 import HsBindgen.Runtime.CEnum qualified as CEnum
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.Marshal qualified as Marshal
@@ -489,6 +493,7 @@
         , (162, BG.singleton "SDL_SCANCODE_CLEARAGAIN")
         , (163, BG.singleton "SDL_SCANCODE_CRSEL")
         , (164, BG.singleton "SDL_SCANCODE_EXSEL")
+        , (165, BG.singleton "SDL_SCANCODE_FRONT")
         , (176, BG.singleton "SDL_SCANCODE_KP_00")
         , (177, BG.singleton "SDL_SCANCODE_KP_000")
         , (178, BG.singleton "SDL_SCANCODE_THOUSANDSSEPARATOR")
@@ -1315,440 +1320,446 @@
 pattern SDL_SCANCODE_EXSEL :: SDL_Scancode
 pattern SDL_SCANCODE_EXSEL = SDL_Scancode 164
 
--- | [C declaration]: @SDL_SCANCODE_KP_00@, defined at @SDL3\/SDL_scancode.h 290:5@
+-- | Front (Sun keyboards)
+--
+--     [C declaration]: @SDL_SCANCODE_FRONT@, defined at @SDL3\/SDL_scancode.h 289:5@
+pattern SDL_SCANCODE_FRONT :: SDL_Scancode
+pattern SDL_SCANCODE_FRONT = SDL_Scancode 165
+
+-- | [C declaration]: @SDL_SCANCODE_KP_00@, defined at @SDL3\/SDL_scancode.h 291:5@
 pattern SDL_SCANCODE_KP_00 :: SDL_Scancode
 pattern SDL_SCANCODE_KP_00 = SDL_Scancode 176
 
--- | [C declaration]: @SDL_SCANCODE_KP_000@, defined at @SDL3\/SDL_scancode.h 291:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_000@, defined at @SDL3\/SDL_scancode.h 292:5@
 pattern SDL_SCANCODE_KP_000 :: SDL_Scancode
 pattern SDL_SCANCODE_KP_000 = SDL_Scancode 177
 
--- | [C declaration]: @SDL_SCANCODE_THOUSANDSSEPARATOR@, defined at @SDL3\/SDL_scancode.h 292:5@
+-- | [C declaration]: @SDL_SCANCODE_THOUSANDSSEPARATOR@, defined at @SDL3\/SDL_scancode.h 293:5@
 pattern SDL_SCANCODE_THOUSANDSSEPARATOR :: SDL_Scancode
 pattern SDL_SCANCODE_THOUSANDSSEPARATOR = SDL_Scancode 178
 
--- | [C declaration]: @SDL_SCANCODE_DECIMALSEPARATOR@, defined at @SDL3\/SDL_scancode.h 293:5@
+-- | [C declaration]: @SDL_SCANCODE_DECIMALSEPARATOR@, defined at @SDL3\/SDL_scancode.h 294:5@
 pattern SDL_SCANCODE_DECIMALSEPARATOR :: SDL_Scancode
 pattern SDL_SCANCODE_DECIMALSEPARATOR = SDL_Scancode 179
 
--- | [C declaration]: @SDL_SCANCODE_CURRENCYUNIT@, defined at @SDL3\/SDL_scancode.h 294:5@
+-- | [C declaration]: @SDL_SCANCODE_CURRENCYUNIT@, defined at @SDL3\/SDL_scancode.h 295:5@
 pattern SDL_SCANCODE_CURRENCYUNIT :: SDL_Scancode
 pattern SDL_SCANCODE_CURRENCYUNIT = SDL_Scancode 180
 
--- | [C declaration]: @SDL_SCANCODE_CURRENCYSUBUNIT@, defined at @SDL3\/SDL_scancode.h 295:5@
+-- | [C declaration]: @SDL_SCANCODE_CURRENCYSUBUNIT@, defined at @SDL3\/SDL_scancode.h 296:5@
 pattern SDL_SCANCODE_CURRENCYSUBUNIT :: SDL_Scancode
 pattern SDL_SCANCODE_CURRENCYSUBUNIT = SDL_Scancode 181
 
--- | [C declaration]: @SDL_SCANCODE_KP_LEFTPAREN@, defined at @SDL3\/SDL_scancode.h 296:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_LEFTPAREN@, defined at @SDL3\/SDL_scancode.h 297:5@
 pattern SDL_SCANCODE_KP_LEFTPAREN :: SDL_Scancode
 pattern SDL_SCANCODE_KP_LEFTPAREN = SDL_Scancode 182
 
--- | [C declaration]: @SDL_SCANCODE_KP_RIGHTPAREN@, defined at @SDL3\/SDL_scancode.h 297:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_RIGHTPAREN@, defined at @SDL3\/SDL_scancode.h 298:5@
 pattern SDL_SCANCODE_KP_RIGHTPAREN :: SDL_Scancode
 pattern SDL_SCANCODE_KP_RIGHTPAREN = SDL_Scancode 183
 
--- | [C declaration]: @SDL_SCANCODE_KP_LEFTBRACE@, defined at @SDL3\/SDL_scancode.h 298:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_LEFTBRACE@, defined at @SDL3\/SDL_scancode.h 299:5@
 pattern SDL_SCANCODE_KP_LEFTBRACE :: SDL_Scancode
 pattern SDL_SCANCODE_KP_LEFTBRACE = SDL_Scancode 184
 
--- | [C declaration]: @SDL_SCANCODE_KP_RIGHTBRACE@, defined at @SDL3\/SDL_scancode.h 299:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_RIGHTBRACE@, defined at @SDL3\/SDL_scancode.h 300:5@
 pattern SDL_SCANCODE_KP_RIGHTBRACE :: SDL_Scancode
 pattern SDL_SCANCODE_KP_RIGHTBRACE = SDL_Scancode 185
 
--- | [C declaration]: @SDL_SCANCODE_KP_TAB@, defined at @SDL3\/SDL_scancode.h 300:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_TAB@, defined at @SDL3\/SDL_scancode.h 301:5@
 pattern SDL_SCANCODE_KP_TAB :: SDL_Scancode
 pattern SDL_SCANCODE_KP_TAB = SDL_Scancode 186
 
--- | [C declaration]: @SDL_SCANCODE_KP_BACKSPACE@, defined at @SDL3\/SDL_scancode.h 301:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_BACKSPACE@, defined at @SDL3\/SDL_scancode.h 302:5@
 pattern SDL_SCANCODE_KP_BACKSPACE :: SDL_Scancode
 pattern SDL_SCANCODE_KP_BACKSPACE = SDL_Scancode 187
 
--- | [C declaration]: @SDL_SCANCODE_KP_A@, defined at @SDL3\/SDL_scancode.h 302:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_A@, defined at @SDL3\/SDL_scancode.h 303:5@
 pattern SDL_SCANCODE_KP_A :: SDL_Scancode
 pattern SDL_SCANCODE_KP_A = SDL_Scancode 188
 
--- | [C declaration]: @SDL_SCANCODE_KP_B@, defined at @SDL3\/SDL_scancode.h 303:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_B@, defined at @SDL3\/SDL_scancode.h 304:5@
 pattern SDL_SCANCODE_KP_B :: SDL_Scancode
 pattern SDL_SCANCODE_KP_B = SDL_Scancode 189
 
--- | [C declaration]: @SDL_SCANCODE_KP_C@, defined at @SDL3\/SDL_scancode.h 304:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_C@, defined at @SDL3\/SDL_scancode.h 305:5@
 pattern SDL_SCANCODE_KP_C :: SDL_Scancode
 pattern SDL_SCANCODE_KP_C = SDL_Scancode 190
 
--- | [C declaration]: @SDL_SCANCODE_KP_D@, defined at @SDL3\/SDL_scancode.h 305:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_D@, defined at @SDL3\/SDL_scancode.h 306:5@
 pattern SDL_SCANCODE_KP_D :: SDL_Scancode
 pattern SDL_SCANCODE_KP_D = SDL_Scancode 191
 
--- | [C declaration]: @SDL_SCANCODE_KP_E@, defined at @SDL3\/SDL_scancode.h 306:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_E@, defined at @SDL3\/SDL_scancode.h 307:5@
 pattern SDL_SCANCODE_KP_E :: SDL_Scancode
 pattern SDL_SCANCODE_KP_E = SDL_Scancode 192
 
--- | [C declaration]: @SDL_SCANCODE_KP_F@, defined at @SDL3\/SDL_scancode.h 307:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_F@, defined at @SDL3\/SDL_scancode.h 308:5@
 pattern SDL_SCANCODE_KP_F :: SDL_Scancode
 pattern SDL_SCANCODE_KP_F = SDL_Scancode 193
 
--- | [C declaration]: @SDL_SCANCODE_KP_XOR@, defined at @SDL3\/SDL_scancode.h 308:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_XOR@, defined at @SDL3\/SDL_scancode.h 309:5@
 pattern SDL_SCANCODE_KP_XOR :: SDL_Scancode
 pattern SDL_SCANCODE_KP_XOR = SDL_Scancode 194
 
--- | [C declaration]: @SDL_SCANCODE_KP_POWER@, defined at @SDL3\/SDL_scancode.h 309:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_POWER@, defined at @SDL3\/SDL_scancode.h 310:5@
 pattern SDL_SCANCODE_KP_POWER :: SDL_Scancode
 pattern SDL_SCANCODE_KP_POWER = SDL_Scancode 195
 
--- | [C declaration]: @SDL_SCANCODE_KP_PERCENT@, defined at @SDL3\/SDL_scancode.h 310:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_PERCENT@, defined at @SDL3\/SDL_scancode.h 311:5@
 pattern SDL_SCANCODE_KP_PERCENT :: SDL_Scancode
 pattern SDL_SCANCODE_KP_PERCENT = SDL_Scancode 196
 
--- | [C declaration]: @SDL_SCANCODE_KP_LESS@, defined at @SDL3\/SDL_scancode.h 311:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_LESS@, defined at @SDL3\/SDL_scancode.h 312:5@
 pattern SDL_SCANCODE_KP_LESS :: SDL_Scancode
 pattern SDL_SCANCODE_KP_LESS = SDL_Scancode 197
 
--- | [C declaration]: @SDL_SCANCODE_KP_GREATER@, defined at @SDL3\/SDL_scancode.h 312:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_GREATER@, defined at @SDL3\/SDL_scancode.h 313:5@
 pattern SDL_SCANCODE_KP_GREATER :: SDL_Scancode
 pattern SDL_SCANCODE_KP_GREATER = SDL_Scancode 198
 
--- | [C declaration]: @SDL_SCANCODE_KP_AMPERSAND@, defined at @SDL3\/SDL_scancode.h 313:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_AMPERSAND@, defined at @SDL3\/SDL_scancode.h 314:5@
 pattern SDL_SCANCODE_KP_AMPERSAND :: SDL_Scancode
 pattern SDL_SCANCODE_KP_AMPERSAND = SDL_Scancode 199
 
--- | [C declaration]: @SDL_SCANCODE_KP_DBLAMPERSAND@, defined at @SDL3\/SDL_scancode.h 314:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_DBLAMPERSAND@, defined at @SDL3\/SDL_scancode.h 315:5@
 pattern SDL_SCANCODE_KP_DBLAMPERSAND :: SDL_Scancode
 pattern SDL_SCANCODE_KP_DBLAMPERSAND = SDL_Scancode 200
 
--- | [C declaration]: @SDL_SCANCODE_KP_VERTICALBAR@, defined at @SDL3\/SDL_scancode.h 315:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_VERTICALBAR@, defined at @SDL3\/SDL_scancode.h 316:5@
 pattern SDL_SCANCODE_KP_VERTICALBAR :: SDL_Scancode
 pattern SDL_SCANCODE_KP_VERTICALBAR = SDL_Scancode 201
 
--- | [C declaration]: @SDL_SCANCODE_KP_DBLVERTICALBAR@, defined at @SDL3\/SDL_scancode.h 316:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_DBLVERTICALBAR@, defined at @SDL3\/SDL_scancode.h 317:5@
 pattern SDL_SCANCODE_KP_DBLVERTICALBAR :: SDL_Scancode
 pattern SDL_SCANCODE_KP_DBLVERTICALBAR = SDL_Scancode 202
 
--- | [C declaration]: @SDL_SCANCODE_KP_COLON@, defined at @SDL3\/SDL_scancode.h 317:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_COLON@, defined at @SDL3\/SDL_scancode.h 318:5@
 pattern SDL_SCANCODE_KP_COLON :: SDL_Scancode
 pattern SDL_SCANCODE_KP_COLON = SDL_Scancode 203
 
--- | [C declaration]: @SDL_SCANCODE_KP_HASH@, defined at @SDL3\/SDL_scancode.h 318:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_HASH@, defined at @SDL3\/SDL_scancode.h 319:5@
 pattern SDL_SCANCODE_KP_HASH :: SDL_Scancode
 pattern SDL_SCANCODE_KP_HASH = SDL_Scancode 204
 
--- | [C declaration]: @SDL_SCANCODE_KP_SPACE@, defined at @SDL3\/SDL_scancode.h 319:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_SPACE@, defined at @SDL3\/SDL_scancode.h 320:5@
 pattern SDL_SCANCODE_KP_SPACE :: SDL_Scancode
 pattern SDL_SCANCODE_KP_SPACE = SDL_Scancode 205
 
--- | [C declaration]: @SDL_SCANCODE_KP_AT@, defined at @SDL3\/SDL_scancode.h 320:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_AT@, defined at @SDL3\/SDL_scancode.h 321:5@
 pattern SDL_SCANCODE_KP_AT :: SDL_Scancode
 pattern SDL_SCANCODE_KP_AT = SDL_Scancode 206
 
--- | [C declaration]: @SDL_SCANCODE_KP_EXCLAM@, defined at @SDL3\/SDL_scancode.h 321:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_EXCLAM@, defined at @SDL3\/SDL_scancode.h 322:5@
 pattern SDL_SCANCODE_KP_EXCLAM :: SDL_Scancode
 pattern SDL_SCANCODE_KP_EXCLAM = SDL_Scancode 207
 
--- | [C declaration]: @SDL_SCANCODE_KP_MEMSTORE@, defined at @SDL3\/SDL_scancode.h 322:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_MEMSTORE@, defined at @SDL3\/SDL_scancode.h 323:5@
 pattern SDL_SCANCODE_KP_MEMSTORE :: SDL_Scancode
 pattern SDL_SCANCODE_KP_MEMSTORE = SDL_Scancode 208
 
--- | [C declaration]: @SDL_SCANCODE_KP_MEMRECALL@, defined at @SDL3\/SDL_scancode.h 323:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_MEMRECALL@, defined at @SDL3\/SDL_scancode.h 324:5@
 pattern SDL_SCANCODE_KP_MEMRECALL :: SDL_Scancode
 pattern SDL_SCANCODE_KP_MEMRECALL = SDL_Scancode 209
 
--- | [C declaration]: @SDL_SCANCODE_KP_MEMCLEAR@, defined at @SDL3\/SDL_scancode.h 324:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_MEMCLEAR@, defined at @SDL3\/SDL_scancode.h 325:5@
 pattern SDL_SCANCODE_KP_MEMCLEAR :: SDL_Scancode
 pattern SDL_SCANCODE_KP_MEMCLEAR = SDL_Scancode 210
 
--- | [C declaration]: @SDL_SCANCODE_KP_MEMADD@, defined at @SDL3\/SDL_scancode.h 325:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_MEMADD@, defined at @SDL3\/SDL_scancode.h 326:5@
 pattern SDL_SCANCODE_KP_MEMADD :: SDL_Scancode
 pattern SDL_SCANCODE_KP_MEMADD = SDL_Scancode 211
 
--- | [C declaration]: @SDL_SCANCODE_KP_MEMSUBTRACT@, defined at @SDL3\/SDL_scancode.h 326:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_MEMSUBTRACT@, defined at @SDL3\/SDL_scancode.h 327:5@
 pattern SDL_SCANCODE_KP_MEMSUBTRACT :: SDL_Scancode
 pattern SDL_SCANCODE_KP_MEMSUBTRACT = SDL_Scancode 212
 
--- | [C declaration]: @SDL_SCANCODE_KP_MEMMULTIPLY@, defined at @SDL3\/SDL_scancode.h 327:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_MEMMULTIPLY@, defined at @SDL3\/SDL_scancode.h 328:5@
 pattern SDL_SCANCODE_KP_MEMMULTIPLY :: SDL_Scancode
 pattern SDL_SCANCODE_KP_MEMMULTIPLY = SDL_Scancode 213
 
--- | [C declaration]: @SDL_SCANCODE_KP_MEMDIVIDE@, defined at @SDL3\/SDL_scancode.h 328:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_MEMDIVIDE@, defined at @SDL3\/SDL_scancode.h 329:5@
 pattern SDL_SCANCODE_KP_MEMDIVIDE :: SDL_Scancode
 pattern SDL_SCANCODE_KP_MEMDIVIDE = SDL_Scancode 214
 
--- | [C declaration]: @SDL_SCANCODE_KP_PLUSMINUS@, defined at @SDL3\/SDL_scancode.h 329:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_PLUSMINUS@, defined at @SDL3\/SDL_scancode.h 330:5@
 pattern SDL_SCANCODE_KP_PLUSMINUS :: SDL_Scancode
 pattern SDL_SCANCODE_KP_PLUSMINUS = SDL_Scancode 215
 
--- | [C declaration]: @SDL_SCANCODE_KP_CLEAR@, defined at @SDL3\/SDL_scancode.h 330:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_CLEAR@, defined at @SDL3\/SDL_scancode.h 331:5@
 pattern SDL_SCANCODE_KP_CLEAR :: SDL_Scancode
 pattern SDL_SCANCODE_KP_CLEAR = SDL_Scancode 216
 
--- | [C declaration]: @SDL_SCANCODE_KP_CLEARENTRY@, defined at @SDL3\/SDL_scancode.h 331:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_CLEARENTRY@, defined at @SDL3\/SDL_scancode.h 332:5@
 pattern SDL_SCANCODE_KP_CLEARENTRY :: SDL_Scancode
 pattern SDL_SCANCODE_KP_CLEARENTRY = SDL_Scancode 217
 
--- | [C declaration]: @SDL_SCANCODE_KP_BINARY@, defined at @SDL3\/SDL_scancode.h 332:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_BINARY@, defined at @SDL3\/SDL_scancode.h 333:5@
 pattern SDL_SCANCODE_KP_BINARY :: SDL_Scancode
 pattern SDL_SCANCODE_KP_BINARY = SDL_Scancode 218
 
--- | [C declaration]: @SDL_SCANCODE_KP_OCTAL@, defined at @SDL3\/SDL_scancode.h 333:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_OCTAL@, defined at @SDL3\/SDL_scancode.h 334:5@
 pattern SDL_SCANCODE_KP_OCTAL :: SDL_Scancode
 pattern SDL_SCANCODE_KP_OCTAL = SDL_Scancode 219
 
--- | [C declaration]: @SDL_SCANCODE_KP_DECIMAL@, defined at @SDL3\/SDL_scancode.h 334:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_DECIMAL@, defined at @SDL3\/SDL_scancode.h 335:5@
 pattern SDL_SCANCODE_KP_DECIMAL :: SDL_Scancode
 pattern SDL_SCANCODE_KP_DECIMAL = SDL_Scancode 220
 
--- | [C declaration]: @SDL_SCANCODE_KP_HEXADECIMAL@, defined at @SDL3\/SDL_scancode.h 335:5@
+-- | [C declaration]: @SDL_SCANCODE_KP_HEXADECIMAL@, defined at @SDL3\/SDL_scancode.h 336:5@
 pattern SDL_SCANCODE_KP_HEXADECIMAL :: SDL_Scancode
 pattern SDL_SCANCODE_KP_HEXADECIMAL = SDL_Scancode 221
 
--- | [C declaration]: @SDL_SCANCODE_LCTRL@, defined at @SDL3\/SDL_scancode.h 337:5@
+-- | [C declaration]: @SDL_SCANCODE_LCTRL@, defined at @SDL3\/SDL_scancode.h 338:5@
 pattern SDL_SCANCODE_LCTRL :: SDL_Scancode
 pattern SDL_SCANCODE_LCTRL = SDL_Scancode 224
 
--- | [C declaration]: @SDL_SCANCODE_LSHIFT@, defined at @SDL3\/SDL_scancode.h 338:5@
+-- | [C declaration]: @SDL_SCANCODE_LSHIFT@, defined at @SDL3\/SDL_scancode.h 339:5@
 pattern SDL_SCANCODE_LSHIFT :: SDL_Scancode
 pattern SDL_SCANCODE_LSHIFT = SDL_Scancode 225
 
 -- | alt, option
 --
---     [C declaration]: @SDL_SCANCODE_LALT@, defined at @SDL3\/SDL_scancode.h 339:5@
+--     [C declaration]: @SDL_SCANCODE_LALT@, defined at @SDL3\/SDL_scancode.h 340:5@
 pattern SDL_SCANCODE_LALT :: SDL_Scancode
 pattern SDL_SCANCODE_LALT = SDL_Scancode 226
 
 -- | windows, command (apple), meta
 --
---     [C declaration]: @SDL_SCANCODE_LGUI@, defined at @SDL3\/SDL_scancode.h 340:5@
+--     [C declaration]: @SDL_SCANCODE_LGUI@, defined at @SDL3\/SDL_scancode.h 341:5@
 pattern SDL_SCANCODE_LGUI :: SDL_Scancode
 pattern SDL_SCANCODE_LGUI = SDL_Scancode 227
 
--- | [C declaration]: @SDL_SCANCODE_RCTRL@, defined at @SDL3\/SDL_scancode.h 341:5@
+-- | [C declaration]: @SDL_SCANCODE_RCTRL@, defined at @SDL3\/SDL_scancode.h 342:5@
 pattern SDL_SCANCODE_RCTRL :: SDL_Scancode
 pattern SDL_SCANCODE_RCTRL = SDL_Scancode 228
 
--- | [C declaration]: @SDL_SCANCODE_RSHIFT@, defined at @SDL3\/SDL_scancode.h 342:5@
+-- | [C declaration]: @SDL_SCANCODE_RSHIFT@, defined at @SDL3\/SDL_scancode.h 343:5@
 pattern SDL_SCANCODE_RSHIFT :: SDL_Scancode
 pattern SDL_SCANCODE_RSHIFT = SDL_Scancode 229
 
 -- | alt gr, option
 --
---     [C declaration]: @SDL_SCANCODE_RALT@, defined at @SDL3\/SDL_scancode.h 343:5@
+--     [C declaration]: @SDL_SCANCODE_RALT@, defined at @SDL3\/SDL_scancode.h 344:5@
 pattern SDL_SCANCODE_RALT :: SDL_Scancode
 pattern SDL_SCANCODE_RALT = SDL_Scancode 230
 
 -- | windows, command (apple), meta
 --
---     [C declaration]: @SDL_SCANCODE_RGUI@, defined at @SDL3\/SDL_scancode.h 344:5@
+--     [C declaration]: @SDL_SCANCODE_RGUI@, defined at @SDL3\/SDL_scancode.h 345:5@
 pattern SDL_SCANCODE_RGUI :: SDL_Scancode
 pattern SDL_SCANCODE_RGUI = SDL_Scancode 231
 
 -- | I\'m not sure if this is really not covered by any of the above, but since there\'s a special SDL_KMOD_MODE for it I\'m adding it here
 --
---     [C declaration]: @SDL_SCANCODE_MODE@, defined at @SDL3\/SDL_scancode.h 346:5@
+--     [C declaration]: @SDL_SCANCODE_MODE@, defined at @SDL3\/SDL_scancode.h 347:5@
 pattern SDL_SCANCODE_MODE :: SDL_Scancode
 pattern SDL_SCANCODE_MODE = SDL_Scancode 257
 
 -- | Sleep
 --
---     [C declaration]: @SDL_SCANCODE_SLEEP@, defined at @SDL3\/SDL_scancode.h 364:5@
+--     [C declaration]: @SDL_SCANCODE_SLEEP@, defined at @SDL3\/SDL_scancode.h 365:5@
 pattern SDL_SCANCODE_SLEEP :: SDL_Scancode
 pattern SDL_SCANCODE_SLEEP = SDL_Scancode 258
 
 -- | Wake
 --
---     [C declaration]: @SDL_SCANCODE_WAKE@, defined at @SDL3\/SDL_scancode.h 365:5@
+--     [C declaration]: @SDL_SCANCODE_WAKE@, defined at @SDL3\/SDL_scancode.h 366:5@
 pattern SDL_SCANCODE_WAKE :: SDL_Scancode
 pattern SDL_SCANCODE_WAKE = SDL_Scancode 259
 
 -- | Channel Increment
 --
---     [C declaration]: @SDL_SCANCODE_CHANNEL_INCREMENT@, defined at @SDL3\/SDL_scancode.h 367:5@
+--     [C declaration]: @SDL_SCANCODE_CHANNEL_INCREMENT@, defined at @SDL3\/SDL_scancode.h 368:5@
 pattern SDL_SCANCODE_CHANNEL_INCREMENT :: SDL_Scancode
 pattern SDL_SCANCODE_CHANNEL_INCREMENT = SDL_Scancode 260
 
 -- | Channel Decrement
 --
---     [C declaration]: @SDL_SCANCODE_CHANNEL_DECREMENT@, defined at @SDL3\/SDL_scancode.h 368:5@
+--     [C declaration]: @SDL_SCANCODE_CHANNEL_DECREMENT@, defined at @SDL3\/SDL_scancode.h 369:5@
 pattern SDL_SCANCODE_CHANNEL_DECREMENT :: SDL_Scancode
 pattern SDL_SCANCODE_CHANNEL_DECREMENT = SDL_Scancode 261
 
 -- | Play
 --
---     [C declaration]: @SDL_SCANCODE_MEDIA_PLAY@, defined at @SDL3\/SDL_scancode.h 370:5@
+--     [C declaration]: @SDL_SCANCODE_MEDIA_PLAY@, defined at @SDL3\/SDL_scancode.h 371:5@
 pattern SDL_SCANCODE_MEDIA_PLAY :: SDL_Scancode
 pattern SDL_SCANCODE_MEDIA_PLAY = SDL_Scancode 262
 
 -- | Pause
 --
---     [C declaration]: @SDL_SCANCODE_MEDIA_PAUSE@, defined at @SDL3\/SDL_scancode.h 371:5@
+--     [C declaration]: @SDL_SCANCODE_MEDIA_PAUSE@, defined at @SDL3\/SDL_scancode.h 372:5@
 pattern SDL_SCANCODE_MEDIA_PAUSE :: SDL_Scancode
 pattern SDL_SCANCODE_MEDIA_PAUSE = SDL_Scancode 263
 
 -- | Record
 --
---     [C declaration]: @SDL_SCANCODE_MEDIA_RECORD@, defined at @SDL3\/SDL_scancode.h 372:5@
+--     [C declaration]: @SDL_SCANCODE_MEDIA_RECORD@, defined at @SDL3\/SDL_scancode.h 373:5@
 pattern SDL_SCANCODE_MEDIA_RECORD :: SDL_Scancode
 pattern SDL_SCANCODE_MEDIA_RECORD = SDL_Scancode 264
 
 -- | Fast Forward
 --
---     [C declaration]: @SDL_SCANCODE_MEDIA_FAST_FORWARD@, defined at @SDL3\/SDL_scancode.h 373:5@
+--     [C declaration]: @SDL_SCANCODE_MEDIA_FAST_FORWARD@, defined at @SDL3\/SDL_scancode.h 374:5@
 pattern SDL_SCANCODE_MEDIA_FAST_FORWARD :: SDL_Scancode
 pattern SDL_SCANCODE_MEDIA_FAST_FORWARD = SDL_Scancode 265
 
 -- | Rewind
 --
---     [C declaration]: @SDL_SCANCODE_MEDIA_REWIND@, defined at @SDL3\/SDL_scancode.h 374:5@
+--     [C declaration]: @SDL_SCANCODE_MEDIA_REWIND@, defined at @SDL3\/SDL_scancode.h 375:5@
 pattern SDL_SCANCODE_MEDIA_REWIND :: SDL_Scancode
 pattern SDL_SCANCODE_MEDIA_REWIND = SDL_Scancode 266
 
 -- | Next Track
 --
---     [C declaration]: @SDL_SCANCODE_MEDIA_NEXT_TRACK@, defined at @SDL3\/SDL_scancode.h 375:5@
+--     [C declaration]: @SDL_SCANCODE_MEDIA_NEXT_TRACK@, defined at @SDL3\/SDL_scancode.h 376:5@
 pattern SDL_SCANCODE_MEDIA_NEXT_TRACK :: SDL_Scancode
 pattern SDL_SCANCODE_MEDIA_NEXT_TRACK = SDL_Scancode 267
 
 -- | Previous Track
 --
---     [C declaration]: @SDL_SCANCODE_MEDIA_PREVIOUS_TRACK@, defined at @SDL3\/SDL_scancode.h 376:5@
+--     [C declaration]: @SDL_SCANCODE_MEDIA_PREVIOUS_TRACK@, defined at @SDL3\/SDL_scancode.h 377:5@
 pattern SDL_SCANCODE_MEDIA_PREVIOUS_TRACK :: SDL_Scancode
 pattern SDL_SCANCODE_MEDIA_PREVIOUS_TRACK = SDL_Scancode 268
 
 -- | Stop
 --
---     [C declaration]: @SDL_SCANCODE_MEDIA_STOP@, defined at @SDL3\/SDL_scancode.h 377:5@
+--     [C declaration]: @SDL_SCANCODE_MEDIA_STOP@, defined at @SDL3\/SDL_scancode.h 378:5@
 pattern SDL_SCANCODE_MEDIA_STOP :: SDL_Scancode
 pattern SDL_SCANCODE_MEDIA_STOP = SDL_Scancode 269
 
 -- | Eject
 --
---     [C declaration]: @SDL_SCANCODE_MEDIA_EJECT@, defined at @SDL3\/SDL_scancode.h 378:5@
+--     [C declaration]: @SDL_SCANCODE_MEDIA_EJECT@, defined at @SDL3\/SDL_scancode.h 379:5@
 pattern SDL_SCANCODE_MEDIA_EJECT :: SDL_Scancode
 pattern SDL_SCANCODE_MEDIA_EJECT = SDL_Scancode 270
 
 -- | Play \/ Pause
 --
---     [C declaration]: @SDL_SCANCODE_MEDIA_PLAY_PAUSE@, defined at @SDL3\/SDL_scancode.h 379:5@
+--     [C declaration]: @SDL_SCANCODE_MEDIA_PLAY_PAUSE@, defined at @SDL3\/SDL_scancode.h 380:5@
 pattern SDL_SCANCODE_MEDIA_PLAY_PAUSE :: SDL_Scancode
 pattern SDL_SCANCODE_MEDIA_PLAY_PAUSE = SDL_Scancode 271
 
--- | [C declaration]: @SDL_SCANCODE_MEDIA_SELECT@, defined at @SDL3\/SDL_scancode.h 380:5@
+-- | [C declaration]: @SDL_SCANCODE_MEDIA_SELECT@, defined at @SDL3\/SDL_scancode.h 381:5@
 pattern SDL_SCANCODE_MEDIA_SELECT :: SDL_Scancode
 pattern SDL_SCANCODE_MEDIA_SELECT = SDL_Scancode 272
 
 -- | AC New
 --
---     [C declaration]: @SDL_SCANCODE_AC_NEW@, defined at @SDL3\/SDL_scancode.h 382:5@
+--     [C declaration]: @SDL_SCANCODE_AC_NEW@, defined at @SDL3\/SDL_scancode.h 383:5@
 pattern SDL_SCANCODE_AC_NEW :: SDL_Scancode
 pattern SDL_SCANCODE_AC_NEW = SDL_Scancode 273
 
 -- | AC Open
 --
---     [C declaration]: @SDL_SCANCODE_AC_OPEN@, defined at @SDL3\/SDL_scancode.h 383:5@
+--     [C declaration]: @SDL_SCANCODE_AC_OPEN@, defined at @SDL3\/SDL_scancode.h 384:5@
 pattern SDL_SCANCODE_AC_OPEN :: SDL_Scancode
 pattern SDL_SCANCODE_AC_OPEN = SDL_Scancode 274
 
 -- | AC Close
 --
---     [C declaration]: @SDL_SCANCODE_AC_CLOSE@, defined at @SDL3\/SDL_scancode.h 384:5@
+--     [C declaration]: @SDL_SCANCODE_AC_CLOSE@, defined at @SDL3\/SDL_scancode.h 385:5@
 pattern SDL_SCANCODE_AC_CLOSE :: SDL_Scancode
 pattern SDL_SCANCODE_AC_CLOSE = SDL_Scancode 275
 
 -- | AC Exit
 --
---     [C declaration]: @SDL_SCANCODE_AC_EXIT@, defined at @SDL3\/SDL_scancode.h 385:5@
+--     [C declaration]: @SDL_SCANCODE_AC_EXIT@, defined at @SDL3\/SDL_scancode.h 386:5@
 pattern SDL_SCANCODE_AC_EXIT :: SDL_Scancode
 pattern SDL_SCANCODE_AC_EXIT = SDL_Scancode 276
 
 -- | AC Save
 --
---     [C declaration]: @SDL_SCANCODE_AC_SAVE@, defined at @SDL3\/SDL_scancode.h 386:5@
+--     [C declaration]: @SDL_SCANCODE_AC_SAVE@, defined at @SDL3\/SDL_scancode.h 387:5@
 pattern SDL_SCANCODE_AC_SAVE :: SDL_Scancode
 pattern SDL_SCANCODE_AC_SAVE = SDL_Scancode 277
 
 -- | AC Print
 --
---     [C declaration]: @SDL_SCANCODE_AC_PRINT@, defined at @SDL3\/SDL_scancode.h 387:5@
+--     [C declaration]: @SDL_SCANCODE_AC_PRINT@, defined at @SDL3\/SDL_scancode.h 388:5@
 pattern SDL_SCANCODE_AC_PRINT :: SDL_Scancode
 pattern SDL_SCANCODE_AC_PRINT = SDL_Scancode 278
 
 -- | AC Properties
 --
---     [C declaration]: @SDL_SCANCODE_AC_PROPERTIES@, defined at @SDL3\/SDL_scancode.h 388:5@
+--     [C declaration]: @SDL_SCANCODE_AC_PROPERTIES@, defined at @SDL3\/SDL_scancode.h 389:5@
 pattern SDL_SCANCODE_AC_PROPERTIES :: SDL_Scancode
 pattern SDL_SCANCODE_AC_PROPERTIES = SDL_Scancode 279
 
 -- | AC Search
 --
---     [C declaration]: @SDL_SCANCODE_AC_SEARCH@, defined at @SDL3\/SDL_scancode.h 390:5@
+--     [C declaration]: @SDL_SCANCODE_AC_SEARCH@, defined at @SDL3\/SDL_scancode.h 391:5@
 pattern SDL_SCANCODE_AC_SEARCH :: SDL_Scancode
 pattern SDL_SCANCODE_AC_SEARCH = SDL_Scancode 280
 
 -- | AC Home
 --
---     [C declaration]: @SDL_SCANCODE_AC_HOME@, defined at @SDL3\/SDL_scancode.h 391:5@
+--     [C declaration]: @SDL_SCANCODE_AC_HOME@, defined at @SDL3\/SDL_scancode.h 392:5@
 pattern SDL_SCANCODE_AC_HOME :: SDL_Scancode
 pattern SDL_SCANCODE_AC_HOME = SDL_Scancode 281
 
 -- | AC Back
 --
---     [C declaration]: @SDL_SCANCODE_AC_BACK@, defined at @SDL3\/SDL_scancode.h 392:5@
+--     [C declaration]: @SDL_SCANCODE_AC_BACK@, defined at @SDL3\/SDL_scancode.h 393:5@
 pattern SDL_SCANCODE_AC_BACK :: SDL_Scancode
 pattern SDL_SCANCODE_AC_BACK = SDL_Scancode 282
 
 -- | AC Forward
 --
---     [C declaration]: @SDL_SCANCODE_AC_FORWARD@, defined at @SDL3\/SDL_scancode.h 393:5@
+--     [C declaration]: @SDL_SCANCODE_AC_FORWARD@, defined at @SDL3\/SDL_scancode.h 394:5@
 pattern SDL_SCANCODE_AC_FORWARD :: SDL_Scancode
 pattern SDL_SCANCODE_AC_FORWARD = SDL_Scancode 283
 
 -- | AC Stop
 --
---     [C declaration]: @SDL_SCANCODE_AC_STOP@, defined at @SDL3\/SDL_scancode.h 394:5@
+--     [C declaration]: @SDL_SCANCODE_AC_STOP@, defined at @SDL3\/SDL_scancode.h 395:5@
 pattern SDL_SCANCODE_AC_STOP :: SDL_Scancode
 pattern SDL_SCANCODE_AC_STOP = SDL_Scancode 284
 
 -- | AC Refresh
 --
---     [C declaration]: @SDL_SCANCODE_AC_REFRESH@, defined at @SDL3\/SDL_scancode.h 395:5@
+--     [C declaration]: @SDL_SCANCODE_AC_REFRESH@, defined at @SDL3\/SDL_scancode.h 396:5@
 pattern SDL_SCANCODE_AC_REFRESH :: SDL_Scancode
 pattern SDL_SCANCODE_AC_REFRESH = SDL_Scancode 285
 
 -- | AC Bookmarks
 --
---     [C declaration]: @SDL_SCANCODE_AC_BOOKMARKS@, defined at @SDL3\/SDL_scancode.h 396:5@
+--     [C declaration]: @SDL_SCANCODE_AC_BOOKMARKS@, defined at @SDL3\/SDL_scancode.h 397:5@
 pattern SDL_SCANCODE_AC_BOOKMARKS :: SDL_Scancode
 pattern SDL_SCANCODE_AC_BOOKMARKS = SDL_Scancode 286
 
 -- | Usually situated below the display on phones and used as a multi-function feature key for selecting a software defined function shown on the bottom left of the display.
 --
---     [C declaration]: @SDL_SCANCODE_SOFTLEFT@, defined at @SDL3\/SDL_scancode.h 408:5@
+--     [C declaration]: @SDL_SCANCODE_SOFTLEFT@, defined at @SDL3\/SDL_scancode.h 409:5@
 pattern SDL_SCANCODE_SOFTLEFT :: SDL_Scancode
 pattern SDL_SCANCODE_SOFTLEFT = SDL_Scancode 287
 
 -- | Usually situated below the display on phones and used as a multi-function feature key for selecting a software defined function shown on the bottom right of the display.
 --
---     [C declaration]: @SDL_SCANCODE_SOFTRIGHT@, defined at @SDL3\/SDL_scancode.h 412:5@
+--     [C declaration]: @SDL_SCANCODE_SOFTRIGHT@, defined at @SDL3\/SDL_scancode.h 413:5@
 pattern SDL_SCANCODE_SOFTRIGHT :: SDL_Scancode
 pattern SDL_SCANCODE_SOFTRIGHT = SDL_Scancode 288
 
 -- | Used for accepting phone calls.
 --
---     [C declaration]: @SDL_SCANCODE_CALL@, defined at @SDL3\/SDL_scancode.h 416:5@
+--     [C declaration]: @SDL_SCANCODE_CALL@, defined at @SDL3\/SDL_scancode.h 417:5@
 pattern SDL_SCANCODE_CALL :: SDL_Scancode
 pattern SDL_SCANCODE_CALL = SDL_Scancode 289
 
 -- | Used for rejecting phone calls.
 --
---     [C declaration]: @SDL_SCANCODE_ENDCALL@, defined at @SDL3\/SDL_scancode.h 417:5@
+--     [C declaration]: @SDL_SCANCODE_ENDCALL@, defined at @SDL3\/SDL_scancode.h 418:5@
 pattern SDL_SCANCODE_ENDCALL :: SDL_Scancode
 pattern SDL_SCANCODE_ENDCALL = SDL_Scancode 290
 
 -- | 400-500 reserved for dynamic keycodes
 --
---     [C declaration]: @SDL_SCANCODE_RESERVED@, defined at @SDL3\/SDL_scancode.h 423:5@
+--     [C declaration]: @SDL_SCANCODE_RESERVED@, defined at @SDL3\/SDL_scancode.h 424:5@
 pattern SDL_SCANCODE_RESERVED :: SDL_Scancode
 pattern SDL_SCANCODE_RESERVED = SDL_Scancode 400
 
 -- | not a key, just marks the number of scancodes for array bounds
 --
---     [C declaration]: @SDL_SCANCODE_COUNT@, defined at @SDL3\/SDL_scancode.h 425:5@
+--     [C declaration]: @SDL_SCANCODE_COUNT@, defined at @SDL3\/SDL_scancode.h 426:5@
 pattern SDL_SCANCODE_COUNT :: SDL_Scancode
 pattern SDL_SCANCODE_COUNT = SDL_Scancode 512
diff --git a/src/SDL3/Sys/Bindgen/Sensor.hs b/src/SDL3/Sys/Bindgen/Sensor.hs
--- a/src/SDL3/Sys/Bindgen/Sensor.hs
+++ b/src/SDL3/Sys/Bindgen/Sensor.hs
@@ -18,6 +18,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | SDL sensor management.
 --
@@ -42,6 +43,8 @@
   pattern SDL3.Sys.Bindgen.Sensor.SDL_SENSOR_COUNT,
 )
 where
+
+import Prelude (Bounded, Enum, Eq, Int, Integral, Num, Ord, Read, Real, Show, pure, (<*>), type (~))
 
 import HsBindgen.Runtime.CEnum qualified as CEnum
 import HsBindgen.Runtime.HasCField qualified as HasCField
diff --git a/src/SDL3/Sys/Bindgen/Sensor/FunPtr.hs b/src/SDL3/Sys/Bindgen/Sensor/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Sensor/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Sensor/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Sensor.FunPtr (
@@ -20,6 +22,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -28,7 +32,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_sensor.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_sensor.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_get_SDL_GetSensors */"
          , "__attribute__ ((const))"
          , "SDL_SensorID *(*hs_bindgen_7d117dd7b42cc40e (void)) ("
@@ -153,7 +161,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_get_SDL_GetSensors@
 hs_bindgen_7d117dd7b42cc40e :: IO (BG.FunPtr (BG.Ptr BG.CInt -> IO (BG.Ptr SDL_SensorID)))
 hs_bindgen_7d117dd7b42cc40e =
-  BG.fromFFIType hs_bindgen_7d117dd7b42cc40e_base
+  fmap BG.fromFFIType hs_bindgen_7d117dd7b42cc40e_base
 
 {-# NOINLINE sDL_GetSensors #-}
 
@@ -178,7 +186,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_get_SDL_GetSensorNameForID@
 hs_bindgen_064803dcda1d2e45 :: IO (BG.FunPtr (SDL_SensorID -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_064803dcda1d2e45 =
-  BG.fromFFIType hs_bindgen_064803dcda1d2e45_base
+  fmap BG.fromFFIType hs_bindgen_064803dcda1d2e45_base
 
 {-# NOINLINE sDL_GetSensorNameForID #-}
 
@@ -205,7 +213,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_get_SDL_GetSensorTypeForID@
 hs_bindgen_15067de6fd7eab81 :: IO (BG.FunPtr (SDL_SensorID -> IO SDL_SensorType))
 hs_bindgen_15067de6fd7eab81 =
-  BG.fromFFIType hs_bindgen_15067de6fd7eab81_base
+  fmap BG.fromFFIType hs_bindgen_15067de6fd7eab81_base
 
 {-# NOINLINE sDL_GetSensorTypeForID #-}
 
@@ -232,7 +240,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_get_SDL_GetSensorNonPortableTypeForID@
 hs_bindgen_93df6e86c5ae7de1 :: IO (BG.FunPtr (SDL_SensorID -> IO BG.CInt))
 hs_bindgen_93df6e86c5ae7de1 =
-  BG.fromFFIType hs_bindgen_93df6e86c5ae7de1_base
+  fmap BG.fromFFIType hs_bindgen_93df6e86c5ae7de1_base
 
 {-# NOINLINE sDL_GetSensorNonPortableTypeForID #-}
 
@@ -259,7 +267,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_get_SDL_OpenSensor@
 hs_bindgen_3ddd92169c898cc5 :: IO (BG.FunPtr (SDL_SensorID -> IO (BG.Ptr SDL_Sensor)))
 hs_bindgen_3ddd92169c898cc5 =
-  BG.fromFFIType hs_bindgen_3ddd92169c898cc5_base
+  fmap BG.fromFFIType hs_bindgen_3ddd92169c898cc5_base
 
 {-# NOINLINE sDL_OpenSensor #-}
 
@@ -284,7 +292,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_get_SDL_GetSensorFromID@
 hs_bindgen_599e05d453695d54 :: IO (BG.FunPtr (SDL_SensorID -> IO (BG.Ptr SDL_Sensor)))
 hs_bindgen_599e05d453695d54 =
-  BG.fromFFIType hs_bindgen_599e05d453695d54_base
+  fmap BG.fromFFIType hs_bindgen_599e05d453695d54_base
 
 {-# NOINLINE sDL_GetSensorFromID #-}
 
@@ -310,7 +318,7 @@
 hs_bindgen_4164cf08823b4939
   :: IO (BG.FunPtr (BG.Ptr SDL_Sensor -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID))
 hs_bindgen_4164cf08823b4939 =
-  BG.fromFFIType hs_bindgen_4164cf08823b4939_base
+  fmap BG.fromFFIType hs_bindgen_4164cf08823b4939_base
 
 {-# NOINLINE sDL_GetSensorProperties #-}
 
@@ -336,7 +344,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_get_SDL_GetSensorName@
 hs_bindgen_73c9e66388d63d79 :: IO (BG.FunPtr (BG.Ptr SDL_Sensor -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_73c9e66388d63d79 =
-  BG.fromFFIType hs_bindgen_73c9e66388d63d79_base
+  fmap BG.fromFFIType hs_bindgen_73c9e66388d63d79_base
 
 {-# NOINLINE sDL_GetSensorName #-}
 
@@ -361,7 +369,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_get_SDL_GetSensorType@
 hs_bindgen_d2b64d0316fa8124 :: IO (BG.FunPtr (BG.Ptr SDL_Sensor -> IO SDL_SensorType))
 hs_bindgen_d2b64d0316fa8124 =
-  BG.fromFFIType hs_bindgen_d2b64d0316fa8124_base
+  fmap BG.fromFFIType hs_bindgen_d2b64d0316fa8124_base
 
 {-# NOINLINE sDL_GetSensorType #-}
 
@@ -386,7 +394,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_get_SDL_GetSensorNonPortableType@
 hs_bindgen_0e763d01bffcfa1a :: IO (BG.FunPtr (BG.Ptr SDL_Sensor -> IO BG.CInt))
 hs_bindgen_0e763d01bffcfa1a =
-  BG.fromFFIType hs_bindgen_0e763d01bffcfa1a_base
+  fmap BG.fromFFIType hs_bindgen_0e763d01bffcfa1a_base
 
 {-# NOINLINE sDL_GetSensorNonPortableType #-}
 
@@ -411,7 +419,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_get_SDL_GetSensorID@
 hs_bindgen_ccc4b71ce529cea1 :: IO (BG.FunPtr (BG.Ptr SDL_Sensor -> IO SDL_SensorID))
 hs_bindgen_ccc4b71ce529cea1 =
-  BG.fromFFIType hs_bindgen_ccc4b71ce529cea1_base
+  fmap BG.fromFFIType hs_bindgen_ccc4b71ce529cea1_base
 
 {-# NOINLINE sDL_GetSensorID #-}
 
@@ -437,7 +445,7 @@
 hs_bindgen_63c226fd6c34b399
   :: IO (BG.FunPtr (BG.Ptr SDL_Sensor -> BG.Ptr BG.CFloat -> BG.CInt -> IO BG.CBool))
 hs_bindgen_63c226fd6c34b399 =
-  BG.fromFFIType hs_bindgen_63c226fd6c34b399_base
+  fmap BG.fromFFIType hs_bindgen_63c226fd6c34b399_base
 
 {-# NOINLINE sDL_GetSensorData #-}
 
@@ -468,7 +476,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_get_SDL_CloseSensor@
 hs_bindgen_a117a0cf60dc00d1 :: IO (BG.FunPtr (BG.Ptr SDL_Sensor -> IO ()))
 hs_bindgen_a117a0cf60dc00d1 =
-  BG.fromFFIType hs_bindgen_a117a0cf60dc00d1_base
+  fmap BG.fromFFIType hs_bindgen_a117a0cf60dc00d1_base
 
 {-# NOINLINE sDL_CloseSensor #-}
 
@@ -491,7 +499,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_get_SDL_UpdateSensors@
 hs_bindgen_bbc7d6be143f2f1d :: IO (BG.FunPtr (IO ()))
 hs_bindgen_bbc7d6be143f2f1d =
-  BG.fromFFIType hs_bindgen_bbc7d6be143f2f1d_base
+  fmap BG.fromFFIType hs_bindgen_bbc7d6be143f2f1d_base
 
 {-# NOINLINE sDL_UpdateSensors #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Sensor/Safe.hs b/src/SDL3/Sys/Bindgen/Sensor/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Sensor/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Sensor/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Sensor.Safe (
@@ -20,6 +22,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -28,7 +33,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_sensor.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_sensor.h>"
          , "SDL_SensorID *hs_bindgen_b61dd178746c7ddb ("
          , "  signed int *arg1"
          , ")"
@@ -128,7 +137,8 @@
   :: BG.Ptr BG.CInt
   -> IO (BG.Ptr SDL_SensorID)
 hs_bindgen_b61dd178746c7ddb =
-  BG.fromFFIType hs_bindgen_b61dd178746c7ddb_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_b61dd178746c7ddb_base (BG.toFFIType x0))
 
 -- | Get a list of currently connected sensors.
 --
@@ -148,7 +158,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_Safe_SDL_GetSensorNameForID@
 foreign import ccall safe "hs_bindgen_bcad5852f7430e0f"
   hs_bindgen_bcad5852f7430e0f_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_Safe_SDL_GetSensorNameForID@
@@ -156,7 +166,8 @@
   :: SDL_SensorID
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_bcad5852f7430e0f =
-  BG.fromFFIType hs_bindgen_bcad5852f7430e0f_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_bcad5852f7430e0f_base (BG.toFFIType x0))
 
 -- | Get the implementation dependent name of a sensor.
 --
@@ -178,15 +189,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_Safe_SDL_GetSensorTypeForID@
 foreign import ccall safe "hs_bindgen_d24575268bab12e0"
   hs_bindgen_d24575268bab12e0_base
-    :: BG.Word32
-    -> IO BG.Int32
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_Safe_SDL_GetSensorTypeForID@
 hs_bindgen_d24575268bab12e0
   :: SDL_SensorID
   -> IO SDL_SensorType
 hs_bindgen_d24575268bab12e0 =
-  BG.fromFFIType hs_bindgen_d24575268bab12e0_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d24575268bab12e0_base (BG.toFFIType x0))
 
 -- | Get the type of a sensor.
 --
@@ -208,15 +220,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_Safe_SDL_GetSensorNonPortableTypeForID@
 foreign import ccall safe "hs_bindgen_0cc7e36b2b816613"
   hs_bindgen_0cc7e36b2b816613_base
-    :: BG.Word32
-    -> IO BG.Int32
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_Safe_SDL_GetSensorNonPortableTypeForID@
 hs_bindgen_0cc7e36b2b816613
   :: SDL_SensorID
   -> IO BG.CInt
 hs_bindgen_0cc7e36b2b816613 =
-  BG.fromFFIType hs_bindgen_0cc7e36b2b816613_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_0cc7e36b2b816613_base (BG.toFFIType x0))
 
 -- | Get the platform dependent type of a sensor.
 --
@@ -239,7 +252,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_Safe_SDL_OpenSensor@
 foreign import ccall safe "hs_bindgen_ca89770aec33d403"
   hs_bindgen_ca89770aec33d403_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_Safe_SDL_OpenSensor@
@@ -247,7 +260,8 @@
   :: SDL_SensorID
   -> IO (BG.Ptr SDL_Sensor)
 hs_bindgen_ca89770aec33d403 =
-  BG.fromFFIType hs_bindgen_ca89770aec33d403_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_ca89770aec33d403_base (BG.toFFIType x0))
 
 -- | Open a sensor for use.
 --
@@ -267,7 +281,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_Safe_SDL_GetSensorFromID@
 foreign import ccall safe "hs_bindgen_c02f722bb2e6edde"
   hs_bindgen_c02f722bb2e6edde_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_Safe_SDL_GetSensorFromID@
@@ -275,7 +289,8 @@
   :: SDL_SensorID
   -> IO (BG.Ptr SDL_Sensor)
 hs_bindgen_c02f722bb2e6edde =
-  BG.fromFFIType hs_bindgen_c02f722bb2e6edde_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c02f722bb2e6edde_base (BG.toFFIType x0))
 
 -- | Return the 'SDL_Sensor' associated with an instance ID.
 --
@@ -296,14 +311,15 @@
 foreign import ccall safe "hs_bindgen_635e63e84138735f"
   hs_bindgen_635e63e84138735f_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_Safe_SDL_GetSensorProperties@
 hs_bindgen_635e63e84138735f
   :: BG.Ptr SDL_Sensor
   -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
 hs_bindgen_635e63e84138735f =
-  BG.fromFFIType hs_bindgen_635e63e84138735f_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_635e63e84138735f_base (BG.toFFIType x0))
 
 -- | Get the properties associated with a sensor.
 --
@@ -331,7 +347,8 @@
   :: BG.Ptr SDL_Sensor
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_ecdd3ba2245007fb =
-  BG.fromFFIType hs_bindgen_ecdd3ba2245007fb_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_ecdd3ba2245007fb_base (BG.toFFIType x0))
 
 -- | Get the implementation dependent name of a sensor.
 --
@@ -352,14 +369,15 @@
 foreign import ccall safe "hs_bindgen_6493367408e25f83"
   hs_bindgen_6493367408e25f83_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_Safe_SDL_GetSensorType@
 hs_bindgen_6493367408e25f83
   :: BG.Ptr SDL_Sensor
   -> IO SDL_SensorType
 hs_bindgen_6493367408e25f83 =
-  BG.fromFFIType hs_bindgen_6493367408e25f83_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_6493367408e25f83_base (BG.toFFIType x0))
 
 -- | Get the type of a sensor.
 --
@@ -380,14 +398,15 @@
 foreign import ccall safe "hs_bindgen_a88558880074a522"
   hs_bindgen_a88558880074a522_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_Safe_SDL_GetSensorNonPortableType@
 hs_bindgen_a88558880074a522
   :: BG.Ptr SDL_Sensor
   -> IO BG.CInt
 hs_bindgen_a88558880074a522 =
-  BG.fromFFIType hs_bindgen_a88558880074a522_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a88558880074a522_base (BG.toFFIType x0))
 
 -- | Get the platform dependent type of a sensor.
 --
@@ -409,14 +428,15 @@
 foreign import ccall safe "hs_bindgen_de19e07a9cb2bdf7"
   hs_bindgen_de19e07a9cb2bdf7_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_Safe_SDL_GetSensorID@
 hs_bindgen_de19e07a9cb2bdf7
   :: BG.Ptr SDL_Sensor
   -> IO SDL_SensorID
 hs_bindgen_de19e07a9cb2bdf7 =
-  BG.fromFFIType hs_bindgen_de19e07a9cb2bdf7_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_de19e07a9cb2bdf7_base (BG.toFFIType x0))
 
 -- | Get the instance ID of a sensor.
 --
@@ -438,8 +458,8 @@
   hs_bindgen_67086d7531309dea_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_Safe_SDL_GetSensorData@
 hs_bindgen_67086d7531309dea
@@ -448,7 +468,12 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_67086d7531309dea =
-  BG.fromFFIType hs_bindgen_67086d7531309dea_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_67086d7531309dea_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get the current state of an opened sensor.
 --
@@ -486,7 +511,8 @@
   :: BG.Ptr SDL_Sensor
   -> IO ()
 hs_bindgen_8ac47026ac2650df =
-  BG.fromFFIType hs_bindgen_8ac47026ac2650df_base
+  \x0 ->
+    hs_bindgen_8ac47026ac2650df_base (BG.toFFIType x0)
 
 -- | Close a sensor previously opened with @SDL_OpenSensor()@.
 --
@@ -509,7 +535,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_Safe_SDL_UpdateSensors@
 hs_bindgen_bcad9e8be73cbb74 :: IO ()
 hs_bindgen_bcad9e8be73cbb74 =
-  BG.fromFFIType hs_bindgen_bcad9e8be73cbb74_base
+  hs_bindgen_bcad9e8be73cbb74_base
 
 -- | Update the current state of the open sensors.
 --
diff --git a/src/SDL3/Sys/Bindgen/Sensor/Unsafe.hs b/src/SDL3/Sys/Bindgen/Sensor/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Sensor/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Sensor/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Sensor.Unsafe (
@@ -20,6 +22,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -28,7 +33,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_sensor.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_sensor.h>"
          , "SDL_SensorID *hs_bindgen_ee6d720498ccfcf9 ("
          , "  signed int *arg1"
          , ")"
@@ -128,7 +137,8 @@
   :: BG.Ptr BG.CInt
   -> IO (BG.Ptr SDL_SensorID)
 hs_bindgen_ee6d720498ccfcf9 =
-  BG.fromFFIType hs_bindgen_ee6d720498ccfcf9_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_ee6d720498ccfcf9_base (BG.toFFIType x0))
 
 -- | Get a list of currently connected sensors.
 --
@@ -148,7 +158,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_Unsafe_SDL_GetSensorNameForID@
 foreign import ccall unsafe "hs_bindgen_fa9519ef92359fd7"
   hs_bindgen_fa9519ef92359fd7_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_Unsafe_SDL_GetSensorNameForID@
@@ -156,7 +166,8 @@
   :: SDL_SensorID
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_fa9519ef92359fd7 =
-  BG.fromFFIType hs_bindgen_fa9519ef92359fd7_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_fa9519ef92359fd7_base (BG.toFFIType x0))
 
 -- | Get the implementation dependent name of a sensor.
 --
@@ -178,15 +189,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_Unsafe_SDL_GetSensorTypeForID@
 foreign import ccall unsafe "hs_bindgen_b228ff19dccc3470"
   hs_bindgen_b228ff19dccc3470_base
-    :: BG.Word32
-    -> IO BG.Int32
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_Unsafe_SDL_GetSensorTypeForID@
 hs_bindgen_b228ff19dccc3470
   :: SDL_SensorID
   -> IO SDL_SensorType
 hs_bindgen_b228ff19dccc3470 =
-  BG.fromFFIType hs_bindgen_b228ff19dccc3470_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_b228ff19dccc3470_base (BG.toFFIType x0))
 
 -- | Get the type of a sensor.
 --
@@ -208,15 +220,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_Unsafe_SDL_GetSensorNonPortableTypeForID@
 foreign import ccall unsafe "hs_bindgen_55dc63ea84b90dfd"
   hs_bindgen_55dc63ea84b90dfd_base
-    :: BG.Word32
-    -> IO BG.Int32
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_Unsafe_SDL_GetSensorNonPortableTypeForID@
 hs_bindgen_55dc63ea84b90dfd
   :: SDL_SensorID
   -> IO BG.CInt
 hs_bindgen_55dc63ea84b90dfd =
-  BG.fromFFIType hs_bindgen_55dc63ea84b90dfd_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_55dc63ea84b90dfd_base (BG.toFFIType x0))
 
 -- | Get the platform dependent type of a sensor.
 --
@@ -239,7 +252,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_Unsafe_SDL_OpenSensor@
 foreign import ccall unsafe "hs_bindgen_96a064de06af7f5b"
   hs_bindgen_96a064de06af7f5b_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_Unsafe_SDL_OpenSensor@
@@ -247,7 +260,8 @@
   :: SDL_SensorID
   -> IO (BG.Ptr SDL_Sensor)
 hs_bindgen_96a064de06af7f5b =
-  BG.fromFFIType hs_bindgen_96a064de06af7f5b_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_96a064de06af7f5b_base (BG.toFFIType x0))
 
 -- | Open a sensor for use.
 --
@@ -267,7 +281,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_Unsafe_SDL_GetSensorFromID@
 foreign import ccall unsafe "hs_bindgen_538466d72bb89e2a"
   hs_bindgen_538466d72bb89e2a_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_Unsafe_SDL_GetSensorFromID@
@@ -275,7 +289,8 @@
   :: SDL_SensorID
   -> IO (BG.Ptr SDL_Sensor)
 hs_bindgen_538466d72bb89e2a =
-  BG.fromFFIType hs_bindgen_538466d72bb89e2a_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_538466d72bb89e2a_base (BG.toFFIType x0))
 
 -- | Return the 'SDL_Sensor' associated with an instance ID.
 --
@@ -296,14 +311,15 @@
 foreign import ccall unsafe "hs_bindgen_bd4281541ec37b4a"
   hs_bindgen_bd4281541ec37b4a_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_Unsafe_SDL_GetSensorProperties@
 hs_bindgen_bd4281541ec37b4a
   :: BG.Ptr SDL_Sensor
   -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
 hs_bindgen_bd4281541ec37b4a =
-  BG.fromFFIType hs_bindgen_bd4281541ec37b4a_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_bd4281541ec37b4a_base (BG.toFFIType x0))
 
 -- | Get the properties associated with a sensor.
 --
@@ -331,7 +347,8 @@
   :: BG.Ptr SDL_Sensor
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_0b99eed337a49b0f =
-  BG.fromFFIType hs_bindgen_0b99eed337a49b0f_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_0b99eed337a49b0f_base (BG.toFFIType x0))
 
 -- | Get the implementation dependent name of a sensor.
 --
@@ -352,14 +369,15 @@
 foreign import ccall unsafe "hs_bindgen_a8f08b8d675c0eb3"
   hs_bindgen_a8f08b8d675c0eb3_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_Unsafe_SDL_GetSensorType@
 hs_bindgen_a8f08b8d675c0eb3
   :: BG.Ptr SDL_Sensor
   -> IO SDL_SensorType
 hs_bindgen_a8f08b8d675c0eb3 =
-  BG.fromFFIType hs_bindgen_a8f08b8d675c0eb3_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a8f08b8d675c0eb3_base (BG.toFFIType x0))
 
 -- | Get the type of a sensor.
 --
@@ -380,14 +398,15 @@
 foreign import ccall unsafe "hs_bindgen_559a0243cc021a62"
   hs_bindgen_559a0243cc021a62_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_Unsafe_SDL_GetSensorNonPortableType@
 hs_bindgen_559a0243cc021a62
   :: BG.Ptr SDL_Sensor
   -> IO BG.CInt
 hs_bindgen_559a0243cc021a62 =
-  BG.fromFFIType hs_bindgen_559a0243cc021a62_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_559a0243cc021a62_base (BG.toFFIType x0))
 
 -- | Get the platform dependent type of a sensor.
 --
@@ -409,14 +428,15 @@
 foreign import ccall unsafe "hs_bindgen_83b38918f593ff72"
   hs_bindgen_83b38918f593ff72_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_Unsafe_SDL_GetSensorID@
 hs_bindgen_83b38918f593ff72
   :: BG.Ptr SDL_Sensor
   -> IO SDL_SensorID
 hs_bindgen_83b38918f593ff72 =
-  BG.fromFFIType hs_bindgen_83b38918f593ff72_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_83b38918f593ff72_base (BG.toFFIType x0))
 
 -- | Get the instance ID of a sensor.
 --
@@ -438,8 +458,8 @@
   hs_bindgen_e4251a0c2836940f_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_Unsafe_SDL_GetSensorData@
 hs_bindgen_e4251a0c2836940f
@@ -448,7 +468,12 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_e4251a0c2836940f =
-  BG.fromFFIType hs_bindgen_e4251a0c2836940f_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_e4251a0c2836940f_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get the current state of an opened sensor.
 --
@@ -486,7 +511,8 @@
   :: BG.Ptr SDL_Sensor
   -> IO ()
 hs_bindgen_55183617e9522a14 =
-  BG.fromFFIType hs_bindgen_55183617e9522a14_base
+  \x0 ->
+    hs_bindgen_55183617e9522a14_base (BG.toFFIType x0)
 
 -- | Close a sensor previously opened with @SDL_OpenSensor()@.
 --
@@ -509,7 +535,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Sensor_Unsafe_SDL_UpdateSensors@
 hs_bindgen_da4b495835d9041d :: IO ()
 hs_bindgen_da4b495835d9041d =
-  BG.fromFFIType hs_bindgen_da4b495835d9041d_base
+  hs_bindgen_da4b495835d9041d_base
 
 -- | Update the current state of the open sensors.
 --
diff --git a/src/SDL3/Sys/Bindgen/Stdinc.hs b/src/SDL3/Sys/Bindgen/Stdinc.hs
--- a/src/SDL3/Sys/Bindgen/Stdinc.hs
+++ b/src/SDL3/Sys/Bindgen/Stdinc.hs
@@ -7,6 +7,7 @@
 {-# LANGUAGE ExplicitForAll #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE MagicHash #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
@@ -18,6 +19,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 module SDL3.Sys.Bindgen.Stdinc (
   SDL3.Sys.Bindgen.Stdinc.Sint8 (..),
@@ -57,11 +59,31 @@
 )
 where
 
+import Prelude (
+  Bounded,
+  Enum,
+  Eq,
+  IO,
+  Int,
+  Integral,
+  Num,
+  Ord,
+  Read,
+  Real,
+  Show,
+  fmap,
+  pure,
+  (<*>),
+  (>>),
+  type (~),
+ )
+
 import HsBindgen.Runtime.CEnum qualified as CEnum
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.Marshal qualified as Marshal
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Struct qualified as Struct
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField
 
@@ -573,6 +595,12 @@
 
 deriving via Marshal.EquivStorable SDL_alignment_test instance BG.Storable SDL_alignment_test
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_alignment_test
+  instance
+    Struct.IsStruct SDL_alignment_test
+
+-- | [C declaration]: @a@, defined at @SDL3\/SDL_stdinc.h 1184:11@
 instance
   (ty ~ Uint8)
   => BG.CompatHasField.HasField "a" SDL_alignment_test ty
@@ -595,6 +623,7 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | [C declaration]: @b@, defined at @SDL3\/SDL_stdinc.h 1185:11@
 instance
   (ty ~ BG.Ptr BG.Void)
   => BG.CompatHasField.HasField "b" SDL_alignment_test ty
@@ -718,13 +747,12 @@
   { unwrap :: HsBindgen.Runtime.LibC.CSize -> IO (BG.Ptr BG.Void)
   }
   deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
 
 -- __unique:__ @toSDL_malloc_func_Aux@
 foreign import ccall safe "wrapper"
   hs_bindgen_5c5a0694498aea22_base
-    :: (BG.Word64 -> IO (BG.Ptr BG.Void))
-    -> IO (BG.FunPtr (BG.Word64 -> IO (BG.Ptr BG.Void)))
+    :: (HsBindgen.Runtime.LibC.CSize -> IO (BG.Ptr BG.Void))
+    -> IO (BG.FunPtr (HsBindgen.Runtime.LibC.CSize -> IO (BG.Ptr BG.Void)))
 
 -- __unique:__ @toSDL_malloc_func_Aux@
 hs_bindgen_5c5a0694498aea22
@@ -732,13 +760,19 @@
   -> IO (BG.FunPtr SDL_malloc_func_Aux)
 hs_bindgen_5c5a0694498aea22 =
   \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_5c5a0694498aea22_base (BG.toFFIType fun0))
+    fmap
+      BG.castFunPtr
+      ( hs_bindgen_5c5a0694498aea22_base
+          ( \x1 ->
+              fmap BG.toFFIType (BG.getField @"unwrap" fun0 (BG.fromFFIType x1))
+          )
+      )
 
 -- __unique:__ @fromSDL_malloc_func_Aux@
 foreign import ccall safe "dynamic"
   hs_bindgen_3dfc01b3bec18b2f_base
-    :: BG.FunPtr (BG.Word64 -> IO (BG.Ptr BG.Void))
-    -> BG.Word64
+    :: BG.FunPtr (HsBindgen.Runtime.LibC.CSize -> IO (BG.Ptr BG.Void))
+    -> HsBindgen.Runtime.LibC.CSize
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @fromSDL_malloc_func_Aux@
@@ -747,7 +781,10 @@
   -> SDL_malloc_func_Aux
 hs_bindgen_3dfc01b3bec18b2f =
   \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_3dfc01b3bec18b2f_base (BG.castFunPtrToFFIType funPtr0))
+    SDL_malloc_func_Aux
+      ( \x1 ->
+          fmap BG.fromFFIType (hs_bindgen_3dfc01b3bec18b2f_base (BG.castFunPtr funPtr0) (BG.toFFIType x1))
+      )
 
 instance BG.ToFunPtr SDL_malloc_func_Aux where
   toFunPtr = hs_bindgen_5c5a0694498aea22
@@ -837,13 +874,12 @@
   { unwrap :: HsBindgen.Runtime.LibC.CSize -> HsBindgen.Runtime.LibC.CSize -> IO (BG.Ptr BG.Void)
   }
   deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
 
 -- __unique:__ @toSDL_calloc_func_Aux@
 foreign import ccall safe "wrapper"
   hs_bindgen_e0fe0baaf22a9277_base
-    :: (BG.Word64 -> BG.Word64 -> IO (BG.Ptr BG.Void))
-    -> IO (BG.FunPtr (BG.Word64 -> BG.Word64 -> IO (BG.Ptr BG.Void)))
+    :: (HsBindgen.Runtime.LibC.CSize -> HsBindgen.Runtime.LibC.CSize -> IO (BG.Ptr BG.Void))
+    -> IO (BG.FunPtr (HsBindgen.Runtime.LibC.CSize -> HsBindgen.Runtime.LibC.CSize -> IO (BG.Ptr BG.Void)))
 
 -- __unique:__ @toSDL_calloc_func_Aux@
 hs_bindgen_e0fe0baaf22a9277
@@ -851,14 +887,21 @@
   -> IO (BG.FunPtr SDL_calloc_func_Aux)
 hs_bindgen_e0fe0baaf22a9277 =
   \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_e0fe0baaf22a9277_base (BG.toFFIType fun0))
+    fmap
+      BG.castFunPtr
+      ( hs_bindgen_e0fe0baaf22a9277_base
+          ( \x1 ->
+              \x2 ->
+                fmap BG.toFFIType (BG.getField @"unwrap" fun0 (BG.fromFFIType x1) (BG.fromFFIType x2))
+          )
+      )
 
 -- __unique:__ @fromSDL_calloc_func_Aux@
 foreign import ccall safe "dynamic"
   hs_bindgen_3046202e62b950f1_base
-    :: BG.FunPtr (BG.Word64 -> BG.Word64 -> IO (BG.Ptr BG.Void))
-    -> BG.Word64
-    -> BG.Word64
+    :: BG.FunPtr (HsBindgen.Runtime.LibC.CSize -> HsBindgen.Runtime.LibC.CSize -> IO (BG.Ptr BG.Void))
+    -> HsBindgen.Runtime.LibC.CSize
+    -> HsBindgen.Runtime.LibC.CSize
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @fromSDL_calloc_func_Aux@
@@ -867,7 +910,13 @@
   -> SDL_calloc_func_Aux
 hs_bindgen_3046202e62b950f1 =
   \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_3046202e62b950f1_base (BG.castFunPtrToFFIType funPtr0))
+    SDL_calloc_func_Aux
+      ( \x1 ->
+          \x2 ->
+            fmap
+              BG.fromFFIType
+              (hs_bindgen_3046202e62b950f1_base (BG.castFunPtr funPtr0) (BG.toFFIType x1) (BG.toFFIType x2))
+      )
 
 instance BG.ToFunPtr SDL_calloc_func_Aux where
   toFunPtr = hs_bindgen_e0fe0baaf22a9277
@@ -959,13 +1008,12 @@
   { unwrap :: BG.Ptr BG.Void -> HsBindgen.Runtime.LibC.CSize -> IO (BG.Ptr BG.Void)
   }
   deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
 
 -- __unique:__ @toSDL_realloc_func_Aux@
 foreign import ccall safe "wrapper"
   hs_bindgen_ae5f282d8127c075_base
-    :: (BG.Ptr BG.Void -> BG.Word64 -> IO (BG.Ptr BG.Void))
-    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.Word64 -> IO (BG.Ptr BG.Void)))
+    :: (BG.Ptr BG.Void -> HsBindgen.Runtime.LibC.CSize -> IO (BG.Ptr BG.Void))
+    -> IO (BG.FunPtr (BG.Ptr BG.Void -> HsBindgen.Runtime.LibC.CSize -> IO (BG.Ptr BG.Void)))
 
 -- __unique:__ @toSDL_realloc_func_Aux@
 hs_bindgen_ae5f282d8127c075
@@ -973,14 +1021,21 @@
   -> IO (BG.FunPtr SDL_realloc_func_Aux)
 hs_bindgen_ae5f282d8127c075 =
   \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_ae5f282d8127c075_base (BG.toFFIType fun0))
+    fmap
+      BG.castFunPtr
+      ( hs_bindgen_ae5f282d8127c075_base
+          ( \x1 ->
+              \x2 ->
+                fmap BG.toFFIType (BG.getField @"unwrap" fun0 (BG.fromFFIType x1) (BG.fromFFIType x2))
+          )
+      )
 
 -- __unique:__ @fromSDL_realloc_func_Aux@
 foreign import ccall safe "dynamic"
   hs_bindgen_60fef27e3e28e137_base
-    :: BG.FunPtr (BG.Ptr BG.Void -> BG.Word64 -> IO (BG.Ptr BG.Void))
+    :: BG.FunPtr (BG.Ptr BG.Void -> HsBindgen.Runtime.LibC.CSize -> IO (BG.Ptr BG.Void))
     -> BG.Ptr BG.Void
-    -> BG.Word64
+    -> HsBindgen.Runtime.LibC.CSize
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @fromSDL_realloc_func_Aux@
@@ -989,7 +1044,13 @@
   -> SDL_realloc_func_Aux
 hs_bindgen_60fef27e3e28e137 =
   \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_60fef27e3e28e137_base (BG.castFunPtrToFFIType funPtr0))
+    SDL_realloc_func_Aux
+      ( \x1 ->
+          \x2 ->
+            fmap
+              BG.fromFFIType
+              (hs_bindgen_60fef27e3e28e137_base (BG.castFunPtr funPtr0) (BG.toFFIType x1) (BG.toFFIType x2))
+      )
 
 instance BG.ToFunPtr SDL_realloc_func_Aux where
   toFunPtr = hs_bindgen_ae5f282d8127c075
@@ -1081,7 +1142,6 @@
   { unwrap :: BG.Ptr BG.Void -> IO ()
   }
   deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
 
 -- __unique:__ @toSDL_free_func_Aux@
 foreign import ccall safe "wrapper"
@@ -1095,7 +1155,13 @@
   -> IO (BG.FunPtr SDL_free_func_Aux)
 hs_bindgen_f13c0d9d2bec2096 =
   \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_f13c0d9d2bec2096_base (BG.toFFIType fun0))
+    fmap
+      BG.castFunPtr
+      ( hs_bindgen_f13c0d9d2bec2096_base
+          ( \x1 ->
+              BG.getField @"unwrap" fun0 (BG.fromFFIType x1)
+          )
+      )
 
 -- __unique:__ @fromSDL_free_func_Aux@
 foreign import ccall safe "dynamic"
@@ -1110,7 +1176,10 @@
   -> SDL_free_func_Aux
 hs_bindgen_05ceac4716402972 =
   \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_05ceac4716402972_base (BG.castFunPtrToFFIType funPtr0))
+    SDL_free_func_Aux
+      ( \x1 ->
+          hs_bindgen_05ceac4716402972_base (BG.castFunPtr funPtr0) (BG.toFFIType x1)
+      )
 
 instance BG.ToFunPtr SDL_free_func_Aux where
   toFunPtr = hs_bindgen_f13c0d9d2bec2096
@@ -1207,13 +1276,12 @@
   { unwrap :: PtrConst.PtrConst BG.Void -> PtrConst.PtrConst BG.Void -> IO BG.CInt
   }
   deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
 
 -- __unique:__ @toSDL_CompareCallback_Aux@
 foreign import ccall safe "wrapper"
   hs_bindgen_b4335f7e8ef40f79_base
-    :: (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.Int32)
-    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.Int32))
+    :: (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.CInt)
+    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.CInt))
 
 -- __unique:__ @toSDL_CompareCallback_Aux@
 hs_bindgen_b4335f7e8ef40f79
@@ -1221,15 +1289,22 @@
   -> IO (BG.FunPtr SDL_CompareCallback_Aux)
 hs_bindgen_b4335f7e8ef40f79 =
   \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_b4335f7e8ef40f79_base (BG.toFFIType fun0))
+    fmap
+      BG.castFunPtr
+      ( hs_bindgen_b4335f7e8ef40f79_base
+          ( \x1 ->
+              \x2 ->
+                fmap BG.toFFIType (BG.getField @"unwrap" fun0 (BG.fromFFIType x1) (BG.fromFFIType x2))
+          )
+      )
 
 -- __unique:__ @fromSDL_CompareCallback_Aux@
 foreign import ccall safe "dynamic"
   hs_bindgen_72d385fa3e33955d_base
-    :: BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.Int32)
+    :: BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.CInt)
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @fromSDL_CompareCallback_Aux@
 hs_bindgen_72d385fa3e33955d
@@ -1237,7 +1312,13 @@
   -> SDL_CompareCallback_Aux
 hs_bindgen_72d385fa3e33955d =
   \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_72d385fa3e33955d_base (BG.castFunPtrToFFIType funPtr0))
+    SDL_CompareCallback_Aux
+      ( \x1 ->
+          \x2 ->
+            fmap
+              BG.fromFFIType
+              (hs_bindgen_72d385fa3e33955d_base (BG.castFunPtr funPtr0) (BG.toFFIType x1) (BG.toFFIType x2))
+      )
 
 instance BG.ToFunPtr SDL_CompareCallback_Aux where
   toFunPtr = hs_bindgen_b4335f7e8ef40f79
@@ -1325,13 +1406,12 @@
   { unwrap :: BG.Ptr BG.Void -> PtrConst.PtrConst BG.Void -> PtrConst.PtrConst BG.Void -> IO BG.CInt
   }
   deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
 
 -- __unique:__ @toSDL_CompareCallback_r_Aux@
 foreign import ccall safe "wrapper"
   hs_bindgen_a12f359999653344_base
-    :: (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.Int32)
-    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.Int32))
+    :: (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.CInt)
+    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.CInt))
 
 -- __unique:__ @toSDL_CompareCallback_r_Aux@
 hs_bindgen_a12f359999653344
@@ -1339,16 +1419,26 @@
   -> IO (BG.FunPtr SDL_CompareCallback_r_Aux)
 hs_bindgen_a12f359999653344 =
   \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_a12f359999653344_base (BG.toFFIType fun0))
+    fmap
+      BG.castFunPtr
+      ( hs_bindgen_a12f359999653344_base
+          ( \x1 ->
+              \x2 ->
+                \x3 ->
+                  fmap
+                    BG.toFFIType
+                    (BG.getField @"unwrap" fun0 (BG.fromFFIType x1) (BG.fromFFIType x2) (BG.fromFFIType x3))
+          )
+      )
 
 -- __unique:__ @fromSDL_CompareCallback_r_Aux@
 foreign import ccall safe "dynamic"
   hs_bindgen_c41d0998fdad0a16_base
-    :: BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.Int32)
+    :: BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.CInt)
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @fromSDL_CompareCallback_r_Aux@
 hs_bindgen_c41d0998fdad0a16
@@ -1356,7 +1446,19 @@
   -> SDL_CompareCallback_r_Aux
 hs_bindgen_c41d0998fdad0a16 =
   \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_c41d0998fdad0a16_base (BG.castFunPtrToFFIType funPtr0))
+    SDL_CompareCallback_r_Aux
+      ( \x1 ->
+          \x2 ->
+            \x3 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_c41d0998fdad0a16_base
+                    (BG.castFunPtr funPtr0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                )
+      )
 
 instance BG.ToFunPtr SDL_CompareCallback_r_Aux where
   toFunPtr = hs_bindgen_a12f359999653344
@@ -1526,7 +1628,6 @@
   { unwrap :: IO ()
   }
   deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
 
 -- __unique:__ @toSDL_FunctionPointer_Aux@
 foreign import ccall safe "wrapper"
@@ -1540,7 +1641,7 @@
   -> IO (BG.FunPtr SDL_FunctionPointer_Aux)
 hs_bindgen_8e3379ae5ebc8b29 =
   \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_8e3379ae5ebc8b29_base (BG.toFFIType fun0))
+    fmap BG.castFunPtr (hs_bindgen_8e3379ae5ebc8b29_base (BG.getField @"unwrap" fun0))
 
 -- __unique:__ @fromSDL_FunctionPointer_Aux@
 foreign import ccall safe "dynamic"
@@ -1554,7 +1655,7 @@
   -> SDL_FunctionPointer_Aux
 hs_bindgen_8a4eac10e33e73be =
   \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_8a4eac10e33e73be_base (BG.castFunPtrToFFIType funPtr0))
+    SDL_FunctionPointer_Aux (hs_bindgen_8a4eac10e33e73be_base (BG.castFunPtr funPtr0))
 
 instance BG.ToFunPtr SDL_FunctionPointer_Aux where
   toFunPtr = hs_bindgen_8e3379ae5ebc8b29
diff --git a/src/SDL3/Sys/Bindgen/Stdinc/FunPtr.hs b/src/SDL3/Sys/Bindgen/Stdinc/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Stdinc/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Stdinc/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Stdinc.FunPtr (
@@ -46,6 +48,9 @@
   SDL3.Sys.Bindgen.Stdinc.FunPtr.sDL_crc16,
   SDL3.Sys.Bindgen.Stdinc.FunPtr.sDL_crc32,
   SDL3.Sys.Bindgen.Stdinc.FunPtr.sDL_murmur3_32,
+  SDL3.Sys.Bindgen.Stdinc.FunPtr.sDL_memcpy,
+  SDL3.Sys.Bindgen.Stdinc.FunPtr.sDL_memmove,
+  SDL3.Sys.Bindgen.Stdinc.FunPtr.sDL_memset,
   SDL3.Sys.Bindgen.Stdinc.FunPtr.sDL_memset4,
   SDL3.Sys.Bindgen.Stdinc.FunPtr.sDL_memcmp,
   SDL3.Sys.Bindgen.Stdinc.FunPtr.sDL_wcslen,
@@ -156,6 +161,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
@@ -164,7 +171,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_stdinc.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_stdinc.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_malloc */"
          , "__attribute__ ((const))"
          , "void *(*hs_bindgen_9722441ea82cf670 (void)) ("
@@ -546,6 +557,36 @@
          , "{"
          , "  return &SDL_murmur3_32;"
          , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_memcpy */"
+         , "__attribute__ ((const))"
+         , "void *(*hs_bindgen_d6f4de330020d4d9 (void)) ("
+         , "  void *arg1,"
+         , "  void const *arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return &SDL_memcpy;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_memmove */"
+         , "__attribute__ ((const))"
+         , "void *(*hs_bindgen_44856f6360083eb1 (void)) ("
+         , "  void *arg1,"
+         , "  void const *arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return &SDL_memmove;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_memset */"
+         , "__attribute__ ((const))"
+         , "void *(*hs_bindgen_c1ce0cb00fc3994b (void)) ("
+         , "  void *arg1,"
+         , "  signed int arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return &SDL_memset;"
+         , "}"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_memset4 */"
          , "__attribute__ ((const))"
          , "void *(*hs_bindgen_45d6fa96a2a35062 (void)) ("
@@ -1493,7 +1534,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_malloc@
 hs_bindgen_9722441ea82cf670 :: IO (BG.FunPtr (HsBindgen.Runtime.LibC.CSize -> IO (BG.Ptr BG.Void)))
 hs_bindgen_9722441ea82cf670 =
-  BG.fromFFIType hs_bindgen_9722441ea82cf670_base
+  fmap BG.fromFFIType hs_bindgen_9722441ea82cf670_base
 
 {-# NOINLINE sDL_malloc #-}
 
@@ -1529,7 +1570,7 @@
 hs_bindgen_2b076bb91cf947df
   :: IO (BG.FunPtr (HsBindgen.Runtime.LibC.CSize -> HsBindgen.Runtime.LibC.CSize -> IO (BG.Ptr BG.Void)))
 hs_bindgen_2b076bb91cf947df =
-  BG.fromFFIType hs_bindgen_2b076bb91cf947df_base
+  fmap BG.fromFFIType hs_bindgen_2b076bb91cf947df_base
 
 {-# NOINLINE sDL_calloc #-}
 
@@ -1548,7 +1589,7 @@
 hs_bindgen_bbae567861825a2b
   :: IO (BG.FunPtr (BG.Ptr BG.Void -> HsBindgen.Runtime.LibC.CSize -> IO (BG.Ptr BG.Void)))
 hs_bindgen_bbae567861825a2b =
-  BG.fromFFIType hs_bindgen_bbae567861825a2b_base
+  fmap BG.fromFFIType hs_bindgen_bbae567861825a2b_base
 
 {-# NOINLINE sDL_realloc #-}
 
@@ -1565,7 +1606,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_free@
 hs_bindgen_0f3dfcf2ab9d228a :: IO (BG.FunPtr (BG.Ptr BG.Void -> IO ()))
 hs_bindgen_0f3dfcf2ab9d228a =
-  BG.fromFFIType hs_bindgen_0f3dfcf2ab9d228a_base
+  fmap BG.fromFFIType hs_bindgen_0f3dfcf2ab9d228a_base
 
 {-# NOINLINE sDL_free #-}
 
@@ -1605,7 +1646,7 @@
            )
        )
 hs_bindgen_4ad4cf326cf2d8ee =
-  BG.fromFFIType hs_bindgen_4ad4cf326cf2d8ee_base
+  fmap BG.fromFFIType hs_bindgen_4ad4cf326cf2d8ee_base
 
 {-# NOINLINE sDL_GetOriginalMemoryFunctions #-}
 
@@ -1654,7 +1695,7 @@
            )
        )
 hs_bindgen_d860ef935b823504 =
-  BG.fromFFIType hs_bindgen_d860ef935b823504_base
+  fmap BG.fromFFIType hs_bindgen_d860ef935b823504_base
 
 {-# NOINLINE sDL_GetMemoryFunctions #-}
 
@@ -1696,7 +1737,7 @@
   :: IO
        (BG.FunPtr (SDL_malloc_func -> SDL_calloc_func -> SDL_realloc_func -> SDL_free_func -> IO BG.CBool))
 hs_bindgen_a474c8c00b052ea2 =
-  BG.fromFFIType hs_bindgen_a474c8c00b052ea2_base
+  fmap BG.fromFFIType hs_bindgen_a474c8c00b052ea2_base
 
 {-# NOINLINE sDL_SetMemoryFunctions #-}
 
@@ -1737,7 +1778,7 @@
 hs_bindgen_de151c2774561d5d
   :: IO (BG.FunPtr (HsBindgen.Runtime.LibC.CSize -> HsBindgen.Runtime.LibC.CSize -> IO (BG.Ptr BG.Void)))
 hs_bindgen_de151c2774561d5d =
-  BG.fromFFIType hs_bindgen_de151c2774561d5d_base
+  fmap BG.fromFFIType hs_bindgen_de151c2774561d5d_base
 
 {-# NOINLINE sDL_aligned_alloc #-}
 
@@ -1775,7 +1816,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_aligned_free@
 hs_bindgen_dd6b53bc3c6f96ea :: IO (BG.FunPtr (BG.Ptr BG.Void -> IO ()))
 hs_bindgen_dd6b53bc3c6f96ea =
-  BG.fromFFIType hs_bindgen_dd6b53bc3c6f96ea_base
+  fmap BG.fromFFIType hs_bindgen_dd6b53bc3c6f96ea_base
 
 {-# NOINLINE sDL_aligned_free #-}
 
@@ -1806,7 +1847,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_GetNumAllocations@
 hs_bindgen_fe81cad123788733 :: IO (BG.FunPtr (IO BG.CInt))
 hs_bindgen_fe81cad123788733 =
-  BG.fromFFIType hs_bindgen_fe81cad123788733_base
+  fmap BG.fromFFIType hs_bindgen_fe81cad123788733_base
 
 {-# NOINLINE sDL_GetNumAllocations #-}
 
@@ -1831,7 +1872,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_GetEnvironment@
 hs_bindgen_9a656c04aab82f9e :: IO (BG.FunPtr (IO (BG.Ptr SDL_Environment)))
 hs_bindgen_9a656c04aab82f9e =
-  BG.fromFFIType hs_bindgen_9a656c04aab82f9e_base
+  fmap BG.fromFFIType hs_bindgen_9a656c04aab82f9e_base
 
 {-# NOINLINE sDL_GetEnvironment #-}
 
@@ -1860,7 +1901,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_CreateEnvironment@
 hs_bindgen_c0820759e235b8e4 :: IO (BG.FunPtr (BG.CBool -> IO (BG.Ptr SDL_Environment)))
 hs_bindgen_c0820759e235b8e4 =
-  BG.fromFFIType hs_bindgen_c0820759e235b8e4_base
+  fmap BG.fromFFIType hs_bindgen_c0820759e235b8e4_base
 
 {-# NOINLINE sDL_CreateEnvironment #-}
 
@@ -1891,7 +1932,7 @@
   :: IO
        (BG.FunPtr (BG.Ptr SDL_Environment -> PtrConst.PtrConst BG.CChar -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_a475668aa4ab4369 =
-  BG.fromFFIType hs_bindgen_a475668aa4ab4369_base
+  fmap BG.fromFFIType hs_bindgen_a475668aa4ab4369_base
 
 {-# NOINLINE sDL_GetEnvironmentVariable #-}
 
@@ -1924,7 +1965,7 @@
 hs_bindgen_9fb7038d3656b96c
   :: IO (BG.FunPtr (BG.Ptr SDL_Environment -> IO (BG.Ptr (BG.Ptr BG.CChar))))
 hs_bindgen_9fb7038d3656b96c =
-  BG.fromFFIType hs_bindgen_9fb7038d3656b96c_base
+  fmap BG.fromFFIType hs_bindgen_9fb7038d3656b96c_base
 
 {-# NOINLINE sDL_GetEnvironmentVariables #-}
 
@@ -1962,7 +2003,7 @@
            )
        )
 hs_bindgen_a99329e2f1a82258 =
-  BG.fromFFIType hs_bindgen_a99329e2f1a82258_base
+  fmap BG.fromFFIType hs_bindgen_a99329e2f1a82258_base
 
 {-# NOINLINE sDL_SetEnvironmentVariable #-}
 
@@ -2005,7 +2046,7 @@
 hs_bindgen_c6a62ea65fc9d622
   :: IO (BG.FunPtr (BG.Ptr SDL_Environment -> PtrConst.PtrConst BG.CChar -> IO BG.CBool))
 hs_bindgen_c6a62ea65fc9d622 =
-  BG.fromFFIType hs_bindgen_c6a62ea65fc9d622_base
+  fmap BG.fromFFIType hs_bindgen_c6a62ea65fc9d622_base
 
 {-# NOINLINE sDL_UnsetEnvironmentVariable #-}
 
@@ -2037,7 +2078,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_DestroyEnvironment@
 hs_bindgen_e750bb904f747388 :: IO (BG.FunPtr (BG.Ptr SDL_Environment -> IO ()))
 hs_bindgen_e750bb904f747388 =
-  BG.fromFFIType hs_bindgen_e750bb904f747388_base
+  fmap BG.fromFFIType hs_bindgen_e750bb904f747388_base
 
 {-# NOINLINE sDL_DestroyEnvironment #-}
 
@@ -2065,7 +2106,7 @@
 hs_bindgen_b563cf6799d5c876
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_b563cf6799d5c876 =
-  BG.fromFFIType hs_bindgen_b563cf6799d5c876_base
+  fmap BG.fromFFIType hs_bindgen_b563cf6799d5c876_base
 
 {-# NOINLINE sDL_getenv #-}
 
@@ -2097,7 +2138,7 @@
 hs_bindgen_e6077a375be5ae63
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_e6077a375be5ae63 =
-  BG.fromFFIType hs_bindgen_e6077a375be5ae63_base
+  fmap BG.fromFFIType hs_bindgen_e6077a375be5ae63_base
 
 {-# NOINLINE sDL_getenv_unsafe #-}
 
@@ -2131,7 +2172,7 @@
 hs_bindgen_aaf5efc0afa93f4f
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> PtrConst.PtrConst BG.CChar -> BG.CInt -> IO BG.CInt))
 hs_bindgen_aaf5efc0afa93f4f =
-  BG.fromFFIType hs_bindgen_aaf5efc0afa93f4f_base
+  fmap BG.fromFFIType hs_bindgen_aaf5efc0afa93f4f_base
 
 {-# NOINLINE sDL_setenv_unsafe #-}
 
@@ -2165,7 +2206,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_unsetenv_unsafe@
 hs_bindgen_519fb9e8ee876013 :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO BG.CInt))
 hs_bindgen_519fb9e8ee876013 =
-  BG.fromFFIType hs_bindgen_519fb9e8ee876013_base
+  fmap BG.fromFFIType hs_bindgen_519fb9e8ee876013_base
 
 {-# NOINLINE sDL_unsetenv_unsafe #-}
 
@@ -2203,7 +2244,7 @@
            )
        )
 hs_bindgen_fd5cea92e3ba7b16 =
-  BG.fromFFIType hs_bindgen_fd5cea92e3ba7b16_base
+  fmap BG.fromFFIType hs_bindgen_fd5cea92e3ba7b16_base
 
 {-# NOINLINE sDL_qsort #-}
 
@@ -2282,7 +2323,7 @@
            )
        )
 hs_bindgen_00f02cc97cc6b9fd =
-  BG.fromFFIType hs_bindgen_00f02cc97cc6b9fd_base
+  fmap BG.fromFFIType hs_bindgen_00f02cc97cc6b9fd_base
 
 {-# NOINLINE sDL_bsearch #-}
 
@@ -2367,7 +2408,7 @@
            )
        )
 hs_bindgen_271b6eff10a288b3 =
-  BG.fromFFIType hs_bindgen_271b6eff10a288b3_base
+  fmap BG.fromFFIType hs_bindgen_271b6eff10a288b3_base
 
 {-# NOINLINE sDL_qsort_r #-}
 
@@ -2456,7 +2497,7 @@
            )
        )
 hs_bindgen_39f0a8a8445979b1 =
-  BG.fromFFIType hs_bindgen_39f0a8a8445979b1_base
+  fmap BG.fromFFIType hs_bindgen_39f0a8a8445979b1_base
 
 {-# NOINLINE sDL_bsearch_r #-}
 
@@ -2540,7 +2581,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_abs@
 hs_bindgen_955d92475ad359d8 :: IO (BG.FunPtr (BG.CInt -> IO BG.CInt))
 hs_bindgen_955d92475ad359d8 =
-  BG.fromFFIType hs_bindgen_955d92475ad359d8_base
+  fmap BG.fromFFIType hs_bindgen_955d92475ad359d8_base
 
 {-# NOINLINE sDL_abs #-}
 
@@ -2567,7 +2608,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_isalpha@
 hs_bindgen_8e8018b5d5d8d98f :: IO (BG.FunPtr (BG.CInt -> IO BG.CInt))
 hs_bindgen_8e8018b5d5d8d98f =
-  BG.fromFFIType hs_bindgen_8e8018b5d5d8d98f_base
+  fmap BG.fromFFIType hs_bindgen_8e8018b5d5d8d98f_base
 
 {-# NOINLINE sDL_isalpha #-}
 
@@ -2596,7 +2637,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_isalnum@
 hs_bindgen_a52d45d106787b27 :: IO (BG.FunPtr (BG.CInt -> IO BG.CInt))
 hs_bindgen_a52d45d106787b27 =
-  BG.fromFFIType hs_bindgen_a52d45d106787b27_base
+  fmap BG.fromFFIType hs_bindgen_a52d45d106787b27_base
 
 {-# NOINLINE sDL_isalnum #-}
 
@@ -2625,7 +2666,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_isblank@
 hs_bindgen_0c075721ec100ff5 :: IO (BG.FunPtr (BG.CInt -> IO BG.CInt))
 hs_bindgen_0c075721ec100ff5 =
-  BG.fromFFIType hs_bindgen_0c075721ec100ff5_base
+  fmap BG.fromFFIType hs_bindgen_0c075721ec100ff5_base
 
 {-# NOINLINE sDL_isblank #-}
 
@@ -2654,7 +2695,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_iscntrl@
 hs_bindgen_de902558496e469f :: IO (BG.FunPtr (BG.CInt -> IO BG.CInt))
 hs_bindgen_de902558496e469f =
-  BG.fromFFIType hs_bindgen_de902558496e469f_base
+  fmap BG.fromFFIType hs_bindgen_de902558496e469f_base
 
 {-# NOINLINE sDL_iscntrl #-}
 
@@ -2683,7 +2724,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_isdigit@
 hs_bindgen_61af141b860ceb41 :: IO (BG.FunPtr (BG.CInt -> IO BG.CInt))
 hs_bindgen_61af141b860ceb41 =
-  BG.fromFFIType hs_bindgen_61af141b860ceb41_base
+  fmap BG.fromFFIType hs_bindgen_61af141b860ceb41_base
 
 {-# NOINLINE sDL_isdigit #-}
 
@@ -2712,7 +2753,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_isxdigit@
 hs_bindgen_c17beb32f0f1fd52 :: IO (BG.FunPtr (BG.CInt -> IO BG.CInt))
 hs_bindgen_c17beb32f0f1fd52 =
-  BG.fromFFIType hs_bindgen_c17beb32f0f1fd52_base
+  fmap BG.fromFFIType hs_bindgen_c17beb32f0f1fd52_base
 
 {-# NOINLINE sDL_isxdigit #-}
 
@@ -2741,7 +2782,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_ispunct@
 hs_bindgen_a88a9667ca4e8aa7 :: IO (BG.FunPtr (BG.CInt -> IO BG.CInt))
 hs_bindgen_a88a9667ca4e8aa7 =
-  BG.fromFFIType hs_bindgen_a88a9667ca4e8aa7_base
+  fmap BG.fromFFIType hs_bindgen_a88a9667ca4e8aa7_base
 
 {-# NOINLINE sDL_ispunct #-}
 
@@ -2772,7 +2813,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_isspace@
 hs_bindgen_02457e0c40d5e057 :: IO (BG.FunPtr (BG.CInt -> IO BG.CInt))
 hs_bindgen_02457e0c40d5e057 =
-  BG.fromFFIType hs_bindgen_02457e0c40d5e057_base
+  fmap BG.fromFFIType hs_bindgen_02457e0c40d5e057_base
 
 {-# NOINLINE sDL_isspace #-}
 
@@ -2813,7 +2854,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_isupper@
 hs_bindgen_0f55cc5ba611a3f2 :: IO (BG.FunPtr (BG.CInt -> IO BG.CInt))
 hs_bindgen_0f55cc5ba611a3f2 =
-  BG.fromFFIType hs_bindgen_0f55cc5ba611a3f2_base
+  fmap BG.fromFFIType hs_bindgen_0f55cc5ba611a3f2_base
 
 {-# NOINLINE sDL_isupper #-}
 
@@ -2842,7 +2883,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_islower@
 hs_bindgen_f681ed21a8e1349a :: IO (BG.FunPtr (BG.CInt -> IO BG.CInt))
 hs_bindgen_f681ed21a8e1349a =
-  BG.fromFFIType hs_bindgen_f681ed21a8e1349a_base
+  fmap BG.fromFFIType hs_bindgen_f681ed21a8e1349a_base
 
 {-# NOINLINE sDL_islower #-}
 
@@ -2871,7 +2912,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_isprint@
 hs_bindgen_991fe49732021ccb :: IO (BG.FunPtr (BG.CInt -> IO BG.CInt))
 hs_bindgen_991fe49732021ccb =
-  BG.fromFFIType hs_bindgen_991fe49732021ccb_base
+  fmap BG.fromFFIType hs_bindgen_991fe49732021ccb_base
 
 {-# NOINLINE sDL_isprint #-}
 
@@ -2902,7 +2943,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_isgraph@
 hs_bindgen_192487d885c8ab5a :: IO (BG.FunPtr (BG.CInt -> IO BG.CInt))
 hs_bindgen_192487d885c8ab5a =
-  BG.fromFFIType hs_bindgen_192487d885c8ab5a_base
+  fmap BG.fromFFIType hs_bindgen_192487d885c8ab5a_base
 
 {-# NOINLINE sDL_isgraph #-}
 
@@ -2935,7 +2976,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_toupper@
 hs_bindgen_ffb5de4d18c52c67 :: IO (BG.FunPtr (BG.CInt -> IO BG.CInt))
 hs_bindgen_ffb5de4d18c52c67 =
-  BG.fromFFIType hs_bindgen_ffb5de4d18c52c67_base
+  fmap BG.fromFFIType hs_bindgen_ffb5de4d18c52c67_base
 
 {-# NOINLINE sDL_toupper #-}
 
@@ -2966,7 +3007,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_tolower@
 hs_bindgen_9f7c4f835baa2ffa :: IO (BG.FunPtr (BG.CInt -> IO BG.CInt))
 hs_bindgen_9f7c4f835baa2ffa =
-  BG.fromFFIType hs_bindgen_9f7c4f835baa2ffa_base
+  fmap BG.fromFFIType hs_bindgen_9f7c4f835baa2ffa_base
 
 {-# NOINLINE sDL_tolower #-}
 
@@ -2998,7 +3039,7 @@
 hs_bindgen_a900454baab74e94
   :: IO (BG.FunPtr (Uint16 -> PtrConst.PtrConst BG.Void -> HsBindgen.Runtime.LibC.CSize -> IO Uint16))
 hs_bindgen_a900454baab74e94 =
-  BG.fromFFIType hs_bindgen_a900454baab74e94_base
+  fmap BG.fromFFIType hs_bindgen_a900454baab74e94_base
 
 {-# NOINLINE sDL_crc16 #-}
 
@@ -3035,7 +3076,7 @@
 hs_bindgen_ce720b59f82b140a
   :: IO (BG.FunPtr (Uint32 -> PtrConst.PtrConst BG.Void -> HsBindgen.Runtime.LibC.CSize -> IO Uint32))
 hs_bindgen_ce720b59f82b140a =
-  BG.fromFFIType hs_bindgen_ce720b59f82b140a_base
+  fmap BG.fromFFIType hs_bindgen_ce720b59f82b140a_base
 
 {-# NOINLINE sDL_crc32 #-}
 
@@ -3072,7 +3113,7 @@
 hs_bindgen_fe133a77578cb1aa
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.Void -> HsBindgen.Runtime.LibC.CSize -> Uint32 -> IO Uint32))
 hs_bindgen_fe133a77578cb1aa =
-  BG.fromFFIType hs_bindgen_fe133a77578cb1aa_base
+  fmap BG.fromFFIType hs_bindgen_fe133a77578cb1aa_base
 
 {-# NOINLINE sDL_murmur3_32 #-}
 
@@ -3102,6 +3143,125 @@
 sDL_murmur3_32 =
   BG.unsafePerformIO hs_bindgen_fe133a77578cb1aa
 
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_memcpy@
+foreign import ccall unsafe "hs_bindgen_d6f4de330020d4d9"
+  hs_bindgen_d6f4de330020d4d9_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_memcpy@
+hs_bindgen_d6f4de330020d4d9
+  :: IO
+       ( BG.FunPtr
+           (BG.Ptr BG.Void -> PtrConst.PtrConst BG.Void -> HsBindgen.Runtime.LibC.CSize -> IO (BG.Ptr BG.Void))
+       )
+hs_bindgen_d6f4de330020d4d9 =
+  fmap BG.fromFFIType hs_bindgen_d6f4de330020d4d9_base
+
+{-# NOINLINE sDL_memcpy #-}
+
+-- | Copy non-overlapping memory.
+--
+--     The memory regions must not overlap. If they do, use @SDL_memmove()@ instead.
+--
+--     [@dst@]: The destination memory region. Must not be NULL, and must not overlap with @src@.
+--
+--     [@src@]: The source memory region. Must not be NULL, and must not overlap with @dst@.
+--
+--     [@len@]: The length in bytes of both @dst@ and @src@.
+--
+--     [Returns]: @dst@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_memmove'
+--
+--     [C declaration]: @SDL_memcpy@, defined at @SDL3\/SDL_stdinc.h 2505:36@
+sDL_memcpy
+  :: BG.FunPtr
+       (BG.Ptr BG.Void -> PtrConst.PtrConst BG.Void -> HsBindgen.Runtime.LibC.CSize -> IO (BG.Ptr BG.Void))
+sDL_memcpy =
+  BG.unsafePerformIO hs_bindgen_d6f4de330020d4d9
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_memmove@
+foreign import ccall unsafe "hs_bindgen_44856f6360083eb1"
+  hs_bindgen_44856f6360083eb1_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_memmove@
+hs_bindgen_44856f6360083eb1
+  :: IO
+       ( BG.FunPtr
+           (BG.Ptr BG.Void -> PtrConst.PtrConst BG.Void -> HsBindgen.Runtime.LibC.CSize -> IO (BG.Ptr BG.Void))
+       )
+hs_bindgen_44856f6360083eb1 =
+  fmap BG.fromFFIType hs_bindgen_44856f6360083eb1_base
+
+{-# NOINLINE sDL_memmove #-}
+
+-- | Copy memory ranges that might overlap.
+--
+--     It is okay for the memory regions to overlap. If you are confident that the regions never overlap, using @SDL_memcpy()@ may improve performance.
+--
+--     [@dst@]: The destination memory region. Must not be NULL.
+--
+--     [@src@]: The source memory region. Must not be NULL.
+--
+--     [@len@]: The length in bytes of both @dst@ and @src@.
+--
+--     [Returns]: @dst@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_memcpy'
+--
+--     [C declaration]: @SDL_memmove@, defined at @SDL3\/SDL_stdinc.h 2561:36@
+sDL_memmove
+  :: BG.FunPtr
+       (BG.Ptr BG.Void -> PtrConst.PtrConst BG.Void -> HsBindgen.Runtime.LibC.CSize -> IO (BG.Ptr BG.Void))
+sDL_memmove =
+  BG.unsafePerformIO hs_bindgen_44856f6360083eb1
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_memset@
+foreign import ccall unsafe "hs_bindgen_c1ce0cb00fc3994b"
+  hs_bindgen_c1ce0cb00fc3994b_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_memset@
+hs_bindgen_c1ce0cb00fc3994b
+  :: IO (BG.FunPtr (BG.Ptr BG.Void -> BG.CInt -> HsBindgen.Runtime.LibC.CSize -> IO (BG.Ptr BG.Void)))
+hs_bindgen_c1ce0cb00fc3994b =
+  fmap BG.fromFFIType hs_bindgen_c1ce0cb00fc3994b_base
+
+{-# NOINLINE sDL_memset #-}
+
+-- | Initialize all bytes of buffer of memory to a specific value.
+--
+--     This function will set @len@ bytes, pointed to by @dst@, to the value specified in @c@.
+--
+--     Despite @c@ being an @int@ instead of a @char@, this only operates on bytes; @c@ must be a value between 0 and 255, inclusive.
+--
+--     [@dst@]: the destination memory region. Must not be NULL.
+--
+--     [@c@]: the byte value to set.
+--
+--     [@len@]: the length, in bytes, to set in @dst@.
+--
+--     [Returns]: @dst@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_memset@, defined at @SDL3\/SDL_stdinc.h 2589:36@
+sDL_memset
+  :: BG.FunPtr (BG.Ptr BG.Void -> BG.CInt -> HsBindgen.Runtime.LibC.CSize -> IO (BG.Ptr BG.Void))
+sDL_memset =
+  BG.unsafePerformIO hs_bindgen_c1ce0cb00fc3994b
+
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_memset4@
 foreign import ccall unsafe "hs_bindgen_45d6fa96a2a35062"
   hs_bindgen_45d6fa96a2a35062_base
@@ -3111,7 +3271,7 @@
 hs_bindgen_45d6fa96a2a35062
   :: IO (BG.FunPtr (BG.Ptr BG.Void -> Uint32 -> HsBindgen.Runtime.LibC.CSize -> IO (BG.Ptr BG.Void)))
 hs_bindgen_45d6fa96a2a35062 =
-  BG.fromFFIType hs_bindgen_45d6fa96a2a35062_base
+  fmap BG.fromFFIType hs_bindgen_45d6fa96a2a35062_base
 
 {-# NOINLINE sDL_memset4 #-}
 
@@ -3151,7 +3311,7 @@
            (PtrConst.PtrConst BG.Void -> PtrConst.PtrConst BG.Void -> HsBindgen.Runtime.LibC.CSize -> IO BG.CInt)
        )
 hs_bindgen_d8af51803c9c5c62 =
-  BG.fromFFIType hs_bindgen_d8af51803c9c5c62_base
+  fmap BG.fromFFIType hs_bindgen_d8af51803c9c5c62_base
 
 {-# NOINLINE sDL_memcmp #-}
 
@@ -3185,7 +3345,7 @@
 hs_bindgen_b1d053429f9e09c3
   :: IO (BG.FunPtr (PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar -> IO HsBindgen.Runtime.LibC.CSize))
 hs_bindgen_b1d053429f9e09c3 =
-  BG.fromFFIType hs_bindgen_b1d053429f9e09c3_base
+  fmap BG.fromFFIType hs_bindgen_b1d053429f9e09c3_base
 
 {-# NOINLINE sDL_wcslen #-}
 
@@ -3228,7 +3388,7 @@
            )
        )
 hs_bindgen_ce1645bc94a325e1 =
-  BG.fromFFIType hs_bindgen_ce1645bc94a325e1_base
+  fmap BG.fromFFIType hs_bindgen_ce1645bc94a325e1_base
 
 {-# NOINLINE sDL_wcsnlen #-}
 
@@ -3280,7 +3440,7 @@
            )
        )
 hs_bindgen_11ca43711b8baf20 =
-  BG.fromFFIType hs_bindgen_11ca43711b8baf20_base
+  fmap BG.fromFFIType hs_bindgen_11ca43711b8baf20_base
 
 {-# NOINLINE sDL_wcslcpy #-}
 
@@ -3333,7 +3493,7 @@
            )
        )
 hs_bindgen_7e7896cd495dd344 =
-  BG.fromFFIType hs_bindgen_7e7896cd495dd344_base
+  fmap BG.fromFFIType hs_bindgen_7e7896cd495dd344_base
 
 {-# NOINLINE sDL_wcslcat #-}
 
@@ -3382,7 +3542,7 @@
            (PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar -> IO (BG.Ptr HsBindgen.Runtime.LibC.CWchar))
        )
 hs_bindgen_9ab91a86c489d607 =
-  BG.fromFFIType hs_bindgen_9ab91a86c489d607_base
+  fmap BG.fromFFIType hs_bindgen_9ab91a86c489d607_base
 
 {-# NOINLINE sDL_wcsdup #-}
 
@@ -3422,7 +3582,7 @@
            )
        )
 hs_bindgen_e5c78fe942e46a5f =
-  BG.fromFFIType hs_bindgen_e5c78fe942e46a5f_base
+  fmap BG.fromFFIType hs_bindgen_e5c78fe942e46a5f_base
 
 {-# NOINLINE sDL_wcsstr #-}
 
@@ -3468,7 +3628,7 @@
            )
        )
 hs_bindgen_2dc934c7f1856237 =
-  BG.fromFFIType hs_bindgen_2dc934c7f1856237_base
+  fmap BG.fromFFIType hs_bindgen_2dc934c7f1856237_base
 
 {-# NOINLINE sDL_wcsnstr #-}
 
@@ -3516,7 +3676,7 @@
            )
        )
 hs_bindgen_759b9046679b686f =
-  BG.fromFFIType hs_bindgen_759b9046679b686f_base
+  fmap BG.fromFFIType hs_bindgen_759b9046679b686f_base
 
 {-# NOINLINE sDL_wcscmp #-}
 
@@ -3560,7 +3720,7 @@
            )
        )
 hs_bindgen_c5ac0e330fb4ae45 =
-  BG.fromFFIType hs_bindgen_c5ac0e330fb4ae45_base
+  fmap BG.fromFFIType hs_bindgen_c5ac0e330fb4ae45_base
 
 {-# NOINLINE sDL_wcsncmp #-}
 
@@ -3610,7 +3770,7 @@
            )
        )
 hs_bindgen_fb42c136f5dd392f =
-  BG.fromFFIType hs_bindgen_fb42c136f5dd392f_base
+  fmap BG.fromFFIType hs_bindgen_fb42c136f5dd392f_base
 
 {-# NOINLINE sDL_wcscasecmp #-}
 
@@ -3656,7 +3816,7 @@
            )
        )
 hs_bindgen_fcc719df5ea9c486 =
-  BG.fromFFIType hs_bindgen_fcc719df5ea9c486_base
+  fmap BG.fromFFIType hs_bindgen_fcc719df5ea9c486_base
 
 {-# NOINLINE sDL_wcsncasecmp #-}
 
@@ -3702,7 +3862,7 @@
 hs_bindgen_7f2511e625836c60
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO HsBindgen.Runtime.LibC.CSize))
 hs_bindgen_7f2511e625836c60 =
-  BG.fromFFIType hs_bindgen_7f2511e625836c60_base
+  fmap BG.fromFFIType hs_bindgen_7f2511e625836c60_base
 
 {-# NOINLINE sDL_strlen #-}
 
@@ -3739,7 +3899,7 @@
            (PtrConst.PtrConst BG.CChar -> HsBindgen.Runtime.LibC.CSize -> IO HsBindgen.Runtime.LibC.CSize)
        )
 hs_bindgen_f4143204114af698 =
-  BG.fromFFIType hs_bindgen_f4143204114af698_base
+  fmap BG.fromFFIType hs_bindgen_f4143204114af698_base
 
 {-# NOINLINE sDL_strnlen #-}
 
@@ -3784,7 +3944,7 @@
            )
        )
 hs_bindgen_7640410395c54d89 =
-  BG.fromFFIType hs_bindgen_7640410395c54d89_base
+  fmap BG.fromFFIType hs_bindgen_7640410395c54d89_base
 
 {-# NOINLINE sDL_strlcpy #-}
 
@@ -3837,7 +3997,7 @@
            )
        )
 hs_bindgen_a2badcf2b044ea50 =
-  BG.fromFFIType hs_bindgen_a2badcf2b044ea50_base
+  fmap BG.fromFFIType hs_bindgen_a2badcf2b044ea50_base
 
 {-# NOINLINE sDL_utf8strlcpy #-}
 
@@ -3890,7 +4050,7 @@
            )
        )
 hs_bindgen_26754eda643124d0 =
-  BG.fromFFIType hs_bindgen_26754eda643124d0_base
+  fmap BG.fromFFIType hs_bindgen_26754eda643124d0_base
 
 {-# NOINLINE sDL_strlcat #-}
 
@@ -3935,7 +4095,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_strdup@
 hs_bindgen_71b06acdd2d314be :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO (BG.Ptr BG.CChar)))
 hs_bindgen_71b06acdd2d314be =
-  BG.fromFFIType hs_bindgen_71b06acdd2d314be_base
+  fmap BG.fromFFIType hs_bindgen_71b06acdd2d314be_base
 
 {-# NOINLINE sDL_strdup #-}
 
@@ -3967,7 +4127,7 @@
 hs_bindgen_fd797c695710e05f
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> HsBindgen.Runtime.LibC.CSize -> IO (BG.Ptr BG.CChar)))
 hs_bindgen_fd797c695710e05f =
-  BG.fromFFIType hs_bindgen_fd797c695710e05f_base
+  fmap BG.fromFFIType hs_bindgen_fd797c695710e05f_base
 
 {-# NOINLINE sDL_strndup #-}
 
@@ -4003,7 +4163,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_strrev@
 hs_bindgen_ffc5b79b6b976433 :: IO (BG.FunPtr (BG.Ptr BG.CChar -> IO (BG.Ptr BG.CChar)))
 hs_bindgen_ffc5b79b6b976433 =
-  BG.fromFFIType hs_bindgen_ffc5b79b6b976433_base
+  fmap BG.fromFFIType hs_bindgen_ffc5b79b6b976433_base
 
 {-# NOINLINE sDL_strrev #-}
 
@@ -4034,7 +4194,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_strupr@
 hs_bindgen_ca97edf7bfcb6705 :: IO (BG.FunPtr (BG.Ptr BG.CChar -> IO (BG.Ptr BG.CChar)))
 hs_bindgen_ca97edf7bfcb6705 =
-  BG.fromFFIType hs_bindgen_ca97edf7bfcb6705_base
+  fmap BG.fromFFIType hs_bindgen_ca97edf7bfcb6705_base
 
 {-# NOINLINE sDL_strupr #-}
 
@@ -4067,7 +4227,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_strlwr@
 hs_bindgen_d78a5116cc6d3f71 :: IO (BG.FunPtr (BG.Ptr BG.CChar -> IO (BG.Ptr BG.CChar)))
 hs_bindgen_d78a5116cc6d3f71 =
-  BG.fromFFIType hs_bindgen_d78a5116cc6d3f71_base
+  fmap BG.fromFFIType hs_bindgen_d78a5116cc6d3f71_base
 
 {-# NOINLINE sDL_strlwr #-}
 
@@ -4101,7 +4261,7 @@
 hs_bindgen_6ce9f7bacdf27653
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> BG.CInt -> IO (BG.Ptr BG.CChar)))
 hs_bindgen_6ce9f7bacdf27653 =
-  BG.fromFFIType hs_bindgen_6ce9f7bacdf27653_base
+  fmap BG.fromFFIType hs_bindgen_6ce9f7bacdf27653_base
 
 {-# NOINLINE sDL_strchr #-}
 
@@ -4135,7 +4295,7 @@
 hs_bindgen_d2538022eb73bf53
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> BG.CInt -> IO (BG.Ptr BG.CChar)))
 hs_bindgen_d2538022eb73bf53 =
-  BG.fromFFIType hs_bindgen_d2538022eb73bf53_base
+  fmap BG.fromFFIType hs_bindgen_d2538022eb73bf53_base
 
 {-# NOINLINE sDL_strrchr #-}
 
@@ -4169,7 +4329,7 @@
 hs_bindgen_b07cb6fe84d9cf1e
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> PtrConst.PtrConst BG.CChar -> IO (BG.Ptr BG.CChar)))
 hs_bindgen_b07cb6fe84d9cf1e =
-  BG.fromFFIType hs_bindgen_b07cb6fe84d9cf1e_base
+  fmap BG.fromFFIType hs_bindgen_b07cb6fe84d9cf1e_base
 
 {-# NOINLINE sDL_strstr #-}
 
@@ -4211,7 +4371,7 @@
            )
        )
 hs_bindgen_c3b37921fa630595 =
-  BG.fromFFIType hs_bindgen_c3b37921fa630595_base
+  fmap BG.fromFFIType hs_bindgen_c3b37921fa630595_base
 
 {-# NOINLINE sDL_strnstr #-}
 
@@ -4253,7 +4413,7 @@
 hs_bindgen_3b1f9973e35be364
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> PtrConst.PtrConst BG.CChar -> IO (BG.Ptr BG.CChar)))
 hs_bindgen_3b1f9973e35be364 =
-  BG.fromFFIType hs_bindgen_3b1f9973e35be364_base
+  fmap BG.fromFFIType hs_bindgen_3b1f9973e35be364_base
 
 {-# NOINLINE sDL_strcasestr #-}
 
@@ -4291,7 +4451,7 @@
            (BG.Ptr BG.CChar -> PtrConst.PtrConst BG.CChar -> BG.Ptr (BG.Ptr BG.CChar) -> IO (BG.Ptr BG.CChar))
        )
 hs_bindgen_99a1a0af797e8aad =
-  BG.fromFFIType hs_bindgen_99a1a0af797e8aad_base
+  fmap BG.fromFFIType hs_bindgen_99a1a0af797e8aad_base
 
 {-# NOINLINE sDL_strtok_r #-}
 
@@ -4333,7 +4493,7 @@
 hs_bindgen_fdd33f5a5e9573d8
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO HsBindgen.Runtime.LibC.CSize))
 hs_bindgen_fdd33f5a5e9573d8 =
-  BG.fromFFIType hs_bindgen_fdd33f5a5e9573d8_base
+  fmap BG.fromFFIType hs_bindgen_fdd33f5a5e9573d8_base
 
 {-# NOINLINE sDL_utf8strlen #-}
 
@@ -4372,7 +4532,7 @@
            (PtrConst.PtrConst BG.CChar -> HsBindgen.Runtime.LibC.CSize -> IO HsBindgen.Runtime.LibC.CSize)
        )
 hs_bindgen_1e79ccdd40706b8d =
-  BG.fromFFIType hs_bindgen_1e79ccdd40706b8d_base
+  fmap BG.fromFFIType hs_bindgen_1e79ccdd40706b8d_base
 
 {-# NOINLINE sDL_utf8strnlen #-}
 
@@ -4414,7 +4574,7 @@
 hs_bindgen_4cfc9a356cf1014c
   :: IO (BG.FunPtr (BG.CInt -> BG.Ptr BG.CChar -> BG.CInt -> IO (BG.Ptr BG.CChar)))
 hs_bindgen_4cfc9a356cf1014c =
-  BG.fromFFIType hs_bindgen_4cfc9a356cf1014c_base
+  fmap BG.fromFFIType hs_bindgen_4cfc9a356cf1014c_base
 
 {-# NOINLINE sDL_itoa #-}
 
@@ -4452,7 +4612,7 @@
 hs_bindgen_e052861370ec1ea4
   :: IO (BG.FunPtr (BG.CUInt -> BG.Ptr BG.CChar -> BG.CInt -> IO (BG.Ptr BG.CChar)))
 hs_bindgen_e052861370ec1ea4 =
-  BG.fromFFIType hs_bindgen_e052861370ec1ea4_base
+  fmap BG.fromFFIType hs_bindgen_e052861370ec1ea4_base
 
 {-# NOINLINE sDL_uitoa #-}
 
@@ -4490,7 +4650,7 @@
 hs_bindgen_9c5155b926feaa3f
   :: IO (BG.FunPtr (BG.CLLong -> BG.Ptr BG.CChar -> BG.CInt -> IO (BG.Ptr BG.CChar)))
 hs_bindgen_9c5155b926feaa3f =
-  BG.fromFFIType hs_bindgen_9c5155b926feaa3f_base
+  fmap BG.fromFFIType hs_bindgen_9c5155b926feaa3f_base
 
 {-# NOINLINE sDL_lltoa #-}
 
@@ -4528,7 +4688,7 @@
 hs_bindgen_a3b3fdde6f9a0142
   :: IO (BG.FunPtr (BG.CULLong -> BG.Ptr BG.CChar -> BG.CInt -> IO (BG.Ptr BG.CChar)))
 hs_bindgen_a3b3fdde6f9a0142 =
-  BG.fromFFIType hs_bindgen_a3b3fdde6f9a0142_base
+  fmap BG.fromFFIType hs_bindgen_a3b3fdde6f9a0142_base
 
 {-# NOINLINE sDL_ulltoa #-}
 
@@ -4565,7 +4725,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_atoi@
 hs_bindgen_9a3e9e2b67b916a2 :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO BG.CInt))
 hs_bindgen_9a3e9e2b67b916a2 =
-  BG.fromFFIType hs_bindgen_9a3e9e2b67b916a2_base
+  fmap BG.fromFFIType hs_bindgen_9a3e9e2b67b916a2_base
 
 {-# NOINLINE sDL_atoi #-}
 
@@ -4596,7 +4756,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_atof@
 hs_bindgen_2804d8be78ed3cae :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO BG.CDouble))
 hs_bindgen_2804d8be78ed3cae =
-  BG.fromFFIType hs_bindgen_2804d8be78ed3cae_base
+  fmap BG.fromFFIType hs_bindgen_2804d8be78ed3cae_base
 
 {-# NOINLINE sDL_atof #-}
 
@@ -4628,7 +4788,7 @@
 hs_bindgen_6e1c8dc5ccea4653
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> BG.Ptr (BG.Ptr BG.CChar) -> BG.CInt -> IO BG.CLLong))
 hs_bindgen_6e1c8dc5ccea4653 =
-  BG.fromFFIType hs_bindgen_6e1c8dc5ccea4653_base
+  fmap BG.fromFFIType hs_bindgen_6e1c8dc5ccea4653_base
 
 {-# NOINLINE sDL_strtoll #-}
 
@@ -4667,7 +4827,7 @@
 hs_bindgen_f81f822f17549fa4
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> BG.Ptr (BG.Ptr BG.CChar) -> BG.CInt -> IO BG.CULLong))
 hs_bindgen_f81f822f17549fa4 =
-  BG.fromFFIType hs_bindgen_f81f822f17549fa4_base
+  fmap BG.fromFFIType hs_bindgen_f81f822f17549fa4_base
 
 {-# NOINLINE sDL_strtoull #-}
 
@@ -4706,7 +4866,7 @@
 hs_bindgen_6ab6327bbf86f171
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> BG.Ptr (BG.Ptr BG.CChar) -> IO BG.CDouble))
 hs_bindgen_6ab6327bbf86f171 =
-  BG.fromFFIType hs_bindgen_6ab6327bbf86f171_base
+  fmap BG.fromFFIType hs_bindgen_6ab6327bbf86f171_base
 
 {-# NOINLINE sDL_strtod #-}
 
@@ -4746,7 +4906,7 @@
 hs_bindgen_fc45ddd2c1f0219e
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> PtrConst.PtrConst BG.CChar -> IO BG.CInt))
 hs_bindgen_fc45ddd2c1f0219e =
-  BG.fromFFIType hs_bindgen_fc45ddd2c1f0219e_base
+  fmap BG.fromFFIType hs_bindgen_fc45ddd2c1f0219e_base
 
 {-# NOINLINE sDL_strcmp #-}
 
@@ -4785,7 +4945,7 @@
            )
        )
 hs_bindgen_18f45fe45a42c194 =
-  BG.fromFFIType hs_bindgen_18f45fe45a42c194_base
+  fmap BG.fromFFIType hs_bindgen_18f45fe45a42c194_base
 
 {-# NOINLINE sDL_strncmp #-}
 
@@ -4829,7 +4989,7 @@
 hs_bindgen_2996562bf0a4585e
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> PtrConst.PtrConst BG.CChar -> IO BG.CInt))
 hs_bindgen_2996562bf0a4585e =
-  BG.fromFFIType hs_bindgen_2996562bf0a4585e_base
+  fmap BG.fromFFIType hs_bindgen_2996562bf0a4585e_base
 
 {-# NOINLINE sDL_strcasecmp #-}
 
@@ -4870,7 +5030,7 @@
            )
        )
 hs_bindgen_28d4c90d056ca0bb =
-  BG.fromFFIType hs_bindgen_28d4c90d056ca0bb_base
+  fmap BG.fromFFIType hs_bindgen_28d4c90d056ca0bb_base
 
 {-# NOINLINE sDL_strncasecmp #-}
 
@@ -4916,7 +5076,7 @@
 hs_bindgen_65f684850b2f315d
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> PtrConst.PtrConst BG.CChar -> IO (BG.Ptr BG.CChar)))
 hs_bindgen_65f684850b2f315d =
-  BG.fromFFIType hs_bindgen_65f684850b2f315d_base
+  fmap BG.fromFFIType hs_bindgen_65f684850b2f315d_base
 
 {-# NOINLINE sDL_strpbrk #-}
 
@@ -4948,7 +5108,7 @@
   :: IO
        (BG.FunPtr (BG.Ptr (PtrConst.PtrConst BG.CChar) -> BG.Ptr HsBindgen.Runtime.LibC.CSize -> IO Uint32))
 hs_bindgen_0907aee5a9e22b6c =
-  BG.fromFFIType hs_bindgen_0907aee5a9e22b6c_base
+  fmap BG.fromFFIType hs_bindgen_0907aee5a9e22b6c_base
 
 {-# NOINLINE sDL_StepUTF8 #-}
 
@@ -4995,7 +5155,7 @@
 hs_bindgen_ccaed4cafbb7e45b
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> BG.Ptr (PtrConst.PtrConst BG.CChar) -> IO Uint32))
 hs_bindgen_ccaed4cafbb7e45b =
-  BG.fromFFIType hs_bindgen_ccaed4cafbb7e45b_base
+  fmap BG.fromFFIType hs_bindgen_ccaed4cafbb7e45b_base
 
 {-# NOINLINE sDL_StepBackUTF8 #-}
 
@@ -5035,7 +5195,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_UCS4ToUTF8@
 hs_bindgen_d8d90fbed44bffa4 :: IO (BG.FunPtr (Uint32 -> BG.Ptr BG.CChar -> IO (BG.Ptr BG.CChar)))
 hs_bindgen_d8d90fbed44bffa4 =
-  BG.fromFFIType hs_bindgen_d8d90fbed44bffa4_base
+  fmap BG.fromFFIType hs_bindgen_d8d90fbed44bffa4_base
 
 {-# NOINLINE sDL_UCS4ToUTF8 #-}
 
@@ -5072,7 +5232,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_srand@
 hs_bindgen_da73119d08a07679 :: IO (BG.FunPtr (Uint64 -> IO ()))
 hs_bindgen_da73119d08a07679 =
-  BG.fromFFIType hs_bindgen_da73119d08a07679_base
+  fmap BG.fromFFIType hs_bindgen_da73119d08a07679_base
 
 {-# NOINLINE sDL_srand #-}
 
@@ -5101,7 +5261,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_rand@
 hs_bindgen_4e5afaafc53503d2 :: IO (BG.FunPtr (Sint32 -> IO Sint32))
 hs_bindgen_4e5afaafc53503d2 =
-  BG.fromFFIType hs_bindgen_4e5afaafc53503d2_base
+  fmap BG.fromFFIType hs_bindgen_4e5afaafc53503d2_base
 
 {-# NOINLINE sDL_rand #-}
 
@@ -5140,7 +5300,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_randf@
 hs_bindgen_e6a11f5c2731e306 :: IO (BG.FunPtr (IO BG.CFloat))
 hs_bindgen_e6a11f5c2731e306 =
-  BG.fromFFIType hs_bindgen_e6a11f5c2731e306_base
+  fmap BG.fromFFIType hs_bindgen_e6a11f5c2731e306_base
 
 {-# NOINLINE sDL_randf #-}
 
@@ -5171,7 +5331,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_rand_bits@
 hs_bindgen_1b4a072c67be4b47 :: IO (BG.FunPtr (IO Uint32))
 hs_bindgen_1b4a072c67be4b47 =
-  BG.fromFFIType hs_bindgen_1b4a072c67be4b47_base
+  fmap BG.fromFFIType hs_bindgen_1b4a072c67be4b47_base
 
 {-# NOINLINE sDL_rand_bits #-}
 
@@ -5202,7 +5362,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_rand_r@
 hs_bindgen_b7805b04f67ee663 :: IO (BG.FunPtr (BG.Ptr Uint64 -> Sint32 -> IO Sint32))
 hs_bindgen_b7805b04f67ee663 =
-  BG.fromFFIType hs_bindgen_b7805b04f67ee663_base
+  fmap BG.fromFFIType hs_bindgen_b7805b04f67ee663_base
 
 {-# NOINLINE sDL_rand_r #-}
 
@@ -5241,7 +5401,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_randf_r@
 hs_bindgen_2868c0dca829c12d :: IO (BG.FunPtr (BG.Ptr Uint64 -> IO BG.CFloat))
 hs_bindgen_2868c0dca829c12d =
-  BG.fromFFIType hs_bindgen_2868c0dca829c12d_base
+  fmap BG.fromFFIType hs_bindgen_2868c0dca829c12d_base
 
 {-# NOINLINE sDL_randf_r #-}
 
@@ -5274,7 +5434,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_rand_bits_r@
 hs_bindgen_4f041e8bf307388e :: IO (BG.FunPtr (BG.Ptr Uint64 -> IO Uint32))
 hs_bindgen_4f041e8bf307388e =
-  BG.fromFFIType hs_bindgen_4f041e8bf307388e_base
+  fmap BG.fromFFIType hs_bindgen_4f041e8bf307388e_base
 
 {-# NOINLINE sDL_rand_bits_r #-}
 
@@ -5307,7 +5467,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_acos@
 hs_bindgen_fc7fee2483850ab3 :: IO (BG.FunPtr (BG.CDouble -> IO BG.CDouble))
 hs_bindgen_fc7fee2483850ab3 =
-  BG.fromFFIType hs_bindgen_fc7fee2483850ab3_base
+  fmap BG.fromFFIType hs_bindgen_fc7fee2483850ab3_base
 
 {-# NOINLINE sDL_acos #-}
 
@@ -5346,7 +5506,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_acosf@
 hs_bindgen_521ecf135cd97997 :: IO (BG.FunPtr (BG.CFloat -> IO BG.CFloat))
 hs_bindgen_521ecf135cd97997 =
-  BG.fromFFIType hs_bindgen_521ecf135cd97997_base
+  fmap BG.fromFFIType hs_bindgen_521ecf135cd97997_base
 
 {-# NOINLINE sDL_acosf #-}
 
@@ -5385,7 +5545,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_asin@
 hs_bindgen_0446975347dc0e74 :: IO (BG.FunPtr (BG.CDouble -> IO BG.CDouble))
 hs_bindgen_0446975347dc0e74 =
-  BG.fromFFIType hs_bindgen_0446975347dc0e74_base
+  fmap BG.fromFFIType hs_bindgen_0446975347dc0e74_base
 
 {-# NOINLINE sDL_asin #-}
 
@@ -5424,7 +5584,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_asinf@
 hs_bindgen_6069a6cbf645d9a4 :: IO (BG.FunPtr (BG.CFloat -> IO BG.CFloat))
 hs_bindgen_6069a6cbf645d9a4 =
-  BG.fromFFIType hs_bindgen_6069a6cbf645d9a4_base
+  fmap BG.fromFFIType hs_bindgen_6069a6cbf645d9a4_base
 
 {-# NOINLINE sDL_asinf #-}
 
@@ -5463,7 +5623,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_atan@
 hs_bindgen_eb9c094d5b8cc44a :: IO (BG.FunPtr (BG.CDouble -> IO BG.CDouble))
 hs_bindgen_eb9c094d5b8cc44a =
-  BG.fromFFIType hs_bindgen_eb9c094d5b8cc44a_base
+  fmap BG.fromFFIType hs_bindgen_eb9c094d5b8cc44a_base
 
 {-# NOINLINE sDL_atan #-}
 
@@ -5504,7 +5664,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_atanf@
 hs_bindgen_9807f179a4fbb908 :: IO (BG.FunPtr (BG.CFloat -> IO BG.CFloat))
 hs_bindgen_9807f179a4fbb908 =
-  BG.fromFFIType hs_bindgen_9807f179a4fbb908_base
+  fmap BG.fromFFIType hs_bindgen_9807f179a4fbb908_base
 
 {-# NOINLINE sDL_atanf #-}
 
@@ -5545,7 +5705,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_atan2@
 hs_bindgen_c868e29b9251ada8 :: IO (BG.FunPtr (BG.CDouble -> BG.CDouble -> IO BG.CDouble))
 hs_bindgen_c868e29b9251ada8 =
-  BG.fromFFIType hs_bindgen_c868e29b9251ada8_base
+  fmap BG.fromFFIType hs_bindgen_c868e29b9251ada8_base
 
 {-# NOINLINE sDL_atan2 #-}
 
@@ -5588,7 +5748,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_atan2f@
 hs_bindgen_357a95d359b4aaad :: IO (BG.FunPtr (BG.CFloat -> BG.CFloat -> IO BG.CFloat))
 hs_bindgen_357a95d359b4aaad =
-  BG.fromFFIType hs_bindgen_357a95d359b4aaad_base
+  fmap BG.fromFFIType hs_bindgen_357a95d359b4aaad_base
 
 {-# NOINLINE sDL_atan2f #-}
 
@@ -5631,7 +5791,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_ceil@
 hs_bindgen_51763cbf0b798de3 :: IO (BG.FunPtr (BG.CDouble -> IO BG.CDouble))
 hs_bindgen_51763cbf0b798de3 =
-  BG.fromFFIType hs_bindgen_51763cbf0b798de3_base
+  fmap BG.fromFFIType hs_bindgen_51763cbf0b798de3_base
 
 {-# NOINLINE sDL_ceil #-}
 
@@ -5668,7 +5828,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_ceilf@
 hs_bindgen_362325253c9b19f8 :: IO (BG.FunPtr (BG.CFloat -> IO BG.CFloat))
 hs_bindgen_362325253c9b19f8 =
-  BG.fromFFIType hs_bindgen_362325253c9b19f8_base
+  fmap BG.fromFFIType hs_bindgen_362325253c9b19f8_base
 
 {-# NOINLINE sDL_ceilf #-}
 
@@ -5705,7 +5865,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_copysign@
 hs_bindgen_df3beaabf480a0d3 :: IO (BG.FunPtr (BG.CDouble -> BG.CDouble -> IO BG.CDouble))
 hs_bindgen_df3beaabf480a0d3 =
-  BG.fromFFIType hs_bindgen_df3beaabf480a0d3_base
+  fmap BG.fromFFIType hs_bindgen_df3beaabf480a0d3_base
 
 {-# NOINLINE sDL_copysign #-}
 
@@ -5744,7 +5904,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_copysignf@
 hs_bindgen_e6af77974ed5435f :: IO (BG.FunPtr (BG.CFloat -> BG.CFloat -> IO BG.CFloat))
 hs_bindgen_e6af77974ed5435f =
-  BG.fromFFIType hs_bindgen_e6af77974ed5435f_base
+  fmap BG.fromFFIType hs_bindgen_e6af77974ed5435f_base
 
 {-# NOINLINE sDL_copysignf #-}
 
@@ -5783,7 +5943,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_cos@
 hs_bindgen_3d9b0e8a53288293 :: IO (BG.FunPtr (BG.CDouble -> IO BG.CDouble))
 hs_bindgen_3d9b0e8a53288293 =
-  BG.fromFFIType hs_bindgen_3d9b0e8a53288293_base
+  fmap BG.fromFFIType hs_bindgen_3d9b0e8a53288293_base
 
 {-# NOINLINE sDL_cos #-}
 
@@ -5820,7 +5980,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_cosf@
 hs_bindgen_8a6d19c21d08744f :: IO (BG.FunPtr (BG.CFloat -> IO BG.CFloat))
 hs_bindgen_8a6d19c21d08744f =
-  BG.fromFFIType hs_bindgen_8a6d19c21d08744f_base
+  fmap BG.fromFFIType hs_bindgen_8a6d19c21d08744f_base
 
 {-# NOINLINE sDL_cosf #-}
 
@@ -5857,7 +6017,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_exp@
 hs_bindgen_32a0ab5c8aca638e :: IO (BG.FunPtr (BG.CDouble -> IO BG.CDouble))
 hs_bindgen_32a0ab5c8aca638e =
-  BG.fromFFIType hs_bindgen_32a0ab5c8aca638e_base
+  fmap BG.fromFFIType hs_bindgen_32a0ab5c8aca638e_base
 
 {-# NOINLINE sDL_exp #-}
 
@@ -5898,7 +6058,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_expf@
 hs_bindgen_e734b446bd66b310 :: IO (BG.FunPtr (BG.CFloat -> IO BG.CFloat))
 hs_bindgen_e734b446bd66b310 =
-  BG.fromFFIType hs_bindgen_e734b446bd66b310_base
+  fmap BG.fromFFIType hs_bindgen_e734b446bd66b310_base
 
 {-# NOINLINE sDL_expf #-}
 
@@ -5939,7 +6099,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_fabs@
 hs_bindgen_0fe1f848b90d29bc :: IO (BG.FunPtr (BG.CDouble -> IO BG.CDouble))
 hs_bindgen_0fe1f848b90d29bc =
-  BG.fromFFIType hs_bindgen_0fe1f848b90d29bc_base
+  fmap BG.fromFFIType hs_bindgen_0fe1f848b90d29bc_base
 
 {-# NOINLINE sDL_fabs #-}
 
@@ -5974,7 +6134,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_fabsf@
 hs_bindgen_1e189b3e959f375b :: IO (BG.FunPtr (BG.CFloat -> IO BG.CFloat))
 hs_bindgen_1e189b3e959f375b =
-  BG.fromFFIType hs_bindgen_1e189b3e959f375b_base
+  fmap BG.fromFFIType hs_bindgen_1e189b3e959f375b_base
 
 {-# NOINLINE sDL_fabsf #-}
 
@@ -6009,7 +6169,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_floor@
 hs_bindgen_ae709679ac231e3a :: IO (BG.FunPtr (BG.CDouble -> IO BG.CDouble))
 hs_bindgen_ae709679ac231e3a =
-  BG.fromFFIType hs_bindgen_ae709679ac231e3a_base
+  fmap BG.fromFFIType hs_bindgen_ae709679ac231e3a_base
 
 {-# NOINLINE sDL_floor #-}
 
@@ -6046,7 +6206,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_floorf@
 hs_bindgen_6bcbc045e8590408 :: IO (BG.FunPtr (BG.CFloat -> IO BG.CFloat))
 hs_bindgen_6bcbc045e8590408 =
-  BG.fromFFIType hs_bindgen_6bcbc045e8590408_base
+  fmap BG.fromFFIType hs_bindgen_6bcbc045e8590408_base
 
 {-# NOINLINE sDL_floorf #-}
 
@@ -6083,7 +6243,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_trunc@
 hs_bindgen_9ff826562c85b6db :: IO (BG.FunPtr (BG.CDouble -> IO BG.CDouble))
 hs_bindgen_9ff826562c85b6db =
-  BG.fromFFIType hs_bindgen_9ff826562c85b6db_base
+  fmap BG.fromFFIType hs_bindgen_9ff826562c85b6db_base
 
 {-# NOINLINE sDL_trunc #-}
 
@@ -6120,7 +6280,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_truncf@
 hs_bindgen_5afacbe63e710528 :: IO (BG.FunPtr (BG.CFloat -> IO BG.CFloat))
 hs_bindgen_5afacbe63e710528 =
-  BG.fromFFIType hs_bindgen_5afacbe63e710528_base
+  fmap BG.fromFFIType hs_bindgen_5afacbe63e710528_base
 
 {-# NOINLINE sDL_truncf #-}
 
@@ -6157,7 +6317,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_fmod@
 hs_bindgen_3a93d2030ffd9ef3 :: IO (BG.FunPtr (BG.CDouble -> BG.CDouble -> IO BG.CDouble))
 hs_bindgen_3a93d2030ffd9ef3 =
-  BG.fromFFIType hs_bindgen_3a93d2030ffd9ef3_base
+  fmap BG.fromFFIType hs_bindgen_3a93d2030ffd9ef3_base
 
 {-# NOINLINE sDL_fmod #-}
 
@@ -6196,7 +6356,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_fmodf@
 hs_bindgen_a851844ef04e542d :: IO (BG.FunPtr (BG.CFloat -> BG.CFloat -> IO BG.CFloat))
 hs_bindgen_a851844ef04e542d =
-  BG.fromFFIType hs_bindgen_a851844ef04e542d_base
+  fmap BG.fromFFIType hs_bindgen_a851844ef04e542d_base
 
 {-# NOINLINE sDL_fmodf #-}
 
@@ -6235,7 +6395,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_isinf@
 hs_bindgen_d9346ba385534fdd :: IO (BG.FunPtr (BG.CDouble -> IO BG.CInt))
 hs_bindgen_d9346ba385534fdd =
-  BG.fromFFIType hs_bindgen_d9346ba385534fdd_base
+  fmap BG.fromFFIType hs_bindgen_d9346ba385534fdd_base
 
 {-# NOINLINE sDL_isinf #-}
 
@@ -6264,7 +6424,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_isinff@
 hs_bindgen_bfaf6777c1c350c3 :: IO (BG.FunPtr (BG.CFloat -> IO BG.CInt))
 hs_bindgen_bfaf6777c1c350c3 =
-  BG.fromFFIType hs_bindgen_bfaf6777c1c350c3_base
+  fmap BG.fromFFIType hs_bindgen_bfaf6777c1c350c3_base
 
 {-# NOINLINE sDL_isinff #-}
 
@@ -6293,7 +6453,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_isnan@
 hs_bindgen_006f33027be22f99 :: IO (BG.FunPtr (BG.CDouble -> IO BG.CInt))
 hs_bindgen_006f33027be22f99 =
-  BG.fromFFIType hs_bindgen_006f33027be22f99_base
+  fmap BG.fromFFIType hs_bindgen_006f33027be22f99_base
 
 {-# NOINLINE sDL_isnan #-}
 
@@ -6322,7 +6482,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_isnanf@
 hs_bindgen_308e1efef7090245 :: IO (BG.FunPtr (BG.CFloat -> IO BG.CInt))
 hs_bindgen_308e1efef7090245 =
-  BG.fromFFIType hs_bindgen_308e1efef7090245_base
+  fmap BG.fromFFIType hs_bindgen_308e1efef7090245_base
 
 {-# NOINLINE sDL_isnanf #-}
 
@@ -6351,7 +6511,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_log@
 hs_bindgen_4f9418e7e4267684 :: IO (BG.FunPtr (BG.CDouble -> IO BG.CDouble))
 hs_bindgen_4f9418e7e4267684 =
-  BG.fromFFIType hs_bindgen_4f9418e7e4267684_base
+  fmap BG.fromFFIType hs_bindgen_4f9418e7e4267684_base
 
 {-# NOINLINE sDL_log #-}
 
@@ -6390,7 +6550,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_logf@
 hs_bindgen_ab81f791c1e3e516 :: IO (BG.FunPtr (BG.CFloat -> IO BG.CFloat))
 hs_bindgen_ab81f791c1e3e516 =
-  BG.fromFFIType hs_bindgen_ab81f791c1e3e516_base
+  fmap BG.fromFFIType hs_bindgen_ab81f791c1e3e516_base
 
 {-# NOINLINE sDL_logf #-}
 
@@ -6429,7 +6589,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_log10@
 hs_bindgen_c9a4b45a046047ba :: IO (BG.FunPtr (BG.CDouble -> IO BG.CDouble))
 hs_bindgen_c9a4b45a046047ba =
-  BG.fromFFIType hs_bindgen_c9a4b45a046047ba_base
+  fmap BG.fromFFIType hs_bindgen_c9a4b45a046047ba_base
 
 {-# NOINLINE sDL_log10 #-}
 
@@ -6468,7 +6628,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_log10f@
 hs_bindgen_72ace8de925eb690 :: IO (BG.FunPtr (BG.CFloat -> IO BG.CFloat))
 hs_bindgen_72ace8de925eb690 =
-  BG.fromFFIType hs_bindgen_72ace8de925eb690_base
+  fmap BG.fromFFIType hs_bindgen_72ace8de925eb690_base
 
 {-# NOINLINE sDL_log10f #-}
 
@@ -6507,7 +6667,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_modf@
 hs_bindgen_b05adeb0cad2dab6 :: IO (BG.FunPtr (BG.CDouble -> BG.Ptr BG.CDouble -> IO BG.CDouble))
 hs_bindgen_b05adeb0cad2dab6 =
-  BG.fromFFIType hs_bindgen_b05adeb0cad2dab6_base
+  fmap BG.fromFFIType hs_bindgen_b05adeb0cad2dab6_base
 
 {-# NOINLINE sDL_modf #-}
 
@@ -6540,7 +6700,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_modff@
 hs_bindgen_59f3b87137ea46cd :: IO (BG.FunPtr (BG.CFloat -> BG.Ptr BG.CFloat -> IO BG.CFloat))
 hs_bindgen_59f3b87137ea46cd =
-  BG.fromFFIType hs_bindgen_59f3b87137ea46cd_base
+  fmap BG.fromFFIType hs_bindgen_59f3b87137ea46cd_base
 
 {-# NOINLINE sDL_modff #-}
 
@@ -6573,7 +6733,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_pow@
 hs_bindgen_75e5e5b712af4971 :: IO (BG.FunPtr (BG.CDouble -> BG.CDouble -> IO BG.CDouble))
 hs_bindgen_75e5e5b712af4971 =
-  BG.fromFFIType hs_bindgen_75e5e5b712af4971_base
+  fmap BG.fromFFIType hs_bindgen_75e5e5b712af4971_base
 
 {-# NOINLINE sDL_pow #-}
 
@@ -6614,7 +6774,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_powf@
 hs_bindgen_deb1ba3db460136c :: IO (BG.FunPtr (BG.CFloat -> BG.CFloat -> IO BG.CFloat))
 hs_bindgen_deb1ba3db460136c =
-  BG.fromFFIType hs_bindgen_deb1ba3db460136c_base
+  fmap BG.fromFFIType hs_bindgen_deb1ba3db460136c_base
 
 {-# NOINLINE sDL_powf #-}
 
@@ -6655,7 +6815,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_round@
 hs_bindgen_e8841dcdfaff32de :: IO (BG.FunPtr (BG.CDouble -> IO BG.CDouble))
 hs_bindgen_e8841dcdfaff32de =
-  BG.fromFFIType hs_bindgen_e8841dcdfaff32de_base
+  fmap BG.fromFFIType hs_bindgen_e8841dcdfaff32de_base
 
 {-# NOINLINE sDL_round #-}
 
@@ -6692,7 +6852,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_roundf@
 hs_bindgen_57450d2f082e285c :: IO (BG.FunPtr (BG.CFloat -> IO BG.CFloat))
 hs_bindgen_57450d2f082e285c =
-  BG.fromFFIType hs_bindgen_57450d2f082e285c_base
+  fmap BG.fromFFIType hs_bindgen_57450d2f082e285c_base
 
 {-# NOINLINE sDL_roundf #-}
 
@@ -6729,7 +6889,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_scalbn@
 hs_bindgen_6fc1ebd971ec8157 :: IO (BG.FunPtr (BG.CDouble -> BG.CInt -> IO BG.CDouble))
 hs_bindgen_6fc1ebd971ec8157 =
-  BG.fromFFIType hs_bindgen_6fc1ebd971ec8157_base
+  fmap BG.fromFFIType hs_bindgen_6fc1ebd971ec8157_base
 
 {-# NOINLINE sDL_scalbn #-}
 
@@ -6768,7 +6928,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_scalbnf@
 hs_bindgen_706cd6213dd8d69d :: IO (BG.FunPtr (BG.CFloat -> BG.CInt -> IO BG.CFloat))
 hs_bindgen_706cd6213dd8d69d =
-  BG.fromFFIType hs_bindgen_706cd6213dd8d69d_base
+  fmap BG.fromFFIType hs_bindgen_706cd6213dd8d69d_base
 
 {-# NOINLINE sDL_scalbnf #-}
 
@@ -6807,7 +6967,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_sin@
 hs_bindgen_e4b1725cdd38afe4 :: IO (BG.FunPtr (BG.CDouble -> IO BG.CDouble))
 hs_bindgen_e4b1725cdd38afe4 =
-  BG.fromFFIType hs_bindgen_e4b1725cdd38afe4_base
+  fmap BG.fromFFIType hs_bindgen_e4b1725cdd38afe4_base
 
 {-# NOINLINE sDL_sin #-}
 
@@ -6844,7 +7004,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_sinf@
 hs_bindgen_4d400d672d200ac9 :: IO (BG.FunPtr (BG.CFloat -> IO BG.CFloat))
 hs_bindgen_4d400d672d200ac9 =
-  BG.fromFFIType hs_bindgen_4d400d672d200ac9_base
+  fmap BG.fromFFIType hs_bindgen_4d400d672d200ac9_base
 
 {-# NOINLINE sDL_sinf #-}
 
@@ -6881,7 +7041,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_sqrt@
 hs_bindgen_8352f3e6d4755f65 :: IO (BG.FunPtr (BG.CDouble -> IO BG.CDouble))
 hs_bindgen_8352f3e6d4755f65 =
-  BG.fromFFIType hs_bindgen_8352f3e6d4755f65_base
+  fmap BG.fromFFIType hs_bindgen_8352f3e6d4755f65_base
 
 {-# NOINLINE sDL_sqrt #-}
 
@@ -6918,7 +7078,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_sqrtf@
 hs_bindgen_87f1efd0a9654c58 :: IO (BG.FunPtr (BG.CFloat -> IO BG.CFloat))
 hs_bindgen_87f1efd0a9654c58 =
-  BG.fromFFIType hs_bindgen_87f1efd0a9654c58_base
+  fmap BG.fromFFIType hs_bindgen_87f1efd0a9654c58_base
 
 {-# NOINLINE sDL_sqrtf #-}
 
@@ -6955,7 +7115,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_tan@
 hs_bindgen_4a65c95891312c30 :: IO (BG.FunPtr (BG.CDouble -> IO BG.CDouble))
 hs_bindgen_4a65c95891312c30 =
-  BG.fromFFIType hs_bindgen_4a65c95891312c30_base
+  fmap BG.fromFFIType hs_bindgen_4a65c95891312c30_base
 
 {-# NOINLINE sDL_tan #-}
 
@@ -6992,7 +7152,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_tanf@
 hs_bindgen_094dc8b00c4ee010 :: IO (BG.FunPtr (BG.CFloat -> IO BG.CFloat))
 hs_bindgen_094dc8b00c4ee010 =
-  BG.fromFFIType hs_bindgen_094dc8b00c4ee010_base
+  fmap BG.fromFFIType hs_bindgen_094dc8b00c4ee010_base
 
 {-# NOINLINE sDL_tanf #-}
 
@@ -7030,7 +7190,7 @@
 hs_bindgen_704fe1bf2ce9aef6
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> PtrConst.PtrConst BG.CChar -> IO SDL_iconv_t))
 hs_bindgen_704fe1bf2ce9aef6 =
-  BG.fromFFIType hs_bindgen_704fe1bf2ce9aef6_base
+  fmap BG.fromFFIType hs_bindgen_704fe1bf2ce9aef6_base
 
 {-# NOINLINE sDL_iconv_open #-}
 
@@ -7062,7 +7222,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_get_SDL_iconv_close@
 hs_bindgen_2c0a62f403d4446c :: IO (BG.FunPtr (SDL_iconv_t -> IO BG.CInt))
 hs_bindgen_2c0a62f403d4446c =
-  BG.fromFFIType hs_bindgen_2c0a62f403d4446c_base
+  fmap BG.fromFFIType hs_bindgen_2c0a62f403d4446c_base
 
 {-# NOINLINE sDL_iconv_close #-}
 
@@ -7101,7 +7261,7 @@
            )
        )
 hs_bindgen_c0049201d1f4606f =
-  BG.fromFFIType hs_bindgen_c0049201d1f4606f_base
+  fmap BG.fromFFIType hs_bindgen_c0049201d1f4606f_base
 
 {-# NOINLINE sDL_iconv #-}
 
@@ -7167,7 +7327,7 @@
            )
        )
 hs_bindgen_ce165346002f1247 =
-  BG.fromFFIType hs_bindgen_ce165346002f1247_base
+  fmap BG.fromFFIType hs_bindgen_ce165346002f1247_base
 
 {-# NOINLINE sDL_iconv_string #-}
 
@@ -7223,7 +7383,7 @@
            )
        )
 hs_bindgen_5f2e41800217ca05 =
-  BG.fromFFIType hs_bindgen_5f2e41800217ca05_base
+  fmap BG.fromFFIType hs_bindgen_5f2e41800217ca05_base
 
 {-# NOINLINE sDL_size_mul_check_overflow_builtin #-}
 
@@ -7254,7 +7414,7 @@
            )
        )
 hs_bindgen_2d8ca557aa2f3eb0 =
-  BG.fromFFIType hs_bindgen_2d8ca557aa2f3eb0_base
+  fmap BG.fromFFIType hs_bindgen_2d8ca557aa2f3eb0_base
 
 {-# NOINLINE sDL_size_add_check_overflow_builtin #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Stdinc/Safe.hs b/src/SDL3/Sys/Bindgen/Stdinc/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Stdinc/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Stdinc/Safe.hs
@@ -1,7418 +1,7991 @@
-{-# LANGUAGE TemplateHaskell #-}
-{-# LANGUAGE NoFieldSelectors #-}
-{-# OPTIONS_HADDOCK prune #-}
-
-module SDL3.Sys.Bindgen.Stdinc.Safe (
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_malloc,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_calloc,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_realloc,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_free,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_GetOriginalMemoryFunctions,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_GetMemoryFunctions,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_SetMemoryFunctions,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_aligned_alloc,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_aligned_free,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_GetNumAllocations,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_GetEnvironment,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_CreateEnvironment,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_GetEnvironmentVariable,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_GetEnvironmentVariables,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_SetEnvironmentVariable,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_UnsetEnvironmentVariable,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_DestroyEnvironment,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_getenv,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_getenv_unsafe,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_setenv_unsafe,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_unsetenv_unsafe,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_qsort,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_bsearch,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_qsort_r,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_bsearch_r,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_abs,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_isalpha,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_isalnum,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_isblank,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_iscntrl,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_isdigit,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_isxdigit,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_ispunct,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_isspace,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_isupper,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_islower,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_isprint,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_isgraph,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_toupper,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_tolower,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_crc16,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_crc32,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_murmur3_32,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_memset4,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_memcmp,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_wcslen,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_wcsnlen,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_wcslcpy,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_wcslcat,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_wcsdup,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_wcsstr,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_wcsnstr,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_wcscmp,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_wcsncmp,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_wcscasecmp,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_wcsncasecmp,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strlen,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strnlen,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strlcpy,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_utf8strlcpy,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strlcat,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strdup,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strndup,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strrev,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strupr,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strlwr,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strchr,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strrchr,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strstr,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strnstr,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strcasestr,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strtok_r,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_utf8strlen,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_utf8strnlen,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_itoa,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_uitoa,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_lltoa,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_ulltoa,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_atoi,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_atof,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strtoll,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strtoull,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strtod,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strcmp,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strncmp,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strcasecmp,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strncasecmp,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strpbrk,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_StepUTF8,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_StepBackUTF8,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_UCS4ToUTF8,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_srand,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_rand,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_randf,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_rand_bits,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_rand_r,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_randf_r,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_rand_bits_r,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_acos,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_acosf,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_asin,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_asinf,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_atan,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_atanf,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_atan2,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_atan2f,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_ceil,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_ceilf,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_copysign,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_copysignf,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_cos,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_cosf,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_exp,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_expf,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_fabs,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_fabsf,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_floor,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_floorf,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_trunc,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_truncf,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_fmod,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_fmodf,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_isinf,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_isinff,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_isnan,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_isnanf,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_log,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_logf,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_log10,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_log10f,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_modf,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_modff,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_pow,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_powf,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_round,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_roundf,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_scalbn,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_scalbnf,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_sin,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_sinf,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_sqrt,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_sqrtf,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_tan,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_tanf,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_iconv_open,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_iconv_close,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_iconv,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_iconv_string,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_size_mul_check_overflow_builtin,
-  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_size_add_check_overflow_builtin,
-)
-where
-
-import HsBindgen.Runtime.LibC qualified
-import HsBindgen.Runtime.PtrConst qualified as PtrConst
-import HsBindgen.Runtime.Support qualified as BG
-import HsBindgen.Runtime.Support.CAPI qualified
-import SDL3.Sys.Bindgen.Stdinc
-
-$( HsBindgen.Runtime.Support.CAPI.addCSource
-     ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_stdinc.h>"
-         , "void *hs_bindgen_0fa0437465ff2e3b ("
-         , "  size_t arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_malloc)(arg1);"
-         , "}"
-         , "void *hs_bindgen_12a69b8549cd3a89 ("
-         , "  size_t arg1,"
-         , "  size_t arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_calloc)(arg1, arg2);"
-         , "}"
-         , "void *hs_bindgen_749e3624b605eca6 ("
-         , "  void *arg1,"
-         , "  size_t arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_realloc)(arg1, arg2);"
-         , "}"
-         , "void hs_bindgen_090b04617f4cc6c8 ("
-         , "  void *arg1"
-         , ")"
-         , "{"
-         , "  (SDL_free)(arg1);"
-         , "}"
-         , "void hs_bindgen_8ba528e1d8cc4754 ("
-         , "  SDL_malloc_func *arg1,"
-         , "  SDL_calloc_func *arg2,"
-         , "  SDL_realloc_func *arg3,"
-         , "  SDL_free_func *arg4"
-         , ")"
-         , "{"
-         , "  (SDL_GetOriginalMemoryFunctions)(arg1, arg2, arg3, arg4);"
-         , "}"
-         , "void hs_bindgen_ad8799017bc65037 ("
-         , "  SDL_malloc_func *arg1,"
-         , "  SDL_calloc_func *arg2,"
-         , "  SDL_realloc_func *arg3,"
-         , "  SDL_free_func *arg4"
-         , ")"
-         , "{"
-         , "  (SDL_GetMemoryFunctions)(arg1, arg2, arg3, arg4);"
-         , "}"
-         , "_Bool hs_bindgen_0320414e5ec49d1b ("
-         , "  SDL_malloc_func arg1,"
-         , "  SDL_calloc_func arg2,"
-         , "  SDL_realloc_func arg3,"
-         , "  SDL_free_func arg4"
-         , ")"
-         , "{"
-         , "  return (SDL_SetMemoryFunctions)(arg1, arg2, arg3, arg4);"
-         , "}"
-         , "void *hs_bindgen_f88d3921cd5e4163 ("
-         , "  size_t arg1,"
-         , "  size_t arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_aligned_alloc)(arg1, arg2);"
-         , "}"
-         , "void hs_bindgen_d2d698681f3145f2 ("
-         , "  void *arg1"
-         , ")"
-         , "{"
-         , "  (SDL_aligned_free)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_f0e7f10898be7ba4 (void)"
-         , "{"
-         , "  return (SDL_GetNumAllocations)();"
-         , "}"
-         , "SDL_Environment *hs_bindgen_e44727dd9f944e0a (void)"
-         , "{"
-         , "  return (SDL_GetEnvironment)();"
-         , "}"
-         , "SDL_Environment *hs_bindgen_5c62fc7482159de0 ("
-         , "  _Bool arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_CreateEnvironment)(arg1);"
-         , "}"
-         , "char const *hs_bindgen_4da0ee2273bc4013 ("
-         , "  SDL_Environment *arg1,"
-         , "  char const *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_GetEnvironmentVariable)(arg1, arg2);"
-         , "}"
-         , "char **hs_bindgen_4c1189e55e8583bb ("
-         , "  SDL_Environment *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_GetEnvironmentVariables)(arg1);"
-         , "}"
-         , "_Bool hs_bindgen_5824ff8a221d07c0 ("
-         , "  SDL_Environment *arg1,"
-         , "  char const *arg2,"
-         , "  char const *arg3,"
-         , "  _Bool arg4"
-         , ")"
-         , "{"
-         , "  return (SDL_SetEnvironmentVariable)(arg1, arg2, arg3, arg4);"
-         , "}"
-         , "_Bool hs_bindgen_f695a3f593331aff ("
-         , "  SDL_Environment *arg1,"
-         , "  char const *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_UnsetEnvironmentVariable)(arg1, arg2);"
-         , "}"
-         , "void hs_bindgen_1dd67a4722131c01 ("
-         , "  SDL_Environment *arg1"
-         , ")"
-         , "{"
-         , "  (SDL_DestroyEnvironment)(arg1);"
-         , "}"
-         , "char const *hs_bindgen_1af31e6913adf6ff ("
-         , "  char const *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_getenv)(arg1);"
-         , "}"
-         , "char const *hs_bindgen_5a7e5c07a3b52c7c ("
-         , "  char const *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_getenv_unsafe)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_e57ac980835e41db ("
-         , "  char const *arg1,"
-         , "  char const *arg2,"
-         , "  signed int arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_setenv_unsafe)(arg1, arg2, arg3);"
-         , "}"
-         , "signed int hs_bindgen_6237b0757e59fa37 ("
-         , "  char const *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_unsetenv_unsafe)(arg1);"
-         , "}"
-         , "void hs_bindgen_b81d78a311d44f46 ("
-         , "  void *arg1,"
-         , "  size_t arg2,"
-         , "  size_t arg3,"
-         , "  SDL_CompareCallback arg4"
-         , ")"
-         , "{"
-         , "  (SDL_qsort)(arg1, arg2, arg3, arg4);"
-         , "}"
-         , "void *hs_bindgen_8c9a76f991574084 ("
-         , "  void const *arg1,"
-         , "  void const *arg2,"
-         , "  size_t arg3,"
-         , "  size_t arg4,"
-         , "  SDL_CompareCallback arg5"
-         , ")"
-         , "{"
-         , "  return (SDL_bsearch)(arg1, arg2, arg3, arg4, arg5);"
-         , "}"
-         , "void hs_bindgen_d22a2fabdcd748eb ("
-         , "  void *arg1,"
-         , "  size_t arg2,"
-         , "  size_t arg3,"
-         , "  SDL_CompareCallback_r arg4,"
-         , "  void *arg5"
-         , ")"
-         , "{"
-         , "  (SDL_qsort_r)(arg1, arg2, arg3, arg4, arg5);"
-         , "}"
-         , "void *hs_bindgen_9cce970e9842407b ("
-         , "  void const *arg1,"
-         , "  void const *arg2,"
-         , "  size_t arg3,"
-         , "  size_t arg4,"
-         , "  SDL_CompareCallback_r arg5,"
-         , "  void *arg6"
-         , ")"
-         , "{"
-         , "  return (SDL_bsearch_r)(arg1, arg2, arg3, arg4, arg5, arg6);"
-         , "}"
-         , "signed int hs_bindgen_3b7f43f8c476ee06 ("
-         , "  signed int arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_abs)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_9a00314812b7b060 ("
-         , "  signed int arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_isalpha)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_f2e3b47d308f6330 ("
-         , "  signed int arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_isalnum)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_94e1edfbd7c1b6fd ("
-         , "  signed int arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_isblank)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_f4e70f258fc0cd31 ("
-         , "  signed int arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_iscntrl)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_a92ce90ddf0e012f ("
-         , "  signed int arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_isdigit)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_c2fe92c140d522e3 ("
-         , "  signed int arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_isxdigit)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_abdf0b7703d7ef7b ("
-         , "  signed int arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_ispunct)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_b0c62a95d4008bcb ("
-         , "  signed int arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_isspace)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_dbe8ad5b2415f52b ("
-         , "  signed int arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_isupper)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_4f1c801e2ffe74d9 ("
-         , "  signed int arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_islower)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_1de66809f06ec2cf ("
-         , "  signed int arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_isprint)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_7cecb757f16ce85d ("
-         , "  signed int arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_isgraph)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_799fe4e6fc639bc0 ("
-         , "  signed int arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_toupper)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_af600e5bb74004b2 ("
-         , "  signed int arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_tolower)(arg1);"
-         , "}"
-         , "Uint16 hs_bindgen_8b9d7fd6e4874342 ("
-         , "  Uint16 arg1,"
-         , "  void const *arg2,"
-         , "  size_t arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_crc16)(arg1, arg2, arg3);"
-         , "}"
-         , "Uint32 hs_bindgen_20e1e20820f9c17a ("
-         , "  Uint32 arg1,"
-         , "  void const *arg2,"
-         , "  size_t arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_crc32)(arg1, arg2, arg3);"
-         , "}"
-         , "Uint32 hs_bindgen_e26385eb1b169df1 ("
-         , "  void const *arg1,"
-         , "  size_t arg2,"
-         , "  Uint32 arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_murmur3_32)(arg1, arg2, arg3);"
-         , "}"
-         , "void *hs_bindgen_39f43c1520a45f57 ("
-         , "  void *arg1,"
-         , "  Uint32 arg2,"
-         , "  size_t arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_memset4)(arg1, arg2, arg3);"
-         , "}"
-         , "signed int hs_bindgen_1386d72429f6b9cb ("
-         , "  void const *arg1,"
-         , "  void const *arg2,"
-         , "  size_t arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_memcmp)(arg1, arg2, arg3);"
-         , "}"
-         , "size_t hs_bindgen_e6c3253fb4b72427 ("
-         , "  wchar_t const *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_wcslen)(arg1);"
-         , "}"
-         , "size_t hs_bindgen_da04478d43043c90 ("
-         , "  wchar_t const *arg1,"
-         , "  size_t arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_wcsnlen)(arg1, arg2);"
-         , "}"
-         , "size_t hs_bindgen_82a9094f0d522cdf ("
-         , "  wchar_t *arg1,"
-         , "  wchar_t const *arg2,"
-         , "  size_t arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_wcslcpy)(arg1, arg2, arg3);"
-         , "}"
-         , "size_t hs_bindgen_c85ef13eabbd96dd ("
-         , "  wchar_t *arg1,"
-         , "  wchar_t const *arg2,"
-         , "  size_t arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_wcslcat)(arg1, arg2, arg3);"
-         , "}"
-         , "wchar_t *hs_bindgen_9a5bf9db9506735d ("
-         , "  wchar_t const *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_wcsdup)(arg1);"
-         , "}"
-         , "wchar_t *hs_bindgen_8807485ad58a476c ("
-         , "  wchar_t const *arg1,"
-         , "  wchar_t const *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_wcsstr)(arg1, arg2);"
-         , "}"
-         , "wchar_t *hs_bindgen_0f95369992d6076d ("
-         , "  wchar_t const *arg1,"
-         , "  wchar_t const *arg2,"
-         , "  size_t arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_wcsnstr)(arg1, arg2, arg3);"
-         , "}"
-         , "signed int hs_bindgen_a56659eded1129eb ("
-         , "  wchar_t const *arg1,"
-         , "  wchar_t const *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_wcscmp)(arg1, arg2);"
-         , "}"
-         , "signed int hs_bindgen_f249ec61a8d5978a ("
-         , "  wchar_t const *arg1,"
-         , "  wchar_t const *arg2,"
-         , "  size_t arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_wcsncmp)(arg1, arg2, arg3);"
-         , "}"
-         , "signed int hs_bindgen_0e487d7f98097b0d ("
-         , "  wchar_t const *arg1,"
-         , "  wchar_t const *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_wcscasecmp)(arg1, arg2);"
-         , "}"
-         , "signed int hs_bindgen_9a4ad44438974867 ("
-         , "  wchar_t const *arg1,"
-         , "  wchar_t const *arg2,"
-         , "  size_t arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_wcsncasecmp)(arg1, arg2, arg3);"
-         , "}"
-         , "size_t hs_bindgen_574becd3bb71e7b9 ("
-         , "  char const *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_strlen)(arg1);"
-         , "}"
-         , "size_t hs_bindgen_9232c1cbf65df9e5 ("
-         , "  char const *arg1,"
-         , "  size_t arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_strnlen)(arg1, arg2);"
-         , "}"
-         , "size_t hs_bindgen_1a460cf112b7fd68 ("
-         , "  char *arg1,"
-         , "  char const *arg2,"
-         , "  size_t arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_strlcpy)(arg1, arg2, arg3);"
-         , "}"
-         , "size_t hs_bindgen_10b5c948dc68c882 ("
-         , "  char *arg1,"
-         , "  char const *arg2,"
-         , "  size_t arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_utf8strlcpy)(arg1, arg2, arg3);"
-         , "}"
-         , "size_t hs_bindgen_8132fc050b3dda62 ("
-         , "  char *arg1,"
-         , "  char const *arg2,"
-         , "  size_t arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_strlcat)(arg1, arg2, arg3);"
-         , "}"
-         , "char *hs_bindgen_e91dd28c0e034753 ("
-         , "  char const *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_strdup)(arg1);"
-         , "}"
-         , "char *hs_bindgen_9f484a433e6fd1be ("
-         , "  char const *arg1,"
-         , "  size_t arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_strndup)(arg1, arg2);"
-         , "}"
-         , "char *hs_bindgen_fd83e6da8cdd54dc ("
-         , "  char *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_strrev)(arg1);"
-         , "}"
-         , "char *hs_bindgen_4821ca9fe328d7f0 ("
-         , "  char *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_strupr)(arg1);"
-         , "}"
-         , "char *hs_bindgen_b313d67572ea455e ("
-         , "  char *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_strlwr)(arg1);"
-         , "}"
-         , "char *hs_bindgen_9b8b80f67620d0c0 ("
-         , "  char const *arg1,"
-         , "  signed int arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_strchr)(arg1, arg2);"
-         , "}"
-         , "char *hs_bindgen_61eb1646e2706ec9 ("
-         , "  char const *arg1,"
-         , "  signed int arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_strrchr)(arg1, arg2);"
-         , "}"
-         , "char *hs_bindgen_09dae8bc6d27bfa7 ("
-         , "  char const *arg1,"
-         , "  char const *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_strstr)(arg1, arg2);"
-         , "}"
-         , "char *hs_bindgen_b253d6195ad29db6 ("
-         , "  char const *arg1,"
-         , "  char const *arg2,"
-         , "  size_t arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_strnstr)(arg1, arg2, arg3);"
-         , "}"
-         , "char *hs_bindgen_845c9ada7f0145b4 ("
-         , "  char const *arg1,"
-         , "  char const *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_strcasestr)(arg1, arg2);"
-         , "}"
-         , "char *hs_bindgen_92aad5310bed80bf ("
-         , "  char *arg1,"
-         , "  char const *arg2,"
-         , "  char **arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_strtok_r)(arg1, arg2, arg3);"
-         , "}"
-         , "size_t hs_bindgen_2fe9c3d14ead61fa ("
-         , "  char const *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_utf8strlen)(arg1);"
-         , "}"
-         , "size_t hs_bindgen_7e1dc736bb92cf02 ("
-         , "  char const *arg1,"
-         , "  size_t arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_utf8strnlen)(arg1, arg2);"
-         , "}"
-         , "char *hs_bindgen_5e87f4eb430750ff ("
-         , "  signed int arg1,"
-         , "  char *arg2,"
-         , "  signed int arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_itoa)(arg1, arg2, arg3);"
-         , "}"
-         , "char *hs_bindgen_6593301ad3b87e96 ("
-         , "  unsigned int arg1,"
-         , "  char *arg2,"
-         , "  signed int arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_uitoa)(arg1, arg2, arg3);"
-         , "}"
-         , "char *hs_bindgen_49dab071ddd94418 ("
-         , "  signed long long arg1,"
-         , "  char *arg2,"
-         , "  signed int arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_lltoa)(arg1, arg2, arg3);"
-         , "}"
-         , "char *hs_bindgen_8c172a64279b6c99 ("
-         , "  unsigned long long arg1,"
-         , "  char *arg2,"
-         , "  signed int arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_ulltoa)(arg1, arg2, arg3);"
-         , "}"
-         , "signed int hs_bindgen_7ec5dbb16b1ec441 ("
-         , "  char const *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_atoi)(arg1);"
-         , "}"
-         , "double hs_bindgen_3da67c3a67185baf ("
-         , "  char const *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_atof)(arg1);"
-         , "}"
-         , "signed long long hs_bindgen_2d4f949f38ae668c ("
-         , "  char const *arg1,"
-         , "  char **arg2,"
-         , "  signed int arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_strtoll)(arg1, arg2, arg3);"
-         , "}"
-         , "unsigned long long hs_bindgen_af470a839fcf6fbd ("
-         , "  char const *arg1,"
-         , "  char **arg2,"
-         , "  signed int arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_strtoull)(arg1, arg2, arg3);"
-         , "}"
-         , "double hs_bindgen_717e481bd213c968 ("
-         , "  char const *arg1,"
-         , "  char **arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_strtod)(arg1, arg2);"
-         , "}"
-         , "signed int hs_bindgen_114ae5114f0f2f61 ("
-         , "  char const *arg1,"
-         , "  char const *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_strcmp)(arg1, arg2);"
-         , "}"
-         , "signed int hs_bindgen_07f412ca6ac64bca ("
-         , "  char const *arg1,"
-         , "  char const *arg2,"
-         , "  size_t arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_strncmp)(arg1, arg2, arg3);"
-         , "}"
-         , "signed int hs_bindgen_931c05e65f298770 ("
-         , "  char const *arg1,"
-         , "  char const *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_strcasecmp)(arg1, arg2);"
-         , "}"
-         , "signed int hs_bindgen_974c20bb6f7b7d03 ("
-         , "  char const *arg1,"
-         , "  char const *arg2,"
-         , "  size_t arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_strncasecmp)(arg1, arg2, arg3);"
-         , "}"
-         , "char *hs_bindgen_50473abaffb3417e ("
-         , "  char const *arg1,"
-         , "  char const *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_strpbrk)(arg1, arg2);"
-         , "}"
-         , "Uint32 hs_bindgen_e49242de1cec91d5 ("
-         , "  char const **arg1,"
-         , "  size_t *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_StepUTF8)(arg1, arg2);"
-         , "}"
-         , "Uint32 hs_bindgen_0346c467944ee189 ("
-         , "  char const *arg1,"
-         , "  char const **arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_StepBackUTF8)(arg1, arg2);"
-         , "}"
-         , "char *hs_bindgen_bdc98e385efc6ab7 ("
-         , "  Uint32 arg1,"
-         , "  char *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_UCS4ToUTF8)(arg1, arg2);"
-         , "}"
-         , "void hs_bindgen_bd195a3a2b34e483 ("
-         , "  Uint64 arg1"
-         , ")"
-         , "{"
-         , "  (SDL_srand)(arg1);"
-         , "}"
-         , "Sint32 hs_bindgen_4b2da7e53b63ed17 ("
-         , "  Sint32 arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_rand)(arg1);"
-         , "}"
-         , "float hs_bindgen_91fe5edd016e0570 (void)"
-         , "{"
-         , "  return (SDL_randf)();"
-         , "}"
-         , "Uint32 hs_bindgen_5d81c1c12775308d (void)"
-         , "{"
-         , "  return (SDL_rand_bits)();"
-         , "}"
-         , "Sint32 hs_bindgen_59abfd01a8d7b8f7 ("
-         , "  Uint64 *arg1,"
-         , "  Sint32 arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_rand_r)(arg1, arg2);"
-         , "}"
-         , "float hs_bindgen_5da60fff1ce7873d ("
-         , "  Uint64 *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_randf_r)(arg1);"
-         , "}"
-         , "Uint32 hs_bindgen_23de01659ed6ba6b ("
-         , "  Uint64 *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_rand_bits_r)(arg1);"
-         , "}"
-         , "double hs_bindgen_217308a0a788520d ("
-         , "  double arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_acos)(arg1);"
-         , "}"
-         , "float hs_bindgen_f093db4bb5e8e494 ("
-         , "  float arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_acosf)(arg1);"
-         , "}"
-         , "double hs_bindgen_205d9f923dff59cd ("
-         , "  double arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_asin)(arg1);"
-         , "}"
-         , "float hs_bindgen_79771d582742f165 ("
-         , "  float arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_asinf)(arg1);"
-         , "}"
-         , "double hs_bindgen_3051cbc85bd5efba ("
-         , "  double arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_atan)(arg1);"
-         , "}"
-         , "float hs_bindgen_7d0bcd6030adfae6 ("
-         , "  float arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_atanf)(arg1);"
-         , "}"
-         , "double hs_bindgen_9ae010b5b4d9f553 ("
-         , "  double arg1,"
-         , "  double arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_atan2)(arg1, arg2);"
-         , "}"
-         , "float hs_bindgen_3eac4b1bfc5aff58 ("
-         , "  float arg1,"
-         , "  float arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_atan2f)(arg1, arg2);"
-         , "}"
-         , "double hs_bindgen_1630cb0e3a004beb ("
-         , "  double arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_ceil)(arg1);"
-         , "}"
-         , "float hs_bindgen_04a706bfcc971297 ("
-         , "  float arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_ceilf)(arg1);"
-         , "}"
-         , "double hs_bindgen_fed0484ab850ee6a ("
-         , "  double arg1,"
-         , "  double arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_copysign)(arg1, arg2);"
-         , "}"
-         , "float hs_bindgen_d21fe858af73dd98 ("
-         , "  float arg1,"
-         , "  float arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_copysignf)(arg1, arg2);"
-         , "}"
-         , "double hs_bindgen_a4c38d6732d22ffb ("
-         , "  double arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_cos)(arg1);"
-         , "}"
-         , "float hs_bindgen_ad11505e8fd49060 ("
-         , "  float arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_cosf)(arg1);"
-         , "}"
-         , "double hs_bindgen_ffaa0913f3d0c63c ("
-         , "  double arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_exp)(arg1);"
-         , "}"
-         , "float hs_bindgen_4d5e3977a4eb4c12 ("
-         , "  float arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_expf)(arg1);"
-         , "}"
-         , "double hs_bindgen_89730ae2b638ee61 ("
-         , "  double arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_fabs)(arg1);"
-         , "}"
-         , "float hs_bindgen_4e76324c9b8f7453 ("
-         , "  float arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_fabsf)(arg1);"
-         , "}"
-         , "double hs_bindgen_4c646d1d6b7e922f ("
-         , "  double arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_floor)(arg1);"
-         , "}"
-         , "float hs_bindgen_db6fbb0a591a2804 ("
-         , "  float arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_floorf)(arg1);"
-         , "}"
-         , "double hs_bindgen_2b4f0ab682c421b7 ("
-         , "  double arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_trunc)(arg1);"
-         , "}"
-         , "float hs_bindgen_afe8ddb39d52a293 ("
-         , "  float arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_truncf)(arg1);"
-         , "}"
-         , "double hs_bindgen_f1fc4d1a8a6fd613 ("
-         , "  double arg1,"
-         , "  double arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_fmod)(arg1, arg2);"
-         , "}"
-         , "float hs_bindgen_19c2a30dd6614c51 ("
-         , "  float arg1,"
-         , "  float arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_fmodf)(arg1, arg2);"
-         , "}"
-         , "signed int hs_bindgen_9be13530739c3139 ("
-         , "  double arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_isinf)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_d063ada15b71ed19 ("
-         , "  float arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_isinff)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_bb4d9f6611f2a512 ("
-         , "  double arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_isnan)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_48e10ed50de37991 ("
-         , "  float arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_isnanf)(arg1);"
-         , "}"
-         , "double hs_bindgen_46922ccc470e92e0 ("
-         , "  double arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_log)(arg1);"
-         , "}"
-         , "float hs_bindgen_7ef0b9f4239eb37e ("
-         , "  float arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_logf)(arg1);"
-         , "}"
-         , "double hs_bindgen_bc1ad316da1b3bbc ("
-         , "  double arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_log10)(arg1);"
-         , "}"
-         , "float hs_bindgen_310aebbf28df3250 ("
-         , "  float arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_log10f)(arg1);"
-         , "}"
-         , "double hs_bindgen_93a468f91c55ba99 ("
-         , "  double arg1,"
-         , "  double *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_modf)(arg1, arg2);"
-         , "}"
-         , "float hs_bindgen_76a18e33bbbed6ee ("
-         , "  float arg1,"
-         , "  float *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_modff)(arg1, arg2);"
-         , "}"
-         , "double hs_bindgen_b8c28ba00815fbb9 ("
-         , "  double arg1,"
-         , "  double arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_pow)(arg1, arg2);"
-         , "}"
-         , "float hs_bindgen_d853802a7561099f ("
-         , "  float arg1,"
-         , "  float arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_powf)(arg1, arg2);"
-         , "}"
-         , "double hs_bindgen_097e1eceb090a078 ("
-         , "  double arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_round)(arg1);"
-         , "}"
-         , "float hs_bindgen_5b677097112f1617 ("
-         , "  float arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_roundf)(arg1);"
-         , "}"
-         , "double hs_bindgen_8038e0526522260c ("
-         , "  double arg1,"
-         , "  signed int arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_scalbn)(arg1, arg2);"
-         , "}"
-         , "float hs_bindgen_fc0cb80cec8a11b0 ("
-         , "  float arg1,"
-         , "  signed int arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_scalbnf)(arg1, arg2);"
-         , "}"
-         , "double hs_bindgen_d062c0d717121757 ("
-         , "  double arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_sin)(arg1);"
-         , "}"
-         , "float hs_bindgen_4ee3ee787bd19e91 ("
-         , "  float arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_sinf)(arg1);"
-         , "}"
-         , "double hs_bindgen_45b7bf5fa33e3269 ("
-         , "  double arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_sqrt)(arg1);"
-         , "}"
-         , "float hs_bindgen_da05b17837e5fa68 ("
-         , "  float arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_sqrtf)(arg1);"
-         , "}"
-         , "double hs_bindgen_8e3c4624ada8d754 ("
-         , "  double arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_tan)(arg1);"
-         , "}"
-         , "float hs_bindgen_b4a5a33f270aeb8d ("
-         , "  float arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_tanf)(arg1);"
-         , "}"
-         , "SDL_iconv_t hs_bindgen_4c58e728caad9aa3 ("
-         , "  char const *arg1,"
-         , "  char const *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_iconv_open)(arg1, arg2);"
-         , "}"
-         , "signed int hs_bindgen_85fcb2de02d7791f ("
-         , "  SDL_iconv_t arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_iconv_close)(arg1);"
-         , "}"
-         , "size_t hs_bindgen_73663c44fcaa8f9d ("
-         , "  SDL_iconv_t arg1,"
-         , "  char const **arg2,"
-         , "  size_t *arg3,"
-         , "  char **arg4,"
-         , "  size_t *arg5"
-         , ")"
-         , "{"
-         , "  return (SDL_iconv)(arg1, arg2, arg3, arg4, arg5);"
-         , "}"
-         , "char *hs_bindgen_066c0e98a41d1c6b ("
-         , "  char const *arg1,"
-         , "  char const *arg2,"
-         , "  char const *arg3,"
-         , "  size_t arg4"
-         , ")"
-         , "{"
-         , "  return (SDL_iconv_string)(arg1, arg2, arg3, arg4);"
-         , "}"
-         , "_Bool hs_bindgen_cb7ffceaa134d628 ("
-         , "  size_t arg1,"
-         , "  size_t arg2,"
-         , "  size_t *arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_size_mul_check_overflow_builtin)(arg1, arg2, arg3);"
-         , "}"
-         , "_Bool hs_bindgen_ca88dcdcdddd2954 ("
-         , "  size_t arg1,"
-         , "  size_t arg2,"
-         , "  size_t *arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_size_add_check_overflow_builtin)(arg1, arg2, arg3);"
-         , "}"
-         ]
-     )
- )
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_malloc@
-foreign import ccall safe "hs_bindgen_0fa0437465ff2e3b"
-  hs_bindgen_0fa0437465ff2e3b_base
-    :: BG.Word64
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_malloc@
-hs_bindgen_0fa0437465ff2e3b
-  :: HsBindgen.Runtime.LibC.CSize
-  -> IO (BG.Ptr BG.Void)
-hs_bindgen_0fa0437465ff2e3b =
-  BG.fromFFIType hs_bindgen_0fa0437465ff2e3b_base
-
--- | Allocate uninitialized memory.
---
---     The allocated memory returned by this function must be freed with @SDL_free()@.
---
---     If @size@ is 0, it will be set to 1.
---
---     If the allocation is successful, the returned pointer is guaranteed to be aligned to either the /fundamental alignment/ (@alignof(max_align_t)@ in C11 and later) or @2 * sizeof(void *)@, whichever is smaller. Use @SDL_aligned_alloc()@ if you need to allocate memory aligned to an alignment greater than this guarantee.
---
---     [Returns]: a pointer to the allocated memory, or NULL if allocation failed.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_free', SDL_calloc, SDL_realloc, 'sDL_aligned_alloc'
---
---     [C declaration]: @SDL_malloc@, defined at @SDL3\/SDL_stdinc.h 1342:47@
-sDL_malloc
-  :: HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@size@]: the size to allocate.
-  -> IO (BG.Ptr BG.Void)
-sDL_malloc = hs_bindgen_0fa0437465ff2e3b
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_calloc@
-foreign import ccall safe "hs_bindgen_12a69b8549cd3a89"
-  hs_bindgen_12a69b8549cd3a89_base
-    :: BG.Word64
-    -> BG.Word64
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_calloc@
-hs_bindgen_12a69b8549cd3a89
-  :: HsBindgen.Runtime.LibC.CSize
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO (BG.Ptr BG.Void)
-hs_bindgen_12a69b8549cd3a89 =
-  BG.fromFFIType hs_bindgen_12a69b8549cd3a89_base
-
--- | [C declaration]: @SDL_calloc@, defined at @SDL3\/SDL_stdinc.h 1367:69@
-sDL_calloc
-  :: HsBindgen.Runtime.LibC.CSize
-  -- ^ [C declaration]: @nmemb@
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^ [C declaration]: @size@
-  -> IO (BG.Ptr BG.Void)
-sDL_calloc = hs_bindgen_12a69b8549cd3a89
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_realloc@
-foreign import ccall safe "hs_bindgen_749e3624b605eca6"
-  hs_bindgen_749e3624b605eca6_base
-    :: BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_realloc@
-hs_bindgen_749e3624b605eca6
-  :: BG.Ptr BG.Void
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO (BG.Ptr BG.Void)
-hs_bindgen_749e3624b605eca6 =
-  BG.fromFFIType hs_bindgen_749e3624b605eca6_base
-
--- | [C declaration]: @SDL_realloc@, defined at @SDL3\/SDL_stdinc.h 1407:54@
-sDL_realloc
-  :: BG.Ptr BG.Void
-  -- ^ [C declaration]: @mem@
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^ [C declaration]: @size@
-  -> IO (BG.Ptr BG.Void)
-sDL_realloc = hs_bindgen_749e3624b605eca6
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_free@
-foreign import ccall safe "hs_bindgen_090b04617f4cc6c8"
-  hs_bindgen_090b04617f4cc6c8_base
-    :: BG.Ptr BG.Void
-    -> IO ()
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_free@
-hs_bindgen_090b04617f4cc6c8
-  :: BG.Ptr BG.Void
-  -> IO ()
-hs_bindgen_090b04617f4cc6c8 =
-  BG.fromFFIType hs_bindgen_090b04617f4cc6c8_base
-
--- | Free allocated memory.
---
---     The pointer is no longer valid after this call and cannot be dereferenced anymore.
---
---     If @mem@ is NULL, this function does nothing.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_malloc', SDL_calloc, SDL_realloc
---
---     [C declaration]: @SDL_free@, defined at @SDL3\/SDL_stdinc.h 1427:34@
-sDL_free
-  :: BG.Ptr BG.Void
-  -- ^
-  --
-  --           [@mem@]: a pointer to allocated memory, or NULL.
-  -> IO ()
-sDL_free = hs_bindgen_090b04617f4cc6c8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_GetOriginalMemoryFunctions@
-foreign import ccall safe "hs_bindgen_8ba528e1d8cc4754"
-  hs_bindgen_8ba528e1d8cc4754_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO ()
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_GetOriginalMemoryFunctions@
-hs_bindgen_8ba528e1d8cc4754
-  :: BG.Ptr SDL_malloc_func
-  -> BG.Ptr SDL_calloc_func
-  -> BG.Ptr SDL_realloc_func
-  -> BG.Ptr SDL_free_func
-  -> IO ()
-hs_bindgen_8ba528e1d8cc4754 =
-  BG.fromFFIType hs_bindgen_8ba528e1d8cc4754_base
-
--- | Get the original set of SDL memory functions.
---
---     This is what SDL_malloc and friends will use by default, if there has been no call to SDL_SetMemoryFunctions. This is not necessarily using the C runtime\'s @malloc@ functions behind the scenes! Different platforms and build configurations might do any number of unexpected things.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_GetOriginalMemoryFunctions@, defined at @SDL3\/SDL_stdinc.h 1525:34@
-sDL_GetOriginalMemoryFunctions
-  :: BG.Ptr SDL_malloc_func
-  -- ^
-  --
-  --           [@malloc_func@]: filled with malloc function.
-  -> BG.Ptr SDL_calloc_func
-  -- ^
-  --
-  --           [@calloc_func@]: filled with calloc function.
-  -> BG.Ptr SDL_realloc_func
-  -- ^
-  --
-  --           [@realloc_func@]: filled with realloc function.
-  -> BG.Ptr SDL_free_func
-  -- ^
-  --
-  --           [@free_func@]: filled with free function.
-  -> IO ()
-sDL_GetOriginalMemoryFunctions =
-  hs_bindgen_8ba528e1d8cc4754
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_GetMemoryFunctions@
-foreign import ccall safe "hs_bindgen_ad8799017bc65037"
-  hs_bindgen_ad8799017bc65037_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO ()
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_GetMemoryFunctions@
-hs_bindgen_ad8799017bc65037
-  :: BG.Ptr SDL_malloc_func
-  -> BG.Ptr SDL_calloc_func
-  -> BG.Ptr SDL_realloc_func
-  -> BG.Ptr SDL_free_func
-  -> IO ()
-hs_bindgen_ad8799017bc65037 =
-  BG.fromFFIType hs_bindgen_ad8799017bc65037_base
-
--- | Get the current set of SDL memory functions.
---
---     [Thread safety]: This does not hold a lock, so do not call this in the unlikely event of a background thread calling SDL_SetMemoryFunctions simultaneously.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_SetMemoryFunctions', 'sDL_GetOriginalMemoryFunctions'
---
---     [C declaration]: @SDL_GetMemoryFunctions@, defined at @SDL3\/SDL_stdinc.h 1547:34@
-sDL_GetMemoryFunctions
-  :: BG.Ptr SDL_malloc_func
-  -- ^
-  --
-  --           [@malloc_func@]: filled with malloc function.
-  -> BG.Ptr SDL_calloc_func
-  -- ^
-  --
-  --           [@calloc_func@]: filled with calloc function.
-  -> BG.Ptr SDL_realloc_func
-  -- ^
-  --
-  --           [@realloc_func@]: filled with realloc function.
-  -> BG.Ptr SDL_free_func
-  -- ^
-  --
-  --           [@free_func@]: filled with free function.
-  -> IO ()
-sDL_GetMemoryFunctions = hs_bindgen_ad8799017bc65037
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_SetMemoryFunctions@
-foreign import ccall safe "hs_bindgen_0320414e5ec49d1b"
-  hs_bindgen_0320414e5ec49d1b_base
-    :: BG.FunPtr BG.Void
-    -> BG.FunPtr BG.Void
-    -> BG.FunPtr BG.Void
-    -> BG.FunPtr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_SetMemoryFunctions@
-hs_bindgen_0320414e5ec49d1b
-  :: SDL_malloc_func
-  -> SDL_calloc_func
-  -> SDL_realloc_func
-  -> SDL_free_func
-  -> IO BG.CBool
-hs_bindgen_0320414e5ec49d1b =
-  BG.fromFFIType hs_bindgen_0320414e5ec49d1b_base
-
--- | Replace SDL\'s memory allocation functions with a custom set.
---
---     It is not safe to call this function once any allocations have been made, as future calls to SDL_free will use the new allocator, even if they came from an SDL_malloc made with the old one!
---
---     If used, usually this needs to be the first call made into the SDL library, if not the very first thing done at program startup time.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: It is safe to call this function from any thread, but one should not replace the memory functions once any allocations are made!
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetMemoryFunctions', 'sDL_GetOriginalMemoryFunctions'
---
---     [C declaration]: @SDL_SetMemoryFunctions@, defined at @SDL3\/SDL_stdinc.h 1578:34@
-sDL_SetMemoryFunctions
-  :: SDL_malloc_func
-  -- ^
-  --
-  --           [@malloc_func@]: custom malloc function.
-  -> SDL_calloc_func
-  -- ^
-  --
-  --           [@calloc_func@]: custom calloc function.
-  -> SDL_realloc_func
-  -- ^
-  --
-  --           [@realloc_func@]: custom realloc function.
-  -> SDL_free_func
-  -- ^
-  --
-  --           [@free_func@]: custom free function.
-  -> IO BG.CBool
-sDL_SetMemoryFunctions = hs_bindgen_0320414e5ec49d1b
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_aligned_alloc@
-foreign import ccall safe "hs_bindgen_f88d3921cd5e4163"
-  hs_bindgen_f88d3921cd5e4163_base
-    :: BG.Word64
-    -> BG.Word64
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_aligned_alloc@
-hs_bindgen_f88d3921cd5e4163
-  :: HsBindgen.Runtime.LibC.CSize
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO (BG.Ptr BG.Void)
-hs_bindgen_f88d3921cd5e4163 =
-  BG.fromFFIType hs_bindgen_f88d3921cd5e4163_base
-
--- | Allocate memory aligned to a specific alignment.
---
---     The memory returned by this function must be freed with @SDL_aligned_free()@, /not/ @SDL_free()@.
---
---     If @alignment@ is less than the size of @void *@, it will be increased to match that.
---
---     The returned memory address will be a multiple of the alignment value, and the size of the memory allocated will be a multiple of the alignment value.
---
---     [Returns]: a pointer to the aligned memory, or NULL if allocation failed.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_aligned_free'
---
---     [C declaration]: @SDL_aligned_alloc@, defined at @SDL3\/SDL_stdinc.h 1605:47@
-sDL_aligned_alloc
-  :: HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@alignment@]: the alignment of the memory.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@size@]: the size to allocate.
-  -> IO (BG.Ptr BG.Void)
-sDL_aligned_alloc = hs_bindgen_f88d3921cd5e4163
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_aligned_free@
-foreign import ccall safe "hs_bindgen_d2d698681f3145f2"
-  hs_bindgen_d2d698681f3145f2_base
-    :: BG.Ptr BG.Void
-    -> IO ()
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_aligned_free@
-hs_bindgen_d2d698681f3145f2
-  :: BG.Ptr BG.Void
-  -> IO ()
-hs_bindgen_d2d698681f3145f2 =
-  BG.fromFFIType hs_bindgen_d2d698681f3145f2_base
-
--- | Free memory allocated by @SDL_aligned_alloc()@.
---
---     The pointer is no longer valid after this call and cannot be dereferenced anymore.
---
---     If @mem@ is NULL, this function does nothing.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_aligned_alloc'
---
---     [C declaration]: @SDL_aligned_free@, defined at @SDL3\/SDL_stdinc.h 1623:34@
-sDL_aligned_free
-  :: BG.Ptr BG.Void
-  -- ^
-  --
-  --           [@mem@]: a pointer previously returned by @SDL_aligned_alloc()@, or NULL.
-  -> IO ()
-sDL_aligned_free = hs_bindgen_d2d698681f3145f2
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_GetNumAllocations@
-foreign import ccall safe "hs_bindgen_f0e7f10898be7ba4"
-  hs_bindgen_f0e7f10898be7ba4_base
-    :: IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_GetNumAllocations@
-hs_bindgen_f0e7f10898be7ba4 :: IO BG.CInt
-hs_bindgen_f0e7f10898be7ba4 =
-  BG.fromFFIType hs_bindgen_f0e7f10898be7ba4_base
-
--- | Get the number of outstanding (unfreed) allocations.
---
---     [Returns]: the number of allocations or -1 if allocation counting is disabled.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_GetNumAllocations@, defined at @SDL3\/SDL_stdinc.h 1635:33@
-sDL_GetNumAllocations :: IO BG.CInt
-sDL_GetNumAllocations = hs_bindgen_f0e7f10898be7ba4
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_GetEnvironment@
-foreign import ccall safe "hs_bindgen_e44727dd9f944e0a"
-  hs_bindgen_e44727dd9f944e0a_base
-    :: IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_GetEnvironment@
-hs_bindgen_e44727dd9f944e0a :: IO (BG.Ptr SDL_Environment)
-hs_bindgen_e44727dd9f944e0a =
-  BG.fromFFIType hs_bindgen_e44727dd9f944e0a_base
-
--- | Get the process environment.
---
---     This is initialized at application start and is not affected by setenv() and unsetenv() calls after that point. Use @SDL_SetEnvironmentVariable()@ and @SDL_UnsetEnvironmentVariable()@ if you want to modify this environment, or @SDL_setenv_unsafe()@ or @SDL_unsetenv_unsafe()@ if you want changes to persist in the C runtime environment after SDL_Quit().
---
---     [Returns]: a pointer to the environment for the process or NULL on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetEnvironmentVariable', 'sDL_GetEnvironmentVariables', 'sDL_SetEnvironmentVariable', 'sDL_UnsetEnvironmentVariable'
---
---     [C declaration]: @SDL_GetEnvironment@, defined at @SDL3\/SDL_stdinc.h 1673:47@
-sDL_GetEnvironment :: IO (BG.Ptr SDL_Environment)
-sDL_GetEnvironment = hs_bindgen_e44727dd9f944e0a
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_CreateEnvironment@
-foreign import ccall safe "hs_bindgen_5c62fc7482159de0"
-  hs_bindgen_5c62fc7482159de0_base
-    :: BG.Word8
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_CreateEnvironment@
-hs_bindgen_5c62fc7482159de0
-  :: BG.CBool
-  -> IO (BG.Ptr SDL_Environment)
-hs_bindgen_5c62fc7482159de0 =
-  BG.fromFFIType hs_bindgen_5c62fc7482159de0_base
-
--- | Create a set of environment variables
---
---     [Returns]: a pointer to the new environment or NULL on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: If @populated@ is false, it is safe to call this function from any thread, otherwise it is safe if no other threads are calling setenv() or unsetenv()
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetEnvironmentVariable', 'sDL_GetEnvironmentVariables', 'sDL_SetEnvironmentVariable', 'sDL_UnsetEnvironmentVariable', 'sDL_DestroyEnvironment'
---
---     [C declaration]: @SDL_CreateEnvironment@, defined at @SDL3\/SDL_stdinc.h 1695:47@
-sDL_CreateEnvironment
-  :: BG.CBool
-  -- ^
-  --
-  --           [@populated@]: true to initialize it from the C runtime environment, false to create an empty environment.
-  -> IO (BG.Ptr SDL_Environment)
-sDL_CreateEnvironment = hs_bindgen_5c62fc7482159de0
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_GetEnvironmentVariable@
-foreign import ccall safe "hs_bindgen_4da0ee2273bc4013"
-  hs_bindgen_4da0ee2273bc4013_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_GetEnvironmentVariable@
-hs_bindgen_4da0ee2273bc4013
-  :: BG.Ptr SDL_Environment
-  -> PtrConst.PtrConst BG.CChar
-  -> IO (PtrConst.PtrConst BG.CChar)
-hs_bindgen_4da0ee2273bc4013 =
-  BG.fromFFIType hs_bindgen_4da0ee2273bc4013_base
-
--- | Get the value of a variable in the environment.
---
---     [Returns]: a pointer to the value of the variable or NULL if it can\'t be found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetEnvironment', 'sDL_CreateEnvironment', 'sDL_GetEnvironmentVariables', 'sDL_SetEnvironmentVariable', 'sDL_UnsetEnvironmentVariable'
---
---     [C declaration]: @SDL_GetEnvironmentVariable@, defined at @SDL3\/SDL_stdinc.h 1715:42@
-sDL_GetEnvironmentVariable
-  :: BG.Ptr SDL_Environment
-  -- ^
-  --
-  --           [@env@]: the environment to query.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@name@]: the name of the variable to get.
-  -> IO (PtrConst.PtrConst BG.CChar)
-sDL_GetEnvironmentVariable =
-  hs_bindgen_4da0ee2273bc4013
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_GetEnvironmentVariables@
-foreign import ccall safe "hs_bindgen_4c1189e55e8583bb"
-  hs_bindgen_4c1189e55e8583bb_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_GetEnvironmentVariables@
-hs_bindgen_4c1189e55e8583bb
-  :: BG.Ptr SDL_Environment
-  -> IO (BG.Ptr (BG.Ptr BG.CChar))
-hs_bindgen_4c1189e55e8583bb =
-  BG.fromFFIType hs_bindgen_4c1189e55e8583bb_base
-
--- | Get all variables in the environment.
---
---     [Returns]: a NULL terminated array of pointers to environment variables in the form \"variable=value\" or NULL on failure; call SDL_GetError() for more information. This is a single allocation that should be freed with @SDL_free()@ when it is no longer needed.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetEnvironment', 'sDL_CreateEnvironment', 'sDL_GetEnvironmentVariables', 'sDL_SetEnvironmentVariable', 'sDL_UnsetEnvironmentVariable'
---
---     [C declaration]: @SDL_GetEnvironmentVariables@, defined at @SDL3\/SDL_stdinc.h 1736:37@
-sDL_GetEnvironmentVariables
-  :: BG.Ptr SDL_Environment
-  -- ^
-  --
-  --           [@env@]: the environment to query.
-  -> IO (BG.Ptr (BG.Ptr BG.CChar))
-sDL_GetEnvironmentVariables =
-  hs_bindgen_4c1189e55e8583bb
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_SetEnvironmentVariable@
-foreign import ccall safe "hs_bindgen_5824ff8a221d07c0"
-  hs_bindgen_5824ff8a221d07c0_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_SetEnvironmentVariable@
-hs_bindgen_5824ff8a221d07c0
-  :: BG.Ptr SDL_Environment
-  -> PtrConst.PtrConst BG.CChar
-  -> PtrConst.PtrConst BG.CChar
-  -> BG.CBool
-  -> IO BG.CBool
-hs_bindgen_5824ff8a221d07c0 =
-  BG.fromFFIType hs_bindgen_5824ff8a221d07c0_base
-
--- | Set the value of a variable in the environment.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetEnvironment', 'sDL_CreateEnvironment', 'sDL_GetEnvironmentVariable', 'sDL_GetEnvironmentVariables', 'sDL_UnsetEnvironmentVariable'
---
---     [C declaration]: @SDL_SetEnvironmentVariable@, defined at @SDL3\/SDL_stdinc.h 1760:34@
-sDL_SetEnvironmentVariable
-  :: BG.Ptr SDL_Environment
-  -- ^
-  --
-  --           [@env@]: the environment to modify.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@name@]: the name of the variable to set.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@value@]: the value of the variable to set.
-  -> BG.CBool
-  -- ^
-  --
-  --           [@overwrite@]: true to overwrite the variable if it exists, false to return success without setting the variable if it already exists.
-  -> IO BG.CBool
-sDL_SetEnvironmentVariable =
-  hs_bindgen_5824ff8a221d07c0
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_UnsetEnvironmentVariable@
-foreign import ccall safe "hs_bindgen_f695a3f593331aff"
-  hs_bindgen_f695a3f593331aff_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_UnsetEnvironmentVariable@
-hs_bindgen_f695a3f593331aff
-  :: BG.Ptr SDL_Environment
-  -> PtrConst.PtrConst BG.CChar
-  -> IO BG.CBool
-hs_bindgen_f695a3f593331aff =
-  BG.fromFFIType hs_bindgen_f695a3f593331aff_base
-
--- | Clear a variable from the environment.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetEnvironment', 'sDL_CreateEnvironment', 'sDL_GetEnvironmentVariable', 'sDL_GetEnvironmentVariables', 'sDL_SetEnvironmentVariable', 'sDL_UnsetEnvironmentVariable'
---
---     [C declaration]: @SDL_UnsetEnvironmentVariable@, defined at @SDL3\/SDL_stdinc.h 1781:34@
-sDL_UnsetEnvironmentVariable
-  :: BG.Ptr SDL_Environment
-  -- ^
-  --
-  --           [@env@]: the environment to modify.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@name@]: the name of the variable to unset.
-  -> IO BG.CBool
-sDL_UnsetEnvironmentVariable =
-  hs_bindgen_f695a3f593331aff
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_DestroyEnvironment@
-foreign import ccall safe "hs_bindgen_1dd67a4722131c01"
-  hs_bindgen_1dd67a4722131c01_base
-    :: BG.Ptr BG.Void
-    -> IO ()
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_DestroyEnvironment@
-hs_bindgen_1dd67a4722131c01
-  :: BG.Ptr SDL_Environment
-  -> IO ()
-hs_bindgen_1dd67a4722131c01 =
-  BG.fromFFIType hs_bindgen_1dd67a4722131c01_base
-
--- | Destroy a set of environment variables.
---
---     [Thread safety]: It is safe to call this function from any thread, as long as the environment is no longer in use.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_CreateEnvironment'
---
---     [C declaration]: @SDL_DestroyEnvironment@, defined at @SDL3\/SDL_stdinc.h 1795:34@
-sDL_DestroyEnvironment
-  :: BG.Ptr SDL_Environment
-  -- ^
-  --
-  --           [@env@]: the environment to destroy.
-  -> IO ()
-sDL_DestroyEnvironment = hs_bindgen_1dd67a4722131c01
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_getenv@
-foreign import ccall safe "hs_bindgen_1af31e6913adf6ff"
-  hs_bindgen_1af31e6913adf6ff_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_getenv@
-hs_bindgen_1af31e6913adf6ff
-  :: PtrConst.PtrConst BG.CChar
-  -> IO (PtrConst.PtrConst BG.CChar)
-hs_bindgen_1af31e6913adf6ff =
-  BG.fromFFIType hs_bindgen_1af31e6913adf6ff_base
-
--- | Get the value of a variable in the environment.
---
---     The name of the variable is case sensitive on all platforms.
---
---     This function uses SDL\'s cached copy of the environment and is thread-safe.
---
---     [Returns]: a pointer to the value of the variable or NULL if it can\'t be found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_getenv@, defined at @SDL3\/SDL_stdinc.h 1812:42@
-sDL_getenv
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@name@]: the name of the variable to get.
-  -> IO (PtrConst.PtrConst BG.CChar)
-sDL_getenv = hs_bindgen_1af31e6913adf6ff
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_getenv_unsafe@
-foreign import ccall safe "hs_bindgen_5a7e5c07a3b52c7c"
-  hs_bindgen_5a7e5c07a3b52c7c_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_getenv_unsafe@
-hs_bindgen_5a7e5c07a3b52c7c
-  :: PtrConst.PtrConst BG.CChar
-  -> IO (PtrConst.PtrConst BG.CChar)
-hs_bindgen_5a7e5c07a3b52c7c =
-  BG.fromFFIType hs_bindgen_5a7e5c07a3b52c7c_base
-
--- | Get the value of a variable in the environment.
---
---     This function bypasses SDL\'s cached copy of the environment and is not thread-safe.
---
---     On some platforms, this may make case-insensitive matches, while other platforms are case-sensitive. It is best to be precise with strings used for queries through this interface. SDL_getenv is always case-sensitive, however.
---
---     [Returns]: a pointer to the value of the variable or NULL if it can\'t be found.
---
---     [Thread safety]: This function is not thread safe, consider using @SDL_getenv()@ instead.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_getenv'
---
---     [C declaration]: @SDL_getenv_unsafe@, defined at @SDL3\/SDL_stdinc.h 1836:42@
-sDL_getenv_unsafe
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@name@]: the name of the variable to get.
-  -> IO (PtrConst.PtrConst BG.CChar)
-sDL_getenv_unsafe = hs_bindgen_5a7e5c07a3b52c7c
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_setenv_unsafe@
-foreign import ccall safe "hs_bindgen_e57ac980835e41db"
-  hs_bindgen_e57ac980835e41db_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_setenv_unsafe@
-hs_bindgen_e57ac980835e41db
-  :: PtrConst.PtrConst BG.CChar
-  -> PtrConst.PtrConst BG.CChar
-  -> BG.CInt
-  -> IO BG.CInt
-hs_bindgen_e57ac980835e41db =
-  BG.fromFFIType hs_bindgen_e57ac980835e41db_base
-
--- | Set the value of a variable in the environment.
---
---     [Returns]: 0 on success, -1 on error.
---
---     [Thread safety]: This function is not thread safe, consider using @SDL_SetEnvironmentVariable()@ instead.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_SetEnvironmentVariable'
---
---     [C declaration]: @SDL_setenv_unsafe@, defined at @SDL3\/SDL_stdinc.h 1854:33@
-sDL_setenv_unsafe
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@name@]: the name of the variable to set.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@value@]: the value of the variable to set.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@overwrite@]: 1 to overwrite the variable if it exists, 0 to return success without setting the variable if it already exists.
-  -> IO BG.CInt
-sDL_setenv_unsafe = hs_bindgen_e57ac980835e41db
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_unsetenv_unsafe@
-foreign import ccall safe "hs_bindgen_6237b0757e59fa37"
-  hs_bindgen_6237b0757e59fa37_base
-    :: BG.Ptr BG.Void
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_unsetenv_unsafe@
-hs_bindgen_6237b0757e59fa37
-  :: PtrConst.PtrConst BG.CChar
-  -> IO BG.CInt
-hs_bindgen_6237b0757e59fa37 =
-  BG.fromFFIType hs_bindgen_6237b0757e59fa37_base
-
--- | Clear a variable from the environment.
---
---     [Returns]: 0 on success, -1 on error.
---
---     [Thread safety]: This function is not thread safe, consider using @SDL_UnsetEnvironmentVariable()@ instead.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_UnsetEnvironmentVariable'
---
---     [C declaration]: @SDL_unsetenv_unsafe@, defined at @SDL3\/SDL_stdinc.h 1869:33@
-sDL_unsetenv_unsafe
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@name@]: the name of the variable to unset.
-  -> IO BG.CInt
-sDL_unsetenv_unsafe = hs_bindgen_6237b0757e59fa37
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_qsort@
-foreign import ccall safe "hs_bindgen_b81d78a311d44f46"
-  hs_bindgen_b81d78a311d44f46_base
-    :: BG.Ptr BG.Void
-    -> BG.Word64
-    -> BG.Word64
-    -> BG.FunPtr BG.Void
-    -> IO ()
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_qsort@
-hs_bindgen_b81d78a311d44f46
-  :: BG.Ptr BG.Void
-  -> HsBindgen.Runtime.LibC.CSize
-  -> HsBindgen.Runtime.LibC.CSize
-  -> SDL_CompareCallback
-  -> IO ()
-hs_bindgen_b81d78a311d44f46 =
-  BG.fromFFIType hs_bindgen_b81d78a311d44f46_base
-
--- | Sort an array.
---
---     For example:
---
---     @
---     typedef struct {
---         int key;
---         const char *string;
---     } data;
---
---     int SDLCALL compare(const void *a, const void *b)
---     {
---         const data *A = (const data *)a;
---         const data *B = (const data *)b;
---
---         if (A->n \< B->n) {
---             return -1;
---         } else if (B->n \< A->n) {
---             return 1;
---         } else {
---             return 0;
---         }
---     }
---
---     data values[] = {
---         { 3, \"third\" }, { 1, \"first\" }, { 2, \"second\" }
---     };
---
---     SDL_qsort(values, SDL_arraysize(values), sizeof(values[0]), compare);
---     @
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_bsearch', 'sDL_qsort_r'
---
---     [C declaration]: @SDL_qsort@, defined at @SDL3\/SDL_stdinc.h 1931:34@
-sDL_qsort
-  :: BG.Ptr BG.Void
-  -- ^
-  --
-  --           [@base@]: a pointer to the start of the array.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@nmemb@]: the number of elements in the array.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@size@]: the size of the elements in the array.
-  -> SDL_CompareCallback
-  -- ^
-  --
-  --           [@compare@]: a function used to compare elements in the array.
-  -> IO ()
-sDL_qsort = hs_bindgen_b81d78a311d44f46
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_bsearch@
-foreign import ccall safe "hs_bindgen_8c9a76f991574084"
-  hs_bindgen_8c9a76f991574084_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> BG.Word64
-    -> BG.FunPtr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_bsearch@
-hs_bindgen_8c9a76f991574084
-  :: PtrConst.PtrConst BG.Void
-  -> PtrConst.PtrConst BG.Void
-  -> HsBindgen.Runtime.LibC.CSize
-  -> HsBindgen.Runtime.LibC.CSize
-  -> SDL_CompareCallback
-  -> IO (BG.Ptr BG.Void)
-hs_bindgen_8c9a76f991574084 =
-  BG.fromFFIType hs_bindgen_8c9a76f991574084_base
-
--- | Perform a binary search on a previously sorted array.
---
---     For example:
---
---     @
---     typedef struct {
---         int key;
---         const char *string;
---     } data;
---
---     int SDLCALL compare(const void *a, const void *b)
---     {
---         const data *A = (const data *)a;
---         const data *B = (const data *)b;
---
---         if (A->n \< B->n) {
---             return -1;
---         } else if (B->n \< A->n) {
---             return 1;
---         } else {
---             return 0;
---         }
---     }
---
---     data values[] = {
---         { 1, \"first\" }, { 2, \"second\" }, { 3, \"third\" }
---     };
---     data key = { 2, NULL };
---
---     data *result = SDL_bsearch(&key, values, SDL_arraysize(values), sizeof(values[0]), compare);
---     @
---
---     [Returns]: a pointer to the matching element in the array, or NULL if not found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_bsearch_r', 'sDL_qsort'
---
---     [C declaration]: @SDL_bsearch@, defined at @SDL3\/SDL_stdinc.h 1981:36@
-sDL_bsearch
-  :: PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@key@]: a pointer to a key equal to the element being searched for.
-  -> PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@base@]: a pointer to the start of the array.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@nmemb@]: the number of elements in the array.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@size@]: the size of the elements in the array.
-  -> SDL_CompareCallback
-  -- ^
-  --
-  --           [@compare@]: a function used to compare elements in the array.
-  -> IO (BG.Ptr BG.Void)
-sDL_bsearch = hs_bindgen_8c9a76f991574084
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_qsort_r@
-foreign import ccall safe "hs_bindgen_d22a2fabdcd748eb"
-  hs_bindgen_d22a2fabdcd748eb_base
-    :: BG.Ptr BG.Void
-    -> BG.Word64
-    -> BG.Word64
-    -> BG.FunPtr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO ()
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_qsort_r@
-hs_bindgen_d22a2fabdcd748eb
-  :: BG.Ptr BG.Void
-  -> HsBindgen.Runtime.LibC.CSize
-  -> HsBindgen.Runtime.LibC.CSize
-  -> SDL_CompareCallback_r
-  -> BG.Ptr BG.Void
-  -> IO ()
-hs_bindgen_d22a2fabdcd748eb =
-  BG.fromFFIType hs_bindgen_d22a2fabdcd748eb_base
-
--- | Sort an array, passing a userdata pointer to the compare function.
---
---     For example:
---
---     @
---     typedef enum {
---         sort_increasing,
---         sort_decreasing,
---     } sort_method;
---
---     typedef struct {
---         int key;
---         const char *string;
---     } data;
---
---     int SDLCALL compare(const void *userdata, const void *a, const void *b)
---     {
---         sort_method method = (sort_method)(uintptr_t)userdata;
---         const data *A = (const data *)a;
---         const data *B = (const data *)b;
---
---         if (A->key \< B->key) {
---             return (method == sort_increasing) ? -1 : 1;
---         } else if (B->key \< A->key) {
---             return (method == sort_increasing) ? 1 : -1;
---         } else {
---             return 0;
---         }
---     }
---
---     data values[] = {
---         { 3, \"third\" }, { 1, \"first\" }, { 2, \"second\" }
---     };
---
---     SDL_qsort_r(values, SDL_arraysize(values), sizeof(values[0]), compare, (const void *)(uintptr_t)sort_increasing);
---     @
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_bsearch_r', 'sDL_qsort'
---
---     [C declaration]: @SDL_qsort_r@, defined at @SDL3\/SDL_stdinc.h 2051:34@
-sDL_qsort_r
-  :: BG.Ptr BG.Void
-  -- ^
-  --
-  --           [@base@]: a pointer to the start of the array.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@nmemb@]: the number of elements in the array.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@size@]: the size of the elements in the array.
-  -> SDL_CompareCallback_r
-  -- ^
-  --
-  --           [@compare@]: a function used to compare elements in the array.
-  -> BG.Ptr BG.Void
-  -- ^
-  --
-  --           [@userdata@]: a pointer to pass to the compare function.
-  -> IO ()
-sDL_qsort_r = hs_bindgen_d22a2fabdcd748eb
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_bsearch_r@
-foreign import ccall safe "hs_bindgen_9cce970e9842407b"
-  hs_bindgen_9cce970e9842407b_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> BG.Word64
-    -> BG.FunPtr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_bsearch_r@
-hs_bindgen_9cce970e9842407b
-  :: PtrConst.PtrConst BG.Void
-  -> PtrConst.PtrConst BG.Void
-  -> HsBindgen.Runtime.LibC.CSize
-  -> HsBindgen.Runtime.LibC.CSize
-  -> SDL_CompareCallback_r
-  -> BG.Ptr BG.Void
-  -> IO (BG.Ptr BG.Void)
-hs_bindgen_9cce970e9842407b =
-  BG.fromFFIType hs_bindgen_9cce970e9842407b_base
-
--- | Perform a binary search on a previously sorted array, passing a userdata pointer to the compare function.
---
---     For example:
---
---     @
---     typedef enum {
---         sort_increasing,
---         sort_decreasing,
---     } sort_method;
---
---     typedef struct {
---         int key;
---         const char *string;
---     } data;
---
---     int SDLCALL compare(const void *userdata, const void *a, const void *b)
---     {
---         sort_method method = (sort_method)(uintptr_t)userdata;
---         const data *A = (const data *)a;
---         const data *B = (const data *)b;
---
---         if (A->key \< B->key) {
---             return (method == sort_increasing) ? -1 : 1;
---         } else if (B->key \< A->key) {
---             return (method == sort_increasing) ? 1 : -1;
---         } else {
---             return 0;
---         }
---     }
---
---     data values[] = {
---         { 1, \"first\" }, { 2, \"second\" }, { 3, \"third\" }
---     };
---     data key = { 2, NULL };
---
---     data *result = SDL_bsearch_r(&key, values, SDL_arraysize(values), sizeof(values[0]), compare, (const void *)(uintptr_t)sort_increasing);
---     @
---
---     [Returns]: a pointer to the matching element in the array, or NULL if not found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_bsearch', 'sDL_qsort_r'
---
---     [C declaration]: @SDL_bsearch_r@, defined at @SDL3\/SDL_stdinc.h 2109:36@
-sDL_bsearch_r
-  :: PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@key@]: a pointer to a key equal to the element being searched for.
-  -> PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@base@]: a pointer to the start of the array.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@nmemb@]: the number of elements in the array.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@size@]: the size of the elements in the array.
-  -> SDL_CompareCallback_r
-  -- ^
-  --
-  --           [@compare@]: a function used to compare elements in the array.
-  -> BG.Ptr BG.Void
-  -- ^
-  --
-  --           [@userdata@]: a pointer to pass to the compare function.
-  -> IO (BG.Ptr BG.Void)
-sDL_bsearch_r = hs_bindgen_9cce970e9842407b
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_abs@
-foreign import ccall safe "hs_bindgen_3b7f43f8c476ee06"
-  hs_bindgen_3b7f43f8c476ee06_base
-    :: BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_abs@
-hs_bindgen_3b7f43f8c476ee06
-  :: BG.CInt
-  -> IO BG.CInt
-hs_bindgen_3b7f43f8c476ee06 =
-  BG.fromFFIType hs_bindgen_3b7f43f8c476ee06_base
-
--- | Compute the absolute value of @x@.
---
---     [Returns]: the absolute value of x.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_abs@, defined at @SDL3\/SDL_stdinc.h 2121:33@
-sDL_abs
-  :: BG.CInt
-  -- ^
-  --
-  --           [@x@]: an integer value.
-  -> IO BG.CInt
-sDL_abs = hs_bindgen_3b7f43f8c476ee06
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isalpha@
-foreign import ccall safe "hs_bindgen_9a00314812b7b060"
-  hs_bindgen_9a00314812b7b060_base
-    :: BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isalpha@
-hs_bindgen_9a00314812b7b060
-  :: BG.CInt
-  -> IO BG.CInt
-hs_bindgen_9a00314812b7b060 =
-  BG.fromFFIType hs_bindgen_9a00314812b7b060_base
-
--- | Query if a character is alphabetic (a letter).
---
---     __WARNING__: Regardless of system locale, this will only treat ASCII values for English \'a-z\' and \'A-Z\' as true.
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_isalpha@, defined at @SDL3\/SDL_stdinc.h 2196:33@
-sDL_isalpha
-  :: BG.CInt
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.CInt
-sDL_isalpha = hs_bindgen_9a00314812b7b060
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isalnum@
-foreign import ccall safe "hs_bindgen_f2e3b47d308f6330"
-  hs_bindgen_f2e3b47d308f6330_base
-    :: BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isalnum@
-hs_bindgen_f2e3b47d308f6330
-  :: BG.CInt
-  -> IO BG.CInt
-hs_bindgen_f2e3b47d308f6330 =
-  BG.fromFFIType hs_bindgen_f2e3b47d308f6330_base
-
--- | Query if a character is alphabetic (a letter) or a number.
---
---     __WARNING__: Regardless of system locale, this will only treat ASCII values for English \'a-z\', \'A-Z\', and \'0-9\' as true.
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_isalnum@, defined at @SDL3\/SDL_stdinc.h 2211:33@
-sDL_isalnum
-  :: BG.CInt
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.CInt
-sDL_isalnum = hs_bindgen_f2e3b47d308f6330
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isblank@
-foreign import ccall safe "hs_bindgen_94e1edfbd7c1b6fd"
-  hs_bindgen_94e1edfbd7c1b6fd_base
-    :: BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isblank@
-hs_bindgen_94e1edfbd7c1b6fd
-  :: BG.CInt
-  -> IO BG.CInt
-hs_bindgen_94e1edfbd7c1b6fd =
-  BG.fromFFIType hs_bindgen_94e1edfbd7c1b6fd_base
-
--- | Report if a character is blank (a space or tab).
---
---     __WARNING__: Regardless of system locale, this will only treat ASCII values 0x20 (space) or 0x9 (tab) as true.
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_isblank@, defined at @SDL3\/SDL_stdinc.h 2226:33@
-sDL_isblank
-  :: BG.CInt
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.CInt
-sDL_isblank = hs_bindgen_94e1edfbd7c1b6fd
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_iscntrl@
-foreign import ccall safe "hs_bindgen_f4e70f258fc0cd31"
-  hs_bindgen_f4e70f258fc0cd31_base
-    :: BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_iscntrl@
-hs_bindgen_f4e70f258fc0cd31
-  :: BG.CInt
-  -> IO BG.CInt
-hs_bindgen_f4e70f258fc0cd31 =
-  BG.fromFFIType hs_bindgen_f4e70f258fc0cd31_base
-
--- | Report if a character is a control character.
---
---     __WARNING__: Regardless of system locale, this will only treat ASCII values 0 through 0x1F, and 0x7F, as true.
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_iscntrl@, defined at @SDL3\/SDL_stdinc.h 2241:33@
-sDL_iscntrl
-  :: BG.CInt
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.CInt
-sDL_iscntrl = hs_bindgen_f4e70f258fc0cd31
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isdigit@
-foreign import ccall safe "hs_bindgen_a92ce90ddf0e012f"
-  hs_bindgen_a92ce90ddf0e012f_base
-    :: BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isdigit@
-hs_bindgen_a92ce90ddf0e012f
-  :: BG.CInt
-  -> IO BG.CInt
-hs_bindgen_a92ce90ddf0e012f =
-  BG.fromFFIType hs_bindgen_a92ce90ddf0e012f_base
-
--- | Report if a character is a numeric digit.
---
---     __WARNING__: Regardless of system locale, this will only treat ASCII values \'0\' (0x30) through \'9\' (0x39), as true.
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_isdigit@, defined at @SDL3\/SDL_stdinc.h 2256:33@
-sDL_isdigit
-  :: BG.CInt
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.CInt
-sDL_isdigit = hs_bindgen_a92ce90ddf0e012f
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isxdigit@
-foreign import ccall safe "hs_bindgen_c2fe92c140d522e3"
-  hs_bindgen_c2fe92c140d522e3_base
-    :: BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isxdigit@
-hs_bindgen_c2fe92c140d522e3
-  :: BG.CInt
-  -> IO BG.CInt
-hs_bindgen_c2fe92c140d522e3 =
-  BG.fromFFIType hs_bindgen_c2fe92c140d522e3_base
-
--- | Report if a character is a hexadecimal digit.
---
---     __WARNING__: Regardless of system locale, this will only treat ASCII values \'A\' through \'F\', \'a\' through \'f\', and \'0\' through \'9\', as true.
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_isxdigit@, defined at @SDL3\/SDL_stdinc.h 2271:33@
-sDL_isxdigit
-  :: BG.CInt
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.CInt
-sDL_isxdigit = hs_bindgen_c2fe92c140d522e3
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_ispunct@
-foreign import ccall safe "hs_bindgen_abdf0b7703d7ef7b"
-  hs_bindgen_abdf0b7703d7ef7b_base
-    :: BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_ispunct@
-hs_bindgen_abdf0b7703d7ef7b
-  :: BG.CInt
-  -> IO BG.CInt
-hs_bindgen_abdf0b7703d7ef7b =
-  BG.fromFFIType hs_bindgen_abdf0b7703d7ef7b_base
-
--- | Report if a character is a punctuation mark.
---
---     __WARNING__: Regardless of system locale, this is equivalent to @((SDL_isgraph(x)) && (!SDL_isalnum(x)))@.
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_isgraph', 'sDL_isalnum'
---
---     [C declaration]: @SDL_ispunct@, defined at @SDL3\/SDL_stdinc.h 2289:33@
-sDL_ispunct
-  :: BG.CInt
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.CInt
-sDL_ispunct = hs_bindgen_abdf0b7703d7ef7b
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isspace@
-foreign import ccall safe "hs_bindgen_b0c62a95d4008bcb"
-  hs_bindgen_b0c62a95d4008bcb_base
-    :: BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isspace@
-hs_bindgen_b0c62a95d4008bcb
-  :: BG.CInt
-  -> IO BG.CInt
-hs_bindgen_b0c62a95d4008bcb =
-  BG.fromFFIType hs_bindgen_b0c62a95d4008bcb_base
-
--- | Report if a character is whitespace.
---
---     __WARNING__: Regardless of system locale, this will only treat the following ASCII values as true:
---
---     * space (0x20)
---
---     * tab (0x09)
---
---     * newline (0x0A)
---
---     * vertical tab (0x0B)
---
---     * form feed (0x0C)
---
---     * return (0x0D)
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_isspace@, defined at @SDL3\/SDL_stdinc.h 2311:33@
-sDL_isspace
-  :: BG.CInt
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.CInt
-sDL_isspace = hs_bindgen_b0c62a95d4008bcb
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isupper@
-foreign import ccall safe "hs_bindgen_dbe8ad5b2415f52b"
-  hs_bindgen_dbe8ad5b2415f52b_base
-    :: BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isupper@
-hs_bindgen_dbe8ad5b2415f52b
-  :: BG.CInt
-  -> IO BG.CInt
-hs_bindgen_dbe8ad5b2415f52b =
-  BG.fromFFIType hs_bindgen_dbe8ad5b2415f52b_base
-
--- | Report if a character is upper case.
---
---     __WARNING__: Regardless of system locale, this will only treat ASCII values \'A\' through \'Z\' as true.
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_isupper@, defined at @SDL3\/SDL_stdinc.h 2326:33@
-sDL_isupper
-  :: BG.CInt
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.CInt
-sDL_isupper = hs_bindgen_dbe8ad5b2415f52b
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_islower@
-foreign import ccall safe "hs_bindgen_4f1c801e2ffe74d9"
-  hs_bindgen_4f1c801e2ffe74d9_base
-    :: BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_islower@
-hs_bindgen_4f1c801e2ffe74d9
-  :: BG.CInt
-  -> IO BG.CInt
-hs_bindgen_4f1c801e2ffe74d9 =
-  BG.fromFFIType hs_bindgen_4f1c801e2ffe74d9_base
-
--- | Report if a character is lower case.
---
---     __WARNING__: Regardless of system locale, this will only treat ASCII values \'a\' through \'z\' as true.
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_islower@, defined at @SDL3\/SDL_stdinc.h 2341:33@
-sDL_islower
-  :: BG.CInt
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.CInt
-sDL_islower = hs_bindgen_4f1c801e2ffe74d9
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isprint@
-foreign import ccall safe "hs_bindgen_1de66809f06ec2cf"
-  hs_bindgen_1de66809f06ec2cf_base
-    :: BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isprint@
-hs_bindgen_1de66809f06ec2cf
-  :: BG.CInt
-  -> IO BG.CInt
-hs_bindgen_1de66809f06ec2cf =
-  BG.fromFFIType hs_bindgen_1de66809f06ec2cf_base
-
--- | Report if a character is \"printable\".
---
---     Be advised that \"printable\" has a definition that goes back to text terminals from the dawn of computing, making this a sort of special case function that is not suitable for Unicode (or most any) text management.
---
---     __WARNING__: Regardless of system locale, this will only treat ASCII values \' \' (0x20) through \'~\' (0x7E) as true.
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_isprint@, defined at @SDL3\/SDL_stdinc.h 2360:33@
-sDL_isprint
-  :: BG.CInt
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.CInt
-sDL_isprint = hs_bindgen_1de66809f06ec2cf
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isgraph@
-foreign import ccall safe "hs_bindgen_7cecb757f16ce85d"
-  hs_bindgen_7cecb757f16ce85d_base
-    :: BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isgraph@
-hs_bindgen_7cecb757f16ce85d
-  :: BG.CInt
-  -> IO BG.CInt
-hs_bindgen_7cecb757f16ce85d =
-  BG.fromFFIType hs_bindgen_7cecb757f16ce85d_base
-
--- | Report if a character is any \"printable\" except space.
---
---     Be advised that \"printable\" has a definition that goes back to text terminals from the dawn of computing, making this a sort of special case function that is not suitable for Unicode (or most any) text management.
---
---     __WARNING__: Regardless of system locale, this is equivalent to @(SDL_isprint(x)) && ((x) != \' \')@.
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_isprint'
---
---     [C declaration]: @SDL_isgraph@, defined at @SDL3\/SDL_stdinc.h 2381:33@
-sDL_isgraph
-  :: BG.CInt
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.CInt
-sDL_isgraph = hs_bindgen_7cecb757f16ce85d
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_toupper@
-foreign import ccall safe "hs_bindgen_799fe4e6fc639bc0"
-  hs_bindgen_799fe4e6fc639bc0_base
-    :: BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_toupper@
-hs_bindgen_799fe4e6fc639bc0
-  :: BG.CInt
-  -> IO BG.CInt
-hs_bindgen_799fe4e6fc639bc0 =
-  BG.fromFFIType hs_bindgen_799fe4e6fc639bc0_base
-
--- | Convert low-ASCII English letters to uppercase.
---
---     __WARNING__: Regardless of system locale, this will only convert ASCII values \'a\' through \'z\' to uppercase.
---
---     This function returns the uppercase equivalent of @x@. If a character cannot be converted, or is already uppercase, this function returns @x@.
---
---     [Returns]: capitalized version of x, or x if no conversion available.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_toupper@, defined at @SDL3\/SDL_stdinc.h 2399:33@
-sDL_toupper
-  :: BG.CInt
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.CInt
-sDL_toupper = hs_bindgen_799fe4e6fc639bc0
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_tolower@
-foreign import ccall safe "hs_bindgen_af600e5bb74004b2"
-  hs_bindgen_af600e5bb74004b2_base
-    :: BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_tolower@
-hs_bindgen_af600e5bb74004b2
-  :: BG.CInt
-  -> IO BG.CInt
-hs_bindgen_af600e5bb74004b2 =
-  BG.fromFFIType hs_bindgen_af600e5bb74004b2_base
-
--- | Convert low-ASCII English letters to lowercase.
---
---     __WARNING__: Regardless of system locale, this will only convert ASCII values \'A\' through \'Z\' to lowercase.
---
---     This function returns the lowercase equivalent of @x@. If a character cannot be converted, or is already lowercase, this function returns @x@.
---
---     [Returns]: lowercase version of x, or x if no conversion available.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_tolower@, defined at @SDL3\/SDL_stdinc.h 2417:33@
-sDL_tolower
-  :: BG.CInt
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.CInt
-sDL_tolower = hs_bindgen_af600e5bb74004b2
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_crc16@
-foreign import ccall safe "hs_bindgen_8b9d7fd6e4874342"
-  hs_bindgen_8b9d7fd6e4874342_base
-    :: BG.Word16
-    -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word16
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_crc16@
-hs_bindgen_8b9d7fd6e4874342
-  :: Uint16
-  -> PtrConst.PtrConst BG.Void
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO Uint16
-hs_bindgen_8b9d7fd6e4874342 =
-  BG.fromFFIType hs_bindgen_8b9d7fd6e4874342_base
-
--- | Calculate a CRC-16 value.
---
---     [https:\/\/en.wikipedia.org\/wiki\/Cyclic_redundancy_check](https://en.wikipedia.org/wiki/Cyclic_redundancy_check)
---
---     This function can be called multiple times, to stream data to be checksummed in blocks. Each call must provide the previous CRC-16 return value to be updated with the next block. The first call to this function for a set of blocks should pass in a zero CRC value.
---
---     [Returns]: a CRC-16 checksum value of all blocks in the data set.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_crc16@, defined at @SDL3\/SDL_stdinc.h 2438:36@
-sDL_crc16
-  :: Uint16
-  -- ^
-  --
-  --           [@crc@]: the current checksum for this data set, or 0 for a new data set.
-  -> PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@data@]: a new block of data to add to the checksum.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@len@]: the size, in bytes, of the new block of data.
-  -> IO Uint16
-sDL_crc16 = hs_bindgen_8b9d7fd6e4874342
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_crc32@
-foreign import ccall safe "hs_bindgen_20e1e20820f9c17a"
-  hs_bindgen_20e1e20820f9c17a_base
-    :: BG.Word32
-    -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_crc32@
-hs_bindgen_20e1e20820f9c17a
-  :: Uint32
-  -> PtrConst.PtrConst BG.Void
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO Uint32
-hs_bindgen_20e1e20820f9c17a =
-  BG.fromFFIType hs_bindgen_20e1e20820f9c17a_base
-
--- | Calculate a CRC-32 value.
---
---     [https:\/\/en.wikipedia.org\/wiki\/Cyclic_redundancy_check](https://en.wikipedia.org/wiki/Cyclic_redundancy_check)
---
---     This function can be called multiple times, to stream data to be checksummed in blocks. Each call must provide the previous CRC-32 return value to be updated with the next block. The first call to this function for a set of blocks should pass in a zero CRC value.
---
---     [Returns]: a CRC-32 checksum value of all blocks in the data set.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_crc32@, defined at @SDL3\/SDL_stdinc.h 2459:36@
-sDL_crc32
-  :: Uint32
-  -- ^
-  --
-  --           [@crc@]: the current checksum for this data set, or 0 for a new data set.
-  -> PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@data@]: a new block of data to add to the checksum.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@len@]: the size, in bytes, of the new block of data.
-  -> IO Uint32
-sDL_crc32 = hs_bindgen_20e1e20820f9c17a
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_murmur3_32@
-foreign import ccall safe "hs_bindgen_e26385eb1b169df1"
-  hs_bindgen_e26385eb1b169df1_base
-    :: BG.Ptr BG.Void
-    -> BG.Word64
-    -> BG.Word32
-    -> IO BG.Word32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_murmur3_32@
-hs_bindgen_e26385eb1b169df1
-  :: PtrConst.PtrConst BG.Void
-  -> HsBindgen.Runtime.LibC.CSize
-  -> Uint32
-  -> IO Uint32
-hs_bindgen_e26385eb1b169df1 =
-  BG.fromFFIType hs_bindgen_e26385eb1b169df1_base
-
--- | Calculate a 32-bit MurmurHash3 value for a block of data.
---
---     [https:\/\/en.wikipedia.org\/wiki\/MurmurHash](https://en.wikipedia.org/wiki/MurmurHash)
---
---     A seed may be specified, which changes the final results consistently, but this does not work like SDL_crc16 and SDL_crc32: you can\'t feed a previous result from this function back into itself as the next seed value to calculate a hash in chunks; it won\'t produce the same hash as it would if the same data was provided in a single call.
---
---     If you aren\'t sure what to provide for a seed, zero is fine. Murmur3 is not cryptographically secure, so it shouldn\'t be used for hashing top-secret data.
---
---     [Returns]: a Murmur3 32-bit hash value.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_murmur3_32@, defined at @SDL3\/SDL_stdinc.h 2485:36@
-sDL_murmur3_32
-  :: PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@data@]: the data to be hashed.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@len@]: the size of data, in bytes.
-  -> Uint32
-  -- ^
-  --
-  --           [@seed@]: a value that alters the final hash value.
-  -> IO Uint32
-sDL_murmur3_32 = hs_bindgen_e26385eb1b169df1
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_memset4@
-foreign import ccall safe "hs_bindgen_39f43c1520a45f57"
-  hs_bindgen_39f43c1520a45f57_base
-    :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Word64
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_memset4@
-hs_bindgen_39f43c1520a45f57
-  :: BG.Ptr BG.Void
-  -> Uint32
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO (BG.Ptr BG.Void)
-hs_bindgen_39f43c1520a45f57 =
-  BG.fromFFIType hs_bindgen_39f43c1520a45f57_base
-
--- | Initialize all 32-bit words of buffer of memory to a specific value.
---
---     This function will set a buffer of @dwords@ 'Uint32' values, pointed to by @dst@, to the value specified in @val@.
---
---     Unlike SDL_memset, this sets 32-bit values, not bytes, so it\'s not limited to a range of 0-255.
---
---     [Returns]: @dst@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_memset4@, defined at @SDL3\/SDL_stdinc.h 2609:36@
-sDL_memset4
-  :: BG.Ptr BG.Void
-  -- ^
-  --
-  --           [@dst@]: the destination memory region. Must not be NULL.
-  -> Uint32
-  -- ^
-  --
-  --           [@val@]: the 'Uint32' value to set.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@dwords@]: the number of 'Uint32' values to set in @dst@.
-  -> IO (BG.Ptr BG.Void)
-sDL_memset4 = hs_bindgen_39f43c1520a45f57
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_memcmp@
-foreign import ccall safe "hs_bindgen_1386d72429f6b9cb"
-  hs_bindgen_1386d72429f6b9cb_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_memcmp@
-hs_bindgen_1386d72429f6b9cb
-  :: PtrConst.PtrConst BG.Void
-  -> PtrConst.PtrConst BG.Void
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO BG.CInt
-hs_bindgen_1386d72429f6b9cb =
-  BG.fromFFIType hs_bindgen_1386d72429f6b9cb_base
-
--- | Compare two buffers of memory.
---
---     [Returns]: less than zero if s1 is \"less than\" s2, greater than zero if s1 is \"greater than\" s2, and zero if the buffers match exactly for @len@ bytes.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_memcmp@, defined at @SDL3\/SDL_stdinc.h 2691:33@
-sDL_memcmp
-  :: PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@s1@]: the first buffer to compare. NULL is not permitted!
-  -> PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@s2@]: the second buffer to compare. NULL is not permitted!
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@len@]: the number of bytes to compare between the buffers.
-  -> IO BG.CInt
-sDL_memcmp = hs_bindgen_1386d72429f6b9cb
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcslen@
-foreign import ccall safe "hs_bindgen_e6c3253fb4b72427"
-  hs_bindgen_e6c3253fb4b72427_base
-    :: BG.Ptr BG.Void
-    -> IO BG.Word64
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcslen@
-hs_bindgen_e6c3253fb4b72427
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -> IO HsBindgen.Runtime.LibC.CSize
-hs_bindgen_e6c3253fb4b72427 =
-  BG.fromFFIType hs_bindgen_e6c3253fb4b72427_base
-
--- | This works exactly like wcslen() but doesn\'t require access to a C runtime.
---
---     Counts the number of wchar_t values in @wstr@, excluding the null terminator.
---
---     Like SDL_strlen only counts bytes and not codepoints in a UTF-8 string, this counts wchar_t values in a string, even if the string\'s encoding is of variable width, like UTF-16.
---
---     Also be aware that wchar_t is different sizes on different platforms (4 bytes on Linux, 2 on Windows, etc).
---
---     [Returns]: the length (in wchar_t values, excluding the null terminator) of @wstr@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_wcsnlen', 'sDL_utf8strlen', 'sDL_utf8strnlen'
---
---     [C declaration]: @SDL_wcslen@, defined at @SDL3\/SDL_stdinc.h 2718:36@
-sDL_wcslen
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@wstr@]: The null-terminated wide string to read. Must not be NULL.
-  -> IO HsBindgen.Runtime.LibC.CSize
-sDL_wcslen = hs_bindgen_e6c3253fb4b72427
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcsnlen@
-foreign import ccall safe "hs_bindgen_da04478d43043c90"
-  hs_bindgen_da04478d43043c90_base
-    :: BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word64
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcsnlen@
-hs_bindgen_da04478d43043c90
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO HsBindgen.Runtime.LibC.CSize
-hs_bindgen_da04478d43043c90 =
-  BG.fromFFIType hs_bindgen_da04478d43043c90_base
-
--- | This works exactly like wcsnlen() but doesn\'t require access to a C runtime.
---
---     Counts up to a maximum of @maxlen@ wchar_t values in @wstr@, excluding the null terminator.
---
---     Like SDL_strnlen only counts bytes and not codepoints in a UTF-8 string, this counts wchar_t values in a string, even if the string\'s encoding is of variable width, like UTF-16.
---
---     Also be aware that wchar_t is different sizes on different platforms (4 bytes on Linux, 2 on Windows, etc).
---
---     Also, @maxlen@ is a count of wide characters, not bytes!
---
---     [Returns]: the length (in wide characters, excluding the null terminator) of @wstr@ but never more than @maxlen@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_wcslen', 'sDL_utf8strlen', 'sDL_utf8strnlen'
---
---     [C declaration]: @SDL_wcsnlen@, defined at @SDL3\/SDL_stdinc.h 2749:36@
-sDL_wcsnlen
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@wstr@]: The null-terminated wide string to read. Must not be NULL.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@maxlen@]: The maximum amount of wide characters to count.
-  -> IO HsBindgen.Runtime.LibC.CSize
-sDL_wcsnlen = hs_bindgen_da04478d43043c90
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcslcpy@
-foreign import ccall safe "hs_bindgen_82a9094f0d522cdf"
-  hs_bindgen_82a9094f0d522cdf_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word64
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcslcpy@
-hs_bindgen_82a9094f0d522cdf
-  :: BG.Ptr HsBindgen.Runtime.LibC.CWchar
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO HsBindgen.Runtime.LibC.CSize
-hs_bindgen_82a9094f0d522cdf =
-  BG.fromFFIType hs_bindgen_82a9094f0d522cdf_base
-
--- | Copy a wide string.
---
---     This function copies @maxlen@ - 1 wide characters from @src@ to @dst@, then appends a null terminator.
---
---     @src@ and @dst@ must not overlap.
---
---     If @maxlen@ is 0, no wide characters are copied and no null terminator is written.
---
---     [Returns]: the length (in wide characters, excluding the null terminator) of @src@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_wcslcat'
---
---     [C declaration]: @SDL_wcslcpy@, defined at @SDL3\/SDL_stdinc.h 2776:36@
-sDL_wcslcpy
-  :: BG.Ptr HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@dst@]: The destination buffer. Must not be NULL, and must not overlap with @src@.
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@src@]: The null-terminated wide string to copy. Must not be NULL, and must not overlap with @dst@.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@maxlen@]: The length (in wide characters) of the destination buffer.
-  -> IO HsBindgen.Runtime.LibC.CSize
-sDL_wcslcpy = hs_bindgen_82a9094f0d522cdf
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcslcat@
-foreign import ccall safe "hs_bindgen_c85ef13eabbd96dd"
-  hs_bindgen_c85ef13eabbd96dd_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word64
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcslcat@
-hs_bindgen_c85ef13eabbd96dd
-  :: BG.Ptr HsBindgen.Runtime.LibC.CWchar
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO HsBindgen.Runtime.LibC.CSize
-hs_bindgen_c85ef13eabbd96dd =
-  BG.fromFFIType hs_bindgen_c85ef13eabbd96dd_base
-
--- | Concatenate wide strings.
---
---     This function appends up to @maxlen@ - SDL_wcslen(dst) - 1 wide characters from @src@ to the end of the wide string in @dst@, then appends a null terminator.
---
---     @src@ and @dst@ must not overlap.
---
---     If @maxlen@ - SDL_wcslen(dst) - 1 is less than or equal to 0, then @dst@ is unmodified.
---
---     [Returns]: the length (in wide characters, excluding the null terminator) of the string in @dst@ plus the length of @src@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_wcslcpy'
---
---     [C declaration]: @SDL_wcslcat@, defined at @SDL3\/SDL_stdinc.h 2805:36@
-sDL_wcslcat
-  :: BG.Ptr HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@dst@]: The destination buffer already containing the first null-terminated wide string. Must not be NULL and must not overlap with @src@.
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@src@]: The second null-terminated wide string. Must not be NULL, and must not overlap with @dst@.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@maxlen@]: The length (in wide characters) of the destination buffer.
-  -> IO HsBindgen.Runtime.LibC.CSize
-sDL_wcslcat = hs_bindgen_c85ef13eabbd96dd
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcsdup@
-foreign import ccall safe "hs_bindgen_9a5bf9db9506735d"
-  hs_bindgen_9a5bf9db9506735d_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcsdup@
-hs_bindgen_9a5bf9db9506735d
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -> IO (BG.Ptr HsBindgen.Runtime.LibC.CWchar)
-hs_bindgen_9a5bf9db9506735d =
-  BG.fromFFIType hs_bindgen_9a5bf9db9506735d_base
-
--- | Allocate a copy of a wide string.
---
---     This allocates enough space for a null-terminated copy of @wstr@, using SDL_malloc, and then makes a copy of the string into this space.
---
---     The returned string is owned by the caller, and should be passed to SDL_free when no longer needed.
---
---     [Returns]: a pointer to the newly-allocated wide string.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_wcsdup@, defined at @SDL3\/SDL_stdinc.h 2823:39@
-sDL_wcsdup
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@wstr@]: the string to copy.
-  -> IO (BG.Ptr HsBindgen.Runtime.LibC.CWchar)
-sDL_wcsdup = hs_bindgen_9a5bf9db9506735d
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcsstr@
-foreign import ccall safe "hs_bindgen_8807485ad58a476c"
-  hs_bindgen_8807485ad58a476c_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcsstr@
-hs_bindgen_8807485ad58a476c
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -> IO (BG.Ptr HsBindgen.Runtime.LibC.CWchar)
-hs_bindgen_8807485ad58a476c =
-  BG.fromFFIType hs_bindgen_8807485ad58a476c_base
-
--- | Search a wide string for the first instance of a specific substring.
---
---     The search ends once it finds the requested substring, or a null terminator byte to end the string.
---
---     Note that this looks for strings of /wide characters/, not /codepoints/, so it\'s legal to search for malformed and incomplete UTF-16 sequences.
---
---     [Returns]: a pointer to the first instance of @needle@ in the string, or NULL if not found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_wcsstr@, defined at @SDL3\/SDL_stdinc.h 2843:39@
-sDL_wcsstr
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@haystack@]: the wide string to search. Must not be NULL.
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@needle@]: the wide string to search for. Must not be NULL.
-  -> IO (BG.Ptr HsBindgen.Runtime.LibC.CWchar)
-sDL_wcsstr = hs_bindgen_8807485ad58a476c
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcsnstr@
-foreign import ccall safe "hs_bindgen_0f95369992d6076d"
-  hs_bindgen_0f95369992d6076d_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcsnstr@
-hs_bindgen_0f95369992d6076d
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO (BG.Ptr HsBindgen.Runtime.LibC.CWchar)
-hs_bindgen_0f95369992d6076d =
-  BG.fromFFIType hs_bindgen_0f95369992d6076d_base
-
--- | Search a wide string, up to n wide chars, for the first instance of a specific substring.
---
---     The search ends once it finds the requested substring, or a null terminator value to end the string, or @maxlen@ wide character have been examined. It is possible to use this function on a wide string without a null terminator.
---
---     Note that this looks for strings of /wide characters/, not /codepoints/, so it\'s legal to search for malformed and incomplete UTF-16 sequences.
---
---     [Returns]: a pointer to the first instance of @needle@ in the string, or NULL if not found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_wcsnstr@, defined at @SDL3\/SDL_stdinc.h 2868:39@
-sDL_wcsnstr
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@haystack@]: the wide string to search. Must not be NULL.
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@needle@]: the wide string to search for. Must not be NULL.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@maxlen@]: the maximum number of wide characters to search in @haystack@.
-  -> IO (BG.Ptr HsBindgen.Runtime.LibC.CWchar)
-sDL_wcsnstr = hs_bindgen_0f95369992d6076d
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcscmp@
-foreign import ccall safe "hs_bindgen_a56659eded1129eb"
-  hs_bindgen_a56659eded1129eb_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcscmp@
-hs_bindgen_a56659eded1129eb
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -> IO BG.CInt
-hs_bindgen_a56659eded1129eb =
-  BG.fromFFIType hs_bindgen_a56659eded1129eb_base
-
--- | Compare two null-terminated wide strings.
---
---     This only compares wchar_t values until it hits a null-terminating character; it does not care if the string is well-formed UTF-16 (or UTF-32, depending on your platform\'s wchar_t size), or uses valid Unicode values.
---
---     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_wcscmp@, defined at @SDL3\/SDL_stdinc.h 2887:33@
-sDL_wcscmp
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@str1@]: the first string to compare. NULL is not permitted!
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@str2@]: the second string to compare. NULL is not permitted!
-  -> IO BG.CInt
-sDL_wcscmp = hs_bindgen_a56659eded1129eb
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcsncmp@
-foreign import ccall safe "hs_bindgen_f249ec61a8d5978a"
-  hs_bindgen_f249ec61a8d5978a_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcsncmp@
-hs_bindgen_f249ec61a8d5978a
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO BG.CInt
-hs_bindgen_f249ec61a8d5978a =
-  BG.fromFFIType hs_bindgen_f249ec61a8d5978a_base
-
--- | Compare two wide strings up to a number of wchar_t values.
---
---     This only compares wchar_t values; it does not care if the string is well-formed UTF-16 (or UTF-32, depending on your platform\'s wchar_t size), or uses valid Unicode values.
---
---     Note that while this function is intended to be used with UTF-16 (or UTF-32, depending on your platform\'s definition of wchar_t), it is comparing raw wchar_t values and not Unicode codepoints: @maxlen@ specifies a wchar_t limit! If the limit lands in the middle of a multi-wchar UTF-16 sequence, it will only compare a portion of the final character.
---
---     @maxlen@ specifies a maximum number of wchar_t to compare; if the strings match to this number of wide chars (or both have matched to a null-terminator character before this count), they will be considered equal.
---
---     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_wcsncmp@, defined at @SDL3\/SDL_stdinc.h 2918:33@
-sDL_wcsncmp
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@str1@]: the first string to compare. NULL is not permitted!
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@str2@]: the second string to compare. NULL is not permitted!
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@maxlen@]: the maximum number of wchar_t to compare.
-  -> IO BG.CInt
-sDL_wcsncmp = hs_bindgen_f249ec61a8d5978a
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcscasecmp@
-foreign import ccall safe "hs_bindgen_0e487d7f98097b0d"
-  hs_bindgen_0e487d7f98097b0d_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcscasecmp@
-hs_bindgen_0e487d7f98097b0d
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -> IO BG.CInt
-hs_bindgen_0e487d7f98097b0d =
-  BG.fromFFIType hs_bindgen_0e487d7f98097b0d_base
-
--- | Compare two null-terminated wide strings, case-insensitively.
---
---     This will work with Unicode strings, using a technique called \"case-folding\" to handle the vast majority of case-sensitive human languages regardless of system locale. It can deal with expanding values: a German Eszett character can compare against two ASCII \'s\' chars and be considered a match, for example. A notable exception: it does not handle the Turkish \'i\' character; human language is complicated!
---
---     Depending on your platform, \"wchar_t\" might be 2 bytes, and expected to be UTF-16 encoded (like Windows), or 4 bytes in UTF-32 format. Since this handles Unicode, it expects the string to be well-formed and not a null-terminated string of arbitrary bytes. Characters that are not valid UTF-16 (or UTF-32) are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), which is to say two strings of random bits may turn out to match if they convert to the same amount of replacement characters.
---
---     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_wcscasecmp@, defined at @SDL3\/SDL_stdinc.h 2948:33@
-sDL_wcscasecmp
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@str1@]: the first string to compare. NULL is not permitted!
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@str2@]: the second string to compare. NULL is not permitted!
-  -> IO BG.CInt
-sDL_wcscasecmp = hs_bindgen_0e487d7f98097b0d
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcsncasecmp@
-foreign import ccall safe "hs_bindgen_9a4ad44438974867"
-  hs_bindgen_9a4ad44438974867_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcsncasecmp@
-hs_bindgen_9a4ad44438974867
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO BG.CInt
-hs_bindgen_9a4ad44438974867 =
-  BG.fromFFIType hs_bindgen_9a4ad44438974867_base
-
--- | Compare two wide strings, case-insensitively, up to a number of wchar_t.
---
---     This will work with Unicode strings, using a technique called \"case-folding\" to handle the vast majority of case-sensitive human languages regardless of system locale. It can deal with expanding values: a German Eszett character can compare against two ASCII \'s\' chars and be considered a match, for example. A notable exception: it does not handle the Turkish \'i\' character; human language is complicated!
---
---     Depending on your platform, \"wchar_t\" might be 2 bytes, and expected to be UTF-16 encoded (like Windows), or 4 bytes in UTF-32 format. Since this handles Unicode, it expects the string to be well-formed and not a null-terminated string of arbitrary bytes. Characters that are not valid UTF-16 (or UTF-32) are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), which is to say two strings of random bits may turn out to match if they convert to the same amount of replacement characters.
---
---     Note that while this function might deal with variable-sized characters, @maxlen@ specifies a /wchar/ limit! If the limit lands in the middle of a multi-byte UTF-16 sequence, it may convert a portion of the final character to one or more Unicode character U+FFFD (REPLACEMENT CHARACTER) so as not to overflow a buffer.
---
---     @maxlen@ specifies a maximum number of wchar_t values to compare; if the strings match to this number of wchar_t (or both have matched to a null-terminator character before this number of bytes), they will be considered equal.
---
---     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_wcsncasecmp@, defined at @SDL3\/SDL_stdinc.h 2990:33@
-sDL_wcsncasecmp
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@str1@]: the first string to compare. NULL is not permitted!
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@str2@]: the second string to compare. NULL is not permitted!
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@maxlen@]: the maximum number of wchar_t values to compare.
-  -> IO BG.CInt
-sDL_wcsncasecmp = hs_bindgen_9a4ad44438974867
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strlen@
-foreign import ccall safe "hs_bindgen_574becd3bb71e7b9"
-  hs_bindgen_574becd3bb71e7b9_base
-    :: BG.Ptr BG.Void
-    -> IO BG.Word64
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strlen@
-hs_bindgen_574becd3bb71e7b9
-  :: PtrConst.PtrConst BG.CChar
-  -> IO HsBindgen.Runtime.LibC.CSize
-hs_bindgen_574becd3bb71e7b9 =
-  BG.fromFFIType hs_bindgen_574becd3bb71e7b9_base
-
--- | This works exactly like strlen() but doesn\'t require access to a C runtime.
---
---     Counts the bytes in @str@, excluding the null terminator.
---
---     If you need the length of a UTF-8 string, consider using @SDL_utf8strlen()@.
---
---     [Returns]: the length (in bytes, excluding the null terminator) of @src@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_strnlen', 'sDL_utf8strlen', 'sDL_utf8strnlen'
---
---     [C declaration]: @SDL_strlen@, defined at @SDL3\/SDL_stdinc.h 3037:36@
-sDL_strlen
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: The null-terminated string to read. Must not be NULL.
-  -> IO HsBindgen.Runtime.LibC.CSize
-sDL_strlen = hs_bindgen_574becd3bb71e7b9
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strnlen@
-foreign import ccall safe "hs_bindgen_9232c1cbf65df9e5"
-  hs_bindgen_9232c1cbf65df9e5_base
-    :: BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word64
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strnlen@
-hs_bindgen_9232c1cbf65df9e5
-  :: PtrConst.PtrConst BG.CChar
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO HsBindgen.Runtime.LibC.CSize
-hs_bindgen_9232c1cbf65df9e5 =
-  BG.fromFFIType hs_bindgen_9232c1cbf65df9e5_base
-
--- | This works exactly like strnlen() but doesn\'t require access to a C runtime.
---
---     Counts up to a maximum of @maxlen@ bytes in @str@, excluding the null terminator.
---
---     If you need the length of a UTF-8 string, consider using @SDL_utf8strnlen()@.
---
---     [Returns]: the length (in bytes, excluding the null terminator) of @src@ but never more than @maxlen@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_strlen', 'sDL_utf8strlen', 'sDL_utf8strnlen'
---
---     [C declaration]: @SDL_strnlen@, defined at @SDL3\/SDL_stdinc.h 3061:36@
-sDL_strnlen
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: The null-terminated string to read. Must not be NULL.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@maxlen@]: The maximum amount of bytes to count.
-  -> IO HsBindgen.Runtime.LibC.CSize
-sDL_strnlen = hs_bindgen_9232c1cbf65df9e5
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strlcpy@
-foreign import ccall safe "hs_bindgen_1a460cf112b7fd68"
-  hs_bindgen_1a460cf112b7fd68_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word64
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strlcpy@
-hs_bindgen_1a460cf112b7fd68
-  :: BG.Ptr BG.CChar
-  -> PtrConst.PtrConst BG.CChar
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO HsBindgen.Runtime.LibC.CSize
-hs_bindgen_1a460cf112b7fd68 =
-  BG.fromFFIType hs_bindgen_1a460cf112b7fd68_base
-
--- | Copy a string.
---
---     This function copies up to @maxlen@ - 1 characters from @src@ to @dst@, then appends a null terminator.
---
---     If @maxlen@ is 0, no characters are copied and no null terminator is written.
---
---     If you want to copy an UTF-8 string but need to ensure that multi-byte sequences are not truncated, consider using @SDL_utf8strlcpy()@.
---
---     [Returns]: the length (in characters, excluding the null terminator) of @src@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_strlcat', 'sDL_utf8strlcpy'
---
---     [C declaration]: @SDL_strlcpy@, defined at @SDL3\/SDL_stdinc.h 3090:36@
-sDL_strlcpy
-  :: BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@dst@]: The destination buffer. Must not be NULL, and must not overlap with @src@.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@src@]: The null-terminated string to copy. Must not be NULL, and must not overlap with @dst@.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@maxlen@]: The length (in characters) of the destination buffer.
-  -> IO HsBindgen.Runtime.LibC.CSize
-sDL_strlcpy = hs_bindgen_1a460cf112b7fd68
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_utf8strlcpy@
-foreign import ccall safe "hs_bindgen_10b5c948dc68c882"
-  hs_bindgen_10b5c948dc68c882_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word64
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_utf8strlcpy@
-hs_bindgen_10b5c948dc68c882
-  :: BG.Ptr BG.CChar
-  -> PtrConst.PtrConst BG.CChar
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO HsBindgen.Runtime.LibC.CSize
-hs_bindgen_10b5c948dc68c882 =
-  BG.fromFFIType hs_bindgen_10b5c948dc68c882_base
-
--- | Copy an UTF-8 string.
---
---     This function copies up to @dst_bytes@ - 1 bytes from @src@ to @dst@ while also ensuring that the string written to @dst@ does not end in a truncated multi-byte sequence. Finally, it appends a null terminator.
---
---     @src@ and @dst@ must not overlap.
---
---     Note that unlike @SDL_strlcpy()@, this function returns the number of bytes written, not the length of @src@.
---
---     [Returns]: the number of bytes written, excluding the null terminator.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_strlcpy'
---
---     [C declaration]: @SDL_utf8strlcpy@, defined at @SDL3\/SDL_stdinc.h 3118:36@
-sDL_utf8strlcpy
-  :: BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@dst@]: The destination buffer. Must not be NULL, and must not overlap with @src@.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@src@]: The null-terminated UTF-8 string to copy. Must not be NULL, and must not overlap with @dst@.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@dst_bytes@]: The length (in bytes) of the destination buffer. Must not be 0.
-  -> IO HsBindgen.Runtime.LibC.CSize
-sDL_utf8strlcpy = hs_bindgen_10b5c948dc68c882
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strlcat@
-foreign import ccall safe "hs_bindgen_8132fc050b3dda62"
-  hs_bindgen_8132fc050b3dda62_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word64
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strlcat@
-hs_bindgen_8132fc050b3dda62
-  :: BG.Ptr BG.CChar
-  -> PtrConst.PtrConst BG.CChar
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO HsBindgen.Runtime.LibC.CSize
-hs_bindgen_8132fc050b3dda62 =
-  BG.fromFFIType hs_bindgen_8132fc050b3dda62_base
-
--- | Concatenate strings.
---
---     This function appends up to @maxlen@ - SDL_strlen(dst) - 1 characters from @src@ to the end of the string in @dst@, then appends a null terminator.
---
---     @src@ and @dst@ must not overlap.
---
---     If @maxlen@ - SDL_strlen(dst) - 1 is less than or equal to 0, then @dst@ is unmodified.
---
---     [Returns]: the length (in characters, excluding the null terminator) of the string in @dst@ plus the length of @src@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_strlcpy'
---
---     [C declaration]: @SDL_strlcat@, defined at @SDL3\/SDL_stdinc.h 3146:36@
-sDL_strlcat
-  :: BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@dst@]: The destination buffer already containing the first null-terminated string. Must not be NULL and must not overlap with @src@.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@src@]: The second null-terminated string. Must not be NULL, and must not overlap with @dst@.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@maxlen@]: The length (in characters) of the destination buffer.
-  -> IO HsBindgen.Runtime.LibC.CSize
-sDL_strlcat = hs_bindgen_8132fc050b3dda62
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strdup@
-foreign import ccall safe "hs_bindgen_e91dd28c0e034753"
-  hs_bindgen_e91dd28c0e034753_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strdup@
-hs_bindgen_e91dd28c0e034753
-  :: PtrConst.PtrConst BG.CChar
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_e91dd28c0e034753 =
-  BG.fromFFIType hs_bindgen_e91dd28c0e034753_base
-
--- | Allocate a copy of a string.
---
---     This allocates enough space for a null-terminated copy of @str@, using SDL_malloc, and then makes a copy of the string into this space.
---
---     The returned string is owned by the caller, and should be passed to SDL_free when no longer needed.
---
---     [Returns]: a pointer to the newly-allocated string.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_strdup@, defined at @SDL3\/SDL_stdinc.h 3164:47@
-sDL_strdup
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: the string to copy.
-  -> IO (BG.Ptr BG.CChar)
-sDL_strdup = hs_bindgen_e91dd28c0e034753
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strndup@
-foreign import ccall safe "hs_bindgen_9f484a433e6fd1be"
-  hs_bindgen_9f484a433e6fd1be_base
-    :: BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strndup@
-hs_bindgen_9f484a433e6fd1be
-  :: PtrConst.PtrConst BG.CChar
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_9f484a433e6fd1be =
-  BG.fromFFIType hs_bindgen_9f484a433e6fd1be_base
-
--- | Allocate a copy of a string, up to n characters.
---
---     This allocates enough space for a null-terminated copy of @str@, up to @maxlen@ bytes, using SDL_malloc, and then makes a copy of the string into this space.
---
---     If the string is longer than @maxlen@ bytes, the returned string will be @maxlen@ bytes long, plus a null-terminator character that isn\'t included in the count.
---
---     The returned string is owned by the caller, and should be passed to SDL_free when no longer needed.
---
---     [Returns]: a pointer to the newly-allocated string.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_strndup@, defined at @SDL3\/SDL_stdinc.h 3189:47@
-sDL_strndup
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: the string to copy.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@maxlen@]: the maximum length of the copied string, not counting the null-terminator character.
-  -> IO (BG.Ptr BG.CChar)
-sDL_strndup = hs_bindgen_9f484a433e6fd1be
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strrev@
-foreign import ccall safe "hs_bindgen_fd83e6da8cdd54dc"
-  hs_bindgen_fd83e6da8cdd54dc_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strrev@
-hs_bindgen_fd83e6da8cdd54dc
-  :: BG.Ptr BG.CChar
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_fd83e6da8cdd54dc =
-  BG.fromFFIType hs_bindgen_fd83e6da8cdd54dc_base
-
--- | Reverse a string\'s contents.
---
---     This reverses a null-terminated string in-place. Only the content of the string is reversed; the null-terminator character remains at the end of the reversed string.
---
---     __WARNING__: This function reverses the /bytes/ of the string, not the codepoints. If @str@ is a UTF-8 string with Unicode codepoints > 127, this will ruin the string data. You should only use this function on strings that are completely comprised of low ASCII characters.
---
---     [Returns]: @str@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_strrev@, defined at @SDL3\/SDL_stdinc.h 3210:36@
-sDL_strrev
-  :: BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@str@]: the string to reverse.
-  -> IO (BG.Ptr BG.CChar)
-sDL_strrev = hs_bindgen_fd83e6da8cdd54dc
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strupr@
-foreign import ccall safe "hs_bindgen_4821ca9fe328d7f0"
-  hs_bindgen_4821ca9fe328d7f0_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strupr@
-hs_bindgen_4821ca9fe328d7f0
-  :: BG.Ptr BG.CChar
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_4821ca9fe328d7f0 =
-  BG.fromFFIType hs_bindgen_4821ca9fe328d7f0_base
-
--- | Convert a string to uppercase.
---
---     __WARNING__: Regardless of system locale, this will only convert ASCII values \'A\' through \'Z\' to uppercase.
---
---     This function operates on a null-terminated string of bytes even if it is malformed UTF-8! and converts ASCII characters \'a\' through \'z\' to their uppercase equivalents in-place, returning the original @str@ pointer.
---
---     [Returns]: the @str@ pointer passed into this function.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_strlwr'
---
---     [C declaration]: @SDL_strupr@, defined at @SDL3\/SDL_stdinc.h 3231:36@
-sDL_strupr
-  :: BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@str@]: the string to convert in-place. Can not be NULL.
-  -> IO (BG.Ptr BG.CChar)
-sDL_strupr = hs_bindgen_4821ca9fe328d7f0
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strlwr@
-foreign import ccall safe "hs_bindgen_b313d67572ea455e"
-  hs_bindgen_b313d67572ea455e_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strlwr@
-hs_bindgen_b313d67572ea455e
-  :: BG.Ptr BG.CChar
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_b313d67572ea455e =
-  BG.fromFFIType hs_bindgen_b313d67572ea455e_base
-
--- | Convert a string to lowercase.
---
---     __WARNING__: Regardless of system locale, this will only convert ASCII values \'A\' through \'Z\' to lowercase.
---
---     This function operates on a null-terminated string of bytes even if it is malformed UTF-8! and converts ASCII characters \'A\' through \'Z\' to their lowercase equivalents in-place, returning the original @str@ pointer.
---
---     [Returns]: the @str@ pointer passed into this function.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_strupr'
---
---     [C declaration]: @SDL_strlwr@, defined at @SDL3\/SDL_stdinc.h 3252:36@
-sDL_strlwr
-  :: BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@str@]: the string to convert in-place. Can not be NULL.
-  -> IO (BG.Ptr BG.CChar)
-sDL_strlwr = hs_bindgen_b313d67572ea455e
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strchr@
-foreign import ccall safe "hs_bindgen_9b8b80f67620d0c0"
-  hs_bindgen_9b8b80f67620d0c0_base
-    :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strchr@
-hs_bindgen_9b8b80f67620d0c0
-  :: PtrConst.PtrConst BG.CChar
-  -> BG.CInt
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_9b8b80f67620d0c0 =
-  BG.fromFFIType hs_bindgen_9b8b80f67620d0c0_base
-
--- | Search a string for the first instance of a specific byte.
---
---     The search ends once it finds the requested byte value, or a null terminator byte to end the string.
---
---     Note that this looks for /bytes/, not /characters/, so you cannot match against a Unicode codepoint > 255, regardless of character encoding.
---
---     [Returns]: a pointer to the first instance of @c@ in the string, or NULL if not found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_strchr@, defined at @SDL3\/SDL_stdinc.h 3272:36@
-sDL_strchr
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: the string to search. Must not be NULL.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@c@]: the byte value to search for.
-  -> IO (BG.Ptr BG.CChar)
-sDL_strchr = hs_bindgen_9b8b80f67620d0c0
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strrchr@
-foreign import ccall safe "hs_bindgen_61eb1646e2706ec9"
-  hs_bindgen_61eb1646e2706ec9_base
-    :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strrchr@
-hs_bindgen_61eb1646e2706ec9
-  :: PtrConst.PtrConst BG.CChar
-  -> BG.CInt
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_61eb1646e2706ec9 =
-  BG.fromFFIType hs_bindgen_61eb1646e2706ec9_base
-
--- | Search a string for the last instance of a specific byte.
---
---     The search must go until it finds a null terminator byte to end the string.
---
---     Note that this looks for /bytes/, not /characters/, so you cannot match against a Unicode codepoint > 255, regardless of character encoding.
---
---     [Returns]: a pointer to the last instance of @c@ in the string, or NULL if not found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_strrchr@, defined at @SDL3\/SDL_stdinc.h 3291:36@
-sDL_strrchr
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: the string to search. Must not be NULL.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@c@]: the byte value to search for.
-  -> IO (BG.Ptr BG.CChar)
-sDL_strrchr = hs_bindgen_61eb1646e2706ec9
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strstr@
-foreign import ccall safe "hs_bindgen_09dae8bc6d27bfa7"
-  hs_bindgen_09dae8bc6d27bfa7_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strstr@
-hs_bindgen_09dae8bc6d27bfa7
-  :: PtrConst.PtrConst BG.CChar
-  -> PtrConst.PtrConst BG.CChar
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_09dae8bc6d27bfa7 =
-  BG.fromFFIType hs_bindgen_09dae8bc6d27bfa7_base
-
--- | Search a string for the first instance of a specific substring.
---
---     The search ends once it finds the requested substring, or a null terminator byte to end the string.
---
---     Note that this looks for strings of /bytes/, not /characters/, so it\'s legal to search for malformed and incomplete UTF-8 sequences.
---
---     [Returns]: a pointer to the first instance of @needle@ in the string, or NULL if not found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_strstr@, defined at @SDL3\/SDL_stdinc.h 3311:36@
-sDL_strstr
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@haystack@]: the string to search. Must not be NULL.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@needle@]: the string to search for. Must not be NULL.
-  -> IO (BG.Ptr BG.CChar)
-sDL_strstr = hs_bindgen_09dae8bc6d27bfa7
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strnstr@
-foreign import ccall safe "hs_bindgen_b253d6195ad29db6"
-  hs_bindgen_b253d6195ad29db6_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strnstr@
-hs_bindgen_b253d6195ad29db6
-  :: PtrConst.PtrConst BG.CChar
-  -> PtrConst.PtrConst BG.CChar
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_b253d6195ad29db6 =
-  BG.fromFFIType hs_bindgen_b253d6195ad29db6_base
-
--- | Search a string, up to n bytes, for the first instance of a specific substring.
---
---     The search ends once it finds the requested substring, or a null terminator byte to end the string, or @maxlen@ bytes have been examined. It is possible to use this function on a string without a null terminator.
---
---     Note that this looks for strings of /bytes/, not /characters/, so it\'s legal to search for malformed and incomplete UTF-8 sequences.
---
---     [Returns]: a pointer to the first instance of @needle@ in the string, or NULL if not found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_strnstr@, defined at @SDL3\/SDL_stdinc.h 3334:36@
-sDL_strnstr
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@haystack@]: the string to search. Must not be NULL.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@needle@]: the string to search for. Must not be NULL.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@maxlen@]: the maximum number of bytes to search in @haystack@.
-  -> IO (BG.Ptr BG.CChar)
-sDL_strnstr = hs_bindgen_b253d6195ad29db6
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strcasestr@
-foreign import ccall safe "hs_bindgen_845c9ada7f0145b4"
-  hs_bindgen_845c9ada7f0145b4_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strcasestr@
-hs_bindgen_845c9ada7f0145b4
-  :: PtrConst.PtrConst BG.CChar
-  -> PtrConst.PtrConst BG.CChar
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_845c9ada7f0145b4 =
-  BG.fromFFIType hs_bindgen_845c9ada7f0145b4_base
-
--- | Search a UTF-8 string for the first instance of a specific substring, case-insensitively.
---
---     This will work with Unicode strings, using a technique called \"case-folding\" to handle the vast majority of case-sensitive human languages regardless of system locale. It can deal with expanding values: a German Eszett character can compare against two ASCII \'s\' chars and be considered a match, for example. A notable exception: it does not handle the Turkish \'i\' character; human language is complicated!
---
---     Since this handles Unicode, it expects the strings to be well-formed UTF-8 and not a null-terminated string of arbitrary bytes. Bytes that are not valid UTF-8 are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), which is to say two strings of random bits may turn out to match if they convert to the same amount of replacement characters.
---
---     [Returns]: a pointer to the first instance of @needle@ in the string, or NULL if not found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_strcasestr@, defined at @SDL3\/SDL_stdinc.h 3362:36@
-sDL_strcasestr
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@haystack@]: the string to search. Must not be NULL.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@needle@]: the string to search for. Must not be NULL.
-  -> IO (BG.Ptr BG.CChar)
-sDL_strcasestr = hs_bindgen_845c9ada7f0145b4
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strtok_r@
-foreign import ccall safe "hs_bindgen_92aad5310bed80bf"
-  hs_bindgen_92aad5310bed80bf_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strtok_r@
-hs_bindgen_92aad5310bed80bf
-  :: BG.Ptr BG.CChar
-  -> PtrConst.PtrConst BG.CChar
-  -> BG.Ptr (BG.Ptr BG.CChar)
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_92aad5310bed80bf =
-  BG.fromFFIType hs_bindgen_92aad5310bed80bf_base
-
--- | This works exactly like strtok_r() but doesn\'t require access to a C runtime.
---
---     Break a string up into a series of tokens.
---
---     To start tokenizing a new string, @str@ should be the non-NULL address of the string to start tokenizing. Future calls to get the next token from the same string should specify a NULL.
---
---     Note that this function will overwrite pieces of @str@ with null chars to split it into tokens. This function cannot be used with const\/read-only strings!
---
---     @saveptr@ just needs to point to a @char *@ that can be overwritten; SDL will use this to save tokenizing state between calls. It is initialized if @str@ is non-NULL, and used to resume tokenizing when @str@ is NULL.
---
---     [Returns]: A pointer to the next token, or NULL if no tokens remain.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_strtok_r@, defined at @SDL3\/SDL_stdinc.h 3391:36@
-sDL_strtok_r
-  :: BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@str@]: the string to tokenize, or NULL to continue tokenizing.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@delim@]: the delimiter string that separates tokens.
-  -> BG.Ptr (BG.Ptr BG.CChar)
-  -- ^
-  --
-  --           [@saveptr@]: pointer to a char *, used for ongoing state.
-  -> IO (BG.Ptr BG.CChar)
-sDL_strtok_r = hs_bindgen_92aad5310bed80bf
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_utf8strlen@
-foreign import ccall safe "hs_bindgen_2fe9c3d14ead61fa"
-  hs_bindgen_2fe9c3d14ead61fa_base
-    :: BG.Ptr BG.Void
-    -> IO BG.Word64
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_utf8strlen@
-hs_bindgen_2fe9c3d14ead61fa
-  :: PtrConst.PtrConst BG.CChar
-  -> IO HsBindgen.Runtime.LibC.CSize
-hs_bindgen_2fe9c3d14ead61fa =
-  BG.fromFFIType hs_bindgen_2fe9c3d14ead61fa_base
-
--- | Count the number of codepoints in a UTF-8 string.
---
---     Counts the /codepoints/, not /bytes/, in @str@, excluding the null terminator.
---
---     If you need to count the bytes in a string instead, consider using @SDL_strlen()@.
---
---     Since this handles Unicode, it expects the strings to be well-formed UTF-8 and not a null-terminated string of arbitrary bytes. Bytes that are not valid UTF-8 are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), so a malformed or incomplete UTF-8 sequence might increase the count by several replacement characters.
---
---     [Returns]: The length (in codepoints, excluding the null terminator) of @src@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_utf8strnlen', 'sDL_strlen'
---
---     [C declaration]: @SDL_utf8strlen@, defined at @SDL3\/SDL_stdinc.h 3419:36@
-sDL_utf8strlen
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: The null-terminated UTF-8 string to read. Must not be NULL.
-  -> IO HsBindgen.Runtime.LibC.CSize
-sDL_utf8strlen = hs_bindgen_2fe9c3d14ead61fa
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_utf8strnlen@
-foreign import ccall safe "hs_bindgen_7e1dc736bb92cf02"
-  hs_bindgen_7e1dc736bb92cf02_base
-    :: BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word64
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_utf8strnlen@
-hs_bindgen_7e1dc736bb92cf02
-  :: PtrConst.PtrConst BG.CChar
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO HsBindgen.Runtime.LibC.CSize
-hs_bindgen_7e1dc736bb92cf02 =
-  BG.fromFFIType hs_bindgen_7e1dc736bb92cf02_base
-
--- | Count the number of codepoints in a UTF-8 string, up to n bytes.
---
---     Counts the /codepoints/, not /bytes/, in @str@, excluding the null terminator.
---
---     If you need to count the bytes in a string instead, consider using @SDL_strnlen()@.
---
---     The counting stops at @bytes@ bytes (not codepoints!). This seems counterintuitive, but makes it easy to express the total size of the string\'s buffer.
---
---     Since this handles Unicode, it expects the strings to be well-formed UTF-8 and not a null-terminated string of arbitrary bytes. Bytes that are not valid UTF-8 are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), so a malformed or incomplete UTF-8 sequence might increase the count by several replacement characters.
---
---     [Returns]: The length (in codepoints, excluding the null terminator) of @src@ but never more than @maxlen@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_utf8strlen', 'sDL_strnlen'
---
---     [C declaration]: @SDL_utf8strnlen@, defined at @SDL3\/SDL_stdinc.h 3452:36@
-sDL_utf8strnlen
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: The null-terminated UTF-8 string to read. Must not be NULL.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@bytes@]: The maximum amount of bytes to count.
-  -> IO HsBindgen.Runtime.LibC.CSize
-sDL_utf8strnlen = hs_bindgen_7e1dc736bb92cf02
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_itoa@
-foreign import ccall safe "hs_bindgen_5e87f4eb430750ff"
-  hs_bindgen_5e87f4eb430750ff_base
-    :: BG.Int32
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_itoa@
-hs_bindgen_5e87f4eb430750ff
-  :: BG.CInt
-  -> BG.Ptr BG.CChar
-  -> BG.CInt
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_5e87f4eb430750ff =
-  BG.fromFFIType hs_bindgen_5e87f4eb430750ff_base
-
--- | Convert an integer into a string.
---
---     This requires a radix to specified for string format. Specifying 10 produces a decimal number, 16 hexadecimal, etc. Must be in the range of 2 to 36.
---
---     Note that this function will overflow a buffer if @str@ is not large enough to hold the output! It may be safer to use SDL_snprintf to clamp output, or SDL_asprintf to allocate a buffer. Otherwise, it doesn\'t hurt to allocate much more space than you expect to use (and don\'t forget possible negative signs, null terminator bytes, etc).
---
---     [Returns]: @str@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_uitoa', @SDL_ltoa@, 'sDL_lltoa'
---
---     [C declaration]: @SDL_itoa@, defined at @SDL3\/SDL_stdinc.h 3480:36@
-sDL_itoa
-  :: BG.CInt
-  -- ^
-  --
-  --           [@value@]: the integer to convert.
-  -> BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@str@]: the buffer to write the string into.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@radix@]: the radix to use for string generation.
-  -> IO (BG.Ptr BG.CChar)
-sDL_itoa = hs_bindgen_5e87f4eb430750ff
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_uitoa@
-foreign import ccall safe "hs_bindgen_6593301ad3b87e96"
-  hs_bindgen_6593301ad3b87e96_base
-    :: BG.Word32
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_uitoa@
-hs_bindgen_6593301ad3b87e96
-  :: BG.CUInt
-  -> BG.Ptr BG.CChar
-  -> BG.CInt
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_6593301ad3b87e96 =
-  BG.fromFFIType hs_bindgen_6593301ad3b87e96_base
-
--- | Convert an unsigned integer into a string.
---
---     This requires a radix to specified for string format. Specifying 10 produces a decimal number, 16 hexadecimal, etc. Must be in the range of 2 to 36.
---
---     Note that this function will overflow a buffer if @str@ is not large enough to hold the output! It may be safer to use SDL_snprintf to clamp output, or SDL_asprintf to allocate a buffer. Otherwise, it doesn\'t hurt to allocate much more space than you expect to use (and don\'t forget null terminator bytes, etc).
---
---     [Returns]: @str@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_itoa', @SDL_ultoa@, 'sDL_ulltoa'
---
---     [C declaration]: @SDL_uitoa@, defined at @SDL3\/SDL_stdinc.h 3508:36@
-sDL_uitoa
-  :: BG.CUInt
-  -- ^
-  --
-  --           [@value@]: the unsigned integer to convert.
-  -> BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@str@]: the buffer to write the string into.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@radix@]: the radix to use for string generation.
-  -> IO (BG.Ptr BG.CChar)
-sDL_uitoa = hs_bindgen_6593301ad3b87e96
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_lltoa@
-foreign import ccall safe "hs_bindgen_49dab071ddd94418"
-  hs_bindgen_49dab071ddd94418_base
-    :: BG.Int64
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_lltoa@
-hs_bindgen_49dab071ddd94418
-  :: BG.CLLong
-  -> BG.Ptr BG.CChar
-  -> BG.CInt
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_49dab071ddd94418 =
-  BG.fromFFIType hs_bindgen_49dab071ddd94418_base
-
--- | Convert a long long integer into a string.
---
---     This requires a radix to specified for string format. Specifying 10 produces a decimal number, 16 hexadecimal, etc. Must be in the range of 2 to 36.
---
---     Note that this function will overflow a buffer if @str@ is not large enough to hold the output! It may be safer to use SDL_snprintf to clamp output, or SDL_asprintf to allocate a buffer. Otherwise, it doesn\'t hurt to allocate much more space than you expect to use (and don\'t forget possible negative signs, null terminator bytes, etc).
---
---     [Returns]: @str@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_ulltoa', 'sDL_itoa', @SDL_ltoa@
---
---     [C declaration]: @SDL_lltoa@, defined at @SDL3\/SDL_stdinc.h 3594:36@
-sDL_lltoa
-  :: BG.CLLong
-  -- ^
-  --
-  --           [@value@]: the long long integer to convert.
-  -> BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@str@]: the buffer to write the string into.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@radix@]: the radix to use for string generation.
-  -> IO (BG.Ptr BG.CChar)
-sDL_lltoa = hs_bindgen_49dab071ddd94418
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_ulltoa@
-foreign import ccall safe "hs_bindgen_8c172a64279b6c99"
-  hs_bindgen_8c172a64279b6c99_base
-    :: BG.Word64
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_ulltoa@
-hs_bindgen_8c172a64279b6c99
-  :: BG.CULLong
-  -> BG.Ptr BG.CChar
-  -> BG.CInt
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_8c172a64279b6c99 =
-  BG.fromFFIType hs_bindgen_8c172a64279b6c99_base
-
--- | Convert an unsigned long long integer into a string.
---
---     This requires a radix to specified for string format. Specifying 10 produces a decimal number, 16 hexadecimal, etc. Must be in the range of 2 to 36.
---
---     Note that this function will overflow a buffer if @str@ is not large enough to hold the output! It may be safer to use SDL_snprintf to clamp output, or SDL_asprintf to allocate a buffer. Otherwise, it doesn\'t hurt to allocate much more space than you expect to use (and don\'t forget null terminator bytes, etc).
---
---     [Returns]: @str@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_lltoa', 'sDL_uitoa', @SDL_ultoa@
---
---     [C declaration]: @SDL_ulltoa@, defined at @SDL3\/SDL_stdinc.h 3622:36@
-sDL_ulltoa
-  :: BG.CULLong
-  -- ^
-  --
-  --           [@value@]: the unsigned long long integer to convert.
-  -> BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@str@]: the buffer to write the string into.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@radix@]: the radix to use for string generation.
-  -> IO (BG.Ptr BG.CChar)
-sDL_ulltoa = hs_bindgen_8c172a64279b6c99
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_atoi@
-foreign import ccall safe "hs_bindgen_7ec5dbb16b1ec441"
-  hs_bindgen_7ec5dbb16b1ec441_base
-    :: BG.Ptr BG.Void
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_atoi@
-hs_bindgen_7ec5dbb16b1ec441
-  :: PtrConst.PtrConst BG.CChar
-  -> IO BG.CInt
-hs_bindgen_7ec5dbb16b1ec441 =
-  BG.fromFFIType hs_bindgen_7ec5dbb16b1ec441_base
-
--- | Parse an @int@ from a string.
---
---     The result of calling @SDL_atoi(str)@ is equivalent to @(int)SDL_strtol(str, NULL, 10)@.
---
---     [Returns]: the parsed @int@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_atof', @SDL_strtol@, @SDL_strtoul@, 'sDL_strtoll', 'sDL_strtoull', 'sDL_strtod', 'sDL_itoa'
---
---     [C declaration]: @SDL_atoi@, defined at @SDL3\/SDL_stdinc.h 3646:33@
-sDL_atoi
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: The null-terminated string to read. Must not be NULL.
-  -> IO BG.CInt
-sDL_atoi = hs_bindgen_7ec5dbb16b1ec441
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_atof@
-foreign import ccall safe "hs_bindgen_3da67c3a67185baf"
-  hs_bindgen_3da67c3a67185baf_base
-    :: BG.Ptr BG.Void
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_atof@
-hs_bindgen_3da67c3a67185baf
-  :: PtrConst.PtrConst BG.CChar
-  -> IO BG.CDouble
-hs_bindgen_3da67c3a67185baf =
-  BG.fromFFIType hs_bindgen_3da67c3a67185baf_base
-
--- | Parse a @double@ from a string.
---
---     The result of calling @SDL_atof(str)@ is equivalent to @SDL_strtod(str, NULL)@.
---
---     [Returns]: the parsed @double@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_atoi', @SDL_strtol@, @SDL_strtoul@, 'sDL_strtoll', 'sDL_strtoull', 'sDL_strtod'
---
---     [C declaration]: @SDL_atof@, defined at @SDL3\/SDL_stdinc.h 3668:36@
-sDL_atof
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: The null-terminated string to read. Must not be NULL.
-  -> IO BG.CDouble
-sDL_atof = hs_bindgen_3da67c3a67185baf
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strtoll@
-foreign import ccall safe "hs_bindgen_2d4f949f38ae668c"
-  hs_bindgen_2d4f949f38ae668c_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Int64
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strtoll@
-hs_bindgen_2d4f949f38ae668c
-  :: PtrConst.PtrConst BG.CChar
-  -> BG.Ptr (BG.Ptr BG.CChar)
-  -> BG.CInt
-  -> IO BG.CLLong
-hs_bindgen_2d4f949f38ae668c =
-  BG.fromFFIType hs_bindgen_2d4f949f38ae668c_base
-
--- | Parse a @long long@ from a string.
---
---     If @str@ starts with whitespace, then those whitespace characters are skipped before attempting to parse the number.
---
---     If the parsed number does not fit inside a @long long@, the result is clamped to the minimum and maximum representable @long long@ values.
---
---     [Returns]: the parsed @long long@, or 0 if no number could be parsed.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_atoi', 'sDL_atof', @SDL_strtol@, @SDL_strtoul@, 'sDL_strtoull', 'sDL_strtod', 'sDL_lltoa'
---
---     [C declaration]: @SDL_strtoll@, defined at @SDL3\/SDL_stdinc.h 3770:39@
-sDL_strtoll
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: The null-terminated string to read. Must not be NULL.
-  -> BG.Ptr (BG.Ptr BG.CChar)
-  -- ^
-  --
-  --           [@endp@]: If not NULL, the address of the first invalid character (i.e. the next character after the parsed number) will be written to this pointer.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@base@]: The base of the integer to read. Supported values are 0 and 2 to 36 inclusive. If 0, the base will be inferred from the number\'s prefix (0x for hexadecimal, 0 for octal, decimal otherwise).
-  -> IO BG.CLLong
-sDL_strtoll = hs_bindgen_2d4f949f38ae668c
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strtoull@
-foreign import ccall safe "hs_bindgen_af470a839fcf6fbd"
-  hs_bindgen_af470a839fcf6fbd_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word64
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strtoull@
-hs_bindgen_af470a839fcf6fbd
-  :: PtrConst.PtrConst BG.CChar
-  -> BG.Ptr (BG.Ptr BG.CChar)
-  -> BG.CInt
-  -> IO BG.CULLong
-hs_bindgen_af470a839fcf6fbd =
-  BG.fromFFIType hs_bindgen_af470a839fcf6fbd_base
-
--- | Parse an @unsigned long long@ from a string.
---
---     If @str@ starts with whitespace, then those whitespace characters are skipped before attempting to parse the number.
---
---     If the parsed number does not fit inside an @unsigned long long@, the result is clamped to the maximum representable @unsigned long long@ value.
---
---     [Returns]: the parsed @unsigned long long@, or 0 if no number could be parsed.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_atoi', 'sDL_atof', @SDL_strtol@, 'sDL_strtoll', @SDL_strtoul@, 'sDL_strtod', 'sDL_ulltoa'
---
---     [C declaration]: @SDL_strtoull@, defined at @SDL3\/SDL_stdinc.h 3804:48@
-sDL_strtoull
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: The null-terminated string to read. Must not be NULL.
-  -> BG.Ptr (BG.Ptr BG.CChar)
-  -- ^
-  --
-  --           [@endp@]: If not NULL, the address of the first invalid character (i.e. the next character after the parsed number) will be written to this pointer.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@base@]: The base of the integer to read. Supported values are 0 and 2 to 36 inclusive. If 0, the base will be inferred from the number\'s prefix (0x for hexadecimal, 0 for octal, decimal otherwise).
-  -> IO BG.CULLong
-sDL_strtoull = hs_bindgen_af470a839fcf6fbd
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strtod@
-foreign import ccall safe "hs_bindgen_717e481bd213c968"
-  hs_bindgen_717e481bd213c968_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strtod@
-hs_bindgen_717e481bd213c968
-  :: PtrConst.PtrConst BG.CChar
-  -> BG.Ptr (BG.Ptr BG.CChar)
-  -> IO BG.CDouble
-hs_bindgen_717e481bd213c968 =
-  BG.fromFFIType hs_bindgen_717e481bd213c968_base
-
--- | Parse a @double@ from a string.
---
---     This function makes fewer guarantees than the C runtime @strtod@:
---
---     * Only decimal notation is guaranteed to be supported. The handling of scientific and hexadecimal notation is unspecified.
---
---     * Whether or not INF and NAN can be parsed is unspecified.
---
---     * The precision of the result is unspecified.
---
---     [Returns]: the parsed @double@, or 0 if no number could be parsed.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_atoi', 'sDL_atof', @SDL_strtol@, 'sDL_strtoll', @SDL_strtoul@, 'sDL_strtoull'
---
---     [C declaration]: @SDL_strtod@, defined at @SDL3\/SDL_stdinc.h 3834:36@
-sDL_strtod
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: the null-terminated string to read. Must not be NULL.
-  -> BG.Ptr (BG.Ptr BG.CChar)
-  -- ^
-  --
-  --           [@endp@]: if not NULL, the address of the first invalid character (i.e. the next character after the parsed number) will be written to this pointer.
-  -> IO BG.CDouble
-sDL_strtod = hs_bindgen_717e481bd213c968
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strcmp@
-foreign import ccall safe "hs_bindgen_114ae5114f0f2f61"
-  hs_bindgen_114ae5114f0f2f61_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strcmp@
-hs_bindgen_114ae5114f0f2f61
-  :: PtrConst.PtrConst BG.CChar
-  -> PtrConst.PtrConst BG.CChar
-  -> IO BG.CInt
-hs_bindgen_114ae5114f0f2f61 =
-  BG.fromFFIType hs_bindgen_114ae5114f0f2f61_base
-
--- | Compare two null-terminated UTF-8 strings.
---
---     Due to the nature of UTF-8 encoding, this will work with Unicode strings, since effectively this function just compares bytes until it hits a null-terminating character. Also due to the nature of UTF-8, this can be used with @SDL_qsort()@ to put strings in (roughly) alphabetical order.
---
---     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_strcmp@, defined at @SDL3\/SDL_stdinc.h 3854:33@
-sDL_strcmp
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str1@]: the first string to compare. NULL is not permitted!
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str2@]: the second string to compare. NULL is not permitted!
-  -> IO BG.CInt
-sDL_strcmp = hs_bindgen_114ae5114f0f2f61
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strncmp@
-foreign import ccall safe "hs_bindgen_07f412ca6ac64bca"
-  hs_bindgen_07f412ca6ac64bca_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strncmp@
-hs_bindgen_07f412ca6ac64bca
-  :: PtrConst.PtrConst BG.CChar
-  -> PtrConst.PtrConst BG.CChar
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO BG.CInt
-hs_bindgen_07f412ca6ac64bca =
-  BG.fromFFIType hs_bindgen_07f412ca6ac64bca_base
-
--- | Compare two UTF-8 strings up to a number of bytes.
---
---     Due to the nature of UTF-8 encoding, this will work with Unicode strings, since effectively this function just compares bytes until it hits a null-terminating character. Also due to the nature of UTF-8, this can be used with @SDL_qsort()@ to put strings in (roughly) alphabetical order.
---
---     Note that while this function is intended to be used with UTF-8, it is doing a bytewise comparison, and @maxlen@ specifies a /byte/ limit! If the limit lands in the middle of a multi-byte UTF-8 sequence, it will only compare a portion of the final character.
---
---     @maxlen@ specifies a maximum number of bytes to compare; if the strings match to this number of bytes (or both have matched to a null-terminator character before this number of bytes), they will be considered equal.
---
---     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_strncmp@, defined at @SDL3\/SDL_stdinc.h 3884:33@
-sDL_strncmp
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str1@]: the first string to compare. NULL is not permitted!
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str2@]: the second string to compare. NULL is not permitted!
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@maxlen@]: the maximum number of /bytes/ to compare.
-  -> IO BG.CInt
-sDL_strncmp = hs_bindgen_07f412ca6ac64bca
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strcasecmp@
-foreign import ccall safe "hs_bindgen_931c05e65f298770"
-  hs_bindgen_931c05e65f298770_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strcasecmp@
-hs_bindgen_931c05e65f298770
-  :: PtrConst.PtrConst BG.CChar
-  -> PtrConst.PtrConst BG.CChar
-  -> IO BG.CInt
-hs_bindgen_931c05e65f298770 =
-  BG.fromFFIType hs_bindgen_931c05e65f298770_base
-
--- | Compare two null-terminated UTF-8 strings, case-insensitively.
---
---     This will work with Unicode strings, using a technique called \"case-folding\" to handle the vast majority of case-sensitive human languages regardless of system locale. It can deal with expanding values: a German Eszett character can compare against two ASCII \'s\' chars and be considered a match, for example. A notable exception: it does not handle the Turkish \'i\' character; human language is complicated!
---
---     Since this handles Unicode, it expects the string to be well-formed UTF-8 and not a null-terminated string of arbitrary bytes. Bytes that are not valid UTF-8 are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), which is to say two strings of random bits may turn out to match if they convert to the same amount of replacement characters.
---
---     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_strcasecmp@, defined at @SDL3\/SDL_stdinc.h 3912:33@
-sDL_strcasecmp
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str1@]: the first string to compare. NULL is not permitted!
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str2@]: the second string to compare. NULL is not permitted!
-  -> IO BG.CInt
-sDL_strcasecmp = hs_bindgen_931c05e65f298770
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strncasecmp@
-foreign import ccall safe "hs_bindgen_974c20bb6f7b7d03"
-  hs_bindgen_974c20bb6f7b7d03_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strncasecmp@
-hs_bindgen_974c20bb6f7b7d03
-  :: PtrConst.PtrConst BG.CChar
-  -> PtrConst.PtrConst BG.CChar
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO BG.CInt
-hs_bindgen_974c20bb6f7b7d03 =
-  BG.fromFFIType hs_bindgen_974c20bb6f7b7d03_base
-
--- | Compare two UTF-8 strings, case-insensitively, up to a number of bytes.
---
---     This will work with Unicode strings, using a technique called \"case-folding\" to handle the vast majority of case-sensitive human languages regardless of system locale. It can deal with expanding values: a German Eszett character can compare against two ASCII \'s\' chars and be considered a match, for example. A notable exception: it does not handle the Turkish \'i\' character; human language is complicated!
---
---     Since this handles Unicode, it expects the string to be well-formed UTF-8 and not a null-terminated string of arbitrary bytes. Bytes that are not valid UTF-8 are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), which is to say two strings of random bits may turn out to match if they convert to the same amount of replacement characters.
---
---     Note that while this function is intended to be used with UTF-8, @maxlen@ specifies a /byte/ limit! If the limit lands in the middle of a multi-byte UTF-8 sequence, it may convert a portion of the final character to one or more Unicode character U+FFFD (REPLACEMENT CHARACTER) so as not to overflow a buffer.
---
---     @maxlen@ specifies a maximum number of bytes to compare; if the strings match to this number of bytes (or both have matched to a null-terminator character before this number of bytes), they will be considered equal.
---
---     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_strncasecmp@, defined at @SDL3\/SDL_stdinc.h 3952:33@
-sDL_strncasecmp
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str1@]: the first string to compare. NULL is not permitted!
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str2@]: the second string to compare. NULL is not permitted!
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@maxlen@]: the maximum number of bytes to compare.
-  -> IO BG.CInt
-sDL_strncasecmp = hs_bindgen_974c20bb6f7b7d03
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strpbrk@
-foreign import ccall safe "hs_bindgen_50473abaffb3417e"
-  hs_bindgen_50473abaffb3417e_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strpbrk@
-hs_bindgen_50473abaffb3417e
-  :: PtrConst.PtrConst BG.CChar
-  -> PtrConst.PtrConst BG.CChar
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_50473abaffb3417e =
-  BG.fromFFIType hs_bindgen_50473abaffb3417e_base
-
--- | Searches a string for the first occurrence of any character contained in a breakset, and returns a pointer from the string to that character.
---
---     [Returns]: A pointer to the location, in str, of the first occurrence of a character present in the breakset, or NULL if none is found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_strpbrk@, defined at @SDL3\/SDL_stdinc.h 3970:36@
-sDL_strpbrk
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: The null-terminated string to be searched. Must not be NULL, and must not overlap with @breakset@.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@breakset@]: A null-terminated string containing the list of characters to look for. Must not be NULL, and must not overlap with @str@.
-  -> IO (BG.Ptr BG.CChar)
-sDL_strpbrk = hs_bindgen_50473abaffb3417e
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_StepUTF8@
-foreign import ccall safe "hs_bindgen_e49242de1cec91d5"
-  hs_bindgen_e49242de1cec91d5_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_StepUTF8@
-hs_bindgen_e49242de1cec91d5
-  :: BG.Ptr (PtrConst.PtrConst BG.CChar)
-  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
-  -> IO Uint32
-hs_bindgen_e49242de1cec91d5 =
-  BG.fromFFIType hs_bindgen_e49242de1cec91d5_base
-
--- | Decode a UTF-8 string, one Unicode codepoint at a time.
---
---     This will return the first Unicode codepoint in the UTF-8 encoded string in @*pstr@, and then advance @*pstr@ past any consumed bytes before returning.
---
---     It will not access more than @*pslen@ bytes from the string. @*pslen@ will be adjusted, as well, subtracting the number of bytes consumed.
---
---     @pslen@ is allowed to be NULL, in which case the string /must/ be NULL-terminated, as the function will blindly read until it sees the NULL char.
---
---     if @*pslen@ is zero, it assumes the end of string is reached and returns a zero codepoint regardless of the contents of the string buffer.
---
---     If the resulting codepoint is zero (a NULL terminator), or @*pslen@ is zero, it will not advance @*pstr@ or @*pslen@ at all.
---
---     Generally this function is called in a loop until it returns zero, adjusting its parameters each iteration.
---
---     If an invalid UTF-8 sequence is encountered, this function returns SDL_INVALID_UNICODE_CODEPOINT and advances the string\/length by one byte (which is to say, a multibyte sequence might produce several SDL_INVALID_UNICODE_CODEPOINT returns before it syncs to the next valid UTF-8 sequence).
---
---     Several things can generate invalid UTF-8 sequences, including overlong encodings, the use of UTF-16 surrogate values, and truncated data. Please refer to [RFC3629](https://www.ietf.org/rfc/rfc3629.txt) for details.
---
---     [Returns]: the first Unicode codepoint in the string.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_StepUTF8@, defined at @SDL3\/SDL_stdinc.h 4030:36@
-sDL_StepUTF8
-  :: BG.Ptr (PtrConst.PtrConst BG.CChar)
-  -- ^
-  --
-  --           [@pstr@]: a pointer to a UTF-8 string pointer to be read and adjusted.
-  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@pslen@]: a pointer to the number of bytes in the string, to be read and adjusted. NULL is allowed.
-  -> IO Uint32
-sDL_StepUTF8 = hs_bindgen_e49242de1cec91d5
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_StepBackUTF8@
-foreign import ccall safe "hs_bindgen_0346c467944ee189"
-  hs_bindgen_0346c467944ee189_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_StepBackUTF8@
-hs_bindgen_0346c467944ee189
-  :: PtrConst.PtrConst BG.CChar
-  -> BG.Ptr (PtrConst.PtrConst BG.CChar)
-  -> IO Uint32
-hs_bindgen_0346c467944ee189 =
-  BG.fromFFIType hs_bindgen_0346c467944ee189_base
-
--- | Decode a UTF-8 string in reverse, one Unicode codepoint at a time.
---
---     This will go to the start of the previous Unicode codepoint in the string, move @*pstr@ to that location and return that codepoint.
---
---     If @*pstr@ is already at the start of the string), it will not advance @*pstr@ at all.
---
---     Generally this function is called in a loop until it returns zero, adjusting its parameter each iteration.
---
---     If an invalid UTF-8 sequence is encountered, this function returns SDL_INVALID_UNICODE_CODEPOINT.
---
---     Several things can generate invalid UTF-8 sequences, including overlong encodings, the use of UTF-16 surrogate values, and truncated data. Please refer to [RFC3629](https://www.ietf.org/rfc/rfc3629.txt) for details.
---
---     [Returns]: the previous Unicode codepoint in the string.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_StepBackUTF8@, defined at @SDL3\/SDL_stdinc.h 4061:36@
-sDL_StepBackUTF8
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@start@]: a pointer to the beginning of the UTF-8 string.
-  -> BG.Ptr (PtrConst.PtrConst BG.CChar)
-  -- ^
-  --
-  --           [@pstr@]: a pointer to a UTF-8 string pointer to be read and adjusted.
-  -> IO Uint32
-sDL_StepBackUTF8 = hs_bindgen_0346c467944ee189
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_UCS4ToUTF8@
-foreign import ccall safe "hs_bindgen_bdc98e385efc6ab7"
-  hs_bindgen_bdc98e385efc6ab7_base
-    :: BG.Word32
-    -> BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_UCS4ToUTF8@
-hs_bindgen_bdc98e385efc6ab7
-  :: Uint32
-  -> BG.Ptr BG.CChar
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_bdc98e385efc6ab7 =
-  BG.fromFFIType hs_bindgen_bdc98e385efc6ab7_base
-
--- | Convert a single Unicode codepoint to UTF-8.
---
---     The buffer pointed to by @dst@ must be at least 4 bytes long, as this function may generate between 1 and 4 bytes of output.
---
---     This function returns the first byte /after/ the newly-written UTF-8 sequence, which is useful for encoding multiple codepoints in a loop, or knowing where to write a NULL-terminator character to end the string (in either case, plan to have a buffer of /more/ than 4 bytes!).
---
---     If @codepoint@ is an invalid value (outside the Unicode range, or a UTF-16 surrogate value, etc), this will use U+FFFD (REPLACEMENT CHARACTER) for the codepoint instead, and not set an error.
---
---     If @dst@ is NULL, this returns NULL immediately without writing to the pointer and without setting an error.
---
---     [Returns]: the first byte past the newly-written UTF-8 sequence.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_UCS4ToUTF8@, defined at @SDL3\/SDL_stdinc.h 4090:36@
-sDL_UCS4ToUTF8
-  :: Uint32
-  -- ^
-  --
-  --           [@codepoint@]: a Unicode codepoint to convert to UTF-8.
-  -> BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@dst@]: the location to write the encoded UTF-8. Must point to at least 4 bytes!
-  -> IO (BG.Ptr BG.CChar)
-sDL_UCS4ToUTF8 = hs_bindgen_bdc98e385efc6ab7
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_srand@
-foreign import ccall safe "hs_bindgen_bd195a3a2b34e483"
-  hs_bindgen_bd195a3a2b34e483_base
-    :: BG.Word64
-    -> IO ()
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_srand@
-hs_bindgen_bd195a3a2b34e483
-  :: Uint64
-  -> IO ()
-hs_bindgen_bd195a3a2b34e483 =
-  BG.fromFFIType hs_bindgen_bd195a3a2b34e483_base
-
--- | Seeds the pseudo-random number generator.
---
---     Reusing the seed number will cause @SDL_rand()@ to repeat the same stream of \'random\' numbers.
---
---     [Thread safety]: This should be called on the same thread that calls @SDL_rand()@
---
---     @since 3.2.0
---
---     [See also]: 'sDL_rand', 'sDL_rand_bits', 'sDL_randf'
---
---     [C declaration]: @SDL_srand@, defined at @SDL3\/SDL_stdinc.h 4302:34@
-sDL_srand
-  :: Uint64
-  -- ^
-  --
-  --           [@seed@]: the value to use as a random number seed, or 0 to use SDL_GetPerformanceCounter().
-  -> IO ()
-sDL_srand = hs_bindgen_bd195a3a2b34e483
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_rand@
-foreign import ccall safe "hs_bindgen_4b2da7e53b63ed17"
-  hs_bindgen_4b2da7e53b63ed17_base
-    :: BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_rand@
-hs_bindgen_4b2da7e53b63ed17
-  :: Sint32
-  -> IO Sint32
-hs_bindgen_4b2da7e53b63ed17 =
-  BG.fromFFIType hs_bindgen_4b2da7e53b63ed17_base
-
--- | Generate a pseudo-random number less than n for positive n
---
---     The method used is faster and of better quality than @rand() % n@. Odds are roughly 99.9% even for n = 1 million. Evenness is better for smaller n, and much worse as n gets bigger.
---
---     Example: to simulate a d6 use @SDL_rand(6) + 1@ The +1 converts 0..5 to 1..6
---
---     If you want to generate a pseudo-random number in the full range of 'Sint32', you should use: ('Sint32') @SDL_rand_bits()@
---
---     If you want reproducible output, be sure to initialize with @SDL_srand()@ first.
---
---     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
---
---     [Returns]: a random value in the range of [0 .. n-1].
---
---     [Thread safety]: All calls should be made from a single thread
---
---     @since 3.2.0
---
---     [See also]: 'sDL_srand', 'sDL_randf'
---
---     [C declaration]: @SDL_rand@, defined at @SDL3\/SDL_stdinc.h 4336:36@
-sDL_rand
-  :: Sint32
-  -- ^
-  --
-  --           [@n@]: the number of possible outcomes. n must be positive.
-  -> IO Sint32
-sDL_rand = hs_bindgen_4b2da7e53b63ed17
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_randf@
-foreign import ccall safe "hs_bindgen_91fe5edd016e0570"
-  hs_bindgen_91fe5edd016e0570_base
-    :: IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_randf@
-hs_bindgen_91fe5edd016e0570 :: IO BG.CFloat
-hs_bindgen_91fe5edd016e0570 =
-  BG.fromFFIType hs_bindgen_91fe5edd016e0570_base
-
--- | Generate a uniform pseudo-random floating point number less than 1.0
---
---     If you want reproducible output, be sure to initialize with @SDL_srand()@ first.
---
---     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
---
---     [Returns]: a random value in the range of [0.0, 1.0).
---
---     [Thread safety]: All calls should be made from a single thread
---
---     @since 3.2.0
---
---     [See also]: 'sDL_srand', 'sDL_rand'
---
---     [C declaration]: @SDL_randf@, defined at @SDL3\/SDL_stdinc.h 4359:35@
-sDL_randf :: IO BG.CFloat
-sDL_randf = hs_bindgen_91fe5edd016e0570
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_rand_bits@
-foreign import ccall safe "hs_bindgen_5d81c1c12775308d"
-  hs_bindgen_5d81c1c12775308d_base
-    :: IO BG.Word32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_rand_bits@
-hs_bindgen_5d81c1c12775308d :: IO Uint32
-hs_bindgen_5d81c1c12775308d =
-  BG.fromFFIType hs_bindgen_5d81c1c12775308d_base
-
--- | Generate 32 pseudo-random bits.
---
---     You likely want to use @SDL_rand()@ to get a psuedo-random number instead.
---
---     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
---
---     [Returns]: a random value in the range of [0-SDL_MAX_UINT32].
---
---     [Thread safety]: All calls should be made from a single thread
---
---     @since 3.2.0
---
---     [See also]: 'sDL_rand', 'sDL_randf', 'sDL_srand'
---
---     [C declaration]: @SDL_rand_bits@, defined at @SDL3\/SDL_stdinc.h 4382:36@
-sDL_rand_bits :: IO Uint32
-sDL_rand_bits = hs_bindgen_5d81c1c12775308d
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_rand_r@
-foreign import ccall safe "hs_bindgen_59abfd01a8d7b8f7"
-  hs_bindgen_59abfd01a8d7b8f7_base
-    :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_rand_r@
-hs_bindgen_59abfd01a8d7b8f7
-  :: BG.Ptr Uint64
-  -> Sint32
-  -> IO Sint32
-hs_bindgen_59abfd01a8d7b8f7 =
-  BG.fromFFIType hs_bindgen_59abfd01a8d7b8f7_base
-
--- | Generate a pseudo-random number less than n for positive n
---
---     The method used is faster and of better quality than @rand() % n@. Odds are roughly 99.9% even for n = 1 million. Evenness is better for smaller n, and much worse as n gets bigger.
---
---     Example: to simulate a d6 use @SDL_rand_r(state, 6) + 1@ The +1 converts 0..5 to 1..6
---
---     If you want to generate a pseudo-random number in the full range of 'Sint32', you should use: ('Sint32')SDL_rand_bits_r(state)
---
---     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
---
---     [Returns]: a random value in the range of [0 .. n-1].
---
---     [Thread safety]: This function is thread-safe, as long as the state pointer isn\'t shared between threads.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_rand', 'sDL_rand_bits_r', 'sDL_randf_r'
---
---     [C declaration]: @SDL_rand_r@, defined at @SDL3\/SDL_stdinc.h 4417:36@
-sDL_rand_r
-  :: BG.Ptr Uint64
-  -- ^
-  --
-  --           [@state@]: a pointer to the current random number state, this may not be NULL.
-  -> Sint32
-  -- ^
-  --
-  --           [@n@]: the number of possible outcomes. n must be positive.
-  -> IO Sint32
-sDL_rand_r = hs_bindgen_59abfd01a8d7b8f7
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_randf_r@
-foreign import ccall safe "hs_bindgen_5da60fff1ce7873d"
-  hs_bindgen_5da60fff1ce7873d_base
-    :: BG.Ptr BG.Void
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_randf_r@
-hs_bindgen_5da60fff1ce7873d
-  :: BG.Ptr Uint64
-  -> IO BG.CFloat
-hs_bindgen_5da60fff1ce7873d =
-  BG.fromFFIType hs_bindgen_5da60fff1ce7873d_base
-
--- | Generate a uniform pseudo-random floating point number less than 1.0
---
---     If you want reproducible output, be sure to initialize with @SDL_srand()@ first.
---
---     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
---
---     [Returns]: a random value in the range of [0.0, 1.0).
---
---     [Thread safety]: This function is thread-safe, as long as the state pointer isn\'t shared between threads.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_rand_bits_r', 'sDL_rand_r', 'sDL_randf'
---
---     [C declaration]: @SDL_randf_r@, defined at @SDL3\/SDL_stdinc.h 4444:35@
-sDL_randf_r
-  :: BG.Ptr Uint64
-  -- ^
-  --
-  --           [@state@]: a pointer to the current random number state, this may not be NULL.
-  -> IO BG.CFloat
-sDL_randf_r = hs_bindgen_5da60fff1ce7873d
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_rand_bits_r@
-foreign import ccall safe "hs_bindgen_23de01659ed6ba6b"
-  hs_bindgen_23de01659ed6ba6b_base
-    :: BG.Ptr BG.Void
-    -> IO BG.Word32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_rand_bits_r@
-hs_bindgen_23de01659ed6ba6b
-  :: BG.Ptr Uint64
-  -> IO Uint32
-hs_bindgen_23de01659ed6ba6b =
-  BG.fromFFIType hs_bindgen_23de01659ed6ba6b_base
-
--- | Generate 32 pseudo-random bits.
---
---     You likely want to use @SDL_rand_r()@ to get a psuedo-random number instead.
---
---     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
---
---     [Returns]: a random value in the range of [0-SDL_MAX_UINT32].
---
---     [Thread safety]: This function is thread-safe, as long as the state pointer isn\'t shared between threads.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_rand_r', 'sDL_randf_r'
---
---     [C declaration]: @SDL_rand_bits_r@, defined at @SDL3\/SDL_stdinc.h 4469:36@
-sDL_rand_bits_r
-  :: BG.Ptr Uint64
-  -- ^
-  --
-  --           [@state@]: a pointer to the current random number state, this may not be NULL.
-  -> IO Uint32
-sDL_rand_bits_r = hs_bindgen_23de01659ed6ba6b
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_acos@
-foreign import ccall safe "hs_bindgen_217308a0a788520d"
-  hs_bindgen_217308a0a788520d_base
-    :: Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_acos@
-hs_bindgen_217308a0a788520d
-  :: BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_217308a0a788520d =
-  BG.fromFFIType hs_bindgen_217308a0a788520d_base
-
--- | Compute the arc cosine of @x@.
---
---     The definition of @y = acos(x)@ is @x = cos(y)@.
---
---     Domain: @-1 \<= x \<= 1@
---
---     Range: @0 \<= y \<= Pi@
---
---     This function operates on double-precision floating point values, use SDL_acosf for single-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: arc cosine of @x@, in radians.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_acosf', 'sDL_asin', 'sDL_cos'
---
---     [C declaration]: @SDL_acos@, defined at @SDL3\/SDL_stdinc.h 4523:36@
-sDL_acos
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CDouble
-sDL_acos = hs_bindgen_217308a0a788520d
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_acosf@
-foreign import ccall safe "hs_bindgen_f093db4bb5e8e494"
-  hs_bindgen_f093db4bb5e8e494_base
-    :: Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_acosf@
-hs_bindgen_f093db4bb5e8e494
-  :: BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_f093db4bb5e8e494 =
-  BG.fromFFIType hs_bindgen_f093db4bb5e8e494_base
-
--- | Compute the arc cosine of @x@.
---
---     The definition of @y = acos(x)@ is @x = cos(y)@.
---
---     Domain: @-1 \<= x \<= 1@
---
---     Range: @0 \<= y \<= Pi@
---
---     This function operates on single-precision floating point values, use SDL_acos for double-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: arc cosine of @x@, in radians.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_acos', 'sDL_asinf', 'sDL_cosf'
---
---     [C declaration]: @SDL_acosf@, defined at @SDL3\/SDL_stdinc.h 4553:35@
-sDL_acosf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CFloat
-sDL_acosf = hs_bindgen_f093db4bb5e8e494
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_asin@
-foreign import ccall safe "hs_bindgen_205d9f923dff59cd"
-  hs_bindgen_205d9f923dff59cd_base
-    :: Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_asin@
-hs_bindgen_205d9f923dff59cd
-  :: BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_205d9f923dff59cd =
-  BG.fromFFIType hs_bindgen_205d9f923dff59cd_base
-
--- | Compute the arc sine of @x@.
---
---     The definition of @y = asin(x)@ is @x = sin(y)@.
---
---     Domain: @-1 \<= x \<= 1@
---
---     Range: @-Pi\/2 \<= y \<= Pi\/2@
---
---     This function operates on double-precision floating point values, use SDL_asinf for single-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: arc sine of @x@, in radians.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_asinf', 'sDL_acos', 'sDL_sin'
---
---     [C declaration]: @SDL_asin@, defined at @SDL3\/SDL_stdinc.h 4583:36@
-sDL_asin
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CDouble
-sDL_asin = hs_bindgen_205d9f923dff59cd
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_asinf@
-foreign import ccall safe "hs_bindgen_79771d582742f165"
-  hs_bindgen_79771d582742f165_base
-    :: Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_asinf@
-hs_bindgen_79771d582742f165
-  :: BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_79771d582742f165 =
-  BG.fromFFIType hs_bindgen_79771d582742f165_base
-
--- | Compute the arc sine of @x@.
---
---     The definition of @y = asin(x)@ is @x = sin(y)@.
---
---     Domain: @-1 \<= x \<= 1@
---
---     Range: @-Pi\/2 \<= y \<= Pi\/2@
---
---     This function operates on single-precision floating point values, use SDL_asin for double-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: arc sine of @x@, in radians.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_asin', 'sDL_acosf', 'sDL_sinf'
---
---     [C declaration]: @SDL_asinf@, defined at @SDL3\/SDL_stdinc.h 4613:35@
-sDL_asinf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CFloat
-sDL_asinf = hs_bindgen_79771d582742f165
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_atan@
-foreign import ccall safe "hs_bindgen_3051cbc85bd5efba"
-  hs_bindgen_3051cbc85bd5efba_base
-    :: Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_atan@
-hs_bindgen_3051cbc85bd5efba
-  :: BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_3051cbc85bd5efba =
-  BG.fromFFIType hs_bindgen_3051cbc85bd5efba_base
-
--- | Compute the arc tangent of @x@.
---
---     The definition of @y = atan(x)@ is @x = tan(y)@.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-Pi\/2 \<= y \<= Pi\/2@
---
---     This function operates on double-precision floating point values, use SDL_atanf for single-precision floats.
---
---     To calculate the arc tangent of y \/ x, use SDL_atan2.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: arc tangent of of @x@ in radians, or 0 if @x = 0@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_atanf', 'sDL_atan2', 'sDL_tan'
---
---     [C declaration]: @SDL_atan@, defined at @SDL3\/SDL_stdinc.h 4645:36@
-sDL_atan
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CDouble
-sDL_atan = hs_bindgen_3051cbc85bd5efba
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_atanf@
-foreign import ccall safe "hs_bindgen_7d0bcd6030adfae6"
-  hs_bindgen_7d0bcd6030adfae6_base
-    :: Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_atanf@
-hs_bindgen_7d0bcd6030adfae6
-  :: BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_7d0bcd6030adfae6 =
-  BG.fromFFIType hs_bindgen_7d0bcd6030adfae6_base
-
--- | Compute the arc tangent of @x@.
---
---     The definition of @y = atan(x)@ is @x = tan(y)@.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-Pi\/2 \<= y \<= Pi\/2@
---
---     This function operates on single-precision floating point values, use SDL_atan for dboule-precision floats.
---
---     To calculate the arc tangent of y \/ x, use SDL_atan2f.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: arc tangent of of @x@ in radians, or 0 if @x = 0@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_atan', 'sDL_atan2f', 'sDL_tanf'
---
---     [C declaration]: @SDL_atanf@, defined at @SDL3\/SDL_stdinc.h 4677:35@
-sDL_atanf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CFloat
-sDL_atanf = hs_bindgen_7d0bcd6030adfae6
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_atan2@
-foreign import ccall safe "hs_bindgen_9ae010b5b4d9f553"
-  hs_bindgen_9ae010b5b4d9f553_base
-    :: Double
-    -> Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_atan2@
-hs_bindgen_9ae010b5b4d9f553
-  :: BG.CDouble
-  -> BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_9ae010b5b4d9f553 =
-  BG.fromFFIType hs_bindgen_9ae010b5b4d9f553_base
-
--- | Compute the arc tangent of @y \/ x@, using the signs of x and y to adjust the result\'s quadrant.
---
---     The definition of @z = atan2(x, y)@ is @y = x tan(z)@, where the quadrant of z is determined based on the signs of x and y.
---
---     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= INF@
---
---     Range: @-Pi \<= y \<= Pi@
---
---     This function operates on double-precision floating point values, use SDL_atan2f for single-precision floats.
---
---     To calculate the arc tangent of a single value, use SDL_atan.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: arc tangent of of @y \/ x@ in radians, or, if @x = 0@, either @-Pi\/2@, @0@, or @Pi\/2@, depending on the value of @y@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_atan2f', 'sDL_atan', 'sDL_tan'
---
---     [C declaration]: @SDL_atan2@, defined at @SDL3\/SDL_stdinc.h 4713:36@
-sDL_atan2
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@y@]: floating point value of the numerator (y coordinate).
-  -> BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value of the denominator (x coordinate).
-  -> IO BG.CDouble
-sDL_atan2 = hs_bindgen_9ae010b5b4d9f553
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_atan2f@
-foreign import ccall safe "hs_bindgen_3eac4b1bfc5aff58"
-  hs_bindgen_3eac4b1bfc5aff58_base
-    :: Float
-    -> Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_atan2f@
-hs_bindgen_3eac4b1bfc5aff58
-  :: BG.CFloat
-  -> BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_3eac4b1bfc5aff58 =
-  BG.fromFFIType hs_bindgen_3eac4b1bfc5aff58_base
-
--- | Compute the arc tangent of @y \/ x@, using the signs of x and y to adjust the result\'s quadrant.
---
---     The definition of @z = atan2(x, y)@ is @y = x tan(z)@, where the quadrant of z is determined based on the signs of x and y.
---
---     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= INF@
---
---     Range: @-Pi \<= y \<= Pi@
---
---     This function operates on single-precision floating point values, use SDL_atan2 for double-precision floats.
---
---     To calculate the arc tangent of a single value, use SDL_atanf.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: arc tangent of of @y \/ x@ in radians, or, if @x = 0@, either @-Pi\/2@, @0@, or @Pi\/2@, depending on the value of @y@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_atan2', 'sDL_atan', 'sDL_tan'
---
---     [C declaration]: @SDL_atan2f@, defined at @SDL3\/SDL_stdinc.h 4749:35@
-sDL_atan2f
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@y@]: floating point value of the numerator (y coordinate).
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value of the denominator (x coordinate).
-  -> IO BG.CFloat
-sDL_atan2f = hs_bindgen_3eac4b1bfc5aff58
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_ceil@
-foreign import ccall safe "hs_bindgen_1630cb0e3a004beb"
-  hs_bindgen_1630cb0e3a004beb_base
-    :: Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_ceil@
-hs_bindgen_1630cb0e3a004beb
-  :: BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_1630cb0e3a004beb =
-  BG.fromFFIType hs_bindgen_1630cb0e3a004beb_base
-
--- | Compute the ceiling of @x@.
---
---     The ceiling of @x@ is the smallest integer @y@ such that @y >= x@, i.e @x@ rounded up to the nearest integer.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-INF \<= y \<= INF@, y integer
---
---     This function operates on double-precision floating point values, use SDL_ceilf for single-precision floats.
---
---     [Returns]: the ceiling of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_ceilf', 'sDL_floor', 'sDL_trunc', 'sDL_round', @SDL_lround@
---
---     [C declaration]: @SDL_ceil@, defined at @SDL3\/SDL_stdinc.h 4777:36@
-sDL_ceil
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CDouble
-sDL_ceil = hs_bindgen_1630cb0e3a004beb
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_ceilf@
-foreign import ccall safe "hs_bindgen_04a706bfcc971297"
-  hs_bindgen_04a706bfcc971297_base
-    :: Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_ceilf@
-hs_bindgen_04a706bfcc971297
-  :: BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_04a706bfcc971297 =
-  BG.fromFFIType hs_bindgen_04a706bfcc971297_base
-
--- | Compute the ceiling of @x@.
---
---     The ceiling of @x@ is the smallest integer @y@ such that @y >= x@, i.e @x@ rounded up to the nearest integer.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-INF \<= y \<= INF@, y integer
---
---     This function operates on single-precision floating point values, use SDL_ceil for double-precision floats.
---
---     [Returns]: the ceiling of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_ceil', 'sDL_floorf', 'sDL_truncf', 'sDL_roundf', @SDL_lroundf@
---
---     [C declaration]: @SDL_ceilf@, defined at @SDL3\/SDL_stdinc.h 4805:35@
-sDL_ceilf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CFloat
-sDL_ceilf = hs_bindgen_04a706bfcc971297
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_copysign@
-foreign import ccall safe "hs_bindgen_fed0484ab850ee6a"
-  hs_bindgen_fed0484ab850ee6a_base
-    :: Double
-    -> Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_copysign@
-hs_bindgen_fed0484ab850ee6a
-  :: BG.CDouble
-  -> BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_fed0484ab850ee6a =
-  BG.fromFFIType hs_bindgen_fed0484ab850ee6a_base
-
--- | Copy the sign of one floating-point value to another.
---
---     The definition of copysign is that @copysign(x, y) = abs(x) * sign(y)@.
---
---     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= f@
---
---     Range: @-INF \<= z \<= INF@
---
---     This function operates on double-precision floating point values, use SDL_copysignf for single-precision floats.
---
---     [Returns]: the floating point value with the sign of y and the magnitude of x.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_copysignf', 'sDL_fabs'
---
---     [C declaration]: @SDL_copysign@, defined at @SDL3\/SDL_stdinc.h 4831:36@
-sDL_copysign
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value to use as the magnitude.
-  -> BG.CDouble
-  -- ^
-  --
-  --           [@y@]: floating point value to use as the sign.
-  -> IO BG.CDouble
-sDL_copysign = hs_bindgen_fed0484ab850ee6a
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_copysignf@
-foreign import ccall safe "hs_bindgen_d21fe858af73dd98"
-  hs_bindgen_d21fe858af73dd98_base
-    :: Float
-    -> Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_copysignf@
-hs_bindgen_d21fe858af73dd98
-  :: BG.CFloat
-  -> BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_d21fe858af73dd98 =
-  BG.fromFFIType hs_bindgen_d21fe858af73dd98_base
-
--- | Copy the sign of one floating-point value to another.
---
---     The definition of copysign is that @copysign(x, y) = abs(x) * sign(y)@.
---
---     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= f@
---
---     Range: @-INF \<= z \<= INF@
---
---     This function operates on single-precision floating point values, use SDL_copysign for double-precision floats.
---
---     [Returns]: the floating point value with the sign of y and the magnitude of x.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_copysign', 'sDL_fabsf'
---
---     [C declaration]: @SDL_copysignf@, defined at @SDL3\/SDL_stdinc.h 4857:35@
-sDL_copysignf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value to use as the magnitude.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@y@]: floating point value to use as the sign.
-  -> IO BG.CFloat
-sDL_copysignf = hs_bindgen_d21fe858af73dd98
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_cos@
-foreign import ccall safe "hs_bindgen_a4c38d6732d22ffb"
-  hs_bindgen_a4c38d6732d22ffb_base
-    :: Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_cos@
-hs_bindgen_a4c38d6732d22ffb
-  :: BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_a4c38d6732d22ffb =
-  BG.fromFFIType hs_bindgen_a4c38d6732d22ffb_base
-
--- | Compute the cosine of @x@.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-1 \<= y \<= 1@
---
---     This function operates on double-precision floating point values, use SDL_cosf for single-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: cosine of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_cosf', 'sDL_acos', 'sDL_sin'
---
---     [C declaration]: @SDL_cos@, defined at @SDL3\/SDL_stdinc.h 4885:36@
-sDL_cos
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value, in radians.
-  -> IO BG.CDouble
-sDL_cos = hs_bindgen_a4c38d6732d22ffb
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_cosf@
-foreign import ccall safe "hs_bindgen_ad11505e8fd49060"
-  hs_bindgen_ad11505e8fd49060_base
-    :: Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_cosf@
-hs_bindgen_ad11505e8fd49060
-  :: BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_ad11505e8fd49060 =
-  BG.fromFFIType hs_bindgen_ad11505e8fd49060_base
-
--- | Compute the cosine of @x@.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-1 \<= y \<= 1@
---
---     This function operates on single-precision floating point values, use SDL_cos for double-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: cosine of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_cos', 'sDL_acosf', 'sDL_sinf'
---
---     [C declaration]: @SDL_cosf@, defined at @SDL3\/SDL_stdinc.h 4913:35@
-sDL_cosf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value, in radians.
-  -> IO BG.CFloat
-sDL_cosf = hs_bindgen_ad11505e8fd49060
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_exp@
-foreign import ccall safe "hs_bindgen_ffaa0913f3d0c63c"
-  hs_bindgen_ffaa0913f3d0c63c_base
-    :: Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_exp@
-hs_bindgen_ffaa0913f3d0c63c
-  :: BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_ffaa0913f3d0c63c =
-  BG.fromFFIType hs_bindgen_ffaa0913f3d0c63c_base
-
--- | Compute the exponential of @x@.
---
---     The definition of @y = exp(x)@ is @y = e^x@, where @e@ is the base of the natural logarithm. The inverse is the natural logarithm, SDL_log.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @0 \<= y \<= INF@
---
---     The output will overflow if @exp(x)@ is too large to be represented.
---
---     This function operates on double-precision floating point values, use SDL_expf for single-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: value of @e^x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_expf', 'sDL_log'
---
---     [C declaration]: @SDL_exp@, defined at @SDL3\/SDL_stdinc.h 4945:36@
-sDL_exp
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CDouble
-sDL_exp = hs_bindgen_ffaa0913f3d0c63c
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_expf@
-foreign import ccall safe "hs_bindgen_4d5e3977a4eb4c12"
-  hs_bindgen_4d5e3977a4eb4c12_base
-    :: Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_expf@
-hs_bindgen_4d5e3977a4eb4c12
-  :: BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_4d5e3977a4eb4c12 =
-  BG.fromFFIType hs_bindgen_4d5e3977a4eb4c12_base
-
--- | Compute the exponential of @x@.
---
---     The definition of @y = exp(x)@ is @y = e^x@, where @e@ is the base of the natural logarithm. The inverse is the natural logarithm, SDL_logf.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @0 \<= y \<= INF@
---
---     The output will overflow if @exp(x)@ is too large to be represented.
---
---     This function operates on single-precision floating point values, use SDL_exp for double-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: value of @e^x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_exp', 'sDL_logf'
---
---     [C declaration]: @SDL_expf@, defined at @SDL3\/SDL_stdinc.h 4977:35@
-sDL_expf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CFloat
-sDL_expf = hs_bindgen_4d5e3977a4eb4c12
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_fabs@
-foreign import ccall safe "hs_bindgen_89730ae2b638ee61"
-  hs_bindgen_89730ae2b638ee61_base
-    :: Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_fabs@
-hs_bindgen_89730ae2b638ee61
-  :: BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_89730ae2b638ee61 =
-  BG.fromFFIType hs_bindgen_89730ae2b638ee61_base
-
--- | Compute the absolute value of @x@
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @0 \<= y \<= INF@
---
---     This function operates on double-precision floating point values, use SDL_fabsf for single-precision floats.
---
---     [Returns]: the absolute value of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_fabsf'
---
---     [C declaration]: @SDL_fabs@, defined at @SDL3\/SDL_stdinc.h 4998:36@
-sDL_fabs
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value to use as the magnitude.
-  -> IO BG.CDouble
-sDL_fabs = hs_bindgen_89730ae2b638ee61
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_fabsf@
-foreign import ccall safe "hs_bindgen_4e76324c9b8f7453"
-  hs_bindgen_4e76324c9b8f7453_base
-    :: Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_fabsf@
-hs_bindgen_4e76324c9b8f7453
-  :: BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_4e76324c9b8f7453 =
-  BG.fromFFIType hs_bindgen_4e76324c9b8f7453_base
-
--- | Compute the absolute value of @x@
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @0 \<= y \<= INF@
---
---     This function operates on single-precision floating point values, use SDL_fabs for double-precision floats.
---
---     [Returns]: the absolute value of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_fabs'
---
---     [C declaration]: @SDL_fabsf@, defined at @SDL3\/SDL_stdinc.h 5019:35@
-sDL_fabsf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value to use as the magnitude.
-  -> IO BG.CFloat
-sDL_fabsf = hs_bindgen_4e76324c9b8f7453
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_floor@
-foreign import ccall safe "hs_bindgen_4c646d1d6b7e922f"
-  hs_bindgen_4c646d1d6b7e922f_base
-    :: Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_floor@
-hs_bindgen_4c646d1d6b7e922f
-  :: BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_4c646d1d6b7e922f =
-  BG.fromFFIType hs_bindgen_4c646d1d6b7e922f_base
-
--- | Compute the floor of @x@.
---
---     The floor of @x@ is the largest integer @y@ such that @y \<= x@, i.e @x@ rounded down to the nearest integer.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-INF \<= y \<= INF@, y integer
---
---     This function operates on double-precision floating point values, use SDL_floorf for single-precision floats.
---
---     [Returns]: the floor of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_floorf', 'sDL_ceil', 'sDL_trunc', 'sDL_round', @SDL_lround@
---
---     [C declaration]: @SDL_floor@, defined at @SDL3\/SDL_stdinc.h 5047:36@
-sDL_floor
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CDouble
-sDL_floor = hs_bindgen_4c646d1d6b7e922f
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_floorf@
-foreign import ccall safe "hs_bindgen_db6fbb0a591a2804"
-  hs_bindgen_db6fbb0a591a2804_base
-    :: Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_floorf@
-hs_bindgen_db6fbb0a591a2804
-  :: BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_db6fbb0a591a2804 =
-  BG.fromFFIType hs_bindgen_db6fbb0a591a2804_base
-
--- | Compute the floor of @x@.
---
---     The floor of @x@ is the largest integer @y@ such that @y \<= x@, i.e @x@ rounded down to the nearest integer.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-INF \<= y \<= INF@, y integer
---
---     This function operates on single-precision floating point values, use SDL_floor for double-precision floats.
---
---     [Returns]: the floor of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_floor', 'sDL_ceilf', 'sDL_truncf', 'sDL_roundf', @SDL_lroundf@
---
---     [C declaration]: @SDL_floorf@, defined at @SDL3\/SDL_stdinc.h 5075:35@
-sDL_floorf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CFloat
-sDL_floorf = hs_bindgen_db6fbb0a591a2804
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_trunc@
-foreign import ccall safe "hs_bindgen_2b4f0ab682c421b7"
-  hs_bindgen_2b4f0ab682c421b7_base
-    :: Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_trunc@
-hs_bindgen_2b4f0ab682c421b7
-  :: BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_2b4f0ab682c421b7 =
-  BG.fromFFIType hs_bindgen_2b4f0ab682c421b7_base
-
--- | Truncate @x@ to an integer.
---
---     Rounds @x@ to the next closest integer to 0. This is equivalent to removing the fractional part of @x@, leaving only the integer part.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-INF \<= y \<= INF@, y integer
---
---     This function operates on double-precision floating point values, use SDL_truncf for single-precision floats.
---
---     [Returns]: @x@ truncated to an integer.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_truncf', 'sDL_fmod', 'sDL_ceil', 'sDL_floor', 'sDL_round', @SDL_lround@
---
---     [C declaration]: @SDL_trunc@, defined at @SDL3\/SDL_stdinc.h 5104:36@
-sDL_trunc
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CDouble
-sDL_trunc = hs_bindgen_2b4f0ab682c421b7
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_truncf@
-foreign import ccall safe "hs_bindgen_afe8ddb39d52a293"
-  hs_bindgen_afe8ddb39d52a293_base
-    :: Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_truncf@
-hs_bindgen_afe8ddb39d52a293
-  :: BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_afe8ddb39d52a293 =
-  BG.fromFFIType hs_bindgen_afe8ddb39d52a293_base
-
--- | Truncate @x@ to an integer.
---
---     Rounds @x@ to the next closest integer to 0. This is equivalent to removing the fractional part of @x@, leaving only the integer part.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-INF \<= y \<= INF@, y integer
---
---     This function operates on single-precision floating point values, use SDL_trunc for double-precision floats.
---
---     [Returns]: @x@ truncated to an integer.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_trunc', 'sDL_fmodf', 'sDL_ceilf', 'sDL_floorf', 'sDL_roundf', @SDL_lroundf@
---
---     [C declaration]: @SDL_truncf@, defined at @SDL3\/SDL_stdinc.h 5133:35@
-sDL_truncf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CFloat
-sDL_truncf = hs_bindgen_afe8ddb39d52a293
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_fmod@
-foreign import ccall safe "hs_bindgen_f1fc4d1a8a6fd613"
-  hs_bindgen_f1fc4d1a8a6fd613_base
-    :: Double
-    -> Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_fmod@
-hs_bindgen_f1fc4d1a8a6fd613
-  :: BG.CDouble
-  -> BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_f1fc4d1a8a6fd613 =
-  BG.fromFFIType hs_bindgen_f1fc4d1a8a6fd613_base
-
--- | Return the floating-point remainder of @x \/ y@
---
---     Divides @x@ by @y@, and returns the remainder.
---
---     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= INF@, @y != 0@
---
---     Range: @-y \<= z \<= y@
---
---     This function operates on double-precision floating point values, use SDL_fmodf for single-precision floats.
---
---     [Returns]: the remainder of @x \/ y@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_fmodf', 'sDL_modf', 'sDL_trunc', 'sDL_ceil', 'sDL_floor', 'sDL_round', @SDL_lround@
---
---     [C declaration]: @SDL_fmod@, defined at @SDL3\/SDL_stdinc.h 5163:36@
-sDL_fmod
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: the numerator.
-  -> BG.CDouble
-  -- ^
-  --
-  --           [@y@]: the denominator. Must not be 0.
-  -> IO BG.CDouble
-sDL_fmod = hs_bindgen_f1fc4d1a8a6fd613
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_fmodf@
-foreign import ccall safe "hs_bindgen_19c2a30dd6614c51"
-  hs_bindgen_19c2a30dd6614c51_base
-    :: Float
-    -> Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_fmodf@
-hs_bindgen_19c2a30dd6614c51
-  :: BG.CFloat
-  -> BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_19c2a30dd6614c51 =
-  BG.fromFFIType hs_bindgen_19c2a30dd6614c51_base
-
--- | Return the floating-point remainder of @x \/ y@
---
---     Divides @x@ by @y@, and returns the remainder.
---
---     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= INF@, @y != 0@
---
---     Range: @-y \<= z \<= y@
---
---     This function operates on single-precision floating point values, use SDL_fmod for double-precision floats.
---
---     [Returns]: the remainder of @x \/ y@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_fmod', 'sDL_truncf', 'sDL_modff', 'sDL_ceilf', 'sDL_floorf', 'sDL_roundf', @SDL_lroundf@
---
---     [C declaration]: @SDL_fmodf@, defined at @SDL3\/SDL_stdinc.h 5193:35@
-sDL_fmodf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: the numerator.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@y@]: the denominator. Must not be 0.
-  -> IO BG.CFloat
-sDL_fmodf = hs_bindgen_19c2a30dd6614c51
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isinf@
-foreign import ccall safe "hs_bindgen_9be13530739c3139"
-  hs_bindgen_9be13530739c3139_base
-    :: Double
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isinf@
-hs_bindgen_9be13530739c3139
-  :: BG.CDouble
-  -> IO BG.CInt
-hs_bindgen_9be13530739c3139 =
-  BG.fromFFIType hs_bindgen_9be13530739c3139_base
-
--- | Return whether the value is infinity.
---
---     [Returns]: non-zero if the value is infinity, 0 otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_isinff'
---
---     [C declaration]: @SDL_isinf@, defined at @SDL3\/SDL_stdinc.h 5207:33@
-sDL_isinf
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: double-precision floating point value.
-  -> IO BG.CInt
-sDL_isinf = hs_bindgen_9be13530739c3139
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isinff@
-foreign import ccall safe "hs_bindgen_d063ada15b71ed19"
-  hs_bindgen_d063ada15b71ed19_base
-    :: Float
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isinff@
-hs_bindgen_d063ada15b71ed19
-  :: BG.CFloat
-  -> IO BG.CInt
-hs_bindgen_d063ada15b71ed19 =
-  BG.fromFFIType hs_bindgen_d063ada15b71ed19_base
-
--- | Return whether the value is infinity.
---
---     [Returns]: non-zero if the value is infinity, 0 otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_isinf'
---
---     [C declaration]: @SDL_isinff@, defined at @SDL3\/SDL_stdinc.h 5221:33@
-sDL_isinff
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CInt
-sDL_isinff = hs_bindgen_d063ada15b71ed19
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isnan@
-foreign import ccall safe "hs_bindgen_bb4d9f6611f2a512"
-  hs_bindgen_bb4d9f6611f2a512_base
-    :: Double
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isnan@
-hs_bindgen_bb4d9f6611f2a512
-  :: BG.CDouble
-  -> IO BG.CInt
-hs_bindgen_bb4d9f6611f2a512 =
-  BG.fromFFIType hs_bindgen_bb4d9f6611f2a512_base
-
--- | Return whether the value is NaN.
---
---     [Returns]: non-zero if the value is NaN, 0 otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_isnanf'
---
---     [C declaration]: @SDL_isnan@, defined at @SDL3\/SDL_stdinc.h 5235:33@
-sDL_isnan
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: double-precision floating point value.
-  -> IO BG.CInt
-sDL_isnan = hs_bindgen_bb4d9f6611f2a512
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isnanf@
-foreign import ccall safe "hs_bindgen_48e10ed50de37991"
-  hs_bindgen_48e10ed50de37991_base
-    :: Float
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isnanf@
-hs_bindgen_48e10ed50de37991
-  :: BG.CFloat
-  -> IO BG.CInt
-hs_bindgen_48e10ed50de37991 =
-  BG.fromFFIType hs_bindgen_48e10ed50de37991_base
-
--- | Return whether the value is NaN.
---
---     [Returns]: non-zero if the value is NaN, 0 otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_isnan'
---
---     [C declaration]: @SDL_isnanf@, defined at @SDL3\/SDL_stdinc.h 5249:33@
-sDL_isnanf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CInt
-sDL_isnanf = hs_bindgen_48e10ed50de37991
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_log@
-foreign import ccall safe "hs_bindgen_46922ccc470e92e0"
-  hs_bindgen_46922ccc470e92e0_base
-    :: Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_log@
-hs_bindgen_46922ccc470e92e0
-  :: BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_46922ccc470e92e0 =
-  BG.fromFFIType hs_bindgen_46922ccc470e92e0_base
-
--- | Compute the natural logarithm of @x@.
---
---     Domain: @0 \< x \<= INF@
---
---     Range: @-INF \<= y \<= INF@
---
---     It is an error for @x@ to be less than or equal to 0.
---
---     This function operates on double-precision floating point values, use SDL_logf for single-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: the natural logarithm of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_logf', 'sDL_log10', 'sDL_exp'
---
---     [C declaration]: @SDL_log@, defined at @SDL3\/SDL_stdinc.h 5279:36@
-sDL_log
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value. Must be greater than 0.
-  -> IO BG.CDouble
-sDL_log = hs_bindgen_46922ccc470e92e0
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_logf@
-foreign import ccall safe "hs_bindgen_7ef0b9f4239eb37e"
-  hs_bindgen_7ef0b9f4239eb37e_base
-    :: Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_logf@
-hs_bindgen_7ef0b9f4239eb37e
-  :: BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_7ef0b9f4239eb37e =
-  BG.fromFFIType hs_bindgen_7ef0b9f4239eb37e_base
-
--- | Compute the natural logarithm of @x@.
---
---     Domain: @0 \< x \<= INF@
---
---     Range: @-INF \<= y \<= INF@
---
---     It is an error for @x@ to be less than or equal to 0.
---
---     This function operates on single-precision floating point values, use SDL_log for double-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: the natural logarithm of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_log', 'sDL_expf'
---
---     [C declaration]: @SDL_logf@, defined at @SDL3\/SDL_stdinc.h 5308:35@
-sDL_logf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value. Must be greater than 0.
-  -> IO BG.CFloat
-sDL_logf = hs_bindgen_7ef0b9f4239eb37e
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_log10@
-foreign import ccall safe "hs_bindgen_bc1ad316da1b3bbc"
-  hs_bindgen_bc1ad316da1b3bbc_base
-    :: Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_log10@
-hs_bindgen_bc1ad316da1b3bbc
-  :: BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_bc1ad316da1b3bbc =
-  BG.fromFFIType hs_bindgen_bc1ad316da1b3bbc_base
-
--- | Compute the base-10 logarithm of @x@.
---
---     Domain: @0 \< x \<= INF@
---
---     Range: @-INF \<= y \<= INF@
---
---     It is an error for @x@ to be less than or equal to 0.
---
---     This function operates on double-precision floating point values, use SDL_log10f for single-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: the logarithm of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_log10f', 'sDL_log', 'sDL_pow'
---
---     [C declaration]: @SDL_log10@, defined at @SDL3\/SDL_stdinc.h 5338:36@
-sDL_log10
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value. Must be greater than 0.
-  -> IO BG.CDouble
-sDL_log10 = hs_bindgen_bc1ad316da1b3bbc
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_log10f@
-foreign import ccall safe "hs_bindgen_310aebbf28df3250"
-  hs_bindgen_310aebbf28df3250_base
-    :: Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_log10f@
-hs_bindgen_310aebbf28df3250
-  :: BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_310aebbf28df3250 =
-  BG.fromFFIType hs_bindgen_310aebbf28df3250_base
-
--- | Compute the base-10 logarithm of @x@.
---
---     Domain: @0 \< x \<= INF@
---
---     Range: @-INF \<= y \<= INF@
---
---     It is an error for @x@ to be less than or equal to 0.
---
---     This function operates on single-precision floating point values, use SDL_log10 for double-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: the logarithm of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_log10', 'sDL_logf', 'sDL_powf'
---
---     [C declaration]: @SDL_log10f@, defined at @SDL3\/SDL_stdinc.h 5368:35@
-sDL_log10f
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value. Must be greater than 0.
-  -> IO BG.CFloat
-sDL_log10f = hs_bindgen_310aebbf28df3250
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_modf@
-foreign import ccall safe "hs_bindgen_93a468f91c55ba99"
-  hs_bindgen_93a468f91c55ba99_base
-    :: Double
-    -> BG.Ptr BG.Void
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_modf@
-hs_bindgen_93a468f91c55ba99
-  :: BG.CDouble
-  -> BG.Ptr BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_93a468f91c55ba99 =
-  BG.fromFFIType hs_bindgen_93a468f91c55ba99_base
-
--- | Split @x@ into integer and fractional parts
---
---     This function operates on double-precision floating point values, use SDL_modff for single-precision floats.
---
---     [Returns]: the fractional part of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_modff', 'sDL_trunc', 'sDL_fmod'
---
---     [C declaration]: @SDL_modf@, defined at @SDL3\/SDL_stdinc.h 5388:36@
-sDL_modf
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> BG.Ptr BG.CDouble
-  -- ^
-  --
-  --           [@y@]: output pointer to store the integer part of @x@.
-  -> IO BG.CDouble
-sDL_modf = hs_bindgen_93a468f91c55ba99
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_modff@
-foreign import ccall safe "hs_bindgen_76a18e33bbbed6ee"
-  hs_bindgen_76a18e33bbbed6ee_base
-    :: Float
-    -> BG.Ptr BG.Void
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_modff@
-hs_bindgen_76a18e33bbbed6ee
-  :: BG.CFloat
-  -> BG.Ptr BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_76a18e33bbbed6ee =
-  BG.fromFFIType hs_bindgen_76a18e33bbbed6ee_base
-
--- | Split @x@ into integer and fractional parts
---
---     This function operates on single-precision floating point values, use SDL_modf for double-precision floats.
---
---     [Returns]: the fractional part of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_modf', 'sDL_truncf', 'sDL_fmodf'
---
---     [C declaration]: @SDL_modff@, defined at @SDL3\/SDL_stdinc.h 5408:35@
-sDL_modff
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@y@]: output pointer to store the integer part of @x@.
-  -> IO BG.CFloat
-sDL_modff = hs_bindgen_76a18e33bbbed6ee
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_pow@
-foreign import ccall safe "hs_bindgen_b8c28ba00815fbb9"
-  hs_bindgen_b8c28ba00815fbb9_base
-    :: Double
-    -> Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_pow@
-hs_bindgen_b8c28ba00815fbb9
-  :: BG.CDouble
-  -> BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_b8c28ba00815fbb9 =
-  BG.fromFFIType hs_bindgen_b8c28ba00815fbb9_base
-
--- | Raise @x@ to the power @y@
---
---     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= INF@
---
---     Range: @-INF \<= z \<= INF@
---
---     If @y@ is the base of the natural logarithm (e), consider using SDL_exp instead.
---
---     This function operates on double-precision floating point values, use SDL_powf for single-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: @x@ raised to the power @y@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_powf', 'sDL_exp', 'sDL_log'
---
---     [C declaration]: @SDL_pow@, defined at @SDL3\/SDL_stdinc.h 5440:36@
-sDL_pow
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: the base.
-  -> BG.CDouble
-  -- ^
-  --
-  --           [@y@]: the exponent.
-  -> IO BG.CDouble
-sDL_pow = hs_bindgen_b8c28ba00815fbb9
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_powf@
-foreign import ccall safe "hs_bindgen_d853802a7561099f"
-  hs_bindgen_d853802a7561099f_base
-    :: Float
-    -> Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_powf@
-hs_bindgen_d853802a7561099f
-  :: BG.CFloat
-  -> BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_d853802a7561099f =
-  BG.fromFFIType hs_bindgen_d853802a7561099f_base
-
--- | Raise @x@ to the power @y@
---
---     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= INF@
---
---     Range: @-INF \<= z \<= INF@
---
---     If @y@ is the base of the natural logarithm (e), consider using SDL_exp instead.
---
---     This function operates on single-precision floating point values, use SDL_pow for double-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: @x@ raised to the power @y@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_pow', 'sDL_expf', 'sDL_logf'
---
---     [C declaration]: @SDL_powf@, defined at @SDL3\/SDL_stdinc.h 5472:35@
-sDL_powf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: the base.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@y@]: the exponent.
-  -> IO BG.CFloat
-sDL_powf = hs_bindgen_d853802a7561099f
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_round@
-foreign import ccall safe "hs_bindgen_097e1eceb090a078"
-  hs_bindgen_097e1eceb090a078_base
-    :: Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_round@
-hs_bindgen_097e1eceb090a078
-  :: BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_097e1eceb090a078 =
-  BG.fromFFIType hs_bindgen_097e1eceb090a078_base
-
--- | Round @x@ to the nearest integer.
---
---     Rounds @x@ to the nearest integer. Values halfway between integers will be rounded away from zero.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-INF \<= y \<= INF@, y integer
---
---     This function operates on double-precision floating point values, use SDL_roundf for single-precision floats. To get the result as an integer type, use SDL_lround.
---
---     [Returns]: the nearest integer to @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_roundf', @SDL_lround@, 'sDL_floor', 'sDL_ceil', 'sDL_trunc'
---
---     [C declaration]: @SDL_round@, defined at @SDL3\/SDL_stdinc.h 5501:36@
-sDL_round
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CDouble
-sDL_round = hs_bindgen_097e1eceb090a078
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_roundf@
-foreign import ccall safe "hs_bindgen_5b677097112f1617"
-  hs_bindgen_5b677097112f1617_base
-    :: Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_roundf@
-hs_bindgen_5b677097112f1617
-  :: BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_5b677097112f1617 =
-  BG.fromFFIType hs_bindgen_5b677097112f1617_base
-
--- | Round @x@ to the nearest integer.
---
---     Rounds @x@ to the nearest integer. Values halfway between integers will be rounded away from zero.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-INF \<= y \<= INF@, y integer
---
---     This function operates on single-precision floating point values, use SDL_round for double-precision floats. To get the result as an integer type, use SDL_lroundf.
---
---     [Returns]: the nearest integer to @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_round', @SDL_lroundf@, 'sDL_floorf', 'sDL_ceilf', 'sDL_truncf'
---
---     [C declaration]: @SDL_roundf@, defined at @SDL3\/SDL_stdinc.h 5530:35@
-sDL_roundf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CFloat
-sDL_roundf = hs_bindgen_5b677097112f1617
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_scalbn@
-foreign import ccall safe "hs_bindgen_8038e0526522260c"
-  hs_bindgen_8038e0526522260c_base
-    :: Double
-    -> BG.Int32
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_scalbn@
-hs_bindgen_8038e0526522260c
-  :: BG.CDouble
-  -> BG.CInt
-  -> IO BG.CDouble
-hs_bindgen_8038e0526522260c =
-  BG.fromFFIType hs_bindgen_8038e0526522260c_base
-
--- | Scale @x@ by an integer power of two.
---
---     Multiplies @x@ by the @n@ th power of the floating point radix (always 2).
---
---     Domain: @-INF \<= x \<= INF@, @n@ integer
---
---     Range: @-INF \<= y \<= INF@
---
---     This function operates on double-precision floating point values, use SDL_scalbnf for single-precision floats.
---
---     [Returns]: @x * 2^n@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_scalbnf', 'sDL_pow'
---
---     [C declaration]: @SDL_scalbn@, defined at @SDL3\/SDL_stdinc.h 5613:36@
-sDL_scalbn
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value to be scaled.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@n@]: integer exponent.
-  -> IO BG.CDouble
-sDL_scalbn = hs_bindgen_8038e0526522260c
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_scalbnf@
-foreign import ccall safe "hs_bindgen_fc0cb80cec8a11b0"
-  hs_bindgen_fc0cb80cec8a11b0_base
-    :: Float
-    -> BG.Int32
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_scalbnf@
-hs_bindgen_fc0cb80cec8a11b0
-  :: BG.CFloat
-  -> BG.CInt
-  -> IO BG.CFloat
-hs_bindgen_fc0cb80cec8a11b0 =
-  BG.fromFFIType hs_bindgen_fc0cb80cec8a11b0_base
-
--- | Scale @x@ by an integer power of two.
---
---     Multiplies @x@ by the @n@ th power of the floating point radix (always 2).
---
---     Domain: @-INF \<= x \<= INF@, @n@ integer
---
---     Range: @-INF \<= y \<= INF@
---
---     This function operates on single-precision floating point values, use SDL_scalbn for double-precision floats.
---
---     [Returns]: @x * 2^n@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_scalbn', 'sDL_powf'
---
---     [C declaration]: @SDL_scalbnf@, defined at @SDL3\/SDL_stdinc.h 5638:35@
-sDL_scalbnf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value to be scaled.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@n@]: integer exponent.
-  -> IO BG.CFloat
-sDL_scalbnf = hs_bindgen_fc0cb80cec8a11b0
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_sin@
-foreign import ccall safe "hs_bindgen_d062c0d717121757"
-  hs_bindgen_d062c0d717121757_base
-    :: Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_sin@
-hs_bindgen_d062c0d717121757
-  :: BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_d062c0d717121757 =
-  BG.fromFFIType hs_bindgen_d062c0d717121757_base
-
--- | Compute the sine of @x@.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-1 \<= y \<= 1@
---
---     This function operates on double-precision floating point values, use SDL_sinf for single-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: sine of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_sinf', 'sDL_asin', 'sDL_cos'
---
---     [C declaration]: @SDL_sin@, defined at @SDL3\/SDL_stdinc.h 5666:36@
-sDL_sin
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value, in radians.
-  -> IO BG.CDouble
-sDL_sin = hs_bindgen_d062c0d717121757
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_sinf@
-foreign import ccall safe "hs_bindgen_4ee3ee787bd19e91"
-  hs_bindgen_4ee3ee787bd19e91_base
-    :: Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_sinf@
-hs_bindgen_4ee3ee787bd19e91
-  :: BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_4ee3ee787bd19e91 =
-  BG.fromFFIType hs_bindgen_4ee3ee787bd19e91_base
-
--- | Compute the sine of @x@.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-1 \<= y \<= 1@
---
---     This function operates on single-precision floating point values, use SDL_sin for double-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: sine of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_sin', 'sDL_asinf', 'sDL_cosf'
---
---     [C declaration]: @SDL_sinf@, defined at @SDL3\/SDL_stdinc.h 5694:35@
-sDL_sinf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value, in radians.
-  -> IO BG.CFloat
-sDL_sinf = hs_bindgen_4ee3ee787bd19e91
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_sqrt@
-foreign import ccall safe "hs_bindgen_45b7bf5fa33e3269"
-  hs_bindgen_45b7bf5fa33e3269_base
-    :: Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_sqrt@
-hs_bindgen_45b7bf5fa33e3269
-  :: BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_45b7bf5fa33e3269 =
-  BG.fromFFIType hs_bindgen_45b7bf5fa33e3269_base
-
--- | Compute the square root of @x@.
---
---     Domain: @0 \<= x \<= INF@
---
---     Range: @0 \<= y \<= INF@
---
---     This function operates on double-precision floating point values, use SDL_sqrtf for single-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: square root of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_sqrtf'
---
---     [C declaration]: @SDL_sqrt@, defined at @SDL3\/SDL_stdinc.h 5720:36@
-sDL_sqrt
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value. Must be greater than or equal to 0.
-  -> IO BG.CDouble
-sDL_sqrt = hs_bindgen_45b7bf5fa33e3269
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_sqrtf@
-foreign import ccall safe "hs_bindgen_da05b17837e5fa68"
-  hs_bindgen_da05b17837e5fa68_base
-    :: Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_sqrtf@
-hs_bindgen_da05b17837e5fa68
-  :: BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_da05b17837e5fa68 =
-  BG.fromFFIType hs_bindgen_da05b17837e5fa68_base
-
--- | Compute the square root of @x@.
---
---     Domain: @0 \<= x \<= INF@
---
---     Range: @0 \<= y \<= INF@
---
---     This function operates on single-precision floating point values, use SDL_sqrt for double-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: square root of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_sqrt'
---
---     [C declaration]: @SDL_sqrtf@, defined at @SDL3\/SDL_stdinc.h 5746:35@
-sDL_sqrtf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value. Must be greater than or equal to 0.
-  -> IO BG.CFloat
-sDL_sqrtf = hs_bindgen_da05b17837e5fa68
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_tan@
-foreign import ccall safe "hs_bindgen_8e3c4624ada8d754"
-  hs_bindgen_8e3c4624ada8d754_base
-    :: Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_tan@
-hs_bindgen_8e3c4624ada8d754
-  :: BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_8e3c4624ada8d754 =
-  BG.fromFFIType hs_bindgen_8e3c4624ada8d754_base
-
--- | Compute the tangent of @x@.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-INF \<= y \<= INF@
---
---     This function operates on double-precision floating point values, use SDL_tanf for single-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: tangent of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_tanf', 'sDL_sin', 'sDL_cos', 'sDL_atan', 'sDL_atan2'
---
---     [C declaration]: @SDL_tan@, defined at @SDL3\/SDL_stdinc.h 5776:36@
-sDL_tan
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value, in radians.
-  -> IO BG.CDouble
-sDL_tan = hs_bindgen_8e3c4624ada8d754
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_tanf@
-foreign import ccall safe "hs_bindgen_b4a5a33f270aeb8d"
-  hs_bindgen_b4a5a33f270aeb8d_base
-    :: Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_tanf@
-hs_bindgen_b4a5a33f270aeb8d
-  :: BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_b4a5a33f270aeb8d =
-  BG.fromFFIType hs_bindgen_b4a5a33f270aeb8d_base
-
--- | Compute the tangent of @x@.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-INF \<= y \<= INF@
---
---     This function operates on single-precision floating point values, use SDL_tan for double-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: tangent of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_tan', 'sDL_sinf', 'sDL_cosf', 'sDL_atanf', 'sDL_atan2f'
---
---     [C declaration]: @SDL_tanf@, defined at @SDL3\/SDL_stdinc.h 5806:35@
-sDL_tanf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value, in radians.
-  -> IO BG.CFloat
-sDL_tanf = hs_bindgen_b4a5a33f270aeb8d
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_iconv_open@
-foreign import ccall safe "hs_bindgen_4c58e728caad9aa3"
-  hs_bindgen_4c58e728caad9aa3_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_iconv_open@
-hs_bindgen_4c58e728caad9aa3
-  :: PtrConst.PtrConst BG.CChar
-  -> PtrConst.PtrConst BG.CChar
-  -> IO SDL_iconv_t
-hs_bindgen_4c58e728caad9aa3 =
-  BG.fromFFIType hs_bindgen_4c58e728caad9aa3_base
-
--- | This function allocates a context for the specified character set conversion.
---
---     [Returns]: a handle that must be freed with SDL_iconv_close, or SDL_ICONV_ERROR on failure.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_iconv', 'sDL_iconv_close', 'sDL_iconv_string'
---
---     [C declaration]: @SDL_iconv_open@, defined at @SDL3\/SDL_stdinc.h 5834:41@
-sDL_iconv_open
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@tocode@]: The target character encoding, must not be NULL.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@fromcode@]: The source character encoding, must not be NULL.
-  -> IO SDL_iconv_t
-sDL_iconv_open = hs_bindgen_4c58e728caad9aa3
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_iconv_close@
-foreign import ccall safe "hs_bindgen_85fcb2de02d7791f"
-  hs_bindgen_85fcb2de02d7791f_base
-    :: BG.Ptr BG.Void
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_iconv_close@
-hs_bindgen_85fcb2de02d7791f
-  :: SDL_iconv_t
-  -> IO BG.CInt
-hs_bindgen_85fcb2de02d7791f =
-  BG.fromFFIType hs_bindgen_85fcb2de02d7791f_base
-
--- | This function frees a context used for character set conversion.
---
---     [Returns]: 0 on success, or -1 on failure.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_iconv', 'sDL_iconv_open', 'sDL_iconv_string'
---
---     [C declaration]: @SDL_iconv_close@, defined at @SDL3\/SDL_stdinc.h 5851:33@
-sDL_iconv_close
-  :: SDL_iconv_t
-  -- ^
-  --
-  --           [@cd@]: The character set conversion handle.
-  -> IO BG.CInt
-sDL_iconv_close = hs_bindgen_85fcb2de02d7791f
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_iconv@
-foreign import ccall safe "hs_bindgen_73663c44fcaa8f9d"
-  hs_bindgen_73663c44fcaa8f9d_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word64
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_iconv@
-hs_bindgen_73663c44fcaa8f9d
-  :: SDL_iconv_t
-  -> BG.Ptr (PtrConst.PtrConst BG.CChar)
-  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
-  -> BG.Ptr (BG.Ptr BG.CChar)
-  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
-  -> IO HsBindgen.Runtime.LibC.CSize
-hs_bindgen_73663c44fcaa8f9d =
-  BG.fromFFIType hs_bindgen_73663c44fcaa8f9d_base
-
--- | This function converts text between encodings, reading from and writing to a buffer.
---
---     It returns the number of successful conversions on success. On error, SDL_ICONV_E2BIG is returned when the output buffer is too small, or SDL_ICONV_EILSEQ is returned when an invalid input sequence is encountered, or SDL_ICONV_EINVAL is returned when an incomplete input sequence is encountered.
---
---     On exit:
---
---     * inbuf will point to the beginning of the next multibyte sequence. On error, this is the location of the problematic input sequence. On success, this is the end of the input sequence.
---
---     * inbytesleft will be set to the number of bytes left to convert, which will be 0 on success.
---
---     * outbuf will point to the location where to store the next output byte.
---
---     * outbytesleft will be set to the number of bytes left in the output buffer.
---
---     [Returns]: the number of conversions on success, or a negative error code.
---
---     [Thread safety]: Do not use the same 'SDL_iconv_t' from two threads at once.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_iconv_open', 'sDL_iconv_close', 'sDL_iconv_string'
---
---     [C declaration]: @SDL_iconv@, defined at @SDL3\/SDL_stdinc.h 5891:36@
-sDL_iconv
-  :: SDL_iconv_t
-  -- ^
-  --
-  --           [@cd@]: The character set conversion context, created in @SDL_iconv_open()@.
-  -> BG.Ptr (PtrConst.PtrConst BG.CChar)
-  -- ^
-  --
-  --           [@inbuf@]: Address of variable that points to the first character of the input sequence.
-  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@inbytesleft@]: The number of bytes in the input buffer.
-  -> BG.Ptr (BG.Ptr BG.CChar)
-  -- ^
-  --
-  --           [@outbuf@]: Address of variable that points to the output buffer.
-  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@outbytesleft@]: The number of bytes in the output buffer.
-  -> IO HsBindgen.Runtime.LibC.CSize
-sDL_iconv = hs_bindgen_73663c44fcaa8f9d
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_iconv_string@
-foreign import ccall safe "hs_bindgen_066c0e98a41d1c6b"
-  hs_bindgen_066c0e98a41d1c6b_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_iconv_string@
-hs_bindgen_066c0e98a41d1c6b
-  :: PtrConst.PtrConst BG.CChar
-  -> PtrConst.PtrConst BG.CChar
-  -> PtrConst.PtrConst BG.CChar
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_066c0e98a41d1c6b =
-  BG.fromFFIType hs_bindgen_066c0e98a41d1c6b_base
-
--- | Helper function to convert a string\'s encoding in one call.
---
---     This function converts a buffer or string between encodings in one pass.
---
---     The string does not need to be NULL-terminated; this function operates on the number of bytes specified in @inbytesleft@ whether there is a NULL character anywhere in the buffer.
---
---     The returned string is owned by the caller, and should be passed to SDL_free when no longer needed.
---
---     [Returns]: a new string, converted to the new encoding, or NULL on error.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_iconv_open', 'sDL_iconv_close', 'sDL_iconv'
---
---     [C declaration]: @SDL_iconv_string@, defined at @SDL3\/SDL_stdinc.h 5928:36@
-sDL_iconv_string
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@tocode@]: the character encoding of the output string. Examples are \"UTF-8\", \"UCS-4\", etc.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@fromcode@]: the character encoding of data in @inbuf@.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@inbuf@]: the string to convert to a different encoding.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@inbytesleft@]: the size of the input string /in bytes/.
-  -> IO (BG.Ptr BG.CChar)
-sDL_iconv_string = hs_bindgen_066c0e98a41d1c6b
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_size_mul_check_overflow_builtin@
-foreign import ccall safe "hs_bindgen_cb7ffceaa134d628"
-  hs_bindgen_cb7ffceaa134d628_base
-    :: BG.Word64
-    -> BG.Word64
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_size_mul_check_overflow_builtin@
-hs_bindgen_cb7ffceaa134d628
-  :: HsBindgen.Runtime.LibC.CSize
-  -> HsBindgen.Runtime.LibC.CSize
-  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
-  -> IO BG.CBool
-hs_bindgen_cb7ffceaa134d628 =
-  BG.fromFFIType hs_bindgen_cb7ffceaa134d628_base
-
--- | [C declaration]: @SDL_size_mul_check_overflow_builtin@, defined at @SDL3\/SDL_stdinc.h 6109:23@
-sDL_size_mul_check_overflow_builtin
-  :: HsBindgen.Runtime.LibC.CSize
-  -- ^ [C declaration]: @a@
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^ [C declaration]: @b@
-  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
-  -- ^ [C declaration]: @ret@
-  -> IO BG.CBool
-sDL_size_mul_check_overflow_builtin =
-  hs_bindgen_cb7ffceaa134d628
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_size_add_check_overflow_builtin@
-foreign import ccall safe "hs_bindgen_ca88dcdcdddd2954"
-  hs_bindgen_ca88dcdcdddd2954_base
-    :: BG.Word64
-    -> BG.Word64
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_size_add_check_overflow_builtin@
-hs_bindgen_ca88dcdcdddd2954
-  :: HsBindgen.Runtime.LibC.CSize
-  -> HsBindgen.Runtime.LibC.CSize
-  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
-  -> IO BG.CBool
-hs_bindgen_ca88dcdcdddd2954 =
-  BG.fromFFIType hs_bindgen_ca88dcdcdddd2954_base
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.Stdinc.Safe (
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_malloc,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_calloc,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_realloc,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_free,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_GetOriginalMemoryFunctions,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_GetMemoryFunctions,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_SetMemoryFunctions,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_aligned_alloc,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_aligned_free,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_GetNumAllocations,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_GetEnvironment,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_CreateEnvironment,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_GetEnvironmentVariable,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_GetEnvironmentVariables,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_SetEnvironmentVariable,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_UnsetEnvironmentVariable,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_DestroyEnvironment,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_getenv,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_getenv_unsafe,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_setenv_unsafe,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_unsetenv_unsafe,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_qsort,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_bsearch,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_qsort_r,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_bsearch_r,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_abs,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_isalpha,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_isalnum,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_isblank,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_iscntrl,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_isdigit,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_isxdigit,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_ispunct,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_isspace,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_isupper,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_islower,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_isprint,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_isgraph,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_toupper,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_tolower,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_crc16,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_crc32,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_murmur3_32,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_memcpy,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_memmove,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_memset,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_memset4,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_memcmp,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_wcslen,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_wcsnlen,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_wcslcpy,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_wcslcat,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_wcsdup,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_wcsstr,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_wcsnstr,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_wcscmp,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_wcsncmp,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_wcscasecmp,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_wcsncasecmp,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strlen,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strnlen,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strlcpy,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_utf8strlcpy,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strlcat,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strdup,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strndup,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strrev,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strupr,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strlwr,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strchr,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strrchr,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strstr,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strnstr,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strcasestr,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strtok_r,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_utf8strlen,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_utf8strnlen,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_itoa,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_uitoa,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_lltoa,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_ulltoa,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_atoi,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_atof,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strtoll,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strtoull,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strtod,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strcmp,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strncmp,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strcasecmp,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strncasecmp,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_strpbrk,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_StepUTF8,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_StepBackUTF8,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_UCS4ToUTF8,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_srand,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_rand,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_randf,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_rand_bits,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_rand_r,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_randf_r,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_rand_bits_r,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_acos,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_acosf,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_asin,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_asinf,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_atan,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_atanf,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_atan2,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_atan2f,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_ceil,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_ceilf,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_copysign,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_copysignf,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_cos,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_cosf,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_exp,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_expf,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_fabs,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_fabsf,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_floor,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_floorf,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_trunc,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_truncf,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_fmod,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_fmodf,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_isinf,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_isinff,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_isnan,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_isnanf,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_log,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_logf,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_log10,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_log10f,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_modf,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_modff,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_pow,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_powf,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_round,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_roundf,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_scalbn,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_scalbnf,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_sin,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_sinf,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_sqrt,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_sqrtf,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_tan,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_tanf,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_iconv_open,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_iconv_close,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_iconv,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_iconv_string,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_size_mul_check_overflow_builtin,
+  SDL3.Sys.Bindgen.Stdinc.Safe.sDL_size_add_check_overflow_builtin,
+)
+where
+
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
+import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+import SDL3.Sys.Bindgen.Stdinc
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_stdinc.h>"
+         , "void *hs_bindgen_0fa0437465ff2e3b ("
+         , "  size_t arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_malloc)(arg1);"
+         , "}"
+         , "void *hs_bindgen_12a69b8549cd3a89 ("
+         , "  size_t arg1,"
+         , "  size_t arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_calloc)(arg1, arg2);"
+         , "}"
+         , "void *hs_bindgen_749e3624b605eca6 ("
+         , "  void *arg1,"
+         , "  size_t arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_realloc)(arg1, arg2);"
+         , "}"
+         , "void hs_bindgen_090b04617f4cc6c8 ("
+         , "  void *arg1"
+         , ")"
+         , "{"
+         , "  (SDL_free)(arg1);"
+         , "}"
+         , "void hs_bindgen_8ba528e1d8cc4754 ("
+         , "  SDL_malloc_func *arg1,"
+         , "  SDL_calloc_func *arg2,"
+         , "  SDL_realloc_func *arg3,"
+         , "  SDL_free_func *arg4"
+         , ")"
+         , "{"
+         , "  (SDL_GetOriginalMemoryFunctions)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "void hs_bindgen_ad8799017bc65037 ("
+         , "  SDL_malloc_func *arg1,"
+         , "  SDL_calloc_func *arg2,"
+         , "  SDL_realloc_func *arg3,"
+         , "  SDL_free_func *arg4"
+         , ")"
+         , "{"
+         , "  (SDL_GetMemoryFunctions)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "_Bool hs_bindgen_0320414e5ec49d1b ("
+         , "  SDL_malloc_func arg1,"
+         , "  SDL_calloc_func arg2,"
+         , "  SDL_realloc_func arg3,"
+         , "  SDL_free_func arg4"
+         , ")"
+         , "{"
+         , "  return (SDL_SetMemoryFunctions)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "void *hs_bindgen_f88d3921cd5e4163 ("
+         , "  size_t arg1,"
+         , "  size_t arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_aligned_alloc)(arg1, arg2);"
+         , "}"
+         , "void hs_bindgen_d2d698681f3145f2 ("
+         , "  void *arg1"
+         , ")"
+         , "{"
+         , "  (SDL_aligned_free)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_f0e7f10898be7ba4 (void)"
+         , "{"
+         , "  return (SDL_GetNumAllocations)();"
+         , "}"
+         , "SDL_Environment *hs_bindgen_e44727dd9f944e0a (void)"
+         , "{"
+         , "  return (SDL_GetEnvironment)();"
+         , "}"
+         , "SDL_Environment *hs_bindgen_5c62fc7482159de0 ("
+         , "  _Bool arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_CreateEnvironment)(arg1);"
+         , "}"
+         , "char const *hs_bindgen_4da0ee2273bc4013 ("
+         , "  SDL_Environment *arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_GetEnvironmentVariable)(arg1, arg2);"
+         , "}"
+         , "char **hs_bindgen_4c1189e55e8583bb ("
+         , "  SDL_Environment *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_GetEnvironmentVariables)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_5824ff8a221d07c0 ("
+         , "  SDL_Environment *arg1,"
+         , "  char const *arg2,"
+         , "  char const *arg3,"
+         , "  _Bool arg4"
+         , ")"
+         , "{"
+         , "  return (SDL_SetEnvironmentVariable)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "_Bool hs_bindgen_f695a3f593331aff ("
+         , "  SDL_Environment *arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_UnsetEnvironmentVariable)(arg1, arg2);"
+         , "}"
+         , "void hs_bindgen_1dd67a4722131c01 ("
+         , "  SDL_Environment *arg1"
+         , ")"
+         , "{"
+         , "  (SDL_DestroyEnvironment)(arg1);"
+         , "}"
+         , "char const *hs_bindgen_1af31e6913adf6ff ("
+         , "  char const *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_getenv)(arg1);"
+         , "}"
+         , "char const *hs_bindgen_5a7e5c07a3b52c7c ("
+         , "  char const *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_getenv_unsafe)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_e57ac980835e41db ("
+         , "  char const *arg1,"
+         , "  char const *arg2,"
+         , "  signed int arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_setenv_unsafe)(arg1, arg2, arg3);"
+         , "}"
+         , "signed int hs_bindgen_6237b0757e59fa37 ("
+         , "  char const *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_unsetenv_unsafe)(arg1);"
+         , "}"
+         , "void hs_bindgen_b81d78a311d44f46 ("
+         , "  void *arg1,"
+         , "  size_t arg2,"
+         , "  size_t arg3,"
+         , "  SDL_CompareCallback arg4"
+         , ")"
+         , "{"
+         , "  (SDL_qsort)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "void *hs_bindgen_8c9a76f991574084 ("
+         , "  void const *arg1,"
+         , "  void const *arg2,"
+         , "  size_t arg3,"
+         , "  size_t arg4,"
+         , "  SDL_CompareCallback arg5"
+         , ")"
+         , "{"
+         , "  return (SDL_bsearch)(arg1, arg2, arg3, arg4, arg5);"
+         , "}"
+         , "void hs_bindgen_d22a2fabdcd748eb ("
+         , "  void *arg1,"
+         , "  size_t arg2,"
+         , "  size_t arg3,"
+         , "  SDL_CompareCallback_r arg4,"
+         , "  void *arg5"
+         , ")"
+         , "{"
+         , "  (SDL_qsort_r)(arg1, arg2, arg3, arg4, arg5);"
+         , "}"
+         , "void *hs_bindgen_9cce970e9842407b ("
+         , "  void const *arg1,"
+         , "  void const *arg2,"
+         , "  size_t arg3,"
+         , "  size_t arg4,"
+         , "  SDL_CompareCallback_r arg5,"
+         , "  void *arg6"
+         , ")"
+         , "{"
+         , "  return (SDL_bsearch_r)(arg1, arg2, arg3, arg4, arg5, arg6);"
+         , "}"
+         , "signed int hs_bindgen_3b7f43f8c476ee06 ("
+         , "  signed int arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_abs)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_9a00314812b7b060 ("
+         , "  signed int arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_isalpha)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_f2e3b47d308f6330 ("
+         , "  signed int arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_isalnum)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_94e1edfbd7c1b6fd ("
+         , "  signed int arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_isblank)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_f4e70f258fc0cd31 ("
+         , "  signed int arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_iscntrl)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_a92ce90ddf0e012f ("
+         , "  signed int arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_isdigit)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_c2fe92c140d522e3 ("
+         , "  signed int arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_isxdigit)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_abdf0b7703d7ef7b ("
+         , "  signed int arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_ispunct)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_b0c62a95d4008bcb ("
+         , "  signed int arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_isspace)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_dbe8ad5b2415f52b ("
+         , "  signed int arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_isupper)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_4f1c801e2ffe74d9 ("
+         , "  signed int arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_islower)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_1de66809f06ec2cf ("
+         , "  signed int arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_isprint)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_7cecb757f16ce85d ("
+         , "  signed int arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_isgraph)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_799fe4e6fc639bc0 ("
+         , "  signed int arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_toupper)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_af600e5bb74004b2 ("
+         , "  signed int arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_tolower)(arg1);"
+         , "}"
+         , "Uint16 hs_bindgen_8b9d7fd6e4874342 ("
+         , "  Uint16 arg1,"
+         , "  void const *arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_crc16)(arg1, arg2, arg3);"
+         , "}"
+         , "Uint32 hs_bindgen_20e1e20820f9c17a ("
+         , "  Uint32 arg1,"
+         , "  void const *arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_crc32)(arg1, arg2, arg3);"
+         , "}"
+         , "Uint32 hs_bindgen_e26385eb1b169df1 ("
+         , "  void const *arg1,"
+         , "  size_t arg2,"
+         , "  Uint32 arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_murmur3_32)(arg1, arg2, arg3);"
+         , "}"
+         , "void *hs_bindgen_cdcf81235b96677b ("
+         , "  void *arg1,"
+         , "  void const *arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_memcpy)(arg1, arg2, arg3);"
+         , "}"
+         , "void *hs_bindgen_35784700b43bfe53 ("
+         , "  void *arg1,"
+         , "  void const *arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_memmove)(arg1, arg2, arg3);"
+         , "}"
+         , "void *hs_bindgen_74bc363e8ec99139 ("
+         , "  void *arg1,"
+         , "  signed int arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_memset)(arg1, arg2, arg3);"
+         , "}"
+         , "void *hs_bindgen_39f43c1520a45f57 ("
+         , "  void *arg1,"
+         , "  Uint32 arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_memset4)(arg1, arg2, arg3);"
+         , "}"
+         , "signed int hs_bindgen_1386d72429f6b9cb ("
+         , "  void const *arg1,"
+         , "  void const *arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_memcmp)(arg1, arg2, arg3);"
+         , "}"
+         , "size_t hs_bindgen_e6c3253fb4b72427 ("
+         , "  wchar_t const *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_wcslen)(arg1);"
+         , "}"
+         , "size_t hs_bindgen_da04478d43043c90 ("
+         , "  wchar_t const *arg1,"
+         , "  size_t arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_wcsnlen)(arg1, arg2);"
+         , "}"
+         , "size_t hs_bindgen_82a9094f0d522cdf ("
+         , "  wchar_t *arg1,"
+         , "  wchar_t const *arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_wcslcpy)(arg1, arg2, arg3);"
+         , "}"
+         , "size_t hs_bindgen_c85ef13eabbd96dd ("
+         , "  wchar_t *arg1,"
+         , "  wchar_t const *arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_wcslcat)(arg1, arg2, arg3);"
+         , "}"
+         , "wchar_t *hs_bindgen_9a5bf9db9506735d ("
+         , "  wchar_t const *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_wcsdup)(arg1);"
+         , "}"
+         , "wchar_t *hs_bindgen_8807485ad58a476c ("
+         , "  wchar_t const *arg1,"
+         , "  wchar_t const *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_wcsstr)(arg1, arg2);"
+         , "}"
+         , "wchar_t *hs_bindgen_0f95369992d6076d ("
+         , "  wchar_t const *arg1,"
+         , "  wchar_t const *arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_wcsnstr)(arg1, arg2, arg3);"
+         , "}"
+         , "signed int hs_bindgen_a56659eded1129eb ("
+         , "  wchar_t const *arg1,"
+         , "  wchar_t const *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_wcscmp)(arg1, arg2);"
+         , "}"
+         , "signed int hs_bindgen_f249ec61a8d5978a ("
+         , "  wchar_t const *arg1,"
+         , "  wchar_t const *arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_wcsncmp)(arg1, arg2, arg3);"
+         , "}"
+         , "signed int hs_bindgen_0e487d7f98097b0d ("
+         , "  wchar_t const *arg1,"
+         , "  wchar_t const *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_wcscasecmp)(arg1, arg2);"
+         , "}"
+         , "signed int hs_bindgen_9a4ad44438974867 ("
+         , "  wchar_t const *arg1,"
+         , "  wchar_t const *arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_wcsncasecmp)(arg1, arg2, arg3);"
+         , "}"
+         , "size_t hs_bindgen_574becd3bb71e7b9 ("
+         , "  char const *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_strlen)(arg1);"
+         , "}"
+         , "size_t hs_bindgen_9232c1cbf65df9e5 ("
+         , "  char const *arg1,"
+         , "  size_t arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_strnlen)(arg1, arg2);"
+         , "}"
+         , "size_t hs_bindgen_1a460cf112b7fd68 ("
+         , "  char *arg1,"
+         , "  char const *arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_strlcpy)(arg1, arg2, arg3);"
+         , "}"
+         , "size_t hs_bindgen_10b5c948dc68c882 ("
+         , "  char *arg1,"
+         , "  char const *arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_utf8strlcpy)(arg1, arg2, arg3);"
+         , "}"
+         , "size_t hs_bindgen_8132fc050b3dda62 ("
+         , "  char *arg1,"
+         , "  char const *arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_strlcat)(arg1, arg2, arg3);"
+         , "}"
+         , "char *hs_bindgen_e91dd28c0e034753 ("
+         , "  char const *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_strdup)(arg1);"
+         , "}"
+         , "char *hs_bindgen_9f484a433e6fd1be ("
+         , "  char const *arg1,"
+         , "  size_t arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_strndup)(arg1, arg2);"
+         , "}"
+         , "char *hs_bindgen_fd83e6da8cdd54dc ("
+         , "  char *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_strrev)(arg1);"
+         , "}"
+         , "char *hs_bindgen_4821ca9fe328d7f0 ("
+         , "  char *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_strupr)(arg1);"
+         , "}"
+         , "char *hs_bindgen_b313d67572ea455e ("
+         , "  char *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_strlwr)(arg1);"
+         , "}"
+         , "char *hs_bindgen_9b8b80f67620d0c0 ("
+         , "  char const *arg1,"
+         , "  signed int arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_strchr)(arg1, arg2);"
+         , "}"
+         , "char *hs_bindgen_61eb1646e2706ec9 ("
+         , "  char const *arg1,"
+         , "  signed int arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_strrchr)(arg1, arg2);"
+         , "}"
+         , "char *hs_bindgen_09dae8bc6d27bfa7 ("
+         , "  char const *arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_strstr)(arg1, arg2);"
+         , "}"
+         , "char *hs_bindgen_b253d6195ad29db6 ("
+         , "  char const *arg1,"
+         , "  char const *arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_strnstr)(arg1, arg2, arg3);"
+         , "}"
+         , "char *hs_bindgen_845c9ada7f0145b4 ("
+         , "  char const *arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_strcasestr)(arg1, arg2);"
+         , "}"
+         , "char *hs_bindgen_92aad5310bed80bf ("
+         , "  char *arg1,"
+         , "  char const *arg2,"
+         , "  char **arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_strtok_r)(arg1, arg2, arg3);"
+         , "}"
+         , "size_t hs_bindgen_2fe9c3d14ead61fa ("
+         , "  char const *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_utf8strlen)(arg1);"
+         , "}"
+         , "size_t hs_bindgen_7e1dc736bb92cf02 ("
+         , "  char const *arg1,"
+         , "  size_t arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_utf8strnlen)(arg1, arg2);"
+         , "}"
+         , "char *hs_bindgen_5e87f4eb430750ff ("
+         , "  signed int arg1,"
+         , "  char *arg2,"
+         , "  signed int arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_itoa)(arg1, arg2, arg3);"
+         , "}"
+         , "char *hs_bindgen_6593301ad3b87e96 ("
+         , "  unsigned int arg1,"
+         , "  char *arg2,"
+         , "  signed int arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_uitoa)(arg1, arg2, arg3);"
+         , "}"
+         , "char *hs_bindgen_49dab071ddd94418 ("
+         , "  signed long long arg1,"
+         , "  char *arg2,"
+         , "  signed int arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_lltoa)(arg1, arg2, arg3);"
+         , "}"
+         , "char *hs_bindgen_8c172a64279b6c99 ("
+         , "  unsigned long long arg1,"
+         , "  char *arg2,"
+         , "  signed int arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_ulltoa)(arg1, arg2, arg3);"
+         , "}"
+         , "signed int hs_bindgen_7ec5dbb16b1ec441 ("
+         , "  char const *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_atoi)(arg1);"
+         , "}"
+         , "double hs_bindgen_3da67c3a67185baf ("
+         , "  char const *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_atof)(arg1);"
+         , "}"
+         , "signed long long hs_bindgen_2d4f949f38ae668c ("
+         , "  char const *arg1,"
+         , "  char **arg2,"
+         , "  signed int arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_strtoll)(arg1, arg2, arg3);"
+         , "}"
+         , "unsigned long long hs_bindgen_af470a839fcf6fbd ("
+         , "  char const *arg1,"
+         , "  char **arg2,"
+         , "  signed int arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_strtoull)(arg1, arg2, arg3);"
+         , "}"
+         , "double hs_bindgen_717e481bd213c968 ("
+         , "  char const *arg1,"
+         , "  char **arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_strtod)(arg1, arg2);"
+         , "}"
+         , "signed int hs_bindgen_114ae5114f0f2f61 ("
+         , "  char const *arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_strcmp)(arg1, arg2);"
+         , "}"
+         , "signed int hs_bindgen_07f412ca6ac64bca ("
+         , "  char const *arg1,"
+         , "  char const *arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_strncmp)(arg1, arg2, arg3);"
+         , "}"
+         , "signed int hs_bindgen_931c05e65f298770 ("
+         , "  char const *arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_strcasecmp)(arg1, arg2);"
+         , "}"
+         , "signed int hs_bindgen_974c20bb6f7b7d03 ("
+         , "  char const *arg1,"
+         , "  char const *arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_strncasecmp)(arg1, arg2, arg3);"
+         , "}"
+         , "char *hs_bindgen_50473abaffb3417e ("
+         , "  char const *arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_strpbrk)(arg1, arg2);"
+         , "}"
+         , "Uint32 hs_bindgen_e49242de1cec91d5 ("
+         , "  char const **arg1,"
+         , "  size_t *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_StepUTF8)(arg1, arg2);"
+         , "}"
+         , "Uint32 hs_bindgen_0346c467944ee189 ("
+         , "  char const *arg1,"
+         , "  char const **arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_StepBackUTF8)(arg1, arg2);"
+         , "}"
+         , "char *hs_bindgen_bdc98e385efc6ab7 ("
+         , "  Uint32 arg1,"
+         , "  char *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_UCS4ToUTF8)(arg1, arg2);"
+         , "}"
+         , "void hs_bindgen_bd195a3a2b34e483 ("
+         , "  Uint64 arg1"
+         , ")"
+         , "{"
+         , "  (SDL_srand)(arg1);"
+         , "}"
+         , "Sint32 hs_bindgen_4b2da7e53b63ed17 ("
+         , "  Sint32 arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_rand)(arg1);"
+         , "}"
+         , "float hs_bindgen_91fe5edd016e0570 (void)"
+         , "{"
+         , "  return (SDL_randf)();"
+         , "}"
+         , "Uint32 hs_bindgen_5d81c1c12775308d (void)"
+         , "{"
+         , "  return (SDL_rand_bits)();"
+         , "}"
+         , "Sint32 hs_bindgen_59abfd01a8d7b8f7 ("
+         , "  Uint64 *arg1,"
+         , "  Sint32 arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_rand_r)(arg1, arg2);"
+         , "}"
+         , "float hs_bindgen_5da60fff1ce7873d ("
+         , "  Uint64 *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_randf_r)(arg1);"
+         , "}"
+         , "Uint32 hs_bindgen_23de01659ed6ba6b ("
+         , "  Uint64 *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_rand_bits_r)(arg1);"
+         , "}"
+         , "double hs_bindgen_217308a0a788520d ("
+         , "  double arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_acos)(arg1);"
+         , "}"
+         , "float hs_bindgen_f093db4bb5e8e494 ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_acosf)(arg1);"
+         , "}"
+         , "double hs_bindgen_205d9f923dff59cd ("
+         , "  double arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_asin)(arg1);"
+         , "}"
+         , "float hs_bindgen_79771d582742f165 ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_asinf)(arg1);"
+         , "}"
+         , "double hs_bindgen_3051cbc85bd5efba ("
+         , "  double arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_atan)(arg1);"
+         , "}"
+         , "float hs_bindgen_7d0bcd6030adfae6 ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_atanf)(arg1);"
+         , "}"
+         , "double hs_bindgen_9ae010b5b4d9f553 ("
+         , "  double arg1,"
+         , "  double arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_atan2)(arg1, arg2);"
+         , "}"
+         , "float hs_bindgen_3eac4b1bfc5aff58 ("
+         , "  float arg1,"
+         , "  float arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_atan2f)(arg1, arg2);"
+         , "}"
+         , "double hs_bindgen_1630cb0e3a004beb ("
+         , "  double arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_ceil)(arg1);"
+         , "}"
+         , "float hs_bindgen_04a706bfcc971297 ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_ceilf)(arg1);"
+         , "}"
+         , "double hs_bindgen_fed0484ab850ee6a ("
+         , "  double arg1,"
+         , "  double arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_copysign)(arg1, arg2);"
+         , "}"
+         , "float hs_bindgen_d21fe858af73dd98 ("
+         , "  float arg1,"
+         , "  float arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_copysignf)(arg1, arg2);"
+         , "}"
+         , "double hs_bindgen_a4c38d6732d22ffb ("
+         , "  double arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_cos)(arg1);"
+         , "}"
+         , "float hs_bindgen_ad11505e8fd49060 ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_cosf)(arg1);"
+         , "}"
+         , "double hs_bindgen_ffaa0913f3d0c63c ("
+         , "  double arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_exp)(arg1);"
+         , "}"
+         , "float hs_bindgen_4d5e3977a4eb4c12 ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_expf)(arg1);"
+         , "}"
+         , "double hs_bindgen_89730ae2b638ee61 ("
+         , "  double arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_fabs)(arg1);"
+         , "}"
+         , "float hs_bindgen_4e76324c9b8f7453 ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_fabsf)(arg1);"
+         , "}"
+         , "double hs_bindgen_4c646d1d6b7e922f ("
+         , "  double arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_floor)(arg1);"
+         , "}"
+         , "float hs_bindgen_db6fbb0a591a2804 ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_floorf)(arg1);"
+         , "}"
+         , "double hs_bindgen_2b4f0ab682c421b7 ("
+         , "  double arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_trunc)(arg1);"
+         , "}"
+         , "float hs_bindgen_afe8ddb39d52a293 ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_truncf)(arg1);"
+         , "}"
+         , "double hs_bindgen_f1fc4d1a8a6fd613 ("
+         , "  double arg1,"
+         , "  double arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_fmod)(arg1, arg2);"
+         , "}"
+         , "float hs_bindgen_19c2a30dd6614c51 ("
+         , "  float arg1,"
+         , "  float arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_fmodf)(arg1, arg2);"
+         , "}"
+         , "signed int hs_bindgen_9be13530739c3139 ("
+         , "  double arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_isinf)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_d063ada15b71ed19 ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_isinff)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_bb4d9f6611f2a512 ("
+         , "  double arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_isnan)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_48e10ed50de37991 ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_isnanf)(arg1);"
+         , "}"
+         , "double hs_bindgen_46922ccc470e92e0 ("
+         , "  double arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_log)(arg1);"
+         , "}"
+         , "float hs_bindgen_7ef0b9f4239eb37e ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_logf)(arg1);"
+         , "}"
+         , "double hs_bindgen_bc1ad316da1b3bbc ("
+         , "  double arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_log10)(arg1);"
+         , "}"
+         , "float hs_bindgen_310aebbf28df3250 ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_log10f)(arg1);"
+         , "}"
+         , "double hs_bindgen_93a468f91c55ba99 ("
+         , "  double arg1,"
+         , "  double *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_modf)(arg1, arg2);"
+         , "}"
+         , "float hs_bindgen_76a18e33bbbed6ee ("
+         , "  float arg1,"
+         , "  float *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_modff)(arg1, arg2);"
+         , "}"
+         , "double hs_bindgen_b8c28ba00815fbb9 ("
+         , "  double arg1,"
+         , "  double arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_pow)(arg1, arg2);"
+         , "}"
+         , "float hs_bindgen_d853802a7561099f ("
+         , "  float arg1,"
+         , "  float arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_powf)(arg1, arg2);"
+         , "}"
+         , "double hs_bindgen_097e1eceb090a078 ("
+         , "  double arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_round)(arg1);"
+         , "}"
+         , "float hs_bindgen_5b677097112f1617 ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_roundf)(arg1);"
+         , "}"
+         , "double hs_bindgen_8038e0526522260c ("
+         , "  double arg1,"
+         , "  signed int arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_scalbn)(arg1, arg2);"
+         , "}"
+         , "float hs_bindgen_fc0cb80cec8a11b0 ("
+         , "  float arg1,"
+         , "  signed int arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_scalbnf)(arg1, arg2);"
+         , "}"
+         , "double hs_bindgen_d062c0d717121757 ("
+         , "  double arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_sin)(arg1);"
+         , "}"
+         , "float hs_bindgen_4ee3ee787bd19e91 ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_sinf)(arg1);"
+         , "}"
+         , "double hs_bindgen_45b7bf5fa33e3269 ("
+         , "  double arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_sqrt)(arg1);"
+         , "}"
+         , "float hs_bindgen_da05b17837e5fa68 ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_sqrtf)(arg1);"
+         , "}"
+         , "double hs_bindgen_8e3c4624ada8d754 ("
+         , "  double arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_tan)(arg1);"
+         , "}"
+         , "float hs_bindgen_b4a5a33f270aeb8d ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_tanf)(arg1);"
+         , "}"
+         , "SDL_iconv_t hs_bindgen_4c58e728caad9aa3 ("
+         , "  char const *arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_iconv_open)(arg1, arg2);"
+         , "}"
+         , "signed int hs_bindgen_85fcb2de02d7791f ("
+         , "  SDL_iconv_t arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_iconv_close)(arg1);"
+         , "}"
+         , "size_t hs_bindgen_73663c44fcaa8f9d ("
+         , "  SDL_iconv_t arg1,"
+         , "  char const **arg2,"
+         , "  size_t *arg3,"
+         , "  char **arg4,"
+         , "  size_t *arg5"
+         , ")"
+         , "{"
+         , "  return (SDL_iconv)(arg1, arg2, arg3, arg4, arg5);"
+         , "}"
+         , "char *hs_bindgen_066c0e98a41d1c6b ("
+         , "  char const *arg1,"
+         , "  char const *arg2,"
+         , "  char const *arg3,"
+         , "  size_t arg4"
+         , ")"
+         , "{"
+         , "  return (SDL_iconv_string)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "_Bool hs_bindgen_cb7ffceaa134d628 ("
+         , "  size_t arg1,"
+         , "  size_t arg2,"
+         , "  size_t *arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_size_mul_check_overflow_builtin)(arg1, arg2, arg3);"
+         , "}"
+         , "_Bool hs_bindgen_ca88dcdcdddd2954 ("
+         , "  size_t arg1,"
+         , "  size_t arg2,"
+         , "  size_t *arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_size_add_check_overflow_builtin)(arg1, arg2, arg3);"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_malloc@
+foreign import ccall safe "hs_bindgen_0fa0437465ff2e3b"
+  hs_bindgen_0fa0437465ff2e3b_base
+    :: HsBindgen.Runtime.LibC.CSize
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_malloc@
+hs_bindgen_0fa0437465ff2e3b
+  :: HsBindgen.Runtime.LibC.CSize
+  -> IO (BG.Ptr BG.Void)
+hs_bindgen_0fa0437465ff2e3b =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_0fa0437465ff2e3b_base (BG.toFFIType x0))
+
+-- | Allocate uninitialized memory.
+--
+--     The allocated memory returned by this function must be freed with @SDL_free()@.
+--
+--     If @size@ is 0, it will be set to 1.
+--
+--     If the allocation is successful, the returned pointer is guaranteed to be aligned to either the /fundamental alignment/ (@alignof(max_align_t)@ in C11 and later) or @2 * sizeof(void *)@, whichever is smaller. Use @SDL_aligned_alloc()@ if you need to allocate memory aligned to an alignment greater than this guarantee.
+--
+--     [Returns]: a pointer to the allocated memory, or NULL if allocation failed.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_free', SDL_calloc, SDL_realloc, 'sDL_aligned_alloc'
+--
+--     [C declaration]: @SDL_malloc@, defined at @SDL3\/SDL_stdinc.h 1342:47@
+sDL_malloc
+  :: HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@size@]: the size to allocate.
+  -> IO (BG.Ptr BG.Void)
+sDL_malloc = hs_bindgen_0fa0437465ff2e3b
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_calloc@
+foreign import ccall safe "hs_bindgen_12a69b8549cd3a89"
+  hs_bindgen_12a69b8549cd3a89_base
+    :: HsBindgen.Runtime.LibC.CSize
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_calloc@
+hs_bindgen_12a69b8549cd3a89
+  :: HsBindgen.Runtime.LibC.CSize
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO (BG.Ptr BG.Void)
+hs_bindgen_12a69b8549cd3a89 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_12a69b8549cd3a89_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | [C declaration]: @SDL_calloc@, defined at @SDL3\/SDL_stdinc.h 1367:69@
+sDL_calloc
+  :: HsBindgen.Runtime.LibC.CSize
+  -- ^ [C declaration]: @nmemb@
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^ [C declaration]: @size@
+  -> IO (BG.Ptr BG.Void)
+sDL_calloc = hs_bindgen_12a69b8549cd3a89
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_realloc@
+foreign import ccall safe "hs_bindgen_749e3624b605eca6"
+  hs_bindgen_749e3624b605eca6_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_realloc@
+hs_bindgen_749e3624b605eca6
+  :: BG.Ptr BG.Void
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO (BG.Ptr BG.Void)
+hs_bindgen_749e3624b605eca6 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_749e3624b605eca6_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | [C declaration]: @SDL_realloc@, defined at @SDL3\/SDL_stdinc.h 1407:54@
+sDL_realloc
+  :: BG.Ptr BG.Void
+  -- ^ [C declaration]: @mem@
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^ [C declaration]: @size@
+  -> IO (BG.Ptr BG.Void)
+sDL_realloc = hs_bindgen_749e3624b605eca6
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_free@
+foreign import ccall safe "hs_bindgen_090b04617f4cc6c8"
+  hs_bindgen_090b04617f4cc6c8_base
+    :: BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_free@
+hs_bindgen_090b04617f4cc6c8
+  :: BG.Ptr BG.Void
+  -> IO ()
+hs_bindgen_090b04617f4cc6c8 =
+  \x0 ->
+    hs_bindgen_090b04617f4cc6c8_base (BG.toFFIType x0)
+
+-- | Free allocated memory.
+--
+--     The pointer is no longer valid after this call and cannot be dereferenced anymore.
+--
+--     If @mem@ is NULL, this function does nothing.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_malloc', SDL_calloc, SDL_realloc
+--
+--     [C declaration]: @SDL_free@, defined at @SDL3\/SDL_stdinc.h 1427:34@
+sDL_free
+  :: BG.Ptr BG.Void
+  -- ^
+  --
+  --           [@mem@]: a pointer to allocated memory, or NULL.
+  -> IO ()
+sDL_free = hs_bindgen_090b04617f4cc6c8
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_GetOriginalMemoryFunctions@
+foreign import ccall safe "hs_bindgen_8ba528e1d8cc4754"
+  hs_bindgen_8ba528e1d8cc4754_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_GetOriginalMemoryFunctions@
+hs_bindgen_8ba528e1d8cc4754
+  :: BG.Ptr SDL_malloc_func
+  -> BG.Ptr SDL_calloc_func
+  -> BG.Ptr SDL_realloc_func
+  -> BG.Ptr SDL_free_func
+  -> IO ()
+hs_bindgen_8ba528e1d8cc4754 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_8ba528e1d8cc4754_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
+
+-- | Get the original set of SDL memory functions.
+--
+--     This is what SDL_malloc and friends will use by default, if there has been no call to SDL_SetMemoryFunctions. This is not necessarily using the C runtime\'s @malloc@ functions behind the scenes! Different platforms and build configurations might do any number of unexpected things.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_GetOriginalMemoryFunctions@, defined at @SDL3\/SDL_stdinc.h 1525:34@
+sDL_GetOriginalMemoryFunctions
+  :: BG.Ptr SDL_malloc_func
+  -- ^
+  --
+  --           [@malloc_func@]: filled with malloc function.
+  -> BG.Ptr SDL_calloc_func
+  -- ^
+  --
+  --           [@calloc_func@]: filled with calloc function.
+  -> BG.Ptr SDL_realloc_func
+  -- ^
+  --
+  --           [@realloc_func@]: filled with realloc function.
+  -> BG.Ptr SDL_free_func
+  -- ^
+  --
+  --           [@free_func@]: filled with free function.
+  -> IO ()
+sDL_GetOriginalMemoryFunctions =
+  hs_bindgen_8ba528e1d8cc4754
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_GetMemoryFunctions@
+foreign import ccall safe "hs_bindgen_ad8799017bc65037"
+  hs_bindgen_ad8799017bc65037_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_GetMemoryFunctions@
+hs_bindgen_ad8799017bc65037
+  :: BG.Ptr SDL_malloc_func
+  -> BG.Ptr SDL_calloc_func
+  -> BG.Ptr SDL_realloc_func
+  -> BG.Ptr SDL_free_func
+  -> IO ()
+hs_bindgen_ad8799017bc65037 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_ad8799017bc65037_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
+
+-- | Get the current set of SDL memory functions.
+--
+--     [Thread safety]: This does not hold a lock, so do not call this in the unlikely event of a background thread calling SDL_SetMemoryFunctions simultaneously.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_SetMemoryFunctions', 'sDL_GetOriginalMemoryFunctions'
+--
+--     [C declaration]: @SDL_GetMemoryFunctions@, defined at @SDL3\/SDL_stdinc.h 1547:34@
+sDL_GetMemoryFunctions
+  :: BG.Ptr SDL_malloc_func
+  -- ^
+  --
+  --           [@malloc_func@]: filled with malloc function.
+  -> BG.Ptr SDL_calloc_func
+  -- ^
+  --
+  --           [@calloc_func@]: filled with calloc function.
+  -> BG.Ptr SDL_realloc_func
+  -- ^
+  --
+  --           [@realloc_func@]: filled with realloc function.
+  -> BG.Ptr SDL_free_func
+  -- ^
+  --
+  --           [@free_func@]: filled with free function.
+  -> IO ()
+sDL_GetMemoryFunctions = hs_bindgen_ad8799017bc65037
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_SetMemoryFunctions@
+foreign import ccall safe "hs_bindgen_0320414e5ec49d1b"
+  hs_bindgen_0320414e5ec49d1b_base
+    :: BG.FunPtr BG.Void
+    -> BG.FunPtr BG.Void
+    -> BG.FunPtr BG.Void
+    -> BG.FunPtr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_SetMemoryFunctions@
+hs_bindgen_0320414e5ec49d1b
+  :: SDL_malloc_func
+  -> SDL_calloc_func
+  -> SDL_realloc_func
+  -> SDL_free_func
+  -> IO BG.CBool
+hs_bindgen_0320414e5ec49d1b =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_0320414e5ec49d1b_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Replace SDL\'s memory allocation functions with a custom set.
+--
+--     It is not safe to call this function once any allocations have been made, as future calls to SDL_free will use the new allocator, even if they came from an SDL_malloc made with the old one!
+--
+--     If used, usually this needs to be the first call made into the SDL library, if not the very first thing done at program startup time.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread, but one should not replace the memory functions once any allocations are made!
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetMemoryFunctions', 'sDL_GetOriginalMemoryFunctions'
+--
+--     [C declaration]: @SDL_SetMemoryFunctions@, defined at @SDL3\/SDL_stdinc.h 1578:34@
+sDL_SetMemoryFunctions
+  :: SDL_malloc_func
+  -- ^
+  --
+  --           [@malloc_func@]: custom malloc function.
+  -> SDL_calloc_func
+  -- ^
+  --
+  --           [@calloc_func@]: custom calloc function.
+  -> SDL_realloc_func
+  -- ^
+  --
+  --           [@realloc_func@]: custom realloc function.
+  -> SDL_free_func
+  -- ^
+  --
+  --           [@free_func@]: custom free function.
+  -> IO BG.CBool
+sDL_SetMemoryFunctions = hs_bindgen_0320414e5ec49d1b
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_aligned_alloc@
+foreign import ccall safe "hs_bindgen_f88d3921cd5e4163"
+  hs_bindgen_f88d3921cd5e4163_base
+    :: HsBindgen.Runtime.LibC.CSize
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_aligned_alloc@
+hs_bindgen_f88d3921cd5e4163
+  :: HsBindgen.Runtime.LibC.CSize
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO (BG.Ptr BG.Void)
+hs_bindgen_f88d3921cd5e4163 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_f88d3921cd5e4163_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Allocate memory aligned to a specific alignment.
+--
+--     The memory returned by this function must be freed with @SDL_aligned_free()@, /not/ @SDL_free()@.
+--
+--     If @alignment@ is less than the size of @void *@, it will be increased to match that.
+--
+--     The returned memory address will be a multiple of the alignment value, and the size of the memory allocated will be a multiple of the alignment value.
+--
+--     [Returns]: a pointer to the aligned memory, or NULL if allocation failed.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_aligned_free'
+--
+--     [C declaration]: @SDL_aligned_alloc@, defined at @SDL3\/SDL_stdinc.h 1605:47@
+sDL_aligned_alloc
+  :: HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@alignment@]: the alignment of the memory.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@size@]: the size to allocate.
+  -> IO (BG.Ptr BG.Void)
+sDL_aligned_alloc = hs_bindgen_f88d3921cd5e4163
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_aligned_free@
+foreign import ccall safe "hs_bindgen_d2d698681f3145f2"
+  hs_bindgen_d2d698681f3145f2_base
+    :: BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_aligned_free@
+hs_bindgen_d2d698681f3145f2
+  :: BG.Ptr BG.Void
+  -> IO ()
+hs_bindgen_d2d698681f3145f2 =
+  \x0 ->
+    hs_bindgen_d2d698681f3145f2_base (BG.toFFIType x0)
+
+-- | Free memory allocated by @SDL_aligned_alloc()@.
+--
+--     The pointer is no longer valid after this call and cannot be dereferenced anymore.
+--
+--     If @mem@ is NULL, this function does nothing.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_aligned_alloc'
+--
+--     [C declaration]: @SDL_aligned_free@, defined at @SDL3\/SDL_stdinc.h 1623:34@
+sDL_aligned_free
+  :: BG.Ptr BG.Void
+  -- ^
+  --
+  --           [@mem@]: a pointer previously returned by @SDL_aligned_alloc()@, or NULL.
+  -> IO ()
+sDL_aligned_free = hs_bindgen_d2d698681f3145f2
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_GetNumAllocations@
+foreign import ccall safe "hs_bindgen_f0e7f10898be7ba4"
+  hs_bindgen_f0e7f10898be7ba4_base
+    :: IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_GetNumAllocations@
+hs_bindgen_f0e7f10898be7ba4 :: IO BG.CInt
+hs_bindgen_f0e7f10898be7ba4 =
+  fmap BG.fromFFIType hs_bindgen_f0e7f10898be7ba4_base
+
+-- | Get the number of outstanding (unfreed) allocations.
+--
+--     [Returns]: the number of allocations or -1 if allocation counting is disabled.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_GetNumAllocations@, defined at @SDL3\/SDL_stdinc.h 1635:33@
+sDL_GetNumAllocations :: IO BG.CInt
+sDL_GetNumAllocations = hs_bindgen_f0e7f10898be7ba4
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_GetEnvironment@
+foreign import ccall safe "hs_bindgen_e44727dd9f944e0a"
+  hs_bindgen_e44727dd9f944e0a_base
+    :: IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_GetEnvironment@
+hs_bindgen_e44727dd9f944e0a :: IO (BG.Ptr SDL_Environment)
+hs_bindgen_e44727dd9f944e0a =
+  fmap BG.fromFFIType hs_bindgen_e44727dd9f944e0a_base
+
+-- | Get the process environment.
+--
+--     This is initialized at application start and is not affected by setenv() and unsetenv() calls after that point. Use @SDL_SetEnvironmentVariable()@ and @SDL_UnsetEnvironmentVariable()@ if you want to modify this environment, or @SDL_setenv_unsafe()@ or @SDL_unsetenv_unsafe()@ if you want changes to persist in the C runtime environment after SDL_Quit().
+--
+--     [Returns]: a pointer to the environment for the process or NULL on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetEnvironmentVariable', 'sDL_GetEnvironmentVariables', 'sDL_SetEnvironmentVariable', 'sDL_UnsetEnvironmentVariable'
+--
+--     [C declaration]: @SDL_GetEnvironment@, defined at @SDL3\/SDL_stdinc.h 1673:47@
+sDL_GetEnvironment :: IO (BG.Ptr SDL_Environment)
+sDL_GetEnvironment = hs_bindgen_e44727dd9f944e0a
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_CreateEnvironment@
+foreign import ccall safe "hs_bindgen_5c62fc7482159de0"
+  hs_bindgen_5c62fc7482159de0_base
+    :: BG.CBool
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_CreateEnvironment@
+hs_bindgen_5c62fc7482159de0
+  :: BG.CBool
+  -> IO (BG.Ptr SDL_Environment)
+hs_bindgen_5c62fc7482159de0 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_5c62fc7482159de0_base (BG.toFFIType x0))
+
+-- | Create a set of environment variables
+--
+--     [Returns]: a pointer to the new environment or NULL on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: If @populated@ is false, it is safe to call this function from any thread, otherwise it is safe if no other threads are calling setenv() or unsetenv()
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetEnvironmentVariable', 'sDL_GetEnvironmentVariables', 'sDL_SetEnvironmentVariable', 'sDL_UnsetEnvironmentVariable', 'sDL_DestroyEnvironment'
+--
+--     [C declaration]: @SDL_CreateEnvironment@, defined at @SDL3\/SDL_stdinc.h 1695:47@
+sDL_CreateEnvironment
+  :: BG.CBool
+  -- ^
+  --
+  --           [@populated@]: true to initialize it from the C runtime environment, false to create an empty environment.
+  -> IO (BG.Ptr SDL_Environment)
+sDL_CreateEnvironment = hs_bindgen_5c62fc7482159de0
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_GetEnvironmentVariable@
+foreign import ccall safe "hs_bindgen_4da0ee2273bc4013"
+  hs_bindgen_4da0ee2273bc4013_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_GetEnvironmentVariable@
+hs_bindgen_4da0ee2273bc4013
+  :: BG.Ptr SDL_Environment
+  -> PtrConst.PtrConst BG.CChar
+  -> IO (PtrConst.PtrConst BG.CChar)
+hs_bindgen_4da0ee2273bc4013 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_4da0ee2273bc4013_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Get the value of a variable in the environment.
+--
+--     [Returns]: a pointer to the value of the variable or NULL if it can\'t be found.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetEnvironment', 'sDL_CreateEnvironment', 'sDL_GetEnvironmentVariables', 'sDL_SetEnvironmentVariable', 'sDL_UnsetEnvironmentVariable'
+--
+--     [C declaration]: @SDL_GetEnvironmentVariable@, defined at @SDL3\/SDL_stdinc.h 1715:42@
+sDL_GetEnvironmentVariable
+  :: BG.Ptr SDL_Environment
+  -- ^
+  --
+  --           [@env@]: the environment to query.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@name@]: the name of the variable to get.
+  -> IO (PtrConst.PtrConst BG.CChar)
+sDL_GetEnvironmentVariable =
+  hs_bindgen_4da0ee2273bc4013
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_GetEnvironmentVariables@
+foreign import ccall safe "hs_bindgen_4c1189e55e8583bb"
+  hs_bindgen_4c1189e55e8583bb_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_GetEnvironmentVariables@
+hs_bindgen_4c1189e55e8583bb
+  :: BG.Ptr SDL_Environment
+  -> IO (BG.Ptr (BG.Ptr BG.CChar))
+hs_bindgen_4c1189e55e8583bb =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_4c1189e55e8583bb_base (BG.toFFIType x0))
+
+-- | Get all variables in the environment.
+--
+--     [Returns]: a NULL terminated array of pointers to environment variables in the form \"variable=value\" or NULL on failure; call SDL_GetError() for more information. This is a single allocation that should be freed with @SDL_free()@ when it is no longer needed.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetEnvironment', 'sDL_CreateEnvironment', 'sDL_GetEnvironmentVariables', 'sDL_SetEnvironmentVariable', 'sDL_UnsetEnvironmentVariable'
+--
+--     [C declaration]: @SDL_GetEnvironmentVariables@, defined at @SDL3\/SDL_stdinc.h 1736:37@
+sDL_GetEnvironmentVariables
+  :: BG.Ptr SDL_Environment
+  -- ^
+  --
+  --           [@env@]: the environment to query.
+  -> IO (BG.Ptr (BG.Ptr BG.CChar))
+sDL_GetEnvironmentVariables =
+  hs_bindgen_4c1189e55e8583bb
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_SetEnvironmentVariable@
+foreign import ccall safe "hs_bindgen_5824ff8a221d07c0"
+  hs_bindgen_5824ff8a221d07c0_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.CBool
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_SetEnvironmentVariable@
+hs_bindgen_5824ff8a221d07c0
+  :: BG.Ptr SDL_Environment
+  -> PtrConst.PtrConst BG.CChar
+  -> PtrConst.PtrConst BG.CChar
+  -> BG.CBool
+  -> IO BG.CBool
+hs_bindgen_5824ff8a221d07c0 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_5824ff8a221d07c0_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Set the value of a variable in the environment.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetEnvironment', 'sDL_CreateEnvironment', 'sDL_GetEnvironmentVariable', 'sDL_GetEnvironmentVariables', 'sDL_UnsetEnvironmentVariable'
+--
+--     [C declaration]: @SDL_SetEnvironmentVariable@, defined at @SDL3\/SDL_stdinc.h 1760:34@
+sDL_SetEnvironmentVariable
+  :: BG.Ptr SDL_Environment
+  -- ^
+  --
+  --           [@env@]: the environment to modify.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@name@]: the name of the variable to set.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@value@]: the value of the variable to set.
+  -> BG.CBool
+  -- ^
+  --
+  --           [@overwrite@]: true to overwrite the variable if it exists, false to return success without setting the variable if it already exists.
+  -> IO BG.CBool
+sDL_SetEnvironmentVariable =
+  hs_bindgen_5824ff8a221d07c0
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_UnsetEnvironmentVariable@
+foreign import ccall safe "hs_bindgen_f695a3f593331aff"
+  hs_bindgen_f695a3f593331aff_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_UnsetEnvironmentVariable@
+hs_bindgen_f695a3f593331aff
+  :: BG.Ptr SDL_Environment
+  -> PtrConst.PtrConst BG.CChar
+  -> IO BG.CBool
+hs_bindgen_f695a3f593331aff =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_f695a3f593331aff_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Clear a variable from the environment.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetEnvironment', 'sDL_CreateEnvironment', 'sDL_GetEnvironmentVariable', 'sDL_GetEnvironmentVariables', 'sDL_SetEnvironmentVariable', 'sDL_UnsetEnvironmentVariable'
+--
+--     [C declaration]: @SDL_UnsetEnvironmentVariable@, defined at @SDL3\/SDL_stdinc.h 1781:34@
+sDL_UnsetEnvironmentVariable
+  :: BG.Ptr SDL_Environment
+  -- ^
+  --
+  --           [@env@]: the environment to modify.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@name@]: the name of the variable to unset.
+  -> IO BG.CBool
+sDL_UnsetEnvironmentVariable =
+  hs_bindgen_f695a3f593331aff
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_DestroyEnvironment@
+foreign import ccall safe "hs_bindgen_1dd67a4722131c01"
+  hs_bindgen_1dd67a4722131c01_base
+    :: BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_DestroyEnvironment@
+hs_bindgen_1dd67a4722131c01
+  :: BG.Ptr SDL_Environment
+  -> IO ()
+hs_bindgen_1dd67a4722131c01 =
+  \x0 ->
+    hs_bindgen_1dd67a4722131c01_base (BG.toFFIType x0)
+
+-- | Destroy a set of environment variables.
+--
+--     [Thread safety]: It is safe to call this function from any thread, as long as the environment is no longer in use.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_CreateEnvironment'
+--
+--     [C declaration]: @SDL_DestroyEnvironment@, defined at @SDL3\/SDL_stdinc.h 1795:34@
+sDL_DestroyEnvironment
+  :: BG.Ptr SDL_Environment
+  -- ^
+  --
+  --           [@env@]: the environment to destroy.
+  -> IO ()
+sDL_DestroyEnvironment = hs_bindgen_1dd67a4722131c01
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_getenv@
+foreign import ccall safe "hs_bindgen_1af31e6913adf6ff"
+  hs_bindgen_1af31e6913adf6ff_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_getenv@
+hs_bindgen_1af31e6913adf6ff
+  :: PtrConst.PtrConst BG.CChar
+  -> IO (PtrConst.PtrConst BG.CChar)
+hs_bindgen_1af31e6913adf6ff =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_1af31e6913adf6ff_base (BG.toFFIType x0))
+
+-- | Get the value of a variable in the environment.
+--
+--     The name of the variable is case sensitive on all platforms.
+--
+--     This function uses SDL\'s cached copy of the environment and is thread-safe.
+--
+--     [Returns]: a pointer to the value of the variable or NULL if it can\'t be found.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_getenv@, defined at @SDL3\/SDL_stdinc.h 1812:42@
+sDL_getenv
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@name@]: the name of the variable to get.
+  -> IO (PtrConst.PtrConst BG.CChar)
+sDL_getenv = hs_bindgen_1af31e6913adf6ff
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_getenv_unsafe@
+foreign import ccall safe "hs_bindgen_5a7e5c07a3b52c7c"
+  hs_bindgen_5a7e5c07a3b52c7c_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_getenv_unsafe@
+hs_bindgen_5a7e5c07a3b52c7c
+  :: PtrConst.PtrConst BG.CChar
+  -> IO (PtrConst.PtrConst BG.CChar)
+hs_bindgen_5a7e5c07a3b52c7c =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_5a7e5c07a3b52c7c_base (BG.toFFIType x0))
+
+-- | Get the value of a variable in the environment.
+--
+--     This function bypasses SDL\'s cached copy of the environment and is not thread-safe.
+--
+--     On some platforms, this may make case-insensitive matches, while other platforms are case-sensitive. It is best to be precise with strings used for queries through this interface. SDL_getenv is always case-sensitive, however.
+--
+--     [Returns]: a pointer to the value of the variable or NULL if it can\'t be found.
+--
+--     [Thread safety]: This function is not thread safe, consider using @SDL_getenv()@ instead.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_getenv'
+--
+--     [C declaration]: @SDL_getenv_unsafe@, defined at @SDL3\/SDL_stdinc.h 1836:42@
+sDL_getenv_unsafe
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@name@]: the name of the variable to get.
+  -> IO (PtrConst.PtrConst BG.CChar)
+sDL_getenv_unsafe = hs_bindgen_5a7e5c07a3b52c7c
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_setenv_unsafe@
+foreign import ccall safe "hs_bindgen_e57ac980835e41db"
+  hs_bindgen_e57ac980835e41db_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_setenv_unsafe@
+hs_bindgen_e57ac980835e41db
+  :: PtrConst.PtrConst BG.CChar
+  -> PtrConst.PtrConst BG.CChar
+  -> BG.CInt
+  -> IO BG.CInt
+hs_bindgen_e57ac980835e41db =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_e57ac980835e41db_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Set the value of a variable in the environment.
+--
+--     [Returns]: 0 on success, -1 on error.
+--
+--     [Thread safety]: This function is not thread safe, consider using @SDL_SetEnvironmentVariable()@ instead.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_SetEnvironmentVariable'
+--
+--     [C declaration]: @SDL_setenv_unsafe@, defined at @SDL3\/SDL_stdinc.h 1854:33@
+sDL_setenv_unsafe
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@name@]: the name of the variable to set.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@value@]: the value of the variable to set.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@overwrite@]: 1 to overwrite the variable if it exists, 0 to return success without setting the variable if it already exists.
+  -> IO BG.CInt
+sDL_setenv_unsafe = hs_bindgen_e57ac980835e41db
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_unsetenv_unsafe@
+foreign import ccall safe "hs_bindgen_6237b0757e59fa37"
+  hs_bindgen_6237b0757e59fa37_base
+    :: BG.Ptr BG.Void
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_unsetenv_unsafe@
+hs_bindgen_6237b0757e59fa37
+  :: PtrConst.PtrConst BG.CChar
+  -> IO BG.CInt
+hs_bindgen_6237b0757e59fa37 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_6237b0757e59fa37_base (BG.toFFIType x0))
+
+-- | Clear a variable from the environment.
+--
+--     [Returns]: 0 on success, -1 on error.
+--
+--     [Thread safety]: This function is not thread safe, consider using @SDL_UnsetEnvironmentVariable()@ instead.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_UnsetEnvironmentVariable'
+--
+--     [C declaration]: @SDL_unsetenv_unsafe@, defined at @SDL3\/SDL_stdinc.h 1869:33@
+sDL_unsetenv_unsafe
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@name@]: the name of the variable to unset.
+  -> IO BG.CInt
+sDL_unsetenv_unsafe = hs_bindgen_6237b0757e59fa37
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_qsort@
+foreign import ccall safe "hs_bindgen_b81d78a311d44f46"
+  hs_bindgen_b81d78a311d44f46_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> HsBindgen.Runtime.LibC.CSize
+    -> BG.FunPtr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_qsort@
+hs_bindgen_b81d78a311d44f46
+  :: BG.Ptr BG.Void
+  -> HsBindgen.Runtime.LibC.CSize
+  -> HsBindgen.Runtime.LibC.CSize
+  -> SDL_CompareCallback
+  -> IO ()
+hs_bindgen_b81d78a311d44f46 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_b81d78a311d44f46_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
+
+-- | Sort an array.
+--
+--     For example:
+--
+--     @
+--     typedef struct {
+--         int key;
+--         const char *string;
+--     } data;
+--
+--     int SDLCALL compare(const void *a, const void *b)
+--     {
+--         const data *A = (const data *)a;
+--         const data *B = (const data *)b;
+--
+--         if (A->n \< B->n) {
+--             return -1;
+--         } else if (B->n \< A->n) {
+--             return 1;
+--         } else {
+--             return 0;
+--         }
+--     }
+--
+--     data values[] = {
+--         { 3, \"third\" }, { 1, \"first\" }, { 2, \"second\" }
+--     };
+--
+--     SDL_qsort(values, SDL_arraysize(values), sizeof(values[0]), compare);
+--     @
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_bsearch', 'sDL_qsort_r'
+--
+--     [C declaration]: @SDL_qsort@, defined at @SDL3\/SDL_stdinc.h 1931:34@
+sDL_qsort
+  :: BG.Ptr BG.Void
+  -- ^
+  --
+  --           [@base@]: a pointer to the start of the array.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@nmemb@]: the number of elements in the array.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@size@]: the size of the elements in the array.
+  -> SDL_CompareCallback
+  -- ^
+  --
+  --           [@compare@]: a function used to compare elements in the array.
+  -> IO ()
+sDL_qsort = hs_bindgen_b81d78a311d44f46
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_bsearch@
+foreign import ccall safe "hs_bindgen_8c9a76f991574084"
+  hs_bindgen_8c9a76f991574084_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> HsBindgen.Runtime.LibC.CSize
+    -> BG.FunPtr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_bsearch@
+hs_bindgen_8c9a76f991574084
+  :: PtrConst.PtrConst BG.Void
+  -> PtrConst.PtrConst BG.Void
+  -> HsBindgen.Runtime.LibC.CSize
+  -> HsBindgen.Runtime.LibC.CSize
+  -> SDL_CompareCallback
+  -> IO (BG.Ptr BG.Void)
+hs_bindgen_8c9a76f991574084 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_8c9a76f991574084_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
+
+-- | Perform a binary search on a previously sorted array.
+--
+--     For example:
+--
+--     @
+--     typedef struct {
+--         int key;
+--         const char *string;
+--     } data;
+--
+--     int SDLCALL compare(const void *a, const void *b)
+--     {
+--         const data *A = (const data *)a;
+--         const data *B = (const data *)b;
+--
+--         if (A->n \< B->n) {
+--             return -1;
+--         } else if (B->n \< A->n) {
+--             return 1;
+--         } else {
+--             return 0;
+--         }
+--     }
+--
+--     data values[] = {
+--         { 1, \"first\" }, { 2, \"second\" }, { 3, \"third\" }
+--     };
+--     data key = { 2, NULL };
+--
+--     data *result = SDL_bsearch(&key, values, SDL_arraysize(values), sizeof(values[0]), compare);
+--     @
+--
+--     [Returns]: a pointer to the matching element in the array, or NULL if not found.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_bsearch_r', 'sDL_qsort'
+--
+--     [C declaration]: @SDL_bsearch@, defined at @SDL3\/SDL_stdinc.h 1981:36@
+sDL_bsearch
+  :: PtrConst.PtrConst BG.Void
+  -- ^
+  --
+  --           [@key@]: a pointer to a key equal to the element being searched for.
+  -> PtrConst.PtrConst BG.Void
+  -- ^
+  --
+  --           [@base@]: a pointer to the start of the array.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@nmemb@]: the number of elements in the array.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@size@]: the size of the elements in the array.
+  -> SDL_CompareCallback
+  -- ^
+  --
+  --           [@compare@]: a function used to compare elements in the array.
+  -> IO (BG.Ptr BG.Void)
+sDL_bsearch = hs_bindgen_8c9a76f991574084
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_qsort_r@
+foreign import ccall safe "hs_bindgen_d22a2fabdcd748eb"
+  hs_bindgen_d22a2fabdcd748eb_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> HsBindgen.Runtime.LibC.CSize
+    -> BG.FunPtr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_qsort_r@
+hs_bindgen_d22a2fabdcd748eb
+  :: BG.Ptr BG.Void
+  -> HsBindgen.Runtime.LibC.CSize
+  -> HsBindgen.Runtime.LibC.CSize
+  -> SDL_CompareCallback_r
+  -> BG.Ptr BG.Void
+  -> IO ()
+hs_bindgen_d22a2fabdcd748eb =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            hs_bindgen_d22a2fabdcd748eb_base
+              (BG.toFFIType x0)
+              (BG.toFFIType x1)
+              (BG.toFFIType x2)
+              (BG.toFFIType x3)
+              (BG.toFFIType x4)
+
+-- | Sort an array, passing a userdata pointer to the compare function.
+--
+--     For example:
+--
+--     @
+--     typedef enum {
+--         sort_increasing,
+--         sort_decreasing,
+--     } sort_method;
+--
+--     typedef struct {
+--         int key;
+--         const char *string;
+--     } data;
+--
+--     int SDLCALL compare(const void *userdata, const void *a, const void *b)
+--     {
+--         sort_method method = (sort_method)(uintptr_t)userdata;
+--         const data *A = (const data *)a;
+--         const data *B = (const data *)b;
+--
+--         if (A->key \< B->key) {
+--             return (method == sort_increasing) ? -1 : 1;
+--         } else if (B->key \< A->key) {
+--             return (method == sort_increasing) ? 1 : -1;
+--         } else {
+--             return 0;
+--         }
+--     }
+--
+--     data values[] = {
+--         { 3, \"third\" }, { 1, \"first\" }, { 2, \"second\" }
+--     };
+--
+--     SDL_qsort_r(values, SDL_arraysize(values), sizeof(values[0]), compare, (const void *)(uintptr_t)sort_increasing);
+--     @
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_bsearch_r', 'sDL_qsort'
+--
+--     [C declaration]: @SDL_qsort_r@, defined at @SDL3\/SDL_stdinc.h 2051:34@
+sDL_qsort_r
+  :: BG.Ptr BG.Void
+  -- ^
+  --
+  --           [@base@]: a pointer to the start of the array.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@nmemb@]: the number of elements in the array.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@size@]: the size of the elements in the array.
+  -> SDL_CompareCallback_r
+  -- ^
+  --
+  --           [@compare@]: a function used to compare elements in the array.
+  -> BG.Ptr BG.Void
+  -- ^
+  --
+  --           [@userdata@]: a pointer to pass to the compare function.
+  -> IO ()
+sDL_qsort_r = hs_bindgen_d22a2fabdcd748eb
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_bsearch_r@
+foreign import ccall safe "hs_bindgen_9cce970e9842407b"
+  hs_bindgen_9cce970e9842407b_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> HsBindgen.Runtime.LibC.CSize
+    -> BG.FunPtr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_bsearch_r@
+hs_bindgen_9cce970e9842407b
+  :: PtrConst.PtrConst BG.Void
+  -> PtrConst.PtrConst BG.Void
+  -> HsBindgen.Runtime.LibC.CSize
+  -> HsBindgen.Runtime.LibC.CSize
+  -> SDL_CompareCallback_r
+  -> BG.Ptr BG.Void
+  -> IO (BG.Ptr BG.Void)
+hs_bindgen_9cce970e9842407b =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_9cce970e9842407b_base
+                    (BG.toFFIType x0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                    (BG.toFFIType x4)
+                    (BG.toFFIType x5)
+                )
+
+-- | Perform a binary search on a previously sorted array, passing a userdata pointer to the compare function.
+--
+--     For example:
+--
+--     @
+--     typedef enum {
+--         sort_increasing,
+--         sort_decreasing,
+--     } sort_method;
+--
+--     typedef struct {
+--         int key;
+--         const char *string;
+--     } data;
+--
+--     int SDLCALL compare(const void *userdata, const void *a, const void *b)
+--     {
+--         sort_method method = (sort_method)(uintptr_t)userdata;
+--         const data *A = (const data *)a;
+--         const data *B = (const data *)b;
+--
+--         if (A->key \< B->key) {
+--             return (method == sort_increasing) ? -1 : 1;
+--         } else if (B->key \< A->key) {
+--             return (method == sort_increasing) ? 1 : -1;
+--         } else {
+--             return 0;
+--         }
+--     }
+--
+--     data values[] = {
+--         { 1, \"first\" }, { 2, \"second\" }, { 3, \"third\" }
+--     };
+--     data key = { 2, NULL };
+--
+--     data *result = SDL_bsearch_r(&key, values, SDL_arraysize(values), sizeof(values[0]), compare, (const void *)(uintptr_t)sort_increasing);
+--     @
+--
+--     [Returns]: a pointer to the matching element in the array, or NULL if not found.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_bsearch', 'sDL_qsort_r'
+--
+--     [C declaration]: @SDL_bsearch_r@, defined at @SDL3\/SDL_stdinc.h 2109:36@
+sDL_bsearch_r
+  :: PtrConst.PtrConst BG.Void
+  -- ^
+  --
+  --           [@key@]: a pointer to a key equal to the element being searched for.
+  -> PtrConst.PtrConst BG.Void
+  -- ^
+  --
+  --           [@base@]: a pointer to the start of the array.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@nmemb@]: the number of elements in the array.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@size@]: the size of the elements in the array.
+  -> SDL_CompareCallback_r
+  -- ^
+  --
+  --           [@compare@]: a function used to compare elements in the array.
+  -> BG.Ptr BG.Void
+  -- ^
+  --
+  --           [@userdata@]: a pointer to pass to the compare function.
+  -> IO (BG.Ptr BG.Void)
+sDL_bsearch_r = hs_bindgen_9cce970e9842407b
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_abs@
+foreign import ccall safe "hs_bindgen_3b7f43f8c476ee06"
+  hs_bindgen_3b7f43f8c476ee06_base
+    :: BG.CInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_abs@
+hs_bindgen_3b7f43f8c476ee06
+  :: BG.CInt
+  -> IO BG.CInt
+hs_bindgen_3b7f43f8c476ee06 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3b7f43f8c476ee06_base (BG.toFFIType x0))
+
+-- | Compute the absolute value of @x@.
+--
+--     [Returns]: the absolute value of x.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_abs@, defined at @SDL3\/SDL_stdinc.h 2121:33@
+sDL_abs
+  :: BG.CInt
+  -- ^
+  --
+  --           [@x@]: an integer value.
+  -> IO BG.CInt
+sDL_abs = hs_bindgen_3b7f43f8c476ee06
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isalpha@
+foreign import ccall safe "hs_bindgen_9a00314812b7b060"
+  hs_bindgen_9a00314812b7b060_base
+    :: BG.CInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isalpha@
+hs_bindgen_9a00314812b7b060
+  :: BG.CInt
+  -> IO BG.CInt
+hs_bindgen_9a00314812b7b060 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_9a00314812b7b060_base (BG.toFFIType x0))
+
+-- | Query if a character is alphabetic (a letter).
+--
+--     __WARNING__: Regardless of system locale, this will only treat ASCII values for English \'a-z\' and \'A-Z\' as true.
+--
+--     [Returns]: non-zero if x falls within the character class, zero otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_isalpha@, defined at @SDL3\/SDL_stdinc.h 2196:33@
+sDL_isalpha
+  :: BG.CInt
+  -- ^
+  --
+  --           [@x@]: character value to check.
+  -> IO BG.CInt
+sDL_isalpha = hs_bindgen_9a00314812b7b060
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isalnum@
+foreign import ccall safe "hs_bindgen_f2e3b47d308f6330"
+  hs_bindgen_f2e3b47d308f6330_base
+    :: BG.CInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isalnum@
+hs_bindgen_f2e3b47d308f6330
+  :: BG.CInt
+  -> IO BG.CInt
+hs_bindgen_f2e3b47d308f6330 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_f2e3b47d308f6330_base (BG.toFFIType x0))
+
+-- | Query if a character is alphabetic (a letter) or a number.
+--
+--     __WARNING__: Regardless of system locale, this will only treat ASCII values for English \'a-z\', \'A-Z\', and \'0-9\' as true.
+--
+--     [Returns]: non-zero if x falls within the character class, zero otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_isalnum@, defined at @SDL3\/SDL_stdinc.h 2211:33@
+sDL_isalnum
+  :: BG.CInt
+  -- ^
+  --
+  --           [@x@]: character value to check.
+  -> IO BG.CInt
+sDL_isalnum = hs_bindgen_f2e3b47d308f6330
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isblank@
+foreign import ccall safe "hs_bindgen_94e1edfbd7c1b6fd"
+  hs_bindgen_94e1edfbd7c1b6fd_base
+    :: BG.CInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isblank@
+hs_bindgen_94e1edfbd7c1b6fd
+  :: BG.CInt
+  -> IO BG.CInt
+hs_bindgen_94e1edfbd7c1b6fd =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_94e1edfbd7c1b6fd_base (BG.toFFIType x0))
+
+-- | Report if a character is blank (a space or tab).
+--
+--     __WARNING__: Regardless of system locale, this will only treat ASCII values 0x20 (space) or 0x9 (tab) as true.
+--
+--     [Returns]: non-zero if x falls within the character class, zero otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_isblank@, defined at @SDL3\/SDL_stdinc.h 2226:33@
+sDL_isblank
+  :: BG.CInt
+  -- ^
+  --
+  --           [@x@]: character value to check.
+  -> IO BG.CInt
+sDL_isblank = hs_bindgen_94e1edfbd7c1b6fd
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_iscntrl@
+foreign import ccall safe "hs_bindgen_f4e70f258fc0cd31"
+  hs_bindgen_f4e70f258fc0cd31_base
+    :: BG.CInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_iscntrl@
+hs_bindgen_f4e70f258fc0cd31
+  :: BG.CInt
+  -> IO BG.CInt
+hs_bindgen_f4e70f258fc0cd31 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_f4e70f258fc0cd31_base (BG.toFFIType x0))
+
+-- | Report if a character is a control character.
+--
+--     __WARNING__: Regardless of system locale, this will only treat ASCII values 0 through 0x1F, and 0x7F, as true.
+--
+--     [Returns]: non-zero if x falls within the character class, zero otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_iscntrl@, defined at @SDL3\/SDL_stdinc.h 2241:33@
+sDL_iscntrl
+  :: BG.CInt
+  -- ^
+  --
+  --           [@x@]: character value to check.
+  -> IO BG.CInt
+sDL_iscntrl = hs_bindgen_f4e70f258fc0cd31
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isdigit@
+foreign import ccall safe "hs_bindgen_a92ce90ddf0e012f"
+  hs_bindgen_a92ce90ddf0e012f_base
+    :: BG.CInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isdigit@
+hs_bindgen_a92ce90ddf0e012f
+  :: BG.CInt
+  -> IO BG.CInt
+hs_bindgen_a92ce90ddf0e012f =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a92ce90ddf0e012f_base (BG.toFFIType x0))
+
+-- | Report if a character is a numeric digit.
+--
+--     __WARNING__: Regardless of system locale, this will only treat ASCII values \'0\' (0x30) through \'9\' (0x39), as true.
+--
+--     [Returns]: non-zero if x falls within the character class, zero otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_isdigit@, defined at @SDL3\/SDL_stdinc.h 2256:33@
+sDL_isdigit
+  :: BG.CInt
+  -- ^
+  --
+  --           [@x@]: character value to check.
+  -> IO BG.CInt
+sDL_isdigit = hs_bindgen_a92ce90ddf0e012f
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isxdigit@
+foreign import ccall safe "hs_bindgen_c2fe92c140d522e3"
+  hs_bindgen_c2fe92c140d522e3_base
+    :: BG.CInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isxdigit@
+hs_bindgen_c2fe92c140d522e3
+  :: BG.CInt
+  -> IO BG.CInt
+hs_bindgen_c2fe92c140d522e3 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c2fe92c140d522e3_base (BG.toFFIType x0))
+
+-- | Report if a character is a hexadecimal digit.
+--
+--     __WARNING__: Regardless of system locale, this will only treat ASCII values \'A\' through \'F\', \'a\' through \'f\', and \'0\' through \'9\', as true.
+--
+--     [Returns]: non-zero if x falls within the character class, zero otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_isxdigit@, defined at @SDL3\/SDL_stdinc.h 2271:33@
+sDL_isxdigit
+  :: BG.CInt
+  -- ^
+  --
+  --           [@x@]: character value to check.
+  -> IO BG.CInt
+sDL_isxdigit = hs_bindgen_c2fe92c140d522e3
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_ispunct@
+foreign import ccall safe "hs_bindgen_abdf0b7703d7ef7b"
+  hs_bindgen_abdf0b7703d7ef7b_base
+    :: BG.CInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_ispunct@
+hs_bindgen_abdf0b7703d7ef7b
+  :: BG.CInt
+  -> IO BG.CInt
+hs_bindgen_abdf0b7703d7ef7b =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_abdf0b7703d7ef7b_base (BG.toFFIType x0))
+
+-- | Report if a character is a punctuation mark.
+--
+--     __WARNING__: Regardless of system locale, this is equivalent to @((SDL_isgraph(x)) && (!SDL_isalnum(x)))@.
+--
+--     [Returns]: non-zero if x falls within the character class, zero otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_isgraph', 'sDL_isalnum'
+--
+--     [C declaration]: @SDL_ispunct@, defined at @SDL3\/SDL_stdinc.h 2289:33@
+sDL_ispunct
+  :: BG.CInt
+  -- ^
+  --
+  --           [@x@]: character value to check.
+  -> IO BG.CInt
+sDL_ispunct = hs_bindgen_abdf0b7703d7ef7b
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isspace@
+foreign import ccall safe "hs_bindgen_b0c62a95d4008bcb"
+  hs_bindgen_b0c62a95d4008bcb_base
+    :: BG.CInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isspace@
+hs_bindgen_b0c62a95d4008bcb
+  :: BG.CInt
+  -> IO BG.CInt
+hs_bindgen_b0c62a95d4008bcb =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_b0c62a95d4008bcb_base (BG.toFFIType x0))
+
+-- | Report if a character is whitespace.
+--
+--     __WARNING__: Regardless of system locale, this will only treat the following ASCII values as true:
+--
+--     * space (0x20)
+--
+--     * tab (0x09)
+--
+--     * newline (0x0A)
+--
+--     * vertical tab (0x0B)
+--
+--     * form feed (0x0C)
+--
+--     * return (0x0D)
+--
+--     [Returns]: non-zero if x falls within the character class, zero otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_isspace@, defined at @SDL3\/SDL_stdinc.h 2311:33@
+sDL_isspace
+  :: BG.CInt
+  -- ^
+  --
+  --           [@x@]: character value to check.
+  -> IO BG.CInt
+sDL_isspace = hs_bindgen_b0c62a95d4008bcb
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isupper@
+foreign import ccall safe "hs_bindgen_dbe8ad5b2415f52b"
+  hs_bindgen_dbe8ad5b2415f52b_base
+    :: BG.CInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isupper@
+hs_bindgen_dbe8ad5b2415f52b
+  :: BG.CInt
+  -> IO BG.CInt
+hs_bindgen_dbe8ad5b2415f52b =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_dbe8ad5b2415f52b_base (BG.toFFIType x0))
+
+-- | Report if a character is upper case.
+--
+--     __WARNING__: Regardless of system locale, this will only treat ASCII values \'A\' through \'Z\' as true.
+--
+--     [Returns]: non-zero if x falls within the character class, zero otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_isupper@, defined at @SDL3\/SDL_stdinc.h 2326:33@
+sDL_isupper
+  :: BG.CInt
+  -- ^
+  --
+  --           [@x@]: character value to check.
+  -> IO BG.CInt
+sDL_isupper = hs_bindgen_dbe8ad5b2415f52b
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_islower@
+foreign import ccall safe "hs_bindgen_4f1c801e2ffe74d9"
+  hs_bindgen_4f1c801e2ffe74d9_base
+    :: BG.CInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_islower@
+hs_bindgen_4f1c801e2ffe74d9
+  :: BG.CInt
+  -> IO BG.CInt
+hs_bindgen_4f1c801e2ffe74d9 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_4f1c801e2ffe74d9_base (BG.toFFIType x0))
+
+-- | Report if a character is lower case.
+--
+--     __WARNING__: Regardless of system locale, this will only treat ASCII values \'a\' through \'z\' as true.
+--
+--     [Returns]: non-zero if x falls within the character class, zero otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_islower@, defined at @SDL3\/SDL_stdinc.h 2341:33@
+sDL_islower
+  :: BG.CInt
+  -- ^
+  --
+  --           [@x@]: character value to check.
+  -> IO BG.CInt
+sDL_islower = hs_bindgen_4f1c801e2ffe74d9
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isprint@
+foreign import ccall safe "hs_bindgen_1de66809f06ec2cf"
+  hs_bindgen_1de66809f06ec2cf_base
+    :: BG.CInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isprint@
+hs_bindgen_1de66809f06ec2cf
+  :: BG.CInt
+  -> IO BG.CInt
+hs_bindgen_1de66809f06ec2cf =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_1de66809f06ec2cf_base (BG.toFFIType x0))
+
+-- | Report if a character is \"printable\".
+--
+--     Be advised that \"printable\" has a definition that goes back to text terminals from the dawn of computing, making this a sort of special case function that is not suitable for Unicode (or most any) text management.
+--
+--     __WARNING__: Regardless of system locale, this will only treat ASCII values \' \' (0x20) through \'~\' (0x7E) as true.
+--
+--     [Returns]: non-zero if x falls within the character class, zero otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_isprint@, defined at @SDL3\/SDL_stdinc.h 2360:33@
+sDL_isprint
+  :: BG.CInt
+  -- ^
+  --
+  --           [@x@]: character value to check.
+  -> IO BG.CInt
+sDL_isprint = hs_bindgen_1de66809f06ec2cf
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isgraph@
+foreign import ccall safe "hs_bindgen_7cecb757f16ce85d"
+  hs_bindgen_7cecb757f16ce85d_base
+    :: BG.CInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isgraph@
+hs_bindgen_7cecb757f16ce85d
+  :: BG.CInt
+  -> IO BG.CInt
+hs_bindgen_7cecb757f16ce85d =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_7cecb757f16ce85d_base (BG.toFFIType x0))
+
+-- | Report if a character is any \"printable\" except space.
+--
+--     Be advised that \"printable\" has a definition that goes back to text terminals from the dawn of computing, making this a sort of special case function that is not suitable for Unicode (or most any) text management.
+--
+--     __WARNING__: Regardless of system locale, this is equivalent to @(SDL_isprint(x)) && ((x) != \' \')@.
+--
+--     [Returns]: non-zero if x falls within the character class, zero otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_isprint'
+--
+--     [C declaration]: @SDL_isgraph@, defined at @SDL3\/SDL_stdinc.h 2381:33@
+sDL_isgraph
+  :: BG.CInt
+  -- ^
+  --
+  --           [@x@]: character value to check.
+  -> IO BG.CInt
+sDL_isgraph = hs_bindgen_7cecb757f16ce85d
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_toupper@
+foreign import ccall safe "hs_bindgen_799fe4e6fc639bc0"
+  hs_bindgen_799fe4e6fc639bc0_base
+    :: BG.CInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_toupper@
+hs_bindgen_799fe4e6fc639bc0
+  :: BG.CInt
+  -> IO BG.CInt
+hs_bindgen_799fe4e6fc639bc0 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_799fe4e6fc639bc0_base (BG.toFFIType x0))
+
+-- | Convert low-ASCII English letters to uppercase.
+--
+--     __WARNING__: Regardless of system locale, this will only convert ASCII values \'a\' through \'z\' to uppercase.
+--
+--     This function returns the uppercase equivalent of @x@. If a character cannot be converted, or is already uppercase, this function returns @x@.
+--
+--     [Returns]: capitalized version of x, or x if no conversion available.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_toupper@, defined at @SDL3\/SDL_stdinc.h 2399:33@
+sDL_toupper
+  :: BG.CInt
+  -- ^
+  --
+  --           [@x@]: character value to check.
+  -> IO BG.CInt
+sDL_toupper = hs_bindgen_799fe4e6fc639bc0
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_tolower@
+foreign import ccall safe "hs_bindgen_af600e5bb74004b2"
+  hs_bindgen_af600e5bb74004b2_base
+    :: BG.CInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_tolower@
+hs_bindgen_af600e5bb74004b2
+  :: BG.CInt
+  -> IO BG.CInt
+hs_bindgen_af600e5bb74004b2 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_af600e5bb74004b2_base (BG.toFFIType x0))
+
+-- | Convert low-ASCII English letters to lowercase.
+--
+--     __WARNING__: Regardless of system locale, this will only convert ASCII values \'A\' through \'Z\' to lowercase.
+--
+--     This function returns the lowercase equivalent of @x@. If a character cannot be converted, or is already lowercase, this function returns @x@.
+--
+--     [Returns]: lowercase version of x, or x if no conversion available.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_tolower@, defined at @SDL3\/SDL_stdinc.h 2417:33@
+sDL_tolower
+  :: BG.CInt
+  -- ^
+  --
+  --           [@x@]: character value to check.
+  -> IO BG.CInt
+sDL_tolower = hs_bindgen_af600e5bb74004b2
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_crc16@
+foreign import ccall safe "hs_bindgen_8b9d7fd6e4874342"
+  hs_bindgen_8b9d7fd6e4874342_base
+    :: HsBindgen.Runtime.LibC.Word16
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO HsBindgen.Runtime.LibC.Word16
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_crc16@
+hs_bindgen_8b9d7fd6e4874342
+  :: Uint16
+  -> PtrConst.PtrConst BG.Void
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO Uint16
+hs_bindgen_8b9d7fd6e4874342 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_8b9d7fd6e4874342_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Calculate a CRC-16 value.
+--
+--     [https:\/\/en.wikipedia.org\/wiki\/Cyclic_redundancy_check](https://en.wikipedia.org/wiki/Cyclic_redundancy_check)
+--
+--     This function can be called multiple times, to stream data to be checksummed in blocks. Each call must provide the previous CRC-16 return value to be updated with the next block. The first call to this function for a set of blocks should pass in a zero CRC value.
+--
+--     [Returns]: a CRC-16 checksum value of all blocks in the data set.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_crc16@, defined at @SDL3\/SDL_stdinc.h 2438:36@
+sDL_crc16
+  :: Uint16
+  -- ^
+  --
+  --           [@crc@]: the current checksum for this data set, or 0 for a new data set.
+  -> PtrConst.PtrConst BG.Void
+  -- ^
+  --
+  --           [@data@]: a new block of data to add to the checksum.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@len@]: the size, in bytes, of the new block of data.
+  -> IO Uint16
+sDL_crc16 = hs_bindgen_8b9d7fd6e4874342
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_crc32@
+foreign import ccall safe "hs_bindgen_20e1e20820f9c17a"
+  hs_bindgen_20e1e20820f9c17a_base
+    :: HsBindgen.Runtime.LibC.Word32
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO HsBindgen.Runtime.LibC.Word32
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_crc32@
+hs_bindgen_20e1e20820f9c17a
+  :: Uint32
+  -> PtrConst.PtrConst BG.Void
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO Uint32
+hs_bindgen_20e1e20820f9c17a =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_20e1e20820f9c17a_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Calculate a CRC-32 value.
+--
+--     [https:\/\/en.wikipedia.org\/wiki\/Cyclic_redundancy_check](https://en.wikipedia.org/wiki/Cyclic_redundancy_check)
+--
+--     This function can be called multiple times, to stream data to be checksummed in blocks. Each call must provide the previous CRC-32 return value to be updated with the next block. The first call to this function for a set of blocks should pass in a zero CRC value.
+--
+--     [Returns]: a CRC-32 checksum value of all blocks in the data set.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_crc32@, defined at @SDL3\/SDL_stdinc.h 2459:36@
+sDL_crc32
+  :: Uint32
+  -- ^
+  --
+  --           [@crc@]: the current checksum for this data set, or 0 for a new data set.
+  -> PtrConst.PtrConst BG.Void
+  -- ^
+  --
+  --           [@data@]: a new block of data to add to the checksum.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@len@]: the size, in bytes, of the new block of data.
+  -> IO Uint32
+sDL_crc32 = hs_bindgen_20e1e20820f9c17a
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_murmur3_32@
+foreign import ccall safe "hs_bindgen_e26385eb1b169df1"
+  hs_bindgen_e26385eb1b169df1_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_murmur3_32@
+hs_bindgen_e26385eb1b169df1
+  :: PtrConst.PtrConst BG.Void
+  -> HsBindgen.Runtime.LibC.CSize
+  -> Uint32
+  -> IO Uint32
+hs_bindgen_e26385eb1b169df1 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_e26385eb1b169df1_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Calculate a 32-bit MurmurHash3 value for a block of data.
+--
+--     [https:\/\/en.wikipedia.org\/wiki\/MurmurHash](https://en.wikipedia.org/wiki/MurmurHash)
+--
+--     A seed may be specified, which changes the final results consistently, but this does not work like SDL_crc16 and SDL_crc32: you can\'t feed a previous result from this function back into itself as the next seed value to calculate a hash in chunks; it won\'t produce the same hash as it would if the same data was provided in a single call.
+--
+--     If you aren\'t sure what to provide for a seed, zero is fine. Murmur3 is not cryptographically secure, so it shouldn\'t be used for hashing top-secret data.
+--
+--     [Returns]: a Murmur3 32-bit hash value.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_murmur3_32@, defined at @SDL3\/SDL_stdinc.h 2485:36@
+sDL_murmur3_32
+  :: PtrConst.PtrConst BG.Void
+  -- ^
+  --
+  --           [@data@]: the data to be hashed.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@len@]: the size of data, in bytes.
+  -> Uint32
+  -- ^
+  --
+  --           [@seed@]: a value that alters the final hash value.
+  -> IO Uint32
+sDL_murmur3_32 = hs_bindgen_e26385eb1b169df1
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_memcpy@
+foreign import ccall safe "hs_bindgen_cdcf81235b96677b"
+  hs_bindgen_cdcf81235b96677b_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_memcpy@
+hs_bindgen_cdcf81235b96677b
+  :: BG.Ptr BG.Void
+  -> PtrConst.PtrConst BG.Void
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO (BG.Ptr BG.Void)
+hs_bindgen_cdcf81235b96677b =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_cdcf81235b96677b_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Copy non-overlapping memory.
+--
+--     The memory regions must not overlap. If they do, use @SDL_memmove()@ instead.
+--
+--     [Returns]: @dst@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_memmove'
+--
+--     [C declaration]: @SDL_memcpy@, defined at @SDL3\/SDL_stdinc.h 2505:36@
+sDL_memcpy
+  :: BG.Ptr BG.Void
+  -- ^
+  --
+  --           [@dst@]: The destination memory region. Must not be NULL, and must not overlap with @src@.
+  -> PtrConst.PtrConst BG.Void
+  -- ^
+  --
+  --           [@src@]: The source memory region. Must not be NULL, and must not overlap with @dst@.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@len@]: The length in bytes of both @dst@ and @src@.
+  -> IO (BG.Ptr BG.Void)
+sDL_memcpy = hs_bindgen_cdcf81235b96677b
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_memmove@
+foreign import ccall safe "hs_bindgen_35784700b43bfe53"
+  hs_bindgen_35784700b43bfe53_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_memmove@
+hs_bindgen_35784700b43bfe53
+  :: BG.Ptr BG.Void
+  -> PtrConst.PtrConst BG.Void
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO (BG.Ptr BG.Void)
+hs_bindgen_35784700b43bfe53 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_35784700b43bfe53_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Copy memory ranges that might overlap.
+--
+--     It is okay for the memory regions to overlap. If you are confident that the regions never overlap, using @SDL_memcpy()@ may improve performance.
+--
+--     [Returns]: @dst@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_memcpy'
+--
+--     [C declaration]: @SDL_memmove@, defined at @SDL3\/SDL_stdinc.h 2561:36@
+sDL_memmove
+  :: BG.Ptr BG.Void
+  -- ^
+  --
+  --           [@dst@]: The destination memory region. Must not be NULL.
+  -> PtrConst.PtrConst BG.Void
+  -- ^
+  --
+  --           [@src@]: The source memory region. Must not be NULL.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@len@]: The length in bytes of both @dst@ and @src@.
+  -> IO (BG.Ptr BG.Void)
+sDL_memmove = hs_bindgen_35784700b43bfe53
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_memset@
+foreign import ccall safe "hs_bindgen_74bc363e8ec99139"
+  hs_bindgen_74bc363e8ec99139_base
+    :: BG.Ptr BG.Void
+    -> BG.CInt
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_memset@
+hs_bindgen_74bc363e8ec99139
+  :: BG.Ptr BG.Void
+  -> BG.CInt
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO (BG.Ptr BG.Void)
+hs_bindgen_74bc363e8ec99139 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_74bc363e8ec99139_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Initialize all bytes of buffer of memory to a specific value.
+--
+--     This function will set @len@ bytes, pointed to by @dst@, to the value specified in @c@.
+--
+--     Despite @c@ being an @int@ instead of a @char@, this only operates on bytes; @c@ must be a value between 0 and 255, inclusive.
+--
+--     [Returns]: @dst@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_memset@, defined at @SDL3\/SDL_stdinc.h 2589:36@
+sDL_memset
+  :: BG.Ptr BG.Void
+  -- ^
+  --
+  --           [@dst@]: the destination memory region. Must not be NULL.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@c@]: the byte value to set.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@len@]: the length, in bytes, to set in @dst@.
+  -> IO (BG.Ptr BG.Void)
+sDL_memset = hs_bindgen_74bc363e8ec99139
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_memset4@
+foreign import ccall safe "hs_bindgen_39f43c1520a45f57"
+  hs_bindgen_39f43c1520a45f57_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_memset4@
+hs_bindgen_39f43c1520a45f57
+  :: BG.Ptr BG.Void
+  -> Uint32
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO (BG.Ptr BG.Void)
+hs_bindgen_39f43c1520a45f57 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_39f43c1520a45f57_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Initialize all 32-bit words of buffer of memory to a specific value.
+--
+--     This function will set a buffer of @dwords@ 'Uint32' values, pointed to by @dst@, to the value specified in @val@.
+--
+--     Unlike SDL_memset, this sets 32-bit values, not bytes, so it\'s not limited to a range of 0-255.
+--
+--     [Returns]: @dst@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_memset4@, defined at @SDL3\/SDL_stdinc.h 2609:36@
+sDL_memset4
+  :: BG.Ptr BG.Void
+  -- ^
+  --
+  --           [@dst@]: the destination memory region. Must not be NULL.
+  -> Uint32
+  -- ^
+  --
+  --           [@val@]: the 'Uint32' value to set.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@dwords@]: the number of 'Uint32' values to set in @dst@.
+  -> IO (BG.Ptr BG.Void)
+sDL_memset4 = hs_bindgen_39f43c1520a45f57
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_memcmp@
+foreign import ccall safe "hs_bindgen_1386d72429f6b9cb"
+  hs_bindgen_1386d72429f6b9cb_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_memcmp@
+hs_bindgen_1386d72429f6b9cb
+  :: PtrConst.PtrConst BG.Void
+  -> PtrConst.PtrConst BG.Void
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO BG.CInt
+hs_bindgen_1386d72429f6b9cb =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_1386d72429f6b9cb_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Compare two buffers of memory.
+--
+--     [Returns]: less than zero if s1 is \"less than\" s2, greater than zero if s1 is \"greater than\" s2, and zero if the buffers match exactly for @len@ bytes.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_memcmp@, defined at @SDL3\/SDL_stdinc.h 2691:33@
+sDL_memcmp
+  :: PtrConst.PtrConst BG.Void
+  -- ^
+  --
+  --           [@s1@]: the first buffer to compare. NULL is not permitted!
+  -> PtrConst.PtrConst BG.Void
+  -- ^
+  --
+  --           [@s2@]: the second buffer to compare. NULL is not permitted!
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@len@]: the number of bytes to compare between the buffers.
+  -> IO BG.CInt
+sDL_memcmp = hs_bindgen_1386d72429f6b9cb
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcslen@
+foreign import ccall safe "hs_bindgen_e6c3253fb4b72427"
+  hs_bindgen_e6c3253fb4b72427_base
+    :: BG.Ptr BG.Void
+    -> IO HsBindgen.Runtime.LibC.CSize
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcslen@
+hs_bindgen_e6c3253fb4b72427
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -> IO HsBindgen.Runtime.LibC.CSize
+hs_bindgen_e6c3253fb4b72427 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_e6c3253fb4b72427_base (BG.toFFIType x0))
+
+-- | This works exactly like wcslen() but doesn\'t require access to a C runtime.
+--
+--     Counts the number of wchar_t values in @wstr@, excluding the null terminator.
+--
+--     Like SDL_strlen only counts bytes and not codepoints in a UTF-8 string, this counts wchar_t values in a string, even if the string\'s encoding is of variable width, like UTF-16.
+--
+--     Also be aware that wchar_t is different sizes on different platforms (4 bytes on Linux, 2 on Windows, etc).
+--
+--     [Returns]: the length (in wchar_t values, excluding the null terminator) of @wstr@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_wcsnlen', 'sDL_utf8strlen', 'sDL_utf8strnlen'
+--
+--     [C declaration]: @SDL_wcslen@, defined at @SDL3\/SDL_stdinc.h 2718:36@
+sDL_wcslen
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@wstr@]: The null-terminated wide string to read. Must not be NULL.
+  -> IO HsBindgen.Runtime.LibC.CSize
+sDL_wcslen = hs_bindgen_e6c3253fb4b72427
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcsnlen@
+foreign import ccall safe "hs_bindgen_da04478d43043c90"
+  hs_bindgen_da04478d43043c90_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO HsBindgen.Runtime.LibC.CSize
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcsnlen@
+hs_bindgen_da04478d43043c90
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO HsBindgen.Runtime.LibC.CSize
+hs_bindgen_da04478d43043c90 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_da04478d43043c90_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | This works exactly like wcsnlen() but doesn\'t require access to a C runtime.
+--
+--     Counts up to a maximum of @maxlen@ wchar_t values in @wstr@, excluding the null terminator.
+--
+--     Like SDL_strnlen only counts bytes and not codepoints in a UTF-8 string, this counts wchar_t values in a string, even if the string\'s encoding is of variable width, like UTF-16.
+--
+--     Also be aware that wchar_t is different sizes on different platforms (4 bytes on Linux, 2 on Windows, etc).
+--
+--     Also, @maxlen@ is a count of wide characters, not bytes!
+--
+--     [Returns]: the length (in wide characters, excluding the null terminator) of @wstr@ but never more than @maxlen@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_wcslen', 'sDL_utf8strlen', 'sDL_utf8strnlen'
+--
+--     [C declaration]: @SDL_wcsnlen@, defined at @SDL3\/SDL_stdinc.h 2749:36@
+sDL_wcsnlen
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@wstr@]: The null-terminated wide string to read. Must not be NULL.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@maxlen@]: The maximum amount of wide characters to count.
+  -> IO HsBindgen.Runtime.LibC.CSize
+sDL_wcsnlen = hs_bindgen_da04478d43043c90
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcslcpy@
+foreign import ccall safe "hs_bindgen_82a9094f0d522cdf"
+  hs_bindgen_82a9094f0d522cdf_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO HsBindgen.Runtime.LibC.CSize
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcslcpy@
+hs_bindgen_82a9094f0d522cdf
+  :: BG.Ptr HsBindgen.Runtime.LibC.CWchar
+  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO HsBindgen.Runtime.LibC.CSize
+hs_bindgen_82a9094f0d522cdf =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_82a9094f0d522cdf_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Copy a wide string.
+--
+--     This function copies @maxlen@ - 1 wide characters from @src@ to @dst@, then appends a null terminator.
+--
+--     @src@ and @dst@ must not overlap.
+--
+--     If @maxlen@ is 0, no wide characters are copied and no null terminator is written.
+--
+--     [Returns]: the length (in wide characters, excluding the null terminator) of @src@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_wcslcat'
+--
+--     [C declaration]: @SDL_wcslcpy@, defined at @SDL3\/SDL_stdinc.h 2776:36@
+sDL_wcslcpy
+  :: BG.Ptr HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@dst@]: The destination buffer. Must not be NULL, and must not overlap with @src@.
+  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@src@]: The null-terminated wide string to copy. Must not be NULL, and must not overlap with @dst@.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@maxlen@]: The length (in wide characters) of the destination buffer.
+  -> IO HsBindgen.Runtime.LibC.CSize
+sDL_wcslcpy = hs_bindgen_82a9094f0d522cdf
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcslcat@
+foreign import ccall safe "hs_bindgen_c85ef13eabbd96dd"
+  hs_bindgen_c85ef13eabbd96dd_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO HsBindgen.Runtime.LibC.CSize
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcslcat@
+hs_bindgen_c85ef13eabbd96dd
+  :: BG.Ptr HsBindgen.Runtime.LibC.CWchar
+  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO HsBindgen.Runtime.LibC.CSize
+hs_bindgen_c85ef13eabbd96dd =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_c85ef13eabbd96dd_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Concatenate wide strings.
+--
+--     This function appends up to @maxlen@ - SDL_wcslen(dst) - 1 wide characters from @src@ to the end of the wide string in @dst@, then appends a null terminator.
+--
+--     @src@ and @dst@ must not overlap.
+--
+--     If @maxlen@ - SDL_wcslen(dst) - 1 is less than or equal to 0, then @dst@ is unmodified.
+--
+--     [Returns]: the length (in wide characters, excluding the null terminator) of the string in @dst@ plus the length of @src@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_wcslcpy'
+--
+--     [C declaration]: @SDL_wcslcat@, defined at @SDL3\/SDL_stdinc.h 2805:36@
+sDL_wcslcat
+  :: BG.Ptr HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@dst@]: The destination buffer already containing the first null-terminated wide string. Must not be NULL and must not overlap with @src@.
+  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@src@]: The second null-terminated wide string. Must not be NULL, and must not overlap with @dst@.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@maxlen@]: The length (in wide characters) of the destination buffer.
+  -> IO HsBindgen.Runtime.LibC.CSize
+sDL_wcslcat = hs_bindgen_c85ef13eabbd96dd
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcsdup@
+foreign import ccall safe "hs_bindgen_9a5bf9db9506735d"
+  hs_bindgen_9a5bf9db9506735d_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcsdup@
+hs_bindgen_9a5bf9db9506735d
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -> IO (BG.Ptr HsBindgen.Runtime.LibC.CWchar)
+hs_bindgen_9a5bf9db9506735d =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_9a5bf9db9506735d_base (BG.toFFIType x0))
+
+-- | Allocate a copy of a wide string.
+--
+--     This allocates enough space for a null-terminated copy of @wstr@, using SDL_malloc, and then makes a copy of the string into this space.
+--
+--     The returned string is owned by the caller, and should be passed to SDL_free when no longer needed.
+--
+--     [Returns]: a pointer to the newly-allocated wide string.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_wcsdup@, defined at @SDL3\/SDL_stdinc.h 2823:39@
+sDL_wcsdup
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@wstr@]: the string to copy.
+  -> IO (BG.Ptr HsBindgen.Runtime.LibC.CWchar)
+sDL_wcsdup = hs_bindgen_9a5bf9db9506735d
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcsstr@
+foreign import ccall safe "hs_bindgen_8807485ad58a476c"
+  hs_bindgen_8807485ad58a476c_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcsstr@
+hs_bindgen_8807485ad58a476c
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -> IO (BG.Ptr HsBindgen.Runtime.LibC.CWchar)
+hs_bindgen_8807485ad58a476c =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_8807485ad58a476c_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Search a wide string for the first instance of a specific substring.
+--
+--     The search ends once it finds the requested substring, or a null terminator byte to end the string.
+--
+--     Note that this looks for strings of /wide characters/, not /codepoints/, so it\'s legal to search for malformed and incomplete UTF-16 sequences.
+--
+--     [Returns]: a pointer to the first instance of @needle@ in the string, or NULL if not found.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_wcsstr@, defined at @SDL3\/SDL_stdinc.h 2843:39@
+sDL_wcsstr
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@haystack@]: the wide string to search. Must not be NULL.
+  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@needle@]: the wide string to search for. Must not be NULL.
+  -> IO (BG.Ptr HsBindgen.Runtime.LibC.CWchar)
+sDL_wcsstr = hs_bindgen_8807485ad58a476c
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcsnstr@
+foreign import ccall safe "hs_bindgen_0f95369992d6076d"
+  hs_bindgen_0f95369992d6076d_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcsnstr@
+hs_bindgen_0f95369992d6076d
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO (BG.Ptr HsBindgen.Runtime.LibC.CWchar)
+hs_bindgen_0f95369992d6076d =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_0f95369992d6076d_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Search a wide string, up to n wide chars, for the first instance of a specific substring.
+--
+--     The search ends once it finds the requested substring, or a null terminator value to end the string, or @maxlen@ wide character have been examined. It is possible to use this function on a wide string without a null terminator.
+--
+--     Note that this looks for strings of /wide characters/, not /codepoints/, so it\'s legal to search for malformed and incomplete UTF-16 sequences.
+--
+--     [Returns]: a pointer to the first instance of @needle@ in the string, or NULL if not found.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_wcsnstr@, defined at @SDL3\/SDL_stdinc.h 2868:39@
+sDL_wcsnstr
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@haystack@]: the wide string to search. Must not be NULL.
+  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@needle@]: the wide string to search for. Must not be NULL.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@maxlen@]: the maximum number of wide characters to search in @haystack@.
+  -> IO (BG.Ptr HsBindgen.Runtime.LibC.CWchar)
+sDL_wcsnstr = hs_bindgen_0f95369992d6076d
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcscmp@
+foreign import ccall safe "hs_bindgen_a56659eded1129eb"
+  hs_bindgen_a56659eded1129eb_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcscmp@
+hs_bindgen_a56659eded1129eb
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -> IO BG.CInt
+hs_bindgen_a56659eded1129eb =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_a56659eded1129eb_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Compare two null-terminated wide strings.
+--
+--     This only compares wchar_t values until it hits a null-terminating character; it does not care if the string is well-formed UTF-16 (or UTF-32, depending on your platform\'s wchar_t size), or uses valid Unicode values.
+--
+--     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_wcscmp@, defined at @SDL3\/SDL_stdinc.h 2887:33@
+sDL_wcscmp
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@str1@]: the first string to compare. NULL is not permitted!
+  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@str2@]: the second string to compare. NULL is not permitted!
+  -> IO BG.CInt
+sDL_wcscmp = hs_bindgen_a56659eded1129eb
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcsncmp@
+foreign import ccall safe "hs_bindgen_f249ec61a8d5978a"
+  hs_bindgen_f249ec61a8d5978a_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcsncmp@
+hs_bindgen_f249ec61a8d5978a
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO BG.CInt
+hs_bindgen_f249ec61a8d5978a =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_f249ec61a8d5978a_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Compare two wide strings up to a number of wchar_t values.
+--
+--     This only compares wchar_t values; it does not care if the string is well-formed UTF-16 (or UTF-32, depending on your platform\'s wchar_t size), or uses valid Unicode values.
+--
+--     Note that while this function is intended to be used with UTF-16 (or UTF-32, depending on your platform\'s definition of wchar_t), it is comparing raw wchar_t values and not Unicode codepoints: @maxlen@ specifies a wchar_t limit! If the limit lands in the middle of a multi-wchar UTF-16 sequence, it will only compare a portion of the final character.
+--
+--     @maxlen@ specifies a maximum number of wchar_t to compare; if the strings match to this number of wide chars (or both have matched to a null-terminator character before this count), they will be considered equal.
+--
+--     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_wcsncmp@, defined at @SDL3\/SDL_stdinc.h 2918:33@
+sDL_wcsncmp
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@str1@]: the first string to compare. NULL is not permitted!
+  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@str2@]: the second string to compare. NULL is not permitted!
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@maxlen@]: the maximum number of wchar_t to compare.
+  -> IO BG.CInt
+sDL_wcsncmp = hs_bindgen_f249ec61a8d5978a
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcscasecmp@
+foreign import ccall safe "hs_bindgen_0e487d7f98097b0d"
+  hs_bindgen_0e487d7f98097b0d_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcscasecmp@
+hs_bindgen_0e487d7f98097b0d
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -> IO BG.CInt
+hs_bindgen_0e487d7f98097b0d =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_0e487d7f98097b0d_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Compare two null-terminated wide strings, case-insensitively.
+--
+--     This will work with Unicode strings, using a technique called \"case-folding\" to handle the vast majority of case-sensitive human languages regardless of system locale. It can deal with expanding values: a German Eszett character can compare against two ASCII \'s\' chars and be considered a match, for example. A notable exception: it does not handle the Turkish \'i\' character; human language is complicated!
+--
+--     Depending on your platform, \"wchar_t\" might be 2 bytes, and expected to be UTF-16 encoded (like Windows), or 4 bytes in UTF-32 format. Since this handles Unicode, it expects the string to be well-formed and not a null-terminated string of arbitrary bytes. Characters that are not valid UTF-16 (or UTF-32) are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), which is to say two strings of random bits may turn out to match if they convert to the same amount of replacement characters.
+--
+--     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_wcscasecmp@, defined at @SDL3\/SDL_stdinc.h 2948:33@
+sDL_wcscasecmp
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@str1@]: the first string to compare. NULL is not permitted!
+  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@str2@]: the second string to compare. NULL is not permitted!
+  -> IO BG.CInt
+sDL_wcscasecmp = hs_bindgen_0e487d7f98097b0d
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcsncasecmp@
+foreign import ccall safe "hs_bindgen_9a4ad44438974867"
+  hs_bindgen_9a4ad44438974867_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_wcsncasecmp@
+hs_bindgen_9a4ad44438974867
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO BG.CInt
+hs_bindgen_9a4ad44438974867 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_9a4ad44438974867_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Compare two wide strings, case-insensitively, up to a number of wchar_t.
+--
+--     This will work with Unicode strings, using a technique called \"case-folding\" to handle the vast majority of case-sensitive human languages regardless of system locale. It can deal with expanding values: a German Eszett character can compare against two ASCII \'s\' chars and be considered a match, for example. A notable exception: it does not handle the Turkish \'i\' character; human language is complicated!
+--
+--     Depending on your platform, \"wchar_t\" might be 2 bytes, and expected to be UTF-16 encoded (like Windows), or 4 bytes in UTF-32 format. Since this handles Unicode, it expects the string to be well-formed and not a null-terminated string of arbitrary bytes. Characters that are not valid UTF-16 (or UTF-32) are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), which is to say two strings of random bits may turn out to match if they convert to the same amount of replacement characters.
+--
+--     Note that while this function might deal with variable-sized characters, @maxlen@ specifies a /wchar/ limit! If the limit lands in the middle of a multi-byte UTF-16 sequence, it may convert a portion of the final character to one or more Unicode character U+FFFD (REPLACEMENT CHARACTER) so as not to overflow a buffer.
+--
+--     @maxlen@ specifies a maximum number of wchar_t values to compare; if the strings match to this number of wchar_t (or both have matched to a null-terminator character before this number of bytes), they will be considered equal.
+--
+--     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_wcsncasecmp@, defined at @SDL3\/SDL_stdinc.h 2990:33@
+sDL_wcsncasecmp
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@str1@]: the first string to compare. NULL is not permitted!
+  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@str2@]: the second string to compare. NULL is not permitted!
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@maxlen@]: the maximum number of wchar_t values to compare.
+  -> IO BG.CInt
+sDL_wcsncasecmp = hs_bindgen_9a4ad44438974867
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strlen@
+foreign import ccall safe "hs_bindgen_574becd3bb71e7b9"
+  hs_bindgen_574becd3bb71e7b9_base
+    :: BG.Ptr BG.Void
+    -> IO HsBindgen.Runtime.LibC.CSize
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strlen@
+hs_bindgen_574becd3bb71e7b9
+  :: PtrConst.PtrConst BG.CChar
+  -> IO HsBindgen.Runtime.LibC.CSize
+hs_bindgen_574becd3bb71e7b9 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_574becd3bb71e7b9_base (BG.toFFIType x0))
+
+-- | This works exactly like strlen() but doesn\'t require access to a C runtime.
+--
+--     Counts the bytes in @str@, excluding the null terminator.
+--
+--     If you need the length of a UTF-8 string, consider using @SDL_utf8strlen()@.
+--
+--     [Returns]: the length (in bytes, excluding the null terminator) of @src@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_strnlen', 'sDL_utf8strlen', 'sDL_utf8strnlen'
+--
+--     [C declaration]: @SDL_strlen@, defined at @SDL3\/SDL_stdinc.h 3037:36@
+sDL_strlen
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: The null-terminated string to read. Must not be NULL.
+  -> IO HsBindgen.Runtime.LibC.CSize
+sDL_strlen = hs_bindgen_574becd3bb71e7b9
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strnlen@
+foreign import ccall safe "hs_bindgen_9232c1cbf65df9e5"
+  hs_bindgen_9232c1cbf65df9e5_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO HsBindgen.Runtime.LibC.CSize
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strnlen@
+hs_bindgen_9232c1cbf65df9e5
+  :: PtrConst.PtrConst BG.CChar
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO HsBindgen.Runtime.LibC.CSize
+hs_bindgen_9232c1cbf65df9e5 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_9232c1cbf65df9e5_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | This works exactly like strnlen() but doesn\'t require access to a C runtime.
+--
+--     Counts up to a maximum of @maxlen@ bytes in @str@, excluding the null terminator.
+--
+--     If you need the length of a UTF-8 string, consider using @SDL_utf8strnlen()@.
+--
+--     [Returns]: the length (in bytes, excluding the null terminator) of @src@ but never more than @maxlen@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_strlen', 'sDL_utf8strlen', 'sDL_utf8strnlen'
+--
+--     [C declaration]: @SDL_strnlen@, defined at @SDL3\/SDL_stdinc.h 3061:36@
+sDL_strnlen
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: The null-terminated string to read. Must not be NULL.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@maxlen@]: The maximum amount of bytes to count.
+  -> IO HsBindgen.Runtime.LibC.CSize
+sDL_strnlen = hs_bindgen_9232c1cbf65df9e5
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strlcpy@
+foreign import ccall safe "hs_bindgen_1a460cf112b7fd68"
+  hs_bindgen_1a460cf112b7fd68_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO HsBindgen.Runtime.LibC.CSize
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strlcpy@
+hs_bindgen_1a460cf112b7fd68
+  :: BG.Ptr BG.CChar
+  -> PtrConst.PtrConst BG.CChar
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO HsBindgen.Runtime.LibC.CSize
+hs_bindgen_1a460cf112b7fd68 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_1a460cf112b7fd68_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Copy a string.
+--
+--     This function copies up to @maxlen@ - 1 characters from @src@ to @dst@, then appends a null terminator.
+--
+--     If @maxlen@ is 0, no characters are copied and no null terminator is written.
+--
+--     If you want to copy an UTF-8 string but need to ensure that multi-byte sequences are not truncated, consider using @SDL_utf8strlcpy()@.
+--
+--     [Returns]: the length (in characters, excluding the null terminator) of @src@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_strlcat', 'sDL_utf8strlcpy'
+--
+--     [C declaration]: @SDL_strlcpy@, defined at @SDL3\/SDL_stdinc.h 3090:36@
+sDL_strlcpy
+  :: BG.Ptr BG.CChar
+  -- ^
+  --
+  --           [@dst@]: The destination buffer. Must not be NULL, and must not overlap with @src@.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@src@]: The null-terminated string to copy. Must not be NULL, and must not overlap with @dst@.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@maxlen@]: The length (in characters) of the destination buffer.
+  -> IO HsBindgen.Runtime.LibC.CSize
+sDL_strlcpy = hs_bindgen_1a460cf112b7fd68
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_utf8strlcpy@
+foreign import ccall safe "hs_bindgen_10b5c948dc68c882"
+  hs_bindgen_10b5c948dc68c882_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO HsBindgen.Runtime.LibC.CSize
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_utf8strlcpy@
+hs_bindgen_10b5c948dc68c882
+  :: BG.Ptr BG.CChar
+  -> PtrConst.PtrConst BG.CChar
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO HsBindgen.Runtime.LibC.CSize
+hs_bindgen_10b5c948dc68c882 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_10b5c948dc68c882_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Copy an UTF-8 string.
+--
+--     This function copies up to @dst_bytes@ - 1 bytes from @src@ to @dst@ while also ensuring that the string written to @dst@ does not end in a truncated multi-byte sequence. Finally, it appends a null terminator.
+--
+--     @src@ and @dst@ must not overlap.
+--
+--     Note that unlike @SDL_strlcpy()@, this function returns the number of bytes written, not the length of @src@.
+--
+--     [Returns]: the number of bytes written, excluding the null terminator.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_strlcpy'
+--
+--     [C declaration]: @SDL_utf8strlcpy@, defined at @SDL3\/SDL_stdinc.h 3118:36@
+sDL_utf8strlcpy
+  :: BG.Ptr BG.CChar
+  -- ^
+  --
+  --           [@dst@]: The destination buffer. Must not be NULL, and must not overlap with @src@.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@src@]: The null-terminated UTF-8 string to copy. Must not be NULL, and must not overlap with @dst@.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@dst_bytes@]: The length (in bytes) of the destination buffer. Must not be 0.
+  -> IO HsBindgen.Runtime.LibC.CSize
+sDL_utf8strlcpy = hs_bindgen_10b5c948dc68c882
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strlcat@
+foreign import ccall safe "hs_bindgen_8132fc050b3dda62"
+  hs_bindgen_8132fc050b3dda62_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO HsBindgen.Runtime.LibC.CSize
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strlcat@
+hs_bindgen_8132fc050b3dda62
+  :: BG.Ptr BG.CChar
+  -> PtrConst.PtrConst BG.CChar
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO HsBindgen.Runtime.LibC.CSize
+hs_bindgen_8132fc050b3dda62 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_8132fc050b3dda62_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Concatenate strings.
+--
+--     This function appends up to @maxlen@ - SDL_strlen(dst) - 1 characters from @src@ to the end of the string in @dst@, then appends a null terminator.
+--
+--     @src@ and @dst@ must not overlap.
+--
+--     If @maxlen@ - SDL_strlen(dst) - 1 is less than or equal to 0, then @dst@ is unmodified.
+--
+--     [Returns]: the length (in characters, excluding the null terminator) of the string in @dst@ plus the length of @src@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_strlcpy'
+--
+--     [C declaration]: @SDL_strlcat@, defined at @SDL3\/SDL_stdinc.h 3146:36@
+sDL_strlcat
+  :: BG.Ptr BG.CChar
+  -- ^
+  --
+  --           [@dst@]: The destination buffer already containing the first null-terminated string. Must not be NULL and must not overlap with @src@.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@src@]: The second null-terminated string. Must not be NULL, and must not overlap with @dst@.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@maxlen@]: The length (in characters) of the destination buffer.
+  -> IO HsBindgen.Runtime.LibC.CSize
+sDL_strlcat = hs_bindgen_8132fc050b3dda62
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strdup@
+foreign import ccall safe "hs_bindgen_e91dd28c0e034753"
+  hs_bindgen_e91dd28c0e034753_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strdup@
+hs_bindgen_e91dd28c0e034753
+  :: PtrConst.PtrConst BG.CChar
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_e91dd28c0e034753 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_e91dd28c0e034753_base (BG.toFFIType x0))
+
+-- | Allocate a copy of a string.
+--
+--     This allocates enough space for a null-terminated copy of @str@, using SDL_malloc, and then makes a copy of the string into this space.
+--
+--     The returned string is owned by the caller, and should be passed to SDL_free when no longer needed.
+--
+--     [Returns]: a pointer to the newly-allocated string.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_strdup@, defined at @SDL3\/SDL_stdinc.h 3164:47@
+sDL_strdup
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: the string to copy.
+  -> IO (BG.Ptr BG.CChar)
+sDL_strdup = hs_bindgen_e91dd28c0e034753
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strndup@
+foreign import ccall safe "hs_bindgen_9f484a433e6fd1be"
+  hs_bindgen_9f484a433e6fd1be_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strndup@
+hs_bindgen_9f484a433e6fd1be
+  :: PtrConst.PtrConst BG.CChar
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_9f484a433e6fd1be =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_9f484a433e6fd1be_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Allocate a copy of a string, up to n characters.
+--
+--     This allocates enough space for a null-terminated copy of @str@, up to @maxlen@ bytes, using SDL_malloc, and then makes a copy of the string into this space.
+--
+--     If the string is longer than @maxlen@ bytes, the returned string will be @maxlen@ bytes long, plus a null-terminator character that isn\'t included in the count.
+--
+--     The returned string is owned by the caller, and should be passed to SDL_free when no longer needed.
+--
+--     [Returns]: a pointer to the newly-allocated string.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_strndup@, defined at @SDL3\/SDL_stdinc.h 3189:47@
+sDL_strndup
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: the string to copy.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@maxlen@]: the maximum length of the copied string, not counting the null-terminator character.
+  -> IO (BG.Ptr BG.CChar)
+sDL_strndup = hs_bindgen_9f484a433e6fd1be
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strrev@
+foreign import ccall safe "hs_bindgen_fd83e6da8cdd54dc"
+  hs_bindgen_fd83e6da8cdd54dc_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strrev@
+hs_bindgen_fd83e6da8cdd54dc
+  :: BG.Ptr BG.CChar
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_fd83e6da8cdd54dc =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_fd83e6da8cdd54dc_base (BG.toFFIType x0))
+
+-- | Reverse a string\'s contents.
+--
+--     This reverses a null-terminated string in-place. Only the content of the string is reversed; the null-terminator character remains at the end of the reversed string.
+--
+--     __WARNING__: This function reverses the /bytes/ of the string, not the codepoints. If @str@ is a UTF-8 string with Unicode codepoints > 127, this will ruin the string data. You should only use this function on strings that are completely comprised of low ASCII characters.
+--
+--     [Returns]: @str@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_strrev@, defined at @SDL3\/SDL_stdinc.h 3210:36@
+sDL_strrev
+  :: BG.Ptr BG.CChar
+  -- ^
+  --
+  --           [@str@]: the string to reverse.
+  -> IO (BG.Ptr BG.CChar)
+sDL_strrev = hs_bindgen_fd83e6da8cdd54dc
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strupr@
+foreign import ccall safe "hs_bindgen_4821ca9fe328d7f0"
+  hs_bindgen_4821ca9fe328d7f0_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strupr@
+hs_bindgen_4821ca9fe328d7f0
+  :: BG.Ptr BG.CChar
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_4821ca9fe328d7f0 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_4821ca9fe328d7f0_base (BG.toFFIType x0))
+
+-- | Convert a string to uppercase.
+--
+--     __WARNING__: Regardless of system locale, this will only convert ASCII values \'A\' through \'Z\' to uppercase.
+--
+--     This function operates on a null-terminated string of bytes even if it is malformed UTF-8! and converts ASCII characters \'a\' through \'z\' to their uppercase equivalents in-place, returning the original @str@ pointer.
+--
+--     [Returns]: the @str@ pointer passed into this function.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_strlwr'
+--
+--     [C declaration]: @SDL_strupr@, defined at @SDL3\/SDL_stdinc.h 3231:36@
+sDL_strupr
+  :: BG.Ptr BG.CChar
+  -- ^
+  --
+  --           [@str@]: the string to convert in-place. Can not be NULL.
+  -> IO (BG.Ptr BG.CChar)
+sDL_strupr = hs_bindgen_4821ca9fe328d7f0
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strlwr@
+foreign import ccall safe "hs_bindgen_b313d67572ea455e"
+  hs_bindgen_b313d67572ea455e_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strlwr@
+hs_bindgen_b313d67572ea455e
+  :: BG.Ptr BG.CChar
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_b313d67572ea455e =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_b313d67572ea455e_base (BG.toFFIType x0))
+
+-- | Convert a string to lowercase.
+--
+--     __WARNING__: Regardless of system locale, this will only convert ASCII values \'A\' through \'Z\' to lowercase.
+--
+--     This function operates on a null-terminated string of bytes even if it is malformed UTF-8! and converts ASCII characters \'A\' through \'Z\' to their lowercase equivalents in-place, returning the original @str@ pointer.
+--
+--     [Returns]: the @str@ pointer passed into this function.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_strupr'
+--
+--     [C declaration]: @SDL_strlwr@, defined at @SDL3\/SDL_stdinc.h 3252:36@
+sDL_strlwr
+  :: BG.Ptr BG.CChar
+  -- ^
+  --
+  --           [@str@]: the string to convert in-place. Can not be NULL.
+  -> IO (BG.Ptr BG.CChar)
+sDL_strlwr = hs_bindgen_b313d67572ea455e
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strchr@
+foreign import ccall safe "hs_bindgen_9b8b80f67620d0c0"
+  hs_bindgen_9b8b80f67620d0c0_base
+    :: BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strchr@
+hs_bindgen_9b8b80f67620d0c0
+  :: PtrConst.PtrConst BG.CChar
+  -> BG.CInt
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_9b8b80f67620d0c0 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_9b8b80f67620d0c0_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Search a string for the first instance of a specific byte.
+--
+--     The search ends once it finds the requested byte value, or a null terminator byte to end the string.
+--
+--     Note that this looks for /bytes/, not /characters/, so you cannot match against a Unicode codepoint > 255, regardless of character encoding.
+--
+--     [Returns]: a pointer to the first instance of @c@ in the string, or NULL if not found.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_strchr@, defined at @SDL3\/SDL_stdinc.h 3272:36@
+sDL_strchr
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: the string to search. Must not be NULL.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@c@]: the byte value to search for.
+  -> IO (BG.Ptr BG.CChar)
+sDL_strchr = hs_bindgen_9b8b80f67620d0c0
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strrchr@
+foreign import ccall safe "hs_bindgen_61eb1646e2706ec9"
+  hs_bindgen_61eb1646e2706ec9_base
+    :: BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strrchr@
+hs_bindgen_61eb1646e2706ec9
+  :: PtrConst.PtrConst BG.CChar
+  -> BG.CInt
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_61eb1646e2706ec9 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_61eb1646e2706ec9_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Search a string for the last instance of a specific byte.
+--
+--     The search must go until it finds a null terminator byte to end the string.
+--
+--     Note that this looks for /bytes/, not /characters/, so you cannot match against a Unicode codepoint > 255, regardless of character encoding.
+--
+--     [Returns]: a pointer to the last instance of @c@ in the string, or NULL if not found.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_strrchr@, defined at @SDL3\/SDL_stdinc.h 3291:36@
+sDL_strrchr
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: the string to search. Must not be NULL.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@c@]: the byte value to search for.
+  -> IO (BG.Ptr BG.CChar)
+sDL_strrchr = hs_bindgen_61eb1646e2706ec9
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strstr@
+foreign import ccall safe "hs_bindgen_09dae8bc6d27bfa7"
+  hs_bindgen_09dae8bc6d27bfa7_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strstr@
+hs_bindgen_09dae8bc6d27bfa7
+  :: PtrConst.PtrConst BG.CChar
+  -> PtrConst.PtrConst BG.CChar
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_09dae8bc6d27bfa7 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_09dae8bc6d27bfa7_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Search a string for the first instance of a specific substring.
+--
+--     The search ends once it finds the requested substring, or a null terminator byte to end the string.
+--
+--     Note that this looks for strings of /bytes/, not /characters/, so it\'s legal to search for malformed and incomplete UTF-8 sequences.
+--
+--     [Returns]: a pointer to the first instance of @needle@ in the string, or NULL if not found.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_strstr@, defined at @SDL3\/SDL_stdinc.h 3311:36@
+sDL_strstr
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@haystack@]: the string to search. Must not be NULL.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@needle@]: the string to search for. Must not be NULL.
+  -> IO (BG.Ptr BG.CChar)
+sDL_strstr = hs_bindgen_09dae8bc6d27bfa7
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strnstr@
+foreign import ccall safe "hs_bindgen_b253d6195ad29db6"
+  hs_bindgen_b253d6195ad29db6_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strnstr@
+hs_bindgen_b253d6195ad29db6
+  :: PtrConst.PtrConst BG.CChar
+  -> PtrConst.PtrConst BG.CChar
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_b253d6195ad29db6 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_b253d6195ad29db6_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Search a string, up to n bytes, for the first instance of a specific substring.
+--
+--     The search ends once it finds the requested substring, or a null terminator byte to end the string, or @maxlen@ bytes have been examined. It is possible to use this function on a string without a null terminator.
+--
+--     Note that this looks for strings of /bytes/, not /characters/, so it\'s legal to search for malformed and incomplete UTF-8 sequences.
+--
+--     [Returns]: a pointer to the first instance of @needle@ in the string, or NULL if not found.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_strnstr@, defined at @SDL3\/SDL_stdinc.h 3334:36@
+sDL_strnstr
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@haystack@]: the string to search. Must not be NULL.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@needle@]: the string to search for. Must not be NULL.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@maxlen@]: the maximum number of bytes to search in @haystack@.
+  -> IO (BG.Ptr BG.CChar)
+sDL_strnstr = hs_bindgen_b253d6195ad29db6
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strcasestr@
+foreign import ccall safe "hs_bindgen_845c9ada7f0145b4"
+  hs_bindgen_845c9ada7f0145b4_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strcasestr@
+hs_bindgen_845c9ada7f0145b4
+  :: PtrConst.PtrConst BG.CChar
+  -> PtrConst.PtrConst BG.CChar
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_845c9ada7f0145b4 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_845c9ada7f0145b4_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Search a UTF-8 string for the first instance of a specific substring, case-insensitively.
+--
+--     This will work with Unicode strings, using a technique called \"case-folding\" to handle the vast majority of case-sensitive human languages regardless of system locale. It can deal with expanding values: a German Eszett character can compare against two ASCII \'s\' chars and be considered a match, for example. A notable exception: it does not handle the Turkish \'i\' character; human language is complicated!
+--
+--     Since this handles Unicode, it expects the strings to be well-formed UTF-8 and not a null-terminated string of arbitrary bytes. Bytes that are not valid UTF-8 are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), which is to say two strings of random bits may turn out to match if they convert to the same amount of replacement characters.
+--
+--     [Returns]: a pointer to the first instance of @needle@ in the string, or NULL if not found.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_strcasestr@, defined at @SDL3\/SDL_stdinc.h 3362:36@
+sDL_strcasestr
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@haystack@]: the string to search. Must not be NULL.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@needle@]: the string to search for. Must not be NULL.
+  -> IO (BG.Ptr BG.CChar)
+sDL_strcasestr = hs_bindgen_845c9ada7f0145b4
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strtok_r@
+foreign import ccall safe "hs_bindgen_92aad5310bed80bf"
+  hs_bindgen_92aad5310bed80bf_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strtok_r@
+hs_bindgen_92aad5310bed80bf
+  :: BG.Ptr BG.CChar
+  -> PtrConst.PtrConst BG.CChar
+  -> BG.Ptr (BG.Ptr BG.CChar)
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_92aad5310bed80bf =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_92aad5310bed80bf_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | This works exactly like strtok_r() but doesn\'t require access to a C runtime.
+--
+--     Break a string up into a series of tokens.
+--
+--     To start tokenizing a new string, @str@ should be the non-NULL address of the string to start tokenizing. Future calls to get the next token from the same string should specify a NULL.
+--
+--     Note that this function will overwrite pieces of @str@ with null chars to split it into tokens. This function cannot be used with const\/read-only strings!
+--
+--     @saveptr@ just needs to point to a @char *@ that can be overwritten; SDL will use this to save tokenizing state between calls. It is initialized if @str@ is non-NULL, and used to resume tokenizing when @str@ is NULL.
+--
+--     [Returns]: A pointer to the next token, or NULL if no tokens remain.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_strtok_r@, defined at @SDL3\/SDL_stdinc.h 3391:36@
+sDL_strtok_r
+  :: BG.Ptr BG.CChar
+  -- ^
+  --
+  --           [@str@]: the string to tokenize, or NULL to continue tokenizing.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@delim@]: the delimiter string that separates tokens.
+  -> BG.Ptr (BG.Ptr BG.CChar)
+  -- ^
+  --
+  --           [@saveptr@]: pointer to a char *, used for ongoing state.
+  -> IO (BG.Ptr BG.CChar)
+sDL_strtok_r = hs_bindgen_92aad5310bed80bf
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_utf8strlen@
+foreign import ccall safe "hs_bindgen_2fe9c3d14ead61fa"
+  hs_bindgen_2fe9c3d14ead61fa_base
+    :: BG.Ptr BG.Void
+    -> IO HsBindgen.Runtime.LibC.CSize
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_utf8strlen@
+hs_bindgen_2fe9c3d14ead61fa
+  :: PtrConst.PtrConst BG.CChar
+  -> IO HsBindgen.Runtime.LibC.CSize
+hs_bindgen_2fe9c3d14ead61fa =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_2fe9c3d14ead61fa_base (BG.toFFIType x0))
+
+-- | Count the number of codepoints in a UTF-8 string.
+--
+--     Counts the /codepoints/, not /bytes/, in @str@, excluding the null terminator.
+--
+--     If you need to count the bytes in a string instead, consider using @SDL_strlen()@.
+--
+--     Since this handles Unicode, it expects the strings to be well-formed UTF-8 and not a null-terminated string of arbitrary bytes. Bytes that are not valid UTF-8 are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), so a malformed or incomplete UTF-8 sequence might increase the count by several replacement characters.
+--
+--     [Returns]: The length (in codepoints, excluding the null terminator) of @src@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_utf8strnlen', 'sDL_strlen'
+--
+--     [C declaration]: @SDL_utf8strlen@, defined at @SDL3\/SDL_stdinc.h 3419:36@
+sDL_utf8strlen
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: The null-terminated UTF-8 string to read. Must not be NULL.
+  -> IO HsBindgen.Runtime.LibC.CSize
+sDL_utf8strlen = hs_bindgen_2fe9c3d14ead61fa
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_utf8strnlen@
+foreign import ccall safe "hs_bindgen_7e1dc736bb92cf02"
+  hs_bindgen_7e1dc736bb92cf02_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO HsBindgen.Runtime.LibC.CSize
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_utf8strnlen@
+hs_bindgen_7e1dc736bb92cf02
+  :: PtrConst.PtrConst BG.CChar
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO HsBindgen.Runtime.LibC.CSize
+hs_bindgen_7e1dc736bb92cf02 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_7e1dc736bb92cf02_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Count the number of codepoints in a UTF-8 string, up to n bytes.
+--
+--     Counts the /codepoints/, not /bytes/, in @str@, excluding the null terminator.
+--
+--     If you need to count the bytes in a string instead, consider using @SDL_strnlen()@.
+--
+--     The counting stops at @bytes@ bytes (not codepoints!). This seems counterintuitive, but makes it easy to express the total size of the string\'s buffer.
+--
+--     Since this handles Unicode, it expects the strings to be well-formed UTF-8 and not a null-terminated string of arbitrary bytes. Bytes that are not valid UTF-8 are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), so a malformed or incomplete UTF-8 sequence might increase the count by several replacement characters.
+--
+--     [Returns]: The length (in codepoints, excluding the null terminator) of @src@ but never more than @maxlen@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_utf8strlen', 'sDL_strnlen'
+--
+--     [C declaration]: @SDL_utf8strnlen@, defined at @SDL3\/SDL_stdinc.h 3452:36@
+sDL_utf8strnlen
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: The null-terminated UTF-8 string to read. Must not be NULL.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@bytes@]: The maximum amount of bytes to count.
+  -> IO HsBindgen.Runtime.LibC.CSize
+sDL_utf8strnlen = hs_bindgen_7e1dc736bb92cf02
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_itoa@
+foreign import ccall safe "hs_bindgen_5e87f4eb430750ff"
+  hs_bindgen_5e87f4eb430750ff_base
+    :: BG.CInt
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_itoa@
+hs_bindgen_5e87f4eb430750ff
+  :: BG.CInt
+  -> BG.Ptr BG.CChar
+  -> BG.CInt
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_5e87f4eb430750ff =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_5e87f4eb430750ff_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Convert an integer into a string.
+--
+--     This requires a radix to specified for string format. Specifying 10 produces a decimal number, 16 hexadecimal, etc. Must be in the range of 2 to 36.
+--
+--     Note that this function will overflow a buffer if @str@ is not large enough to hold the output! It may be safer to use SDL_snprintf to clamp output, or SDL_asprintf to allocate a buffer. Otherwise, it doesn\'t hurt to allocate much more space than you expect to use (and don\'t forget possible negative signs, null terminator bytes, etc).
+--
+--     [Returns]: @str@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_uitoa', @SDL_ltoa@, 'sDL_lltoa'
+--
+--     [C declaration]: @SDL_itoa@, defined at @SDL3\/SDL_stdinc.h 3480:36@
+sDL_itoa
+  :: BG.CInt
+  -- ^
+  --
+  --           [@value@]: the integer to convert.
+  -> BG.Ptr BG.CChar
+  -- ^
+  --
+  --           [@str@]: the buffer to write the string into.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@radix@]: the radix to use for string generation.
+  -> IO (BG.Ptr BG.CChar)
+sDL_itoa = hs_bindgen_5e87f4eb430750ff
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_uitoa@
+foreign import ccall safe "hs_bindgen_6593301ad3b87e96"
+  hs_bindgen_6593301ad3b87e96_base
+    :: BG.CUInt
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_uitoa@
+hs_bindgen_6593301ad3b87e96
+  :: BG.CUInt
+  -> BG.Ptr BG.CChar
+  -> BG.CInt
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_6593301ad3b87e96 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_6593301ad3b87e96_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Convert an unsigned integer into a string.
+--
+--     This requires a radix to specified for string format. Specifying 10 produces a decimal number, 16 hexadecimal, etc. Must be in the range of 2 to 36.
+--
+--     Note that this function will overflow a buffer if @str@ is not large enough to hold the output! It may be safer to use SDL_snprintf to clamp output, or SDL_asprintf to allocate a buffer. Otherwise, it doesn\'t hurt to allocate much more space than you expect to use (and don\'t forget null terminator bytes, etc).
+--
+--     [Returns]: @str@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_itoa', @SDL_ultoa@, 'sDL_ulltoa'
+--
+--     [C declaration]: @SDL_uitoa@, defined at @SDL3\/SDL_stdinc.h 3508:36@
+sDL_uitoa
+  :: BG.CUInt
+  -- ^
+  --
+  --           [@value@]: the unsigned integer to convert.
+  -> BG.Ptr BG.CChar
+  -- ^
+  --
+  --           [@str@]: the buffer to write the string into.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@radix@]: the radix to use for string generation.
+  -> IO (BG.Ptr BG.CChar)
+sDL_uitoa = hs_bindgen_6593301ad3b87e96
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_lltoa@
+foreign import ccall safe "hs_bindgen_49dab071ddd94418"
+  hs_bindgen_49dab071ddd94418_base
+    :: BG.CLLong
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_lltoa@
+hs_bindgen_49dab071ddd94418
+  :: BG.CLLong
+  -> BG.Ptr BG.CChar
+  -> BG.CInt
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_49dab071ddd94418 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_49dab071ddd94418_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Convert a long long integer into a string.
+--
+--     This requires a radix to specified for string format. Specifying 10 produces a decimal number, 16 hexadecimal, etc. Must be in the range of 2 to 36.
+--
+--     Note that this function will overflow a buffer if @str@ is not large enough to hold the output! It may be safer to use SDL_snprintf to clamp output, or SDL_asprintf to allocate a buffer. Otherwise, it doesn\'t hurt to allocate much more space than you expect to use (and don\'t forget possible negative signs, null terminator bytes, etc).
+--
+--     [Returns]: @str@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_ulltoa', 'sDL_itoa', @SDL_ltoa@
+--
+--     [C declaration]: @SDL_lltoa@, defined at @SDL3\/SDL_stdinc.h 3594:36@
+sDL_lltoa
+  :: BG.CLLong
+  -- ^
+  --
+  --           [@value@]: the long long integer to convert.
+  -> BG.Ptr BG.CChar
+  -- ^
+  --
+  --           [@str@]: the buffer to write the string into.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@radix@]: the radix to use for string generation.
+  -> IO (BG.Ptr BG.CChar)
+sDL_lltoa = hs_bindgen_49dab071ddd94418
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_ulltoa@
+foreign import ccall safe "hs_bindgen_8c172a64279b6c99"
+  hs_bindgen_8c172a64279b6c99_base
+    :: BG.CULLong
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_ulltoa@
+hs_bindgen_8c172a64279b6c99
+  :: BG.CULLong
+  -> BG.Ptr BG.CChar
+  -> BG.CInt
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_8c172a64279b6c99 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_8c172a64279b6c99_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Convert an unsigned long long integer into a string.
+--
+--     This requires a radix to specified for string format. Specifying 10 produces a decimal number, 16 hexadecimal, etc. Must be in the range of 2 to 36.
+--
+--     Note that this function will overflow a buffer if @str@ is not large enough to hold the output! It may be safer to use SDL_snprintf to clamp output, or SDL_asprintf to allocate a buffer. Otherwise, it doesn\'t hurt to allocate much more space than you expect to use (and don\'t forget null terminator bytes, etc).
+--
+--     [Returns]: @str@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_lltoa', 'sDL_uitoa', @SDL_ultoa@
+--
+--     [C declaration]: @SDL_ulltoa@, defined at @SDL3\/SDL_stdinc.h 3622:36@
+sDL_ulltoa
+  :: BG.CULLong
+  -- ^
+  --
+  --           [@value@]: the unsigned long long integer to convert.
+  -> BG.Ptr BG.CChar
+  -- ^
+  --
+  --           [@str@]: the buffer to write the string into.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@radix@]: the radix to use for string generation.
+  -> IO (BG.Ptr BG.CChar)
+sDL_ulltoa = hs_bindgen_8c172a64279b6c99
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_atoi@
+foreign import ccall safe "hs_bindgen_7ec5dbb16b1ec441"
+  hs_bindgen_7ec5dbb16b1ec441_base
+    :: BG.Ptr BG.Void
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_atoi@
+hs_bindgen_7ec5dbb16b1ec441
+  :: PtrConst.PtrConst BG.CChar
+  -> IO BG.CInt
+hs_bindgen_7ec5dbb16b1ec441 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_7ec5dbb16b1ec441_base (BG.toFFIType x0))
+
+-- | Parse an @int@ from a string.
+--
+--     The result of calling @SDL_atoi(str)@ is equivalent to @(int)SDL_strtol(str, NULL, 10)@.
+--
+--     [Returns]: the parsed @int@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_atof', @SDL_strtol@, @SDL_strtoul@, 'sDL_strtoll', 'sDL_strtoull', 'sDL_strtod', 'sDL_itoa'
+--
+--     [C declaration]: @SDL_atoi@, defined at @SDL3\/SDL_stdinc.h 3646:33@
+sDL_atoi
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: The null-terminated string to read. Must not be NULL.
+  -> IO BG.CInt
+sDL_atoi = hs_bindgen_7ec5dbb16b1ec441
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_atof@
+foreign import ccall safe "hs_bindgen_3da67c3a67185baf"
+  hs_bindgen_3da67c3a67185baf_base
+    :: BG.Ptr BG.Void
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_atof@
+hs_bindgen_3da67c3a67185baf
+  :: PtrConst.PtrConst BG.CChar
+  -> IO BG.CDouble
+hs_bindgen_3da67c3a67185baf =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3da67c3a67185baf_base (BG.toFFIType x0))
+
+-- | Parse a @double@ from a string.
+--
+--     The result of calling @SDL_atof(str)@ is equivalent to @SDL_strtod(str, NULL)@.
+--
+--     [Returns]: the parsed @double@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_atoi', @SDL_strtol@, @SDL_strtoul@, 'sDL_strtoll', 'sDL_strtoull', 'sDL_strtod'
+--
+--     [C declaration]: @SDL_atof@, defined at @SDL3\/SDL_stdinc.h 3668:36@
+sDL_atof
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: The null-terminated string to read. Must not be NULL.
+  -> IO BG.CDouble
+sDL_atof = hs_bindgen_3da67c3a67185baf
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strtoll@
+foreign import ccall safe "hs_bindgen_2d4f949f38ae668c"
+  hs_bindgen_2d4f949f38ae668c_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO BG.CLLong
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strtoll@
+hs_bindgen_2d4f949f38ae668c
+  :: PtrConst.PtrConst BG.CChar
+  -> BG.Ptr (BG.Ptr BG.CChar)
+  -> BG.CInt
+  -> IO BG.CLLong
+hs_bindgen_2d4f949f38ae668c =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_2d4f949f38ae668c_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Parse a @long long@ from a string.
+--
+--     If @str@ starts with whitespace, then those whitespace characters are skipped before attempting to parse the number.
+--
+--     If the parsed number does not fit inside a @long long@, the result is clamped to the minimum and maximum representable @long long@ values.
+--
+--     [Returns]: the parsed @long long@, or 0 if no number could be parsed.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_atoi', 'sDL_atof', @SDL_strtol@, @SDL_strtoul@, 'sDL_strtoull', 'sDL_strtod', 'sDL_lltoa'
+--
+--     [C declaration]: @SDL_strtoll@, defined at @SDL3\/SDL_stdinc.h 3770:39@
+sDL_strtoll
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: The null-terminated string to read. Must not be NULL.
+  -> BG.Ptr (BG.Ptr BG.CChar)
+  -- ^
+  --
+  --           [@endp@]: If not NULL, the address of the first invalid character (i.e. the next character after the parsed number) will be written to this pointer.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@base@]: The base of the integer to read. Supported values are 0 and 2 to 36 inclusive. If 0, the base will be inferred from the number\'s prefix (0x for hexadecimal, 0 for octal, decimal otherwise).
+  -> IO BG.CLLong
+sDL_strtoll = hs_bindgen_2d4f949f38ae668c
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strtoull@
+foreign import ccall safe "hs_bindgen_af470a839fcf6fbd"
+  hs_bindgen_af470a839fcf6fbd_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO BG.CULLong
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strtoull@
+hs_bindgen_af470a839fcf6fbd
+  :: PtrConst.PtrConst BG.CChar
+  -> BG.Ptr (BG.Ptr BG.CChar)
+  -> BG.CInt
+  -> IO BG.CULLong
+hs_bindgen_af470a839fcf6fbd =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_af470a839fcf6fbd_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Parse an @unsigned long long@ from a string.
+--
+--     If @str@ starts with whitespace, then those whitespace characters are skipped before attempting to parse the number.
+--
+--     If the parsed number does not fit inside an @unsigned long long@, the result is clamped to the maximum representable @unsigned long long@ value.
+--
+--     [Returns]: the parsed @unsigned long long@, or 0 if no number could be parsed.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_atoi', 'sDL_atof', @SDL_strtol@, 'sDL_strtoll', @SDL_strtoul@, 'sDL_strtod', 'sDL_ulltoa'
+--
+--     [C declaration]: @SDL_strtoull@, defined at @SDL3\/SDL_stdinc.h 3804:48@
+sDL_strtoull
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: The null-terminated string to read. Must not be NULL.
+  -> BG.Ptr (BG.Ptr BG.CChar)
+  -- ^
+  --
+  --           [@endp@]: If not NULL, the address of the first invalid character (i.e. the next character after the parsed number) will be written to this pointer.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@base@]: The base of the integer to read. Supported values are 0 and 2 to 36 inclusive. If 0, the base will be inferred from the number\'s prefix (0x for hexadecimal, 0 for octal, decimal otherwise).
+  -> IO BG.CULLong
+sDL_strtoull = hs_bindgen_af470a839fcf6fbd
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strtod@
+foreign import ccall safe "hs_bindgen_717e481bd213c968"
+  hs_bindgen_717e481bd213c968_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strtod@
+hs_bindgen_717e481bd213c968
+  :: PtrConst.PtrConst BG.CChar
+  -> BG.Ptr (BG.Ptr BG.CChar)
+  -> IO BG.CDouble
+hs_bindgen_717e481bd213c968 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_717e481bd213c968_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Parse a @double@ from a string.
+--
+--     This function makes fewer guarantees than the C runtime @strtod@:
+--
+--     * Only decimal notation is guaranteed to be supported. The handling of scientific and hexadecimal notation is unspecified.
+--
+--     * Whether or not INF and NAN can be parsed is unspecified.
+--
+--     * The precision of the result is unspecified.
+--
+--     [Returns]: the parsed @double@, or 0 if no number could be parsed.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_atoi', 'sDL_atof', @SDL_strtol@, 'sDL_strtoll', @SDL_strtoul@, 'sDL_strtoull'
+--
+--     [C declaration]: @SDL_strtod@, defined at @SDL3\/SDL_stdinc.h 3834:36@
+sDL_strtod
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: the null-terminated string to read. Must not be NULL.
+  -> BG.Ptr (BG.Ptr BG.CChar)
+  -- ^
+  --
+  --           [@endp@]: if not NULL, the address of the first invalid character (i.e. the next character after the parsed number) will be written to this pointer.
+  -> IO BG.CDouble
+sDL_strtod = hs_bindgen_717e481bd213c968
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strcmp@
+foreign import ccall safe "hs_bindgen_114ae5114f0f2f61"
+  hs_bindgen_114ae5114f0f2f61_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strcmp@
+hs_bindgen_114ae5114f0f2f61
+  :: PtrConst.PtrConst BG.CChar
+  -> PtrConst.PtrConst BG.CChar
+  -> IO BG.CInt
+hs_bindgen_114ae5114f0f2f61 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_114ae5114f0f2f61_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Compare two null-terminated UTF-8 strings.
+--
+--     Due to the nature of UTF-8 encoding, this will work with Unicode strings, since effectively this function just compares bytes until it hits a null-terminating character. Also due to the nature of UTF-8, this can be used with @SDL_qsort()@ to put strings in (roughly) alphabetical order.
+--
+--     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_strcmp@, defined at @SDL3\/SDL_stdinc.h 3854:33@
+sDL_strcmp
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str1@]: the first string to compare. NULL is not permitted!
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str2@]: the second string to compare. NULL is not permitted!
+  -> IO BG.CInt
+sDL_strcmp = hs_bindgen_114ae5114f0f2f61
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strncmp@
+foreign import ccall safe "hs_bindgen_07f412ca6ac64bca"
+  hs_bindgen_07f412ca6ac64bca_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strncmp@
+hs_bindgen_07f412ca6ac64bca
+  :: PtrConst.PtrConst BG.CChar
+  -> PtrConst.PtrConst BG.CChar
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO BG.CInt
+hs_bindgen_07f412ca6ac64bca =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_07f412ca6ac64bca_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Compare two UTF-8 strings up to a number of bytes.
+--
+--     Due to the nature of UTF-8 encoding, this will work with Unicode strings, since effectively this function just compares bytes until it hits a null-terminating character. Also due to the nature of UTF-8, this can be used with @SDL_qsort()@ to put strings in (roughly) alphabetical order.
+--
+--     Note that while this function is intended to be used with UTF-8, it is doing a bytewise comparison, and @maxlen@ specifies a /byte/ limit! If the limit lands in the middle of a multi-byte UTF-8 sequence, it will only compare a portion of the final character.
+--
+--     @maxlen@ specifies a maximum number of bytes to compare; if the strings match to this number of bytes (or both have matched to a null-terminator character before this number of bytes), they will be considered equal.
+--
+--     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_strncmp@, defined at @SDL3\/SDL_stdinc.h 3884:33@
+sDL_strncmp
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str1@]: the first string to compare. NULL is not permitted!
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str2@]: the second string to compare. NULL is not permitted!
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@maxlen@]: the maximum number of /bytes/ to compare.
+  -> IO BG.CInt
+sDL_strncmp = hs_bindgen_07f412ca6ac64bca
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strcasecmp@
+foreign import ccall safe "hs_bindgen_931c05e65f298770"
+  hs_bindgen_931c05e65f298770_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strcasecmp@
+hs_bindgen_931c05e65f298770
+  :: PtrConst.PtrConst BG.CChar
+  -> PtrConst.PtrConst BG.CChar
+  -> IO BG.CInt
+hs_bindgen_931c05e65f298770 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_931c05e65f298770_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Compare two null-terminated UTF-8 strings, case-insensitively.
+--
+--     This will work with Unicode strings, using a technique called \"case-folding\" to handle the vast majority of case-sensitive human languages regardless of system locale. It can deal with expanding values: a German Eszett character can compare against two ASCII \'s\' chars and be considered a match, for example. A notable exception: it does not handle the Turkish \'i\' character; human language is complicated!
+--
+--     Since this handles Unicode, it expects the string to be well-formed UTF-8 and not a null-terminated string of arbitrary bytes. Bytes that are not valid UTF-8 are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), which is to say two strings of random bits may turn out to match if they convert to the same amount of replacement characters.
+--
+--     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_strcasecmp@, defined at @SDL3\/SDL_stdinc.h 3912:33@
+sDL_strcasecmp
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str1@]: the first string to compare. NULL is not permitted!
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str2@]: the second string to compare. NULL is not permitted!
+  -> IO BG.CInt
+sDL_strcasecmp = hs_bindgen_931c05e65f298770
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strncasecmp@
+foreign import ccall safe "hs_bindgen_974c20bb6f7b7d03"
+  hs_bindgen_974c20bb6f7b7d03_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strncasecmp@
+hs_bindgen_974c20bb6f7b7d03
+  :: PtrConst.PtrConst BG.CChar
+  -> PtrConst.PtrConst BG.CChar
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO BG.CInt
+hs_bindgen_974c20bb6f7b7d03 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_974c20bb6f7b7d03_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Compare two UTF-8 strings, case-insensitively, up to a number of bytes.
+--
+--     This will work with Unicode strings, using a technique called \"case-folding\" to handle the vast majority of case-sensitive human languages regardless of system locale. It can deal with expanding values: a German Eszett character can compare against two ASCII \'s\' chars and be considered a match, for example. A notable exception: it does not handle the Turkish \'i\' character; human language is complicated!
+--
+--     Since this handles Unicode, it expects the string to be well-formed UTF-8 and not a null-terminated string of arbitrary bytes. Bytes that are not valid UTF-8 are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), which is to say two strings of random bits may turn out to match if they convert to the same amount of replacement characters.
+--
+--     Note that while this function is intended to be used with UTF-8, @maxlen@ specifies a /byte/ limit! If the limit lands in the middle of a multi-byte UTF-8 sequence, it may convert a portion of the final character to one or more Unicode character U+FFFD (REPLACEMENT CHARACTER) so as not to overflow a buffer.
+--
+--     @maxlen@ specifies a maximum number of bytes to compare; if the strings match to this number of bytes (or both have matched to a null-terminator character before this number of bytes), they will be considered equal.
+--
+--     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_strncasecmp@, defined at @SDL3\/SDL_stdinc.h 3952:33@
+sDL_strncasecmp
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str1@]: the first string to compare. NULL is not permitted!
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str2@]: the second string to compare. NULL is not permitted!
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@maxlen@]: the maximum number of bytes to compare.
+  -> IO BG.CInt
+sDL_strncasecmp = hs_bindgen_974c20bb6f7b7d03
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strpbrk@
+foreign import ccall safe "hs_bindgen_50473abaffb3417e"
+  hs_bindgen_50473abaffb3417e_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_strpbrk@
+hs_bindgen_50473abaffb3417e
+  :: PtrConst.PtrConst BG.CChar
+  -> PtrConst.PtrConst BG.CChar
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_50473abaffb3417e =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_50473abaffb3417e_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Searches a string for the first occurrence of any character contained in a breakset, and returns a pointer from the string to that character.
+--
+--     [Returns]: A pointer to the location, in str, of the first occurrence of a character present in the breakset, or NULL if none is found.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_strpbrk@, defined at @SDL3\/SDL_stdinc.h 3970:36@
+sDL_strpbrk
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: The null-terminated string to be searched. Must not be NULL, and must not overlap with @breakset@.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@breakset@]: A null-terminated string containing the list of characters to look for. Must not be NULL, and must not overlap with @str@.
+  -> IO (BG.Ptr BG.CChar)
+sDL_strpbrk = hs_bindgen_50473abaffb3417e
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_StepUTF8@
+foreign import ccall safe "hs_bindgen_e49242de1cec91d5"
+  hs_bindgen_e49242de1cec91d5_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO HsBindgen.Runtime.LibC.Word32
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_StepUTF8@
+hs_bindgen_e49242de1cec91d5
+  :: BG.Ptr (PtrConst.PtrConst BG.CChar)
+  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
+  -> IO Uint32
+hs_bindgen_e49242de1cec91d5 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_e49242de1cec91d5_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Decode a UTF-8 string, one Unicode codepoint at a time.
+--
+--     This will return the first Unicode codepoint in the UTF-8 encoded string in @*pstr@, and then advance @*pstr@ past any consumed bytes before returning.
+--
+--     It will not access more than @*pslen@ bytes from the string. @*pslen@ will be adjusted, as well, subtracting the number of bytes consumed.
+--
+--     @pslen@ is allowed to be NULL, in which case the string /must/ be NULL-terminated, as the function will blindly read until it sees the NULL char.
+--
+--     if @*pslen@ is zero, it assumes the end of string is reached and returns a zero codepoint regardless of the contents of the string buffer.
+--
+--     If the resulting codepoint is zero (a NULL terminator), or @*pslen@ is zero, it will not advance @*pstr@ or @*pslen@ at all.
+--
+--     Generally this function is called in a loop until it returns zero, adjusting its parameters each iteration.
+--
+--     If an invalid UTF-8 sequence is encountered, this function returns SDL_INVALID_UNICODE_CODEPOINT and advances the string\/length by one byte (which is to say, a multibyte sequence might produce several SDL_INVALID_UNICODE_CODEPOINT returns before it syncs to the next valid UTF-8 sequence).
+--
+--     Several things can generate invalid UTF-8 sequences, including overlong encodings, the use of UTF-16 surrogate values, and truncated data. Please refer to [RFC3629](https://www.ietf.org/rfc/rfc3629.txt) for details.
+--
+--     [Returns]: the first Unicode codepoint in the string.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_StepUTF8@, defined at @SDL3\/SDL_stdinc.h 4030:36@
+sDL_StepUTF8
+  :: BG.Ptr (PtrConst.PtrConst BG.CChar)
+  -- ^
+  --
+  --           [@pstr@]: a pointer to a UTF-8 string pointer to be read and adjusted.
+  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@pslen@]: a pointer to the number of bytes in the string, to be read and adjusted. NULL is allowed.
+  -> IO Uint32
+sDL_StepUTF8 = hs_bindgen_e49242de1cec91d5
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_StepBackUTF8@
+foreign import ccall safe "hs_bindgen_0346c467944ee189"
+  hs_bindgen_0346c467944ee189_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO HsBindgen.Runtime.LibC.Word32
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_StepBackUTF8@
+hs_bindgen_0346c467944ee189
+  :: PtrConst.PtrConst BG.CChar
+  -> BG.Ptr (PtrConst.PtrConst BG.CChar)
+  -> IO Uint32
+hs_bindgen_0346c467944ee189 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_0346c467944ee189_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Decode a UTF-8 string in reverse, one Unicode codepoint at a time.
+--
+--     This will go to the start of the previous Unicode codepoint in the string, move @*pstr@ to that location and return that codepoint.
+--
+--     If @*pstr@ is already at the start of the string), it will not advance @*pstr@ at all.
+--
+--     Generally this function is called in a loop until it returns zero, adjusting its parameter each iteration.
+--
+--     If an invalid UTF-8 sequence is encountered, this function returns SDL_INVALID_UNICODE_CODEPOINT.
+--
+--     Several things can generate invalid UTF-8 sequences, including overlong encodings, the use of UTF-16 surrogate values, and truncated data. Please refer to [RFC3629](https://www.ietf.org/rfc/rfc3629.txt) for details.
+--
+--     [Returns]: the previous Unicode codepoint in the string.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_StepBackUTF8@, defined at @SDL3\/SDL_stdinc.h 4061:36@
+sDL_StepBackUTF8
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@start@]: a pointer to the beginning of the UTF-8 string.
+  -> BG.Ptr (PtrConst.PtrConst BG.CChar)
+  -- ^
+  --
+  --           [@pstr@]: a pointer to a UTF-8 string pointer to be read and adjusted.
+  -> IO Uint32
+sDL_StepBackUTF8 = hs_bindgen_0346c467944ee189
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_UCS4ToUTF8@
+foreign import ccall safe "hs_bindgen_bdc98e385efc6ab7"
+  hs_bindgen_bdc98e385efc6ab7_base
+    :: HsBindgen.Runtime.LibC.Word32
+    -> BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_UCS4ToUTF8@
+hs_bindgen_bdc98e385efc6ab7
+  :: Uint32
+  -> BG.Ptr BG.CChar
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_bdc98e385efc6ab7 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_bdc98e385efc6ab7_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Convert a single Unicode codepoint to UTF-8.
+--
+--     The buffer pointed to by @dst@ must be at least 4 bytes long, as this function may generate between 1 and 4 bytes of output.
+--
+--     This function returns the first byte /after/ the newly-written UTF-8 sequence, which is useful for encoding multiple codepoints in a loop, or knowing where to write a NULL-terminator character to end the string (in either case, plan to have a buffer of /more/ than 4 bytes!).
+--
+--     If @codepoint@ is an invalid value (outside the Unicode range, or a UTF-16 surrogate value, etc), this will use U+FFFD (REPLACEMENT CHARACTER) for the codepoint instead, and not set an error.
+--
+--     If @dst@ is NULL, this returns NULL immediately without writing to the pointer and without setting an error.
+--
+--     [Returns]: the first byte past the newly-written UTF-8 sequence.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_UCS4ToUTF8@, defined at @SDL3\/SDL_stdinc.h 4090:36@
+sDL_UCS4ToUTF8
+  :: Uint32
+  -- ^
+  --
+  --           [@codepoint@]: a Unicode codepoint to convert to UTF-8.
+  -> BG.Ptr BG.CChar
+  -- ^
+  --
+  --           [@dst@]: the location to write the encoded UTF-8. Must point to at least 4 bytes!
+  -> IO (BG.Ptr BG.CChar)
+sDL_UCS4ToUTF8 = hs_bindgen_bdc98e385efc6ab7
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_srand@
+foreign import ccall safe "hs_bindgen_bd195a3a2b34e483"
+  hs_bindgen_bd195a3a2b34e483_base
+    :: HsBindgen.Runtime.LibC.Word64
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_srand@
+hs_bindgen_bd195a3a2b34e483
+  :: Uint64
+  -> IO ()
+hs_bindgen_bd195a3a2b34e483 =
+  \x0 ->
+    hs_bindgen_bd195a3a2b34e483_base (BG.toFFIType x0)
+
+-- | Seeds the pseudo-random number generator.
+--
+--     Reusing the seed number will cause @SDL_rand()@ to repeat the same stream of \'random\' numbers.
+--
+--     [Thread safety]: This should be called on the same thread that calls @SDL_rand()@
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_rand', 'sDL_rand_bits', 'sDL_randf'
+--
+--     [C declaration]: @SDL_srand@, defined at @SDL3\/SDL_stdinc.h 4302:34@
+sDL_srand
+  :: Uint64
+  -- ^
+  --
+  --           [@seed@]: the value to use as a random number seed, or 0 to use SDL_GetPerformanceCounter().
+  -> IO ()
+sDL_srand = hs_bindgen_bd195a3a2b34e483
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_rand@
+foreign import ccall safe "hs_bindgen_4b2da7e53b63ed17"
+  hs_bindgen_4b2da7e53b63ed17_base
+    :: HsBindgen.Runtime.LibC.Int32
+    -> IO HsBindgen.Runtime.LibC.Int32
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_rand@
+hs_bindgen_4b2da7e53b63ed17
+  :: Sint32
+  -> IO Sint32
+hs_bindgen_4b2da7e53b63ed17 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_4b2da7e53b63ed17_base (BG.toFFIType x0))
+
+-- | Generate a pseudo-random number less than n for positive n
+--
+--     The method used is faster and of better quality than @rand() % n@. Odds are roughly 99.9% even for n = 1 million. Evenness is better for smaller n, and much worse as n gets bigger.
+--
+--     Example: to simulate a d6 use @SDL_rand(6) + 1@ The +1 converts 0..5 to 1..6
+--
+--     If you want to generate a pseudo-random number in the full range of 'Sint32', you should use: ('Sint32') @SDL_rand_bits()@
+--
+--     If you want reproducible output, be sure to initialize with @SDL_srand()@ first.
+--
+--     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
+--
+--     [Returns]: a random value in the range of [0 .. n-1].
+--
+--     [Thread safety]: All calls should be made from a single thread
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_srand', 'sDL_randf'
+--
+--     [C declaration]: @SDL_rand@, defined at @SDL3\/SDL_stdinc.h 4336:36@
+sDL_rand
+  :: Sint32
+  -- ^
+  --
+  --           [@n@]: the number of possible outcomes. n must be positive.
+  -> IO Sint32
+sDL_rand = hs_bindgen_4b2da7e53b63ed17
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_randf@
+foreign import ccall safe "hs_bindgen_91fe5edd016e0570"
+  hs_bindgen_91fe5edd016e0570_base
+    :: IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_randf@
+hs_bindgen_91fe5edd016e0570 :: IO BG.CFloat
+hs_bindgen_91fe5edd016e0570 =
+  fmap BG.fromFFIType hs_bindgen_91fe5edd016e0570_base
+
+-- | Generate a uniform pseudo-random floating point number less than 1.0
+--
+--     If you want reproducible output, be sure to initialize with @SDL_srand()@ first.
+--
+--     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
+--
+--     [Returns]: a random value in the range of [0.0, 1.0).
+--
+--     [Thread safety]: All calls should be made from a single thread
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_srand', 'sDL_rand'
+--
+--     [C declaration]: @SDL_randf@, defined at @SDL3\/SDL_stdinc.h 4359:35@
+sDL_randf :: IO BG.CFloat
+sDL_randf = hs_bindgen_91fe5edd016e0570
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_rand_bits@
+foreign import ccall safe "hs_bindgen_5d81c1c12775308d"
+  hs_bindgen_5d81c1c12775308d_base
+    :: IO HsBindgen.Runtime.LibC.Word32
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_rand_bits@
+hs_bindgen_5d81c1c12775308d :: IO Uint32
+hs_bindgen_5d81c1c12775308d =
+  fmap BG.fromFFIType hs_bindgen_5d81c1c12775308d_base
+
+-- | Generate 32 pseudo-random bits.
+--
+--     You likely want to use @SDL_rand()@ to get a psuedo-random number instead.
+--
+--     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
+--
+--     [Returns]: a random value in the range of [0-SDL_MAX_UINT32].
+--
+--     [Thread safety]: All calls should be made from a single thread
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_rand', 'sDL_randf', 'sDL_srand'
+--
+--     [C declaration]: @SDL_rand_bits@, defined at @SDL3\/SDL_stdinc.h 4382:36@
+sDL_rand_bits :: IO Uint32
+sDL_rand_bits = hs_bindgen_5d81c1c12775308d
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_rand_r@
+foreign import ccall safe "hs_bindgen_59abfd01a8d7b8f7"
+  hs_bindgen_59abfd01a8d7b8f7_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.Int32
+    -> IO HsBindgen.Runtime.LibC.Int32
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_rand_r@
+hs_bindgen_59abfd01a8d7b8f7
+  :: BG.Ptr Uint64
+  -> Sint32
+  -> IO Sint32
+hs_bindgen_59abfd01a8d7b8f7 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_59abfd01a8d7b8f7_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Generate a pseudo-random number less than n for positive n
+--
+--     The method used is faster and of better quality than @rand() % n@. Odds are roughly 99.9% even for n = 1 million. Evenness is better for smaller n, and much worse as n gets bigger.
+--
+--     Example: to simulate a d6 use @SDL_rand_r(state, 6) + 1@ The +1 converts 0..5 to 1..6
+--
+--     If you want to generate a pseudo-random number in the full range of 'Sint32', you should use: ('Sint32')SDL_rand_bits_r(state)
+--
+--     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
+--
+--     [Returns]: a random value in the range of [0 .. n-1].
+--
+--     [Thread safety]: This function is thread-safe, as long as the state pointer isn\'t shared between threads.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_rand', 'sDL_rand_bits_r', 'sDL_randf_r'
+--
+--     [C declaration]: @SDL_rand_r@, defined at @SDL3\/SDL_stdinc.h 4417:36@
+sDL_rand_r
+  :: BG.Ptr Uint64
+  -- ^
+  --
+  --           [@state@]: a pointer to the current random number state, this may not be NULL.
+  -> Sint32
+  -- ^
+  --
+  --           [@n@]: the number of possible outcomes. n must be positive.
+  -> IO Sint32
+sDL_rand_r = hs_bindgen_59abfd01a8d7b8f7
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_randf_r@
+foreign import ccall safe "hs_bindgen_5da60fff1ce7873d"
+  hs_bindgen_5da60fff1ce7873d_base
+    :: BG.Ptr BG.Void
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_randf_r@
+hs_bindgen_5da60fff1ce7873d
+  :: BG.Ptr Uint64
+  -> IO BG.CFloat
+hs_bindgen_5da60fff1ce7873d =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_5da60fff1ce7873d_base (BG.toFFIType x0))
+
+-- | Generate a uniform pseudo-random floating point number less than 1.0
+--
+--     If you want reproducible output, be sure to initialize with @SDL_srand()@ first.
+--
+--     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
+--
+--     [Returns]: a random value in the range of [0.0, 1.0).
+--
+--     [Thread safety]: This function is thread-safe, as long as the state pointer isn\'t shared between threads.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_rand_bits_r', 'sDL_rand_r', 'sDL_randf'
+--
+--     [C declaration]: @SDL_randf_r@, defined at @SDL3\/SDL_stdinc.h 4444:35@
+sDL_randf_r
+  :: BG.Ptr Uint64
+  -- ^
+  --
+  --           [@state@]: a pointer to the current random number state, this may not be NULL.
+  -> IO BG.CFloat
+sDL_randf_r = hs_bindgen_5da60fff1ce7873d
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_rand_bits_r@
+foreign import ccall safe "hs_bindgen_23de01659ed6ba6b"
+  hs_bindgen_23de01659ed6ba6b_base
+    :: BG.Ptr BG.Void
+    -> IO HsBindgen.Runtime.LibC.Word32
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_rand_bits_r@
+hs_bindgen_23de01659ed6ba6b
+  :: BG.Ptr Uint64
+  -> IO Uint32
+hs_bindgen_23de01659ed6ba6b =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_23de01659ed6ba6b_base (BG.toFFIType x0))
+
+-- | Generate 32 pseudo-random bits.
+--
+--     You likely want to use @SDL_rand_r()@ to get a psuedo-random number instead.
+--
+--     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
+--
+--     [Returns]: a random value in the range of [0-SDL_MAX_UINT32].
+--
+--     [Thread safety]: This function is thread-safe, as long as the state pointer isn\'t shared between threads.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_rand_r', 'sDL_randf_r'
+--
+--     [C declaration]: @SDL_rand_bits_r@, defined at @SDL3\/SDL_stdinc.h 4469:36@
+sDL_rand_bits_r
+  :: BG.Ptr Uint64
+  -- ^
+  --
+  --           [@state@]: a pointer to the current random number state, this may not be NULL.
+  -> IO Uint32
+sDL_rand_bits_r = hs_bindgen_23de01659ed6ba6b
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_acos@
+foreign import ccall safe "hs_bindgen_217308a0a788520d"
+  hs_bindgen_217308a0a788520d_base
+    :: BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_acos@
+hs_bindgen_217308a0a788520d
+  :: BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_217308a0a788520d =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_217308a0a788520d_base (BG.toFFIType x0))
+
+-- | Compute the arc cosine of @x@.
+--
+--     The definition of @y = acos(x)@ is @x = cos(y)@.
+--
+--     Domain: @-1 \<= x \<= 1@
+--
+--     Range: @0 \<= y \<= Pi@
+--
+--     This function operates on double-precision floating point values, use SDL_acosf for single-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: arc cosine of @x@, in radians.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_acosf', 'sDL_asin', 'sDL_cos'
+--
+--     [C declaration]: @SDL_acos@, defined at @SDL3\/SDL_stdinc.h 4523:36@
+sDL_acos
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CDouble
+sDL_acos = hs_bindgen_217308a0a788520d
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_acosf@
+foreign import ccall safe "hs_bindgen_f093db4bb5e8e494"
+  hs_bindgen_f093db4bb5e8e494_base
+    :: BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_acosf@
+hs_bindgen_f093db4bb5e8e494
+  :: BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_f093db4bb5e8e494 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_f093db4bb5e8e494_base (BG.toFFIType x0))
+
+-- | Compute the arc cosine of @x@.
+--
+--     The definition of @y = acos(x)@ is @x = cos(y)@.
+--
+--     Domain: @-1 \<= x \<= 1@
+--
+--     Range: @0 \<= y \<= Pi@
+--
+--     This function operates on single-precision floating point values, use SDL_acos for double-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: arc cosine of @x@, in radians.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_acos', 'sDL_asinf', 'sDL_cosf'
+--
+--     [C declaration]: @SDL_acosf@, defined at @SDL3\/SDL_stdinc.h 4553:35@
+sDL_acosf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CFloat
+sDL_acosf = hs_bindgen_f093db4bb5e8e494
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_asin@
+foreign import ccall safe "hs_bindgen_205d9f923dff59cd"
+  hs_bindgen_205d9f923dff59cd_base
+    :: BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_asin@
+hs_bindgen_205d9f923dff59cd
+  :: BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_205d9f923dff59cd =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_205d9f923dff59cd_base (BG.toFFIType x0))
+
+-- | Compute the arc sine of @x@.
+--
+--     The definition of @y = asin(x)@ is @x = sin(y)@.
+--
+--     Domain: @-1 \<= x \<= 1@
+--
+--     Range: @-Pi\/2 \<= y \<= Pi\/2@
+--
+--     This function operates on double-precision floating point values, use SDL_asinf for single-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: arc sine of @x@, in radians.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_asinf', 'sDL_acos', 'sDL_sin'
+--
+--     [C declaration]: @SDL_asin@, defined at @SDL3\/SDL_stdinc.h 4583:36@
+sDL_asin
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CDouble
+sDL_asin = hs_bindgen_205d9f923dff59cd
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_asinf@
+foreign import ccall safe "hs_bindgen_79771d582742f165"
+  hs_bindgen_79771d582742f165_base
+    :: BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_asinf@
+hs_bindgen_79771d582742f165
+  :: BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_79771d582742f165 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_79771d582742f165_base (BG.toFFIType x0))
+
+-- | Compute the arc sine of @x@.
+--
+--     The definition of @y = asin(x)@ is @x = sin(y)@.
+--
+--     Domain: @-1 \<= x \<= 1@
+--
+--     Range: @-Pi\/2 \<= y \<= Pi\/2@
+--
+--     This function operates on single-precision floating point values, use SDL_asin for double-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: arc sine of @x@, in radians.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_asin', 'sDL_acosf', 'sDL_sinf'
+--
+--     [C declaration]: @SDL_asinf@, defined at @SDL3\/SDL_stdinc.h 4613:35@
+sDL_asinf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CFloat
+sDL_asinf = hs_bindgen_79771d582742f165
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_atan@
+foreign import ccall safe "hs_bindgen_3051cbc85bd5efba"
+  hs_bindgen_3051cbc85bd5efba_base
+    :: BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_atan@
+hs_bindgen_3051cbc85bd5efba
+  :: BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_3051cbc85bd5efba =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3051cbc85bd5efba_base (BG.toFFIType x0))
+
+-- | Compute the arc tangent of @x@.
+--
+--     The definition of @y = atan(x)@ is @x = tan(y)@.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @-Pi\/2 \<= y \<= Pi\/2@
+--
+--     This function operates on double-precision floating point values, use SDL_atanf for single-precision floats.
+--
+--     To calculate the arc tangent of y \/ x, use SDL_atan2.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: arc tangent of of @x@ in radians, or 0 if @x = 0@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_atanf', 'sDL_atan2', 'sDL_tan'
+--
+--     [C declaration]: @SDL_atan@, defined at @SDL3\/SDL_stdinc.h 4645:36@
+sDL_atan
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CDouble
+sDL_atan = hs_bindgen_3051cbc85bd5efba
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_atanf@
+foreign import ccall safe "hs_bindgen_7d0bcd6030adfae6"
+  hs_bindgen_7d0bcd6030adfae6_base
+    :: BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_atanf@
+hs_bindgen_7d0bcd6030adfae6
+  :: BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_7d0bcd6030adfae6 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_7d0bcd6030adfae6_base (BG.toFFIType x0))
+
+-- | Compute the arc tangent of @x@.
+--
+--     The definition of @y = atan(x)@ is @x = tan(y)@.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @-Pi\/2 \<= y \<= Pi\/2@
+--
+--     This function operates on single-precision floating point values, use SDL_atan for dboule-precision floats.
+--
+--     To calculate the arc tangent of y \/ x, use SDL_atan2f.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: arc tangent of of @x@ in radians, or 0 if @x = 0@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_atan', 'sDL_atan2f', 'sDL_tanf'
+--
+--     [C declaration]: @SDL_atanf@, defined at @SDL3\/SDL_stdinc.h 4677:35@
+sDL_atanf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CFloat
+sDL_atanf = hs_bindgen_7d0bcd6030adfae6
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_atan2@
+foreign import ccall safe "hs_bindgen_9ae010b5b4d9f553"
+  hs_bindgen_9ae010b5b4d9f553_base
+    :: BG.CDouble
+    -> BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_atan2@
+hs_bindgen_9ae010b5b4d9f553
+  :: BG.CDouble
+  -> BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_9ae010b5b4d9f553 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_9ae010b5b4d9f553_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Compute the arc tangent of @y \/ x@, using the signs of x and y to adjust the result\'s quadrant.
+--
+--     The definition of @z = atan2(x, y)@ is @y = x tan(z)@, where the quadrant of z is determined based on the signs of x and y.
+--
+--     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= INF@
+--
+--     Range: @-Pi \<= y \<= Pi@
+--
+--     This function operates on double-precision floating point values, use SDL_atan2f for single-precision floats.
+--
+--     To calculate the arc tangent of a single value, use SDL_atan.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: arc tangent of of @y \/ x@ in radians, or, if @x = 0@, either @-Pi\/2@, @0@, or @Pi\/2@, depending on the value of @y@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_atan2f', 'sDL_atan', 'sDL_tan'
+--
+--     [C declaration]: @SDL_atan2@, defined at @SDL3\/SDL_stdinc.h 4713:36@
+sDL_atan2
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@y@]: floating point value of the numerator (y coordinate).
+  -> BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value of the denominator (x coordinate).
+  -> IO BG.CDouble
+sDL_atan2 = hs_bindgen_9ae010b5b4d9f553
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_atan2f@
+foreign import ccall safe "hs_bindgen_3eac4b1bfc5aff58"
+  hs_bindgen_3eac4b1bfc5aff58_base
+    :: BG.CFloat
+    -> BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_atan2f@
+hs_bindgen_3eac4b1bfc5aff58
+  :: BG.CFloat
+  -> BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_3eac4b1bfc5aff58 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_3eac4b1bfc5aff58_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Compute the arc tangent of @y \/ x@, using the signs of x and y to adjust the result\'s quadrant.
+--
+--     The definition of @z = atan2(x, y)@ is @y = x tan(z)@, where the quadrant of z is determined based on the signs of x and y.
+--
+--     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= INF@
+--
+--     Range: @-Pi \<= y \<= Pi@
+--
+--     This function operates on single-precision floating point values, use SDL_atan2 for double-precision floats.
+--
+--     To calculate the arc tangent of a single value, use SDL_atanf.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: arc tangent of of @y \/ x@ in radians, or, if @x = 0@, either @-Pi\/2@, @0@, or @Pi\/2@, depending on the value of @y@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_atan2', 'sDL_atan', 'sDL_tan'
+--
+--     [C declaration]: @SDL_atan2f@, defined at @SDL3\/SDL_stdinc.h 4749:35@
+sDL_atan2f
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@y@]: floating point value of the numerator (y coordinate).
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value of the denominator (x coordinate).
+  -> IO BG.CFloat
+sDL_atan2f = hs_bindgen_3eac4b1bfc5aff58
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_ceil@
+foreign import ccall safe "hs_bindgen_1630cb0e3a004beb"
+  hs_bindgen_1630cb0e3a004beb_base
+    :: BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_ceil@
+hs_bindgen_1630cb0e3a004beb
+  :: BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_1630cb0e3a004beb =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_1630cb0e3a004beb_base (BG.toFFIType x0))
+
+-- | Compute the ceiling of @x@.
+--
+--     The ceiling of @x@ is the smallest integer @y@ such that @y >= x@, i.e @x@ rounded up to the nearest integer.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @-INF \<= y \<= INF@, y integer
+--
+--     This function operates on double-precision floating point values, use SDL_ceilf for single-precision floats.
+--
+--     [Returns]: the ceiling of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_ceilf', 'sDL_floor', 'sDL_trunc', 'sDL_round', @SDL_lround@
+--
+--     [C declaration]: @SDL_ceil@, defined at @SDL3\/SDL_stdinc.h 4777:36@
+sDL_ceil
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CDouble
+sDL_ceil = hs_bindgen_1630cb0e3a004beb
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_ceilf@
+foreign import ccall safe "hs_bindgen_04a706bfcc971297"
+  hs_bindgen_04a706bfcc971297_base
+    :: BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_ceilf@
+hs_bindgen_04a706bfcc971297
+  :: BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_04a706bfcc971297 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_04a706bfcc971297_base (BG.toFFIType x0))
+
+-- | Compute the ceiling of @x@.
+--
+--     The ceiling of @x@ is the smallest integer @y@ such that @y >= x@, i.e @x@ rounded up to the nearest integer.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @-INF \<= y \<= INF@, y integer
+--
+--     This function operates on single-precision floating point values, use SDL_ceil for double-precision floats.
+--
+--     [Returns]: the ceiling of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_ceil', 'sDL_floorf', 'sDL_truncf', 'sDL_roundf', @SDL_lroundf@
+--
+--     [C declaration]: @SDL_ceilf@, defined at @SDL3\/SDL_stdinc.h 4805:35@
+sDL_ceilf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CFloat
+sDL_ceilf = hs_bindgen_04a706bfcc971297
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_copysign@
+foreign import ccall safe "hs_bindgen_fed0484ab850ee6a"
+  hs_bindgen_fed0484ab850ee6a_base
+    :: BG.CDouble
+    -> BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_copysign@
+hs_bindgen_fed0484ab850ee6a
+  :: BG.CDouble
+  -> BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_fed0484ab850ee6a =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_fed0484ab850ee6a_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Copy the sign of one floating-point value to another.
+--
+--     The definition of copysign is that @copysign(x, y) = abs(x) * sign(y)@.
+--
+--     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= f@
+--
+--     Range: @-INF \<= z \<= INF@
+--
+--     This function operates on double-precision floating point values, use SDL_copysignf for single-precision floats.
+--
+--     [Returns]: the floating point value with the sign of y and the magnitude of x.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_copysignf', 'sDL_fabs'
+--
+--     [C declaration]: @SDL_copysign@, defined at @SDL3\/SDL_stdinc.h 4831:36@
+sDL_copysign
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value to use as the magnitude.
+  -> BG.CDouble
+  -- ^
+  --
+  --           [@y@]: floating point value to use as the sign.
+  -> IO BG.CDouble
+sDL_copysign = hs_bindgen_fed0484ab850ee6a
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_copysignf@
+foreign import ccall safe "hs_bindgen_d21fe858af73dd98"
+  hs_bindgen_d21fe858af73dd98_base
+    :: BG.CFloat
+    -> BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_copysignf@
+hs_bindgen_d21fe858af73dd98
+  :: BG.CFloat
+  -> BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_d21fe858af73dd98 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_d21fe858af73dd98_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Copy the sign of one floating-point value to another.
+--
+--     The definition of copysign is that @copysign(x, y) = abs(x) * sign(y)@.
+--
+--     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= f@
+--
+--     Range: @-INF \<= z \<= INF@
+--
+--     This function operates on single-precision floating point values, use SDL_copysign for double-precision floats.
+--
+--     [Returns]: the floating point value with the sign of y and the magnitude of x.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_copysign', 'sDL_fabsf'
+--
+--     [C declaration]: @SDL_copysignf@, defined at @SDL3\/SDL_stdinc.h 4857:35@
+sDL_copysignf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value to use as the magnitude.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@y@]: floating point value to use as the sign.
+  -> IO BG.CFloat
+sDL_copysignf = hs_bindgen_d21fe858af73dd98
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_cos@
+foreign import ccall safe "hs_bindgen_a4c38d6732d22ffb"
+  hs_bindgen_a4c38d6732d22ffb_base
+    :: BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_cos@
+hs_bindgen_a4c38d6732d22ffb
+  :: BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_a4c38d6732d22ffb =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a4c38d6732d22ffb_base (BG.toFFIType x0))
+
+-- | Compute the cosine of @x@.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @-1 \<= y \<= 1@
+--
+--     This function operates on double-precision floating point values, use SDL_cosf for single-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: cosine of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_cosf', 'sDL_acos', 'sDL_sin'
+--
+--     [C declaration]: @SDL_cos@, defined at @SDL3\/SDL_stdinc.h 4885:36@
+sDL_cos
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value, in radians.
+  -> IO BG.CDouble
+sDL_cos = hs_bindgen_a4c38d6732d22ffb
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_cosf@
+foreign import ccall safe "hs_bindgen_ad11505e8fd49060"
+  hs_bindgen_ad11505e8fd49060_base
+    :: BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_cosf@
+hs_bindgen_ad11505e8fd49060
+  :: BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_ad11505e8fd49060 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_ad11505e8fd49060_base (BG.toFFIType x0))
+
+-- | Compute the cosine of @x@.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @-1 \<= y \<= 1@
+--
+--     This function operates on single-precision floating point values, use SDL_cos for double-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: cosine of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_cos', 'sDL_acosf', 'sDL_sinf'
+--
+--     [C declaration]: @SDL_cosf@, defined at @SDL3\/SDL_stdinc.h 4913:35@
+sDL_cosf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value, in radians.
+  -> IO BG.CFloat
+sDL_cosf = hs_bindgen_ad11505e8fd49060
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_exp@
+foreign import ccall safe "hs_bindgen_ffaa0913f3d0c63c"
+  hs_bindgen_ffaa0913f3d0c63c_base
+    :: BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_exp@
+hs_bindgen_ffaa0913f3d0c63c
+  :: BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_ffaa0913f3d0c63c =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_ffaa0913f3d0c63c_base (BG.toFFIType x0))
+
+-- | Compute the exponential of @x@.
+--
+--     The definition of @y = exp(x)@ is @y = e^x@, where @e@ is the base of the natural logarithm. The inverse is the natural logarithm, SDL_log.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @0 \<= y \<= INF@
+--
+--     The output will overflow if @exp(x)@ is too large to be represented.
+--
+--     This function operates on double-precision floating point values, use SDL_expf for single-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: value of @e^x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_expf', 'sDL_log'
+--
+--     [C declaration]: @SDL_exp@, defined at @SDL3\/SDL_stdinc.h 4945:36@
+sDL_exp
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CDouble
+sDL_exp = hs_bindgen_ffaa0913f3d0c63c
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_expf@
+foreign import ccall safe "hs_bindgen_4d5e3977a4eb4c12"
+  hs_bindgen_4d5e3977a4eb4c12_base
+    :: BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_expf@
+hs_bindgen_4d5e3977a4eb4c12
+  :: BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_4d5e3977a4eb4c12 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_4d5e3977a4eb4c12_base (BG.toFFIType x0))
+
+-- | Compute the exponential of @x@.
+--
+--     The definition of @y = exp(x)@ is @y = e^x@, where @e@ is the base of the natural logarithm. The inverse is the natural logarithm, SDL_logf.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @0 \<= y \<= INF@
+--
+--     The output will overflow if @exp(x)@ is too large to be represented.
+--
+--     This function operates on single-precision floating point values, use SDL_exp for double-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: value of @e^x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_exp', 'sDL_logf'
+--
+--     [C declaration]: @SDL_expf@, defined at @SDL3\/SDL_stdinc.h 4977:35@
+sDL_expf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CFloat
+sDL_expf = hs_bindgen_4d5e3977a4eb4c12
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_fabs@
+foreign import ccall safe "hs_bindgen_89730ae2b638ee61"
+  hs_bindgen_89730ae2b638ee61_base
+    :: BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_fabs@
+hs_bindgen_89730ae2b638ee61
+  :: BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_89730ae2b638ee61 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_89730ae2b638ee61_base (BG.toFFIType x0))
+
+-- | Compute the absolute value of @x@
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @0 \<= y \<= INF@
+--
+--     This function operates on double-precision floating point values, use SDL_fabsf for single-precision floats.
+--
+--     [Returns]: the absolute value of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_fabsf'
+--
+--     [C declaration]: @SDL_fabs@, defined at @SDL3\/SDL_stdinc.h 4998:36@
+sDL_fabs
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value to use as the magnitude.
+  -> IO BG.CDouble
+sDL_fabs = hs_bindgen_89730ae2b638ee61
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_fabsf@
+foreign import ccall safe "hs_bindgen_4e76324c9b8f7453"
+  hs_bindgen_4e76324c9b8f7453_base
+    :: BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_fabsf@
+hs_bindgen_4e76324c9b8f7453
+  :: BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_4e76324c9b8f7453 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_4e76324c9b8f7453_base (BG.toFFIType x0))
+
+-- | Compute the absolute value of @x@
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @0 \<= y \<= INF@
+--
+--     This function operates on single-precision floating point values, use SDL_fabs for double-precision floats.
+--
+--     [Returns]: the absolute value of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_fabs'
+--
+--     [C declaration]: @SDL_fabsf@, defined at @SDL3\/SDL_stdinc.h 5019:35@
+sDL_fabsf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value to use as the magnitude.
+  -> IO BG.CFloat
+sDL_fabsf = hs_bindgen_4e76324c9b8f7453
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_floor@
+foreign import ccall safe "hs_bindgen_4c646d1d6b7e922f"
+  hs_bindgen_4c646d1d6b7e922f_base
+    :: BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_floor@
+hs_bindgen_4c646d1d6b7e922f
+  :: BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_4c646d1d6b7e922f =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_4c646d1d6b7e922f_base (BG.toFFIType x0))
+
+-- | Compute the floor of @x@.
+--
+--     The floor of @x@ is the largest integer @y@ such that @y \<= x@, i.e @x@ rounded down to the nearest integer.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @-INF \<= y \<= INF@, y integer
+--
+--     This function operates on double-precision floating point values, use SDL_floorf for single-precision floats.
+--
+--     [Returns]: the floor of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_floorf', 'sDL_ceil', 'sDL_trunc', 'sDL_round', @SDL_lround@
+--
+--     [C declaration]: @SDL_floor@, defined at @SDL3\/SDL_stdinc.h 5047:36@
+sDL_floor
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CDouble
+sDL_floor = hs_bindgen_4c646d1d6b7e922f
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_floorf@
+foreign import ccall safe "hs_bindgen_db6fbb0a591a2804"
+  hs_bindgen_db6fbb0a591a2804_base
+    :: BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_floorf@
+hs_bindgen_db6fbb0a591a2804
+  :: BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_db6fbb0a591a2804 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_db6fbb0a591a2804_base (BG.toFFIType x0))
+
+-- | Compute the floor of @x@.
+--
+--     The floor of @x@ is the largest integer @y@ such that @y \<= x@, i.e @x@ rounded down to the nearest integer.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @-INF \<= y \<= INF@, y integer
+--
+--     This function operates on single-precision floating point values, use SDL_floor for double-precision floats.
+--
+--     [Returns]: the floor of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_floor', 'sDL_ceilf', 'sDL_truncf', 'sDL_roundf', @SDL_lroundf@
+--
+--     [C declaration]: @SDL_floorf@, defined at @SDL3\/SDL_stdinc.h 5075:35@
+sDL_floorf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CFloat
+sDL_floorf = hs_bindgen_db6fbb0a591a2804
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_trunc@
+foreign import ccall safe "hs_bindgen_2b4f0ab682c421b7"
+  hs_bindgen_2b4f0ab682c421b7_base
+    :: BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_trunc@
+hs_bindgen_2b4f0ab682c421b7
+  :: BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_2b4f0ab682c421b7 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_2b4f0ab682c421b7_base (BG.toFFIType x0))
+
+-- | Truncate @x@ to an integer.
+--
+--     Rounds @x@ to the next closest integer to 0. This is equivalent to removing the fractional part of @x@, leaving only the integer part.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @-INF \<= y \<= INF@, y integer
+--
+--     This function operates on double-precision floating point values, use SDL_truncf for single-precision floats.
+--
+--     [Returns]: @x@ truncated to an integer.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_truncf', 'sDL_fmod', 'sDL_ceil', 'sDL_floor', 'sDL_round', @SDL_lround@
+--
+--     [C declaration]: @SDL_trunc@, defined at @SDL3\/SDL_stdinc.h 5104:36@
+sDL_trunc
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CDouble
+sDL_trunc = hs_bindgen_2b4f0ab682c421b7
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_truncf@
+foreign import ccall safe "hs_bindgen_afe8ddb39d52a293"
+  hs_bindgen_afe8ddb39d52a293_base
+    :: BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_truncf@
+hs_bindgen_afe8ddb39d52a293
+  :: BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_afe8ddb39d52a293 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_afe8ddb39d52a293_base (BG.toFFIType x0))
+
+-- | Truncate @x@ to an integer.
+--
+--     Rounds @x@ to the next closest integer to 0. This is equivalent to removing the fractional part of @x@, leaving only the integer part.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @-INF \<= y \<= INF@, y integer
+--
+--     This function operates on single-precision floating point values, use SDL_trunc for double-precision floats.
+--
+--     [Returns]: @x@ truncated to an integer.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_trunc', 'sDL_fmodf', 'sDL_ceilf', 'sDL_floorf', 'sDL_roundf', @SDL_lroundf@
+--
+--     [C declaration]: @SDL_truncf@, defined at @SDL3\/SDL_stdinc.h 5133:35@
+sDL_truncf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CFloat
+sDL_truncf = hs_bindgen_afe8ddb39d52a293
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_fmod@
+foreign import ccall safe "hs_bindgen_f1fc4d1a8a6fd613"
+  hs_bindgen_f1fc4d1a8a6fd613_base
+    :: BG.CDouble
+    -> BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_fmod@
+hs_bindgen_f1fc4d1a8a6fd613
+  :: BG.CDouble
+  -> BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_f1fc4d1a8a6fd613 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_f1fc4d1a8a6fd613_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Return the floating-point remainder of @x \/ y@
+--
+--     Divides @x@ by @y@, and returns the remainder.
+--
+--     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= INF@, @y != 0@
+--
+--     Range: @-y \<= z \<= y@
+--
+--     This function operates on double-precision floating point values, use SDL_fmodf for single-precision floats.
+--
+--     [Returns]: the remainder of @x \/ y@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_fmodf', 'sDL_modf', 'sDL_trunc', 'sDL_ceil', 'sDL_floor', 'sDL_round', @SDL_lround@
+--
+--     [C declaration]: @SDL_fmod@, defined at @SDL3\/SDL_stdinc.h 5163:36@
+sDL_fmod
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: the numerator.
+  -> BG.CDouble
+  -- ^
+  --
+  --           [@y@]: the denominator. Must not be 0.
+  -> IO BG.CDouble
+sDL_fmod = hs_bindgen_f1fc4d1a8a6fd613
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_fmodf@
+foreign import ccall safe "hs_bindgen_19c2a30dd6614c51"
+  hs_bindgen_19c2a30dd6614c51_base
+    :: BG.CFloat
+    -> BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_fmodf@
+hs_bindgen_19c2a30dd6614c51
+  :: BG.CFloat
+  -> BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_19c2a30dd6614c51 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_19c2a30dd6614c51_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Return the floating-point remainder of @x \/ y@
+--
+--     Divides @x@ by @y@, and returns the remainder.
+--
+--     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= INF@, @y != 0@
+--
+--     Range: @-y \<= z \<= y@
+--
+--     This function operates on single-precision floating point values, use SDL_fmod for double-precision floats.
+--
+--     [Returns]: the remainder of @x \/ y@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_fmod', 'sDL_truncf', 'sDL_modff', 'sDL_ceilf', 'sDL_floorf', 'sDL_roundf', @SDL_lroundf@
+--
+--     [C declaration]: @SDL_fmodf@, defined at @SDL3\/SDL_stdinc.h 5193:35@
+sDL_fmodf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: the numerator.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@y@]: the denominator. Must not be 0.
+  -> IO BG.CFloat
+sDL_fmodf = hs_bindgen_19c2a30dd6614c51
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isinf@
+foreign import ccall safe "hs_bindgen_9be13530739c3139"
+  hs_bindgen_9be13530739c3139_base
+    :: BG.CDouble
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isinf@
+hs_bindgen_9be13530739c3139
+  :: BG.CDouble
+  -> IO BG.CInt
+hs_bindgen_9be13530739c3139 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_9be13530739c3139_base (BG.toFFIType x0))
+
+-- | Return whether the value is infinity.
+--
+--     [Returns]: non-zero if the value is infinity, 0 otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_isinff'
+--
+--     [C declaration]: @SDL_isinf@, defined at @SDL3\/SDL_stdinc.h 5207:33@
+sDL_isinf
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: double-precision floating point value.
+  -> IO BG.CInt
+sDL_isinf = hs_bindgen_9be13530739c3139
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isinff@
+foreign import ccall safe "hs_bindgen_d063ada15b71ed19"
+  hs_bindgen_d063ada15b71ed19_base
+    :: BG.CFloat
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isinff@
+hs_bindgen_d063ada15b71ed19
+  :: BG.CFloat
+  -> IO BG.CInt
+hs_bindgen_d063ada15b71ed19 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d063ada15b71ed19_base (BG.toFFIType x0))
+
+-- | Return whether the value is infinity.
+--
+--     [Returns]: non-zero if the value is infinity, 0 otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_isinf'
+--
+--     [C declaration]: @SDL_isinff@, defined at @SDL3\/SDL_stdinc.h 5221:33@
+sDL_isinff
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CInt
+sDL_isinff = hs_bindgen_d063ada15b71ed19
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isnan@
+foreign import ccall safe "hs_bindgen_bb4d9f6611f2a512"
+  hs_bindgen_bb4d9f6611f2a512_base
+    :: BG.CDouble
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isnan@
+hs_bindgen_bb4d9f6611f2a512
+  :: BG.CDouble
+  -> IO BG.CInt
+hs_bindgen_bb4d9f6611f2a512 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_bb4d9f6611f2a512_base (BG.toFFIType x0))
+
+-- | Return whether the value is NaN.
+--
+--     [Returns]: non-zero if the value is NaN, 0 otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_isnanf'
+--
+--     [C declaration]: @SDL_isnan@, defined at @SDL3\/SDL_stdinc.h 5235:33@
+sDL_isnan
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: double-precision floating point value.
+  -> IO BG.CInt
+sDL_isnan = hs_bindgen_bb4d9f6611f2a512
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isnanf@
+foreign import ccall safe "hs_bindgen_48e10ed50de37991"
+  hs_bindgen_48e10ed50de37991_base
+    :: BG.CFloat
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_isnanf@
+hs_bindgen_48e10ed50de37991
+  :: BG.CFloat
+  -> IO BG.CInt
+hs_bindgen_48e10ed50de37991 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_48e10ed50de37991_base (BG.toFFIType x0))
+
+-- | Return whether the value is NaN.
+--
+--     [Returns]: non-zero if the value is NaN, 0 otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_isnan'
+--
+--     [C declaration]: @SDL_isnanf@, defined at @SDL3\/SDL_stdinc.h 5249:33@
+sDL_isnanf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CInt
+sDL_isnanf = hs_bindgen_48e10ed50de37991
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_log@
+foreign import ccall safe "hs_bindgen_46922ccc470e92e0"
+  hs_bindgen_46922ccc470e92e0_base
+    :: BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_log@
+hs_bindgen_46922ccc470e92e0
+  :: BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_46922ccc470e92e0 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_46922ccc470e92e0_base (BG.toFFIType x0))
+
+-- | Compute the natural logarithm of @x@.
+--
+--     Domain: @0 \< x \<= INF@
+--
+--     Range: @-INF \<= y \<= INF@
+--
+--     It is an error for @x@ to be less than or equal to 0.
+--
+--     This function operates on double-precision floating point values, use SDL_logf for single-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: the natural logarithm of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_logf', 'sDL_log10', 'sDL_exp'
+--
+--     [C declaration]: @SDL_log@, defined at @SDL3\/SDL_stdinc.h 5279:36@
+sDL_log
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value. Must be greater than 0.
+  -> IO BG.CDouble
+sDL_log = hs_bindgen_46922ccc470e92e0
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_logf@
+foreign import ccall safe "hs_bindgen_7ef0b9f4239eb37e"
+  hs_bindgen_7ef0b9f4239eb37e_base
+    :: BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_logf@
+hs_bindgen_7ef0b9f4239eb37e
+  :: BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_7ef0b9f4239eb37e =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_7ef0b9f4239eb37e_base (BG.toFFIType x0))
+
+-- | Compute the natural logarithm of @x@.
+--
+--     Domain: @0 \< x \<= INF@
+--
+--     Range: @-INF \<= y \<= INF@
+--
+--     It is an error for @x@ to be less than or equal to 0.
+--
+--     This function operates on single-precision floating point values, use SDL_log for double-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: the natural logarithm of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_log', 'sDL_expf'
+--
+--     [C declaration]: @SDL_logf@, defined at @SDL3\/SDL_stdinc.h 5308:35@
+sDL_logf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value. Must be greater than 0.
+  -> IO BG.CFloat
+sDL_logf = hs_bindgen_7ef0b9f4239eb37e
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_log10@
+foreign import ccall safe "hs_bindgen_bc1ad316da1b3bbc"
+  hs_bindgen_bc1ad316da1b3bbc_base
+    :: BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_log10@
+hs_bindgen_bc1ad316da1b3bbc
+  :: BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_bc1ad316da1b3bbc =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_bc1ad316da1b3bbc_base (BG.toFFIType x0))
+
+-- | Compute the base-10 logarithm of @x@.
+--
+--     Domain: @0 \< x \<= INF@
+--
+--     Range: @-INF \<= y \<= INF@
+--
+--     It is an error for @x@ to be less than or equal to 0.
+--
+--     This function operates on double-precision floating point values, use SDL_log10f for single-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: the logarithm of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_log10f', 'sDL_log', 'sDL_pow'
+--
+--     [C declaration]: @SDL_log10@, defined at @SDL3\/SDL_stdinc.h 5338:36@
+sDL_log10
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value. Must be greater than 0.
+  -> IO BG.CDouble
+sDL_log10 = hs_bindgen_bc1ad316da1b3bbc
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_log10f@
+foreign import ccall safe "hs_bindgen_310aebbf28df3250"
+  hs_bindgen_310aebbf28df3250_base
+    :: BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_log10f@
+hs_bindgen_310aebbf28df3250
+  :: BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_310aebbf28df3250 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_310aebbf28df3250_base (BG.toFFIType x0))
+
+-- | Compute the base-10 logarithm of @x@.
+--
+--     Domain: @0 \< x \<= INF@
+--
+--     Range: @-INF \<= y \<= INF@
+--
+--     It is an error for @x@ to be less than or equal to 0.
+--
+--     This function operates on single-precision floating point values, use SDL_log10 for double-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: the logarithm of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_log10', 'sDL_logf', 'sDL_powf'
+--
+--     [C declaration]: @SDL_log10f@, defined at @SDL3\/SDL_stdinc.h 5368:35@
+sDL_log10f
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value. Must be greater than 0.
+  -> IO BG.CFloat
+sDL_log10f = hs_bindgen_310aebbf28df3250
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_modf@
+foreign import ccall safe "hs_bindgen_93a468f91c55ba99"
+  hs_bindgen_93a468f91c55ba99_base
+    :: BG.CDouble
+    -> BG.Ptr BG.Void
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_modf@
+hs_bindgen_93a468f91c55ba99
+  :: BG.CDouble
+  -> BG.Ptr BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_93a468f91c55ba99 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_93a468f91c55ba99_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Split @x@ into integer and fractional parts
+--
+--     This function operates on double-precision floating point values, use SDL_modff for single-precision floats.
+--
+--     [Returns]: the fractional part of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_modff', 'sDL_trunc', 'sDL_fmod'
+--
+--     [C declaration]: @SDL_modf@, defined at @SDL3\/SDL_stdinc.h 5388:36@
+sDL_modf
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> BG.Ptr BG.CDouble
+  -- ^
+  --
+  --           [@y@]: output pointer to store the integer part of @x@.
+  -> IO BG.CDouble
+sDL_modf = hs_bindgen_93a468f91c55ba99
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_modff@
+foreign import ccall safe "hs_bindgen_76a18e33bbbed6ee"
+  hs_bindgen_76a18e33bbbed6ee_base
+    :: BG.CFloat
+    -> BG.Ptr BG.Void
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_modff@
+hs_bindgen_76a18e33bbbed6ee
+  :: BG.CFloat
+  -> BG.Ptr BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_76a18e33bbbed6ee =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_76a18e33bbbed6ee_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Split @x@ into integer and fractional parts
+--
+--     This function operates on single-precision floating point values, use SDL_modf for double-precision floats.
+--
+--     [Returns]: the fractional part of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_modf', 'sDL_truncf', 'sDL_fmodf'
+--
+--     [C declaration]: @SDL_modff@, defined at @SDL3\/SDL_stdinc.h 5408:35@
+sDL_modff
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@y@]: output pointer to store the integer part of @x@.
+  -> IO BG.CFloat
+sDL_modff = hs_bindgen_76a18e33bbbed6ee
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_pow@
+foreign import ccall safe "hs_bindgen_b8c28ba00815fbb9"
+  hs_bindgen_b8c28ba00815fbb9_base
+    :: BG.CDouble
+    -> BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_pow@
+hs_bindgen_b8c28ba00815fbb9
+  :: BG.CDouble
+  -> BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_b8c28ba00815fbb9 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_b8c28ba00815fbb9_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Raise @x@ to the power @y@
+--
+--     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= INF@
+--
+--     Range: @-INF \<= z \<= INF@
+--
+--     If @y@ is the base of the natural logarithm (e), consider using SDL_exp instead.
+--
+--     This function operates on double-precision floating point values, use SDL_powf for single-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: @x@ raised to the power @y@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_powf', 'sDL_exp', 'sDL_log'
+--
+--     [C declaration]: @SDL_pow@, defined at @SDL3\/SDL_stdinc.h 5440:36@
+sDL_pow
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: the base.
+  -> BG.CDouble
+  -- ^
+  --
+  --           [@y@]: the exponent.
+  -> IO BG.CDouble
+sDL_pow = hs_bindgen_b8c28ba00815fbb9
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_powf@
+foreign import ccall safe "hs_bindgen_d853802a7561099f"
+  hs_bindgen_d853802a7561099f_base
+    :: BG.CFloat
+    -> BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_powf@
+hs_bindgen_d853802a7561099f
+  :: BG.CFloat
+  -> BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_d853802a7561099f =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_d853802a7561099f_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Raise @x@ to the power @y@
+--
+--     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= INF@
+--
+--     Range: @-INF \<= z \<= INF@
+--
+--     If @y@ is the base of the natural logarithm (e), consider using SDL_exp instead.
+--
+--     This function operates on single-precision floating point values, use SDL_pow for double-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: @x@ raised to the power @y@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_pow', 'sDL_expf', 'sDL_logf'
+--
+--     [C declaration]: @SDL_powf@, defined at @SDL3\/SDL_stdinc.h 5472:35@
+sDL_powf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: the base.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@y@]: the exponent.
+  -> IO BG.CFloat
+sDL_powf = hs_bindgen_d853802a7561099f
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_round@
+foreign import ccall safe "hs_bindgen_097e1eceb090a078"
+  hs_bindgen_097e1eceb090a078_base
+    :: BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_round@
+hs_bindgen_097e1eceb090a078
+  :: BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_097e1eceb090a078 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_097e1eceb090a078_base (BG.toFFIType x0))
+
+-- | Round @x@ to the nearest integer.
+--
+--     Rounds @x@ to the nearest integer. Values halfway between integers will be rounded away from zero.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @-INF \<= y \<= INF@, y integer
+--
+--     This function operates on double-precision floating point values, use SDL_roundf for single-precision floats. To get the result as an integer type, use SDL_lround.
+--
+--     [Returns]: the nearest integer to @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_roundf', @SDL_lround@, 'sDL_floor', 'sDL_ceil', 'sDL_trunc'
+--
+--     [C declaration]: @SDL_round@, defined at @SDL3\/SDL_stdinc.h 5501:36@
+sDL_round
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CDouble
+sDL_round = hs_bindgen_097e1eceb090a078
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_roundf@
+foreign import ccall safe "hs_bindgen_5b677097112f1617"
+  hs_bindgen_5b677097112f1617_base
+    :: BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_roundf@
+hs_bindgen_5b677097112f1617
+  :: BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_5b677097112f1617 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_5b677097112f1617_base (BG.toFFIType x0))
+
+-- | Round @x@ to the nearest integer.
+--
+--     Rounds @x@ to the nearest integer. Values halfway between integers will be rounded away from zero.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @-INF \<= y \<= INF@, y integer
+--
+--     This function operates on single-precision floating point values, use SDL_round for double-precision floats. To get the result as an integer type, use SDL_lroundf.
+--
+--     [Returns]: the nearest integer to @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_round', @SDL_lroundf@, 'sDL_floorf', 'sDL_ceilf', 'sDL_truncf'
+--
+--     [C declaration]: @SDL_roundf@, defined at @SDL3\/SDL_stdinc.h 5530:35@
+sDL_roundf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CFloat
+sDL_roundf = hs_bindgen_5b677097112f1617
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_scalbn@
+foreign import ccall safe "hs_bindgen_8038e0526522260c"
+  hs_bindgen_8038e0526522260c_base
+    :: BG.CDouble
+    -> BG.CInt
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_scalbn@
+hs_bindgen_8038e0526522260c
+  :: BG.CDouble
+  -> BG.CInt
+  -> IO BG.CDouble
+hs_bindgen_8038e0526522260c =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_8038e0526522260c_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Scale @x@ by an integer power of two.
+--
+--     Multiplies @x@ by the @n@ th power of the floating point radix (always 2).
+--
+--     Domain: @-INF \<= x \<= INF@, @n@ integer
+--
+--     Range: @-INF \<= y \<= INF@
+--
+--     This function operates on double-precision floating point values, use SDL_scalbnf for single-precision floats.
+--
+--     [Returns]: @x * 2^n@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_scalbnf', 'sDL_pow'
+--
+--     [C declaration]: @SDL_scalbn@, defined at @SDL3\/SDL_stdinc.h 5613:36@
+sDL_scalbn
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value to be scaled.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@n@]: integer exponent.
+  -> IO BG.CDouble
+sDL_scalbn = hs_bindgen_8038e0526522260c
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_scalbnf@
+foreign import ccall safe "hs_bindgen_fc0cb80cec8a11b0"
+  hs_bindgen_fc0cb80cec8a11b0_base
+    :: BG.CFloat
+    -> BG.CInt
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_scalbnf@
+hs_bindgen_fc0cb80cec8a11b0
+  :: BG.CFloat
+  -> BG.CInt
+  -> IO BG.CFloat
+hs_bindgen_fc0cb80cec8a11b0 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_fc0cb80cec8a11b0_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Scale @x@ by an integer power of two.
+--
+--     Multiplies @x@ by the @n@ th power of the floating point radix (always 2).
+--
+--     Domain: @-INF \<= x \<= INF@, @n@ integer
+--
+--     Range: @-INF \<= y \<= INF@
+--
+--     This function operates on single-precision floating point values, use SDL_scalbn for double-precision floats.
+--
+--     [Returns]: @x * 2^n@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_scalbn', 'sDL_powf'
+--
+--     [C declaration]: @SDL_scalbnf@, defined at @SDL3\/SDL_stdinc.h 5638:35@
+sDL_scalbnf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value to be scaled.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@n@]: integer exponent.
+  -> IO BG.CFloat
+sDL_scalbnf = hs_bindgen_fc0cb80cec8a11b0
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_sin@
+foreign import ccall safe "hs_bindgen_d062c0d717121757"
+  hs_bindgen_d062c0d717121757_base
+    :: BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_sin@
+hs_bindgen_d062c0d717121757
+  :: BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_d062c0d717121757 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d062c0d717121757_base (BG.toFFIType x0))
+
+-- | Compute the sine of @x@.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @-1 \<= y \<= 1@
+--
+--     This function operates on double-precision floating point values, use SDL_sinf for single-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: sine of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_sinf', 'sDL_asin', 'sDL_cos'
+--
+--     [C declaration]: @SDL_sin@, defined at @SDL3\/SDL_stdinc.h 5666:36@
+sDL_sin
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value, in radians.
+  -> IO BG.CDouble
+sDL_sin = hs_bindgen_d062c0d717121757
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_sinf@
+foreign import ccall safe "hs_bindgen_4ee3ee787bd19e91"
+  hs_bindgen_4ee3ee787bd19e91_base
+    :: BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_sinf@
+hs_bindgen_4ee3ee787bd19e91
+  :: BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_4ee3ee787bd19e91 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_4ee3ee787bd19e91_base (BG.toFFIType x0))
+
+-- | Compute the sine of @x@.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @-1 \<= y \<= 1@
+--
+--     This function operates on single-precision floating point values, use SDL_sin for double-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: sine of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_sin', 'sDL_asinf', 'sDL_cosf'
+--
+--     [C declaration]: @SDL_sinf@, defined at @SDL3\/SDL_stdinc.h 5694:35@
+sDL_sinf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value, in radians.
+  -> IO BG.CFloat
+sDL_sinf = hs_bindgen_4ee3ee787bd19e91
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_sqrt@
+foreign import ccall safe "hs_bindgen_45b7bf5fa33e3269"
+  hs_bindgen_45b7bf5fa33e3269_base
+    :: BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_sqrt@
+hs_bindgen_45b7bf5fa33e3269
+  :: BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_45b7bf5fa33e3269 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_45b7bf5fa33e3269_base (BG.toFFIType x0))
+
+-- | Compute the square root of @x@.
+--
+--     Domain: @0 \<= x \<= INF@
+--
+--     Range: @0 \<= y \<= INF@
+--
+--     This function operates on double-precision floating point values, use SDL_sqrtf for single-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: square root of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_sqrtf'
+--
+--     [C declaration]: @SDL_sqrt@, defined at @SDL3\/SDL_stdinc.h 5720:36@
+sDL_sqrt
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value. Must be greater than or equal to 0.
+  -> IO BG.CDouble
+sDL_sqrt = hs_bindgen_45b7bf5fa33e3269
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_sqrtf@
+foreign import ccall safe "hs_bindgen_da05b17837e5fa68"
+  hs_bindgen_da05b17837e5fa68_base
+    :: BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_sqrtf@
+hs_bindgen_da05b17837e5fa68
+  :: BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_da05b17837e5fa68 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_da05b17837e5fa68_base (BG.toFFIType x0))
+
+-- | Compute the square root of @x@.
+--
+--     Domain: @0 \<= x \<= INF@
+--
+--     Range: @0 \<= y \<= INF@
+--
+--     This function operates on single-precision floating point values, use SDL_sqrt for double-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: square root of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_sqrt'
+--
+--     [C declaration]: @SDL_sqrtf@, defined at @SDL3\/SDL_stdinc.h 5746:35@
+sDL_sqrtf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value. Must be greater than or equal to 0.
+  -> IO BG.CFloat
+sDL_sqrtf = hs_bindgen_da05b17837e5fa68
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_tan@
+foreign import ccall safe "hs_bindgen_8e3c4624ada8d754"
+  hs_bindgen_8e3c4624ada8d754_base
+    :: BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_tan@
+hs_bindgen_8e3c4624ada8d754
+  :: BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_8e3c4624ada8d754 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_8e3c4624ada8d754_base (BG.toFFIType x0))
+
+-- | Compute the tangent of @x@.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @-INF \<= y \<= INF@
+--
+--     This function operates on double-precision floating point values, use SDL_tanf for single-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: tangent of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_tanf', 'sDL_sin', 'sDL_cos', 'sDL_atan', 'sDL_atan2'
+--
+--     [C declaration]: @SDL_tan@, defined at @SDL3\/SDL_stdinc.h 5776:36@
+sDL_tan
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value, in radians.
+  -> IO BG.CDouble
+sDL_tan = hs_bindgen_8e3c4624ada8d754
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_tanf@
+foreign import ccall safe "hs_bindgen_b4a5a33f270aeb8d"
+  hs_bindgen_b4a5a33f270aeb8d_base
+    :: BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_tanf@
+hs_bindgen_b4a5a33f270aeb8d
+  :: BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_b4a5a33f270aeb8d =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_b4a5a33f270aeb8d_base (BG.toFFIType x0))
+
+-- | Compute the tangent of @x@.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @-INF \<= y \<= INF@
+--
+--     This function operates on single-precision floating point values, use SDL_tan for double-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: tangent of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_tan', 'sDL_sinf', 'sDL_cosf', 'sDL_atanf', 'sDL_atan2f'
+--
+--     [C declaration]: @SDL_tanf@, defined at @SDL3\/SDL_stdinc.h 5806:35@
+sDL_tanf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value, in radians.
+  -> IO BG.CFloat
+sDL_tanf = hs_bindgen_b4a5a33f270aeb8d
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_iconv_open@
+foreign import ccall safe "hs_bindgen_4c58e728caad9aa3"
+  hs_bindgen_4c58e728caad9aa3_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_iconv_open@
+hs_bindgen_4c58e728caad9aa3
+  :: PtrConst.PtrConst BG.CChar
+  -> PtrConst.PtrConst BG.CChar
+  -> IO SDL_iconv_t
+hs_bindgen_4c58e728caad9aa3 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_4c58e728caad9aa3_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | This function allocates a context for the specified character set conversion.
+--
+--     [Returns]: a handle that must be freed with SDL_iconv_close, or SDL_ICONV_ERROR on failure.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_iconv', 'sDL_iconv_close', 'sDL_iconv_string'
+--
+--     [C declaration]: @SDL_iconv_open@, defined at @SDL3\/SDL_stdinc.h 5834:41@
+sDL_iconv_open
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@tocode@]: The target character encoding, must not be NULL.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@fromcode@]: The source character encoding, must not be NULL.
+  -> IO SDL_iconv_t
+sDL_iconv_open = hs_bindgen_4c58e728caad9aa3
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_iconv_close@
+foreign import ccall safe "hs_bindgen_85fcb2de02d7791f"
+  hs_bindgen_85fcb2de02d7791f_base
+    :: BG.Ptr BG.Void
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_iconv_close@
+hs_bindgen_85fcb2de02d7791f
+  :: SDL_iconv_t
+  -> IO BG.CInt
+hs_bindgen_85fcb2de02d7791f =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_85fcb2de02d7791f_base (BG.toFFIType x0))
+
+-- | This function frees a context used for character set conversion.
+--
+--     [Returns]: 0 on success, or -1 on failure.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_iconv', 'sDL_iconv_open', 'sDL_iconv_string'
+--
+--     [C declaration]: @SDL_iconv_close@, defined at @SDL3\/SDL_stdinc.h 5851:33@
+sDL_iconv_close
+  :: SDL_iconv_t
+  -- ^
+  --
+  --           [@cd@]: The character set conversion handle.
+  -> IO BG.CInt
+sDL_iconv_close = hs_bindgen_85fcb2de02d7791f
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_iconv@
+foreign import ccall safe "hs_bindgen_73663c44fcaa8f9d"
+  hs_bindgen_73663c44fcaa8f9d_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO HsBindgen.Runtime.LibC.CSize
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_iconv@
+hs_bindgen_73663c44fcaa8f9d
+  :: SDL_iconv_t
+  -> BG.Ptr (PtrConst.PtrConst BG.CChar)
+  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
+  -> BG.Ptr (BG.Ptr BG.CChar)
+  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
+  -> IO HsBindgen.Runtime.LibC.CSize
+hs_bindgen_73663c44fcaa8f9d =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_73663c44fcaa8f9d_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
+
+-- | This function converts text between encodings, reading from and writing to a buffer.
+--
+--     It returns the number of successful conversions on success. On error, SDL_ICONV_E2BIG is returned when the output buffer is too small, or SDL_ICONV_EILSEQ is returned when an invalid input sequence is encountered, or SDL_ICONV_EINVAL is returned when an incomplete input sequence is encountered.
+--
+--     On exit:
+--
+--     * inbuf will point to the beginning of the next multibyte sequence. On error, this is the location of the problematic input sequence. On success, this is the end of the input sequence.
+--
+--     * inbytesleft will be set to the number of bytes left to convert, which will be 0 on success.
+--
+--     * outbuf will point to the location where to store the next output byte.
+--
+--     * outbytesleft will be set to the number of bytes left in the output buffer.
+--
+--     [Returns]: the number of conversions on success, or a negative error code.
+--
+--     [Thread safety]: Do not use the same 'SDL_iconv_t' from two threads at once.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_iconv_open', 'sDL_iconv_close', 'sDL_iconv_string'
+--
+--     [C declaration]: @SDL_iconv@, defined at @SDL3\/SDL_stdinc.h 5891:36@
+sDL_iconv
+  :: SDL_iconv_t
+  -- ^
+  --
+  --           [@cd@]: The character set conversion context, created in @SDL_iconv_open()@.
+  -> BG.Ptr (PtrConst.PtrConst BG.CChar)
+  -- ^
+  --
+  --           [@inbuf@]: Address of variable that points to the first character of the input sequence.
+  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@inbytesleft@]: The number of bytes in the input buffer.
+  -> BG.Ptr (BG.Ptr BG.CChar)
+  -- ^
+  --
+  --           [@outbuf@]: Address of variable that points to the output buffer.
+  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@outbytesleft@]: The number of bytes in the output buffer.
+  -> IO HsBindgen.Runtime.LibC.CSize
+sDL_iconv = hs_bindgen_73663c44fcaa8f9d
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_iconv_string@
+foreign import ccall safe "hs_bindgen_066c0e98a41d1c6b"
+  hs_bindgen_066c0e98a41d1c6b_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_iconv_string@
+hs_bindgen_066c0e98a41d1c6b
+  :: PtrConst.PtrConst BG.CChar
+  -> PtrConst.PtrConst BG.CChar
+  -> PtrConst.PtrConst BG.CChar
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_066c0e98a41d1c6b =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_066c0e98a41d1c6b_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Helper function to convert a string\'s encoding in one call.
+--
+--     This function converts a buffer or string between encodings in one pass.
+--
+--     The string does not need to be NULL-terminated; this function operates on the number of bytes specified in @inbytesleft@ whether there is a NULL character anywhere in the buffer.
+--
+--     The returned string is owned by the caller, and should be passed to SDL_free when no longer needed.
+--
+--     [Returns]: a new string, converted to the new encoding, or NULL on error.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_iconv_open', 'sDL_iconv_close', 'sDL_iconv'
+--
+--     [C declaration]: @SDL_iconv_string@, defined at @SDL3\/SDL_stdinc.h 5928:36@
+sDL_iconv_string
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@tocode@]: the character encoding of the output string. Examples are \"UTF-8\", \"UCS-4\", etc.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@fromcode@]: the character encoding of data in @inbuf@.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@inbuf@]: the string to convert to a different encoding.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@inbytesleft@]: the size of the input string /in bytes/.
+  -> IO (BG.Ptr BG.CChar)
+sDL_iconv_string = hs_bindgen_066c0e98a41d1c6b
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_size_mul_check_overflow_builtin@
+foreign import ccall safe "hs_bindgen_cb7ffceaa134d628"
+  hs_bindgen_cb7ffceaa134d628_base
+    :: HsBindgen.Runtime.LibC.CSize
+    -> HsBindgen.Runtime.LibC.CSize
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_size_mul_check_overflow_builtin@
+hs_bindgen_cb7ffceaa134d628
+  :: HsBindgen.Runtime.LibC.CSize
+  -> HsBindgen.Runtime.LibC.CSize
+  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
+  -> IO BG.CBool
+hs_bindgen_cb7ffceaa134d628 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_cb7ffceaa134d628_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | [C declaration]: @SDL_size_mul_check_overflow_builtin@, defined at @SDL3\/SDL_stdinc.h 6109:23@
+sDL_size_mul_check_overflow_builtin
+  :: HsBindgen.Runtime.LibC.CSize
+  -- ^ [C declaration]: @a@
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^ [C declaration]: @b@
+  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
+  -- ^ [C declaration]: @ret@
+  -> IO BG.CBool
+sDL_size_mul_check_overflow_builtin =
+  hs_bindgen_cb7ffceaa134d628
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_size_add_check_overflow_builtin@
+foreign import ccall safe "hs_bindgen_ca88dcdcdddd2954"
+  hs_bindgen_ca88dcdcdddd2954_base
+    :: HsBindgen.Runtime.LibC.CSize
+    -> HsBindgen.Runtime.LibC.CSize
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Safe_SDL_size_add_check_overflow_builtin@
+hs_bindgen_ca88dcdcdddd2954
+  :: HsBindgen.Runtime.LibC.CSize
+  -> HsBindgen.Runtime.LibC.CSize
+  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
+  -> IO BG.CBool
+hs_bindgen_ca88dcdcdddd2954 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_ca88dcdcdddd2954_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | [C declaration]: @SDL_size_add_check_overflow_builtin@, defined at @SDL3\/SDL_stdinc.h 6147:23@
 sDL_size_add_check_overflow_builtin
diff --git a/src/SDL3/Sys/Bindgen/Stdinc/Unsafe.hs b/src/SDL3/Sys/Bindgen/Stdinc/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Stdinc/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Stdinc/Unsafe.hs
@@ -1,7418 +1,7991 @@
-{-# LANGUAGE TemplateHaskell #-}
-{-# LANGUAGE NoFieldSelectors #-}
-{-# OPTIONS_HADDOCK prune #-}
-
-module SDL3.Sys.Bindgen.Stdinc.Unsafe (
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_malloc,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_calloc,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_realloc,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_free,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_GetOriginalMemoryFunctions,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_GetMemoryFunctions,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_SetMemoryFunctions,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_aligned_alloc,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_aligned_free,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_GetNumAllocations,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_GetEnvironment,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_CreateEnvironment,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_GetEnvironmentVariable,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_GetEnvironmentVariables,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_SetEnvironmentVariable,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_UnsetEnvironmentVariable,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_DestroyEnvironment,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_getenv,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_getenv_unsafe,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_setenv_unsafe,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_unsetenv_unsafe,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_qsort,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_bsearch,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_qsort_r,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_bsearch_r,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_abs,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_isalpha,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_isalnum,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_isblank,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_iscntrl,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_isdigit,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_isxdigit,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_ispunct,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_isspace,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_isupper,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_islower,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_isprint,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_isgraph,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_toupper,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_tolower,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_crc16,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_crc32,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_murmur3_32,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_memset4,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_memcmp,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_wcslen,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_wcsnlen,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_wcslcpy,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_wcslcat,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_wcsdup,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_wcsstr,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_wcsnstr,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_wcscmp,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_wcsncmp,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_wcscasecmp,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_wcsncasecmp,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strlen,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strnlen,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strlcpy,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_utf8strlcpy,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strlcat,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strdup,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strndup,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strrev,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strupr,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strlwr,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strchr,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strrchr,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strstr,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strnstr,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strcasestr,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strtok_r,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_utf8strlen,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_utf8strnlen,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_itoa,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_uitoa,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_lltoa,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_ulltoa,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_atoi,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_atof,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strtoll,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strtoull,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strtod,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strcmp,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strncmp,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strcasecmp,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strncasecmp,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strpbrk,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_StepUTF8,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_StepBackUTF8,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_UCS4ToUTF8,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_srand,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_rand,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_randf,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_rand_bits,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_rand_r,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_randf_r,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_rand_bits_r,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_acos,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_acosf,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_asin,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_asinf,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_atan,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_atanf,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_atan2,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_atan2f,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_ceil,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_ceilf,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_copysign,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_copysignf,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_cos,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_cosf,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_exp,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_expf,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_fabs,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_fabsf,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_floor,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_floorf,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_trunc,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_truncf,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_fmod,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_fmodf,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_isinf,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_isinff,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_isnan,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_isnanf,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_log,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_logf,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_log10,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_log10f,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_modf,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_modff,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_pow,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_powf,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_round,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_roundf,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_scalbn,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_scalbnf,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_sin,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_sinf,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_sqrt,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_sqrtf,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_tan,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_tanf,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_iconv_open,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_iconv_close,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_iconv,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_iconv_string,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_size_mul_check_overflow_builtin,
-  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_size_add_check_overflow_builtin,
-)
-where
-
-import HsBindgen.Runtime.LibC qualified
-import HsBindgen.Runtime.PtrConst qualified as PtrConst
-import HsBindgen.Runtime.Support qualified as BG
-import HsBindgen.Runtime.Support.CAPI qualified
-import SDL3.Sys.Bindgen.Stdinc
-
-$( HsBindgen.Runtime.Support.CAPI.addCSource
-     ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_stdinc.h>"
-         , "void *hs_bindgen_5bd8a699d72971c5 ("
-         , "  size_t arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_malloc)(arg1);"
-         , "}"
-         , "void *hs_bindgen_08746ff05ca3003c ("
-         , "  size_t arg1,"
-         , "  size_t arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_calloc)(arg1, arg2);"
-         , "}"
-         , "void *hs_bindgen_0730e7e13356c626 ("
-         , "  void *arg1,"
-         , "  size_t arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_realloc)(arg1, arg2);"
-         , "}"
-         , "void hs_bindgen_22f31e5d111da6c1 ("
-         , "  void *arg1"
-         , ")"
-         , "{"
-         , "  (SDL_free)(arg1);"
-         , "}"
-         , "void hs_bindgen_f517f867f38f6071 ("
-         , "  SDL_malloc_func *arg1,"
-         , "  SDL_calloc_func *arg2,"
-         , "  SDL_realloc_func *arg3,"
-         , "  SDL_free_func *arg4"
-         , ")"
-         , "{"
-         , "  (SDL_GetOriginalMemoryFunctions)(arg1, arg2, arg3, arg4);"
-         , "}"
-         , "void hs_bindgen_25189a0da3d426a6 ("
-         , "  SDL_malloc_func *arg1,"
-         , "  SDL_calloc_func *arg2,"
-         , "  SDL_realloc_func *arg3,"
-         , "  SDL_free_func *arg4"
-         , ")"
-         , "{"
-         , "  (SDL_GetMemoryFunctions)(arg1, arg2, arg3, arg4);"
-         , "}"
-         , "_Bool hs_bindgen_226182971f75d2c0 ("
-         , "  SDL_malloc_func arg1,"
-         , "  SDL_calloc_func arg2,"
-         , "  SDL_realloc_func arg3,"
-         , "  SDL_free_func arg4"
-         , ")"
-         , "{"
-         , "  return (SDL_SetMemoryFunctions)(arg1, arg2, arg3, arg4);"
-         , "}"
-         , "void *hs_bindgen_9900ed39a18caec5 ("
-         , "  size_t arg1,"
-         , "  size_t arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_aligned_alloc)(arg1, arg2);"
-         , "}"
-         , "void hs_bindgen_2bf7e303c1a730bf ("
-         , "  void *arg1"
-         , ")"
-         , "{"
-         , "  (SDL_aligned_free)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_4528828ea69b3f8b (void)"
-         , "{"
-         , "  return (SDL_GetNumAllocations)();"
-         , "}"
-         , "SDL_Environment *hs_bindgen_e1f4a04ee814291a (void)"
-         , "{"
-         , "  return (SDL_GetEnvironment)();"
-         , "}"
-         , "SDL_Environment *hs_bindgen_e85a9062a561d535 ("
-         , "  _Bool arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_CreateEnvironment)(arg1);"
-         , "}"
-         , "char const *hs_bindgen_5beeb06044229d5f ("
-         , "  SDL_Environment *arg1,"
-         , "  char const *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_GetEnvironmentVariable)(arg1, arg2);"
-         , "}"
-         , "char **hs_bindgen_b31ecc5c3d715978 ("
-         , "  SDL_Environment *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_GetEnvironmentVariables)(arg1);"
-         , "}"
-         , "_Bool hs_bindgen_a9acd1c932154b24 ("
-         , "  SDL_Environment *arg1,"
-         , "  char const *arg2,"
-         , "  char const *arg3,"
-         , "  _Bool arg4"
-         , ")"
-         , "{"
-         , "  return (SDL_SetEnvironmentVariable)(arg1, arg2, arg3, arg4);"
-         , "}"
-         , "_Bool hs_bindgen_c64095b9c616bfe0 ("
-         , "  SDL_Environment *arg1,"
-         , "  char const *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_UnsetEnvironmentVariable)(arg1, arg2);"
-         , "}"
-         , "void hs_bindgen_099a6ae1ccd5370b ("
-         , "  SDL_Environment *arg1"
-         , ")"
-         , "{"
-         , "  (SDL_DestroyEnvironment)(arg1);"
-         , "}"
-         , "char const *hs_bindgen_bf38503a85842347 ("
-         , "  char const *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_getenv)(arg1);"
-         , "}"
-         , "char const *hs_bindgen_8bb86791a34eff6a ("
-         , "  char const *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_getenv_unsafe)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_07289159390730ef ("
-         , "  char const *arg1,"
-         , "  char const *arg2,"
-         , "  signed int arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_setenv_unsafe)(arg1, arg2, arg3);"
-         , "}"
-         , "signed int hs_bindgen_8eb1656d4bfcd1be ("
-         , "  char const *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_unsetenv_unsafe)(arg1);"
-         , "}"
-         , "void hs_bindgen_95192c7f785c4c45 ("
-         , "  void *arg1,"
-         , "  size_t arg2,"
-         , "  size_t arg3,"
-         , "  SDL_CompareCallback arg4"
-         , ")"
-         , "{"
-         , "  (SDL_qsort)(arg1, arg2, arg3, arg4);"
-         , "}"
-         , "void *hs_bindgen_e3d85c2fcc0e0182 ("
-         , "  void const *arg1,"
-         , "  void const *arg2,"
-         , "  size_t arg3,"
-         , "  size_t arg4,"
-         , "  SDL_CompareCallback arg5"
-         , ")"
-         , "{"
-         , "  return (SDL_bsearch)(arg1, arg2, arg3, arg4, arg5);"
-         , "}"
-         , "void hs_bindgen_7a30995c664569a4 ("
-         , "  void *arg1,"
-         , "  size_t arg2,"
-         , "  size_t arg3,"
-         , "  SDL_CompareCallback_r arg4,"
-         , "  void *arg5"
-         , ")"
-         , "{"
-         , "  (SDL_qsort_r)(arg1, arg2, arg3, arg4, arg5);"
-         , "}"
-         , "void *hs_bindgen_57399b9b8aa9f8f0 ("
-         , "  void const *arg1,"
-         , "  void const *arg2,"
-         , "  size_t arg3,"
-         , "  size_t arg4,"
-         , "  SDL_CompareCallback_r arg5,"
-         , "  void *arg6"
-         , ")"
-         , "{"
-         , "  return (SDL_bsearch_r)(arg1, arg2, arg3, arg4, arg5, arg6);"
-         , "}"
-         , "signed int hs_bindgen_a928603d6470ca50 ("
-         , "  signed int arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_abs)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_89185a009225cfaf ("
-         , "  signed int arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_isalpha)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_1ab6c2f3868de0bb ("
-         , "  signed int arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_isalnum)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_3c28b4a4af971951 ("
-         , "  signed int arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_isblank)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_13a0eb9bfa9faec7 ("
-         , "  signed int arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_iscntrl)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_9fae2f93c08cfbf0 ("
-         , "  signed int arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_isdigit)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_0f033c6150a762a3 ("
-         , "  signed int arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_isxdigit)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_9b835961c1753aa6 ("
-         , "  signed int arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_ispunct)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_37bfc6e46aee6fcc ("
-         , "  signed int arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_isspace)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_6a23210549f82553 ("
-         , "  signed int arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_isupper)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_4ef887be849a9002 ("
-         , "  signed int arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_islower)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_258633f7820b5c3c ("
-         , "  signed int arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_isprint)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_64e7a8597c7c9710 ("
-         , "  signed int arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_isgraph)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_c1347761ea69159d ("
-         , "  signed int arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_toupper)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_b3fecd41676fe4be ("
-         , "  signed int arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_tolower)(arg1);"
-         , "}"
-         , "Uint16 hs_bindgen_35ff41be4e4da9d1 ("
-         , "  Uint16 arg1,"
-         , "  void const *arg2,"
-         , "  size_t arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_crc16)(arg1, arg2, arg3);"
-         , "}"
-         , "Uint32 hs_bindgen_6755f946704473dc ("
-         , "  Uint32 arg1,"
-         , "  void const *arg2,"
-         , "  size_t arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_crc32)(arg1, arg2, arg3);"
-         , "}"
-         , "Uint32 hs_bindgen_4538e03ee60f6976 ("
-         , "  void const *arg1,"
-         , "  size_t arg2,"
-         , "  Uint32 arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_murmur3_32)(arg1, arg2, arg3);"
-         , "}"
-         , "void *hs_bindgen_006ad9913290aee0 ("
-         , "  void *arg1,"
-         , "  Uint32 arg2,"
-         , "  size_t arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_memset4)(arg1, arg2, arg3);"
-         , "}"
-         , "signed int hs_bindgen_f8312f3094e9811f ("
-         , "  void const *arg1,"
-         , "  void const *arg2,"
-         , "  size_t arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_memcmp)(arg1, arg2, arg3);"
-         , "}"
-         , "size_t hs_bindgen_7819cc3f05f6e767 ("
-         , "  wchar_t const *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_wcslen)(arg1);"
-         , "}"
-         , "size_t hs_bindgen_4d4c9962d27e8c57 ("
-         , "  wchar_t const *arg1,"
-         , "  size_t arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_wcsnlen)(arg1, arg2);"
-         , "}"
-         , "size_t hs_bindgen_6a63636fffe52a27 ("
-         , "  wchar_t *arg1,"
-         , "  wchar_t const *arg2,"
-         , "  size_t arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_wcslcpy)(arg1, arg2, arg3);"
-         , "}"
-         , "size_t hs_bindgen_ae63311931250a61 ("
-         , "  wchar_t *arg1,"
-         , "  wchar_t const *arg2,"
-         , "  size_t arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_wcslcat)(arg1, arg2, arg3);"
-         , "}"
-         , "wchar_t *hs_bindgen_0c56a99a680dde86 ("
-         , "  wchar_t const *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_wcsdup)(arg1);"
-         , "}"
-         , "wchar_t *hs_bindgen_0e15f64725300a1d ("
-         , "  wchar_t const *arg1,"
-         , "  wchar_t const *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_wcsstr)(arg1, arg2);"
-         , "}"
-         , "wchar_t *hs_bindgen_ed81408c495114ac ("
-         , "  wchar_t const *arg1,"
-         , "  wchar_t const *arg2,"
-         , "  size_t arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_wcsnstr)(arg1, arg2, arg3);"
-         , "}"
-         , "signed int hs_bindgen_523128c66baf772a ("
-         , "  wchar_t const *arg1,"
-         , "  wchar_t const *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_wcscmp)(arg1, arg2);"
-         , "}"
-         , "signed int hs_bindgen_ae16252c87514b75 ("
-         , "  wchar_t const *arg1,"
-         , "  wchar_t const *arg2,"
-         , "  size_t arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_wcsncmp)(arg1, arg2, arg3);"
-         , "}"
-         , "signed int hs_bindgen_2a1f0e71a040879b ("
-         , "  wchar_t const *arg1,"
-         , "  wchar_t const *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_wcscasecmp)(arg1, arg2);"
-         , "}"
-         , "signed int hs_bindgen_1c13738568f12d1d ("
-         , "  wchar_t const *arg1,"
-         , "  wchar_t const *arg2,"
-         , "  size_t arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_wcsncasecmp)(arg1, arg2, arg3);"
-         , "}"
-         , "size_t hs_bindgen_59a6bfea24e96b34 ("
-         , "  char const *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_strlen)(arg1);"
-         , "}"
-         , "size_t hs_bindgen_c8b4424317df84e9 ("
-         , "  char const *arg1,"
-         , "  size_t arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_strnlen)(arg1, arg2);"
-         , "}"
-         , "size_t hs_bindgen_e26f240b36c1f7f4 ("
-         , "  char *arg1,"
-         , "  char const *arg2,"
-         , "  size_t arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_strlcpy)(arg1, arg2, arg3);"
-         , "}"
-         , "size_t hs_bindgen_a6570a6c65177caf ("
-         , "  char *arg1,"
-         , "  char const *arg2,"
-         , "  size_t arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_utf8strlcpy)(arg1, arg2, arg3);"
-         , "}"
-         , "size_t hs_bindgen_6776d8c4c9824b69 ("
-         , "  char *arg1,"
-         , "  char const *arg2,"
-         , "  size_t arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_strlcat)(arg1, arg2, arg3);"
-         , "}"
-         , "char *hs_bindgen_642470a5439764a1 ("
-         , "  char const *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_strdup)(arg1);"
-         , "}"
-         , "char *hs_bindgen_2d11135d4a4cd09d ("
-         , "  char const *arg1,"
-         , "  size_t arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_strndup)(arg1, arg2);"
-         , "}"
-         , "char *hs_bindgen_3e344b4dbd1fefd5 ("
-         , "  char *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_strrev)(arg1);"
-         , "}"
-         , "char *hs_bindgen_2a6a16beae86f690 ("
-         , "  char *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_strupr)(arg1);"
-         , "}"
-         , "char *hs_bindgen_d398f95cc6b941fb ("
-         , "  char *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_strlwr)(arg1);"
-         , "}"
-         , "char *hs_bindgen_ce84b72a37d721aa ("
-         , "  char const *arg1,"
-         , "  signed int arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_strchr)(arg1, arg2);"
-         , "}"
-         , "char *hs_bindgen_42f6725f3eb6c437 ("
-         , "  char const *arg1,"
-         , "  signed int arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_strrchr)(arg1, arg2);"
-         , "}"
-         , "char *hs_bindgen_4dd450b42cd71d7b ("
-         , "  char const *arg1,"
-         , "  char const *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_strstr)(arg1, arg2);"
-         , "}"
-         , "char *hs_bindgen_84a9d060fbe6dadf ("
-         , "  char const *arg1,"
-         , "  char const *arg2,"
-         , "  size_t arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_strnstr)(arg1, arg2, arg3);"
-         , "}"
-         , "char *hs_bindgen_81f801141b3ad731 ("
-         , "  char const *arg1,"
-         , "  char const *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_strcasestr)(arg1, arg2);"
-         , "}"
-         , "char *hs_bindgen_409faece247c319b ("
-         , "  char *arg1,"
-         , "  char const *arg2,"
-         , "  char **arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_strtok_r)(arg1, arg2, arg3);"
-         , "}"
-         , "size_t hs_bindgen_36470941402cdd53 ("
-         , "  char const *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_utf8strlen)(arg1);"
-         , "}"
-         , "size_t hs_bindgen_479082db51ecf46b ("
-         , "  char const *arg1,"
-         , "  size_t arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_utf8strnlen)(arg1, arg2);"
-         , "}"
-         , "char *hs_bindgen_c69b2ef36677f953 ("
-         , "  signed int arg1,"
-         , "  char *arg2,"
-         , "  signed int arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_itoa)(arg1, arg2, arg3);"
-         , "}"
-         , "char *hs_bindgen_dbe69ee767be00c8 ("
-         , "  unsigned int arg1,"
-         , "  char *arg2,"
-         , "  signed int arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_uitoa)(arg1, arg2, arg3);"
-         , "}"
-         , "char *hs_bindgen_94ca108dca07ec6f ("
-         , "  signed long long arg1,"
-         , "  char *arg2,"
-         , "  signed int arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_lltoa)(arg1, arg2, arg3);"
-         , "}"
-         , "char *hs_bindgen_d122b88ccc45fe33 ("
-         , "  unsigned long long arg1,"
-         , "  char *arg2,"
-         , "  signed int arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_ulltoa)(arg1, arg2, arg3);"
-         , "}"
-         , "signed int hs_bindgen_ca9f4297368b5437 ("
-         , "  char const *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_atoi)(arg1);"
-         , "}"
-         , "double hs_bindgen_81f2fcbff595d766 ("
-         , "  char const *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_atof)(arg1);"
-         , "}"
-         , "signed long long hs_bindgen_29424912342d9a55 ("
-         , "  char const *arg1,"
-         , "  char **arg2,"
-         , "  signed int arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_strtoll)(arg1, arg2, arg3);"
-         , "}"
-         , "unsigned long long hs_bindgen_fe908f5a8d183e7b ("
-         , "  char const *arg1,"
-         , "  char **arg2,"
-         , "  signed int arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_strtoull)(arg1, arg2, arg3);"
-         , "}"
-         , "double hs_bindgen_93115f1648467a21 ("
-         , "  char const *arg1,"
-         , "  char **arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_strtod)(arg1, arg2);"
-         , "}"
-         , "signed int hs_bindgen_1165e1ac637a910f ("
-         , "  char const *arg1,"
-         , "  char const *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_strcmp)(arg1, arg2);"
-         , "}"
-         , "signed int hs_bindgen_6286679cc5d88e95 ("
-         , "  char const *arg1,"
-         , "  char const *arg2,"
-         , "  size_t arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_strncmp)(arg1, arg2, arg3);"
-         , "}"
-         , "signed int hs_bindgen_592440e0cc89a66c ("
-         , "  char const *arg1,"
-         , "  char const *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_strcasecmp)(arg1, arg2);"
-         , "}"
-         , "signed int hs_bindgen_9a7486257c6bf068 ("
-         , "  char const *arg1,"
-         , "  char const *arg2,"
-         , "  size_t arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_strncasecmp)(arg1, arg2, arg3);"
-         , "}"
-         , "char *hs_bindgen_e53784dcceef6c88 ("
-         , "  char const *arg1,"
-         , "  char const *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_strpbrk)(arg1, arg2);"
-         , "}"
-         , "Uint32 hs_bindgen_5010b6d322eef729 ("
-         , "  char const **arg1,"
-         , "  size_t *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_StepUTF8)(arg1, arg2);"
-         , "}"
-         , "Uint32 hs_bindgen_e9d45c14c965c799 ("
-         , "  char const *arg1,"
-         , "  char const **arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_StepBackUTF8)(arg1, arg2);"
-         , "}"
-         , "char *hs_bindgen_2621d8f742eba582 ("
-         , "  Uint32 arg1,"
-         , "  char *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_UCS4ToUTF8)(arg1, arg2);"
-         , "}"
-         , "void hs_bindgen_1620e07051837ddb ("
-         , "  Uint64 arg1"
-         , ")"
-         , "{"
-         , "  (SDL_srand)(arg1);"
-         , "}"
-         , "Sint32 hs_bindgen_bb32712cf4e3959c ("
-         , "  Sint32 arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_rand)(arg1);"
-         , "}"
-         , "float hs_bindgen_4354197498dc7635 (void)"
-         , "{"
-         , "  return (SDL_randf)();"
-         , "}"
-         , "Uint32 hs_bindgen_eed752851bd8b3e2 (void)"
-         , "{"
-         , "  return (SDL_rand_bits)();"
-         , "}"
-         , "Sint32 hs_bindgen_e31222be551ae9d1 ("
-         , "  Uint64 *arg1,"
-         , "  Sint32 arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_rand_r)(arg1, arg2);"
-         , "}"
-         , "float hs_bindgen_b728fa521e1f33ba ("
-         , "  Uint64 *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_randf_r)(arg1);"
-         , "}"
-         , "Uint32 hs_bindgen_1779b3d1ac6c6ca0 ("
-         , "  Uint64 *arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_rand_bits_r)(arg1);"
-         , "}"
-         , "double hs_bindgen_77d2b09de2f907bb ("
-         , "  double arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_acos)(arg1);"
-         , "}"
-         , "float hs_bindgen_a7dfe79fdc884d97 ("
-         , "  float arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_acosf)(arg1);"
-         , "}"
-         , "double hs_bindgen_c1c2c5b2424934f7 ("
-         , "  double arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_asin)(arg1);"
-         , "}"
-         , "float hs_bindgen_c0162f35a592c4d6 ("
-         , "  float arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_asinf)(arg1);"
-         , "}"
-         , "double hs_bindgen_62e948cecf885b31 ("
-         , "  double arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_atan)(arg1);"
-         , "}"
-         , "float hs_bindgen_429e4b987b465ff9 ("
-         , "  float arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_atanf)(arg1);"
-         , "}"
-         , "double hs_bindgen_dd25876f2db3e27f ("
-         , "  double arg1,"
-         , "  double arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_atan2)(arg1, arg2);"
-         , "}"
-         , "float hs_bindgen_8131501831457d98 ("
-         , "  float arg1,"
-         , "  float arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_atan2f)(arg1, arg2);"
-         , "}"
-         , "double hs_bindgen_6654a059aee78106 ("
-         , "  double arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_ceil)(arg1);"
-         , "}"
-         , "float hs_bindgen_ad644f683da406f9 ("
-         , "  float arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_ceilf)(arg1);"
-         , "}"
-         , "double hs_bindgen_8091ddede7c04cbc ("
-         , "  double arg1,"
-         , "  double arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_copysign)(arg1, arg2);"
-         , "}"
-         , "float hs_bindgen_b3f4ceb6b2fe20ee ("
-         , "  float arg1,"
-         , "  float arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_copysignf)(arg1, arg2);"
-         , "}"
-         , "double hs_bindgen_a3469aec056551e2 ("
-         , "  double arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_cos)(arg1);"
-         , "}"
-         , "float hs_bindgen_905fd229e6d8b35e ("
-         , "  float arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_cosf)(arg1);"
-         , "}"
-         , "double hs_bindgen_1512e406037d12ac ("
-         , "  double arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_exp)(arg1);"
-         , "}"
-         , "float hs_bindgen_d3dd134efe3abfff ("
-         , "  float arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_expf)(arg1);"
-         , "}"
-         , "double hs_bindgen_52ba4ac175596d0a ("
-         , "  double arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_fabs)(arg1);"
-         , "}"
-         , "float hs_bindgen_184b19c145435e41 ("
-         , "  float arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_fabsf)(arg1);"
-         , "}"
-         , "double hs_bindgen_f490c8eee1698a66 ("
-         , "  double arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_floor)(arg1);"
-         , "}"
-         , "float hs_bindgen_2f0b4572dde60cf4 ("
-         , "  float arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_floorf)(arg1);"
-         , "}"
-         , "double hs_bindgen_0babb20dade49b7a ("
-         , "  double arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_trunc)(arg1);"
-         , "}"
-         , "float hs_bindgen_90bf99d352a2662e ("
-         , "  float arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_truncf)(arg1);"
-         , "}"
-         , "double hs_bindgen_01e3fd06ce04c71f ("
-         , "  double arg1,"
-         , "  double arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_fmod)(arg1, arg2);"
-         , "}"
-         , "float hs_bindgen_d31c39dbd23d1312 ("
-         , "  float arg1,"
-         , "  float arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_fmodf)(arg1, arg2);"
-         , "}"
-         , "signed int hs_bindgen_a7c939d2e78d66af ("
-         , "  double arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_isinf)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_dd1421aaa48b6683 ("
-         , "  float arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_isinff)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_8b37e78060d7faba ("
-         , "  double arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_isnan)(arg1);"
-         , "}"
-         , "signed int hs_bindgen_a7fc9d37cba1e7fb ("
-         , "  float arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_isnanf)(arg1);"
-         , "}"
-         , "double hs_bindgen_e20d665d8e9d64dc ("
-         , "  double arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_log)(arg1);"
-         , "}"
-         , "float hs_bindgen_7e096c5f793dcab0 ("
-         , "  float arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_logf)(arg1);"
-         , "}"
-         , "double hs_bindgen_923087147ca0e620 ("
-         , "  double arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_log10)(arg1);"
-         , "}"
-         , "float hs_bindgen_bfd8d2db495dd53c ("
-         , "  float arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_log10f)(arg1);"
-         , "}"
-         , "double hs_bindgen_b899f8ade3afe831 ("
-         , "  double arg1,"
-         , "  double *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_modf)(arg1, arg2);"
-         , "}"
-         , "float hs_bindgen_6ff7524556040016 ("
-         , "  float arg1,"
-         , "  float *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_modff)(arg1, arg2);"
-         , "}"
-         , "double hs_bindgen_fd54b81ef06bf15c ("
-         , "  double arg1,"
-         , "  double arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_pow)(arg1, arg2);"
-         , "}"
-         , "float hs_bindgen_e6e1cafad3d1ca48 ("
-         , "  float arg1,"
-         , "  float arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_powf)(arg1, arg2);"
-         , "}"
-         , "double hs_bindgen_263d784275f69beb ("
-         , "  double arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_round)(arg1);"
-         , "}"
-         , "float hs_bindgen_11783f7b112ca4ce ("
-         , "  float arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_roundf)(arg1);"
-         , "}"
-         , "double hs_bindgen_e6bb2ac10b5df120 ("
-         , "  double arg1,"
-         , "  signed int arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_scalbn)(arg1, arg2);"
-         , "}"
-         , "float hs_bindgen_98b72e0135481fa6 ("
-         , "  float arg1,"
-         , "  signed int arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_scalbnf)(arg1, arg2);"
-         , "}"
-         , "double hs_bindgen_7f63dcf686d5381e ("
-         , "  double arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_sin)(arg1);"
-         , "}"
-         , "float hs_bindgen_3b77259c6cddba0e ("
-         , "  float arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_sinf)(arg1);"
-         , "}"
-         , "double hs_bindgen_911bffe699be4bcc ("
-         , "  double arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_sqrt)(arg1);"
-         , "}"
-         , "float hs_bindgen_44ac9f7898a32796 ("
-         , "  float arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_sqrtf)(arg1);"
-         , "}"
-         , "double hs_bindgen_aece2559e5dc0392 ("
-         , "  double arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_tan)(arg1);"
-         , "}"
-         , "float hs_bindgen_c528bf7014ccff4b ("
-         , "  float arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_tanf)(arg1);"
-         , "}"
-         , "SDL_iconv_t hs_bindgen_f0bd929aee0b42ea ("
-         , "  char const *arg1,"
-         , "  char const *arg2"
-         , ")"
-         , "{"
-         , "  return (SDL_iconv_open)(arg1, arg2);"
-         , "}"
-         , "signed int hs_bindgen_3f715b186320f23e ("
-         , "  SDL_iconv_t arg1"
-         , ")"
-         , "{"
-         , "  return (SDL_iconv_close)(arg1);"
-         , "}"
-         , "size_t hs_bindgen_97b150fcf3a8acd6 ("
-         , "  SDL_iconv_t arg1,"
-         , "  char const **arg2,"
-         , "  size_t *arg3,"
-         , "  char **arg4,"
-         , "  size_t *arg5"
-         , ")"
-         , "{"
-         , "  return (SDL_iconv)(arg1, arg2, arg3, arg4, arg5);"
-         , "}"
-         , "char *hs_bindgen_75bcf8b9f2da9e0a ("
-         , "  char const *arg1,"
-         , "  char const *arg2,"
-         , "  char const *arg3,"
-         , "  size_t arg4"
-         , ")"
-         , "{"
-         , "  return (SDL_iconv_string)(arg1, arg2, arg3, arg4);"
-         , "}"
-         , "_Bool hs_bindgen_51dba5ddaea9f2e4 ("
-         , "  size_t arg1,"
-         , "  size_t arg2,"
-         , "  size_t *arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_size_mul_check_overflow_builtin)(arg1, arg2, arg3);"
-         , "}"
-         , "_Bool hs_bindgen_7509bdb3d2cd84da ("
-         , "  size_t arg1,"
-         , "  size_t arg2,"
-         , "  size_t *arg3"
-         , ")"
-         , "{"
-         , "  return (SDL_size_add_check_overflow_builtin)(arg1, arg2, arg3);"
-         , "}"
-         ]
-     )
- )
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_malloc@
-foreign import ccall unsafe "hs_bindgen_5bd8a699d72971c5"
-  hs_bindgen_5bd8a699d72971c5_base
-    :: BG.Word64
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_malloc@
-hs_bindgen_5bd8a699d72971c5
-  :: HsBindgen.Runtime.LibC.CSize
-  -> IO (BG.Ptr BG.Void)
-hs_bindgen_5bd8a699d72971c5 =
-  BG.fromFFIType hs_bindgen_5bd8a699d72971c5_base
-
--- | Allocate uninitialized memory.
---
---     The allocated memory returned by this function must be freed with @SDL_free()@.
---
---     If @size@ is 0, it will be set to 1.
---
---     If the allocation is successful, the returned pointer is guaranteed to be aligned to either the /fundamental alignment/ (@alignof(max_align_t)@ in C11 and later) or @2 * sizeof(void *)@, whichever is smaller. Use @SDL_aligned_alloc()@ if you need to allocate memory aligned to an alignment greater than this guarantee.
---
---     [Returns]: a pointer to the allocated memory, or NULL if allocation failed.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_free', SDL_calloc, SDL_realloc, 'sDL_aligned_alloc'
---
---     [C declaration]: @SDL_malloc@, defined at @SDL3\/SDL_stdinc.h 1342:47@
-sDL_malloc
-  :: HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@size@]: the size to allocate.
-  -> IO (BG.Ptr BG.Void)
-sDL_malloc = hs_bindgen_5bd8a699d72971c5
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_calloc@
-foreign import ccall unsafe "hs_bindgen_08746ff05ca3003c"
-  hs_bindgen_08746ff05ca3003c_base
-    :: BG.Word64
-    -> BG.Word64
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_calloc@
-hs_bindgen_08746ff05ca3003c
-  :: HsBindgen.Runtime.LibC.CSize
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO (BG.Ptr BG.Void)
-hs_bindgen_08746ff05ca3003c =
-  BG.fromFFIType hs_bindgen_08746ff05ca3003c_base
-
--- | [C declaration]: @SDL_calloc@, defined at @SDL3\/SDL_stdinc.h 1367:69@
-sDL_calloc
-  :: HsBindgen.Runtime.LibC.CSize
-  -- ^ [C declaration]: @nmemb@
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^ [C declaration]: @size@
-  -> IO (BG.Ptr BG.Void)
-sDL_calloc = hs_bindgen_08746ff05ca3003c
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_realloc@
-foreign import ccall unsafe "hs_bindgen_0730e7e13356c626"
-  hs_bindgen_0730e7e13356c626_base
-    :: BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_realloc@
-hs_bindgen_0730e7e13356c626
-  :: BG.Ptr BG.Void
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO (BG.Ptr BG.Void)
-hs_bindgen_0730e7e13356c626 =
-  BG.fromFFIType hs_bindgen_0730e7e13356c626_base
-
--- | [C declaration]: @SDL_realloc@, defined at @SDL3\/SDL_stdinc.h 1407:54@
-sDL_realloc
-  :: BG.Ptr BG.Void
-  -- ^ [C declaration]: @mem@
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^ [C declaration]: @size@
-  -> IO (BG.Ptr BG.Void)
-sDL_realloc = hs_bindgen_0730e7e13356c626
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_free@
-foreign import ccall unsafe "hs_bindgen_22f31e5d111da6c1"
-  hs_bindgen_22f31e5d111da6c1_base
-    :: BG.Ptr BG.Void
-    -> IO ()
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_free@
-hs_bindgen_22f31e5d111da6c1
-  :: BG.Ptr BG.Void
-  -> IO ()
-hs_bindgen_22f31e5d111da6c1 =
-  BG.fromFFIType hs_bindgen_22f31e5d111da6c1_base
-
--- | Free allocated memory.
---
---     The pointer is no longer valid after this call and cannot be dereferenced anymore.
---
---     If @mem@ is NULL, this function does nothing.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_malloc', SDL_calloc, SDL_realloc
---
---     [C declaration]: @SDL_free@, defined at @SDL3\/SDL_stdinc.h 1427:34@
-sDL_free
-  :: BG.Ptr BG.Void
-  -- ^
-  --
-  --           [@mem@]: a pointer to allocated memory, or NULL.
-  -> IO ()
-sDL_free = hs_bindgen_22f31e5d111da6c1
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_GetOriginalMemoryFunctions@
-foreign import ccall unsafe "hs_bindgen_f517f867f38f6071"
-  hs_bindgen_f517f867f38f6071_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO ()
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_GetOriginalMemoryFunctions@
-hs_bindgen_f517f867f38f6071
-  :: BG.Ptr SDL_malloc_func
-  -> BG.Ptr SDL_calloc_func
-  -> BG.Ptr SDL_realloc_func
-  -> BG.Ptr SDL_free_func
-  -> IO ()
-hs_bindgen_f517f867f38f6071 =
-  BG.fromFFIType hs_bindgen_f517f867f38f6071_base
-
--- | Get the original set of SDL memory functions.
---
---     This is what SDL_malloc and friends will use by default, if there has been no call to SDL_SetMemoryFunctions. This is not necessarily using the C runtime\'s @malloc@ functions behind the scenes! Different platforms and build configurations might do any number of unexpected things.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_GetOriginalMemoryFunctions@, defined at @SDL3\/SDL_stdinc.h 1525:34@
-sDL_GetOriginalMemoryFunctions
-  :: BG.Ptr SDL_malloc_func
-  -- ^
-  --
-  --           [@malloc_func@]: filled with malloc function.
-  -> BG.Ptr SDL_calloc_func
-  -- ^
-  --
-  --           [@calloc_func@]: filled with calloc function.
-  -> BG.Ptr SDL_realloc_func
-  -- ^
-  --
-  --           [@realloc_func@]: filled with realloc function.
-  -> BG.Ptr SDL_free_func
-  -- ^
-  --
-  --           [@free_func@]: filled with free function.
-  -> IO ()
-sDL_GetOriginalMemoryFunctions =
-  hs_bindgen_f517f867f38f6071
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_GetMemoryFunctions@
-foreign import ccall unsafe "hs_bindgen_25189a0da3d426a6"
-  hs_bindgen_25189a0da3d426a6_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO ()
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_GetMemoryFunctions@
-hs_bindgen_25189a0da3d426a6
-  :: BG.Ptr SDL_malloc_func
-  -> BG.Ptr SDL_calloc_func
-  -> BG.Ptr SDL_realloc_func
-  -> BG.Ptr SDL_free_func
-  -> IO ()
-hs_bindgen_25189a0da3d426a6 =
-  BG.fromFFIType hs_bindgen_25189a0da3d426a6_base
-
--- | Get the current set of SDL memory functions.
---
---     [Thread safety]: This does not hold a lock, so do not call this in the unlikely event of a background thread calling SDL_SetMemoryFunctions simultaneously.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_SetMemoryFunctions', 'sDL_GetOriginalMemoryFunctions'
---
---     [C declaration]: @SDL_GetMemoryFunctions@, defined at @SDL3\/SDL_stdinc.h 1547:34@
-sDL_GetMemoryFunctions
-  :: BG.Ptr SDL_malloc_func
-  -- ^
-  --
-  --           [@malloc_func@]: filled with malloc function.
-  -> BG.Ptr SDL_calloc_func
-  -- ^
-  --
-  --           [@calloc_func@]: filled with calloc function.
-  -> BG.Ptr SDL_realloc_func
-  -- ^
-  --
-  --           [@realloc_func@]: filled with realloc function.
-  -> BG.Ptr SDL_free_func
-  -- ^
-  --
-  --           [@free_func@]: filled with free function.
-  -> IO ()
-sDL_GetMemoryFunctions = hs_bindgen_25189a0da3d426a6
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_SetMemoryFunctions@
-foreign import ccall unsafe "hs_bindgen_226182971f75d2c0"
-  hs_bindgen_226182971f75d2c0_base
-    :: BG.FunPtr BG.Void
-    -> BG.FunPtr BG.Void
-    -> BG.FunPtr BG.Void
-    -> BG.FunPtr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_SetMemoryFunctions@
-hs_bindgen_226182971f75d2c0
-  :: SDL_malloc_func
-  -> SDL_calloc_func
-  -> SDL_realloc_func
-  -> SDL_free_func
-  -> IO BG.CBool
-hs_bindgen_226182971f75d2c0 =
-  BG.fromFFIType hs_bindgen_226182971f75d2c0_base
-
--- | Replace SDL\'s memory allocation functions with a custom set.
---
---     It is not safe to call this function once any allocations have been made, as future calls to SDL_free will use the new allocator, even if they came from an SDL_malloc made with the old one!
---
---     If used, usually this needs to be the first call made into the SDL library, if not the very first thing done at program startup time.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: It is safe to call this function from any thread, but one should not replace the memory functions once any allocations are made!
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetMemoryFunctions', 'sDL_GetOriginalMemoryFunctions'
---
---     [C declaration]: @SDL_SetMemoryFunctions@, defined at @SDL3\/SDL_stdinc.h 1578:34@
-sDL_SetMemoryFunctions
-  :: SDL_malloc_func
-  -- ^
-  --
-  --           [@malloc_func@]: custom malloc function.
-  -> SDL_calloc_func
-  -- ^
-  --
-  --           [@calloc_func@]: custom calloc function.
-  -> SDL_realloc_func
-  -- ^
-  --
-  --           [@realloc_func@]: custom realloc function.
-  -> SDL_free_func
-  -- ^
-  --
-  --           [@free_func@]: custom free function.
-  -> IO BG.CBool
-sDL_SetMemoryFunctions = hs_bindgen_226182971f75d2c0
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_aligned_alloc@
-foreign import ccall unsafe "hs_bindgen_9900ed39a18caec5"
-  hs_bindgen_9900ed39a18caec5_base
-    :: BG.Word64
-    -> BG.Word64
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_aligned_alloc@
-hs_bindgen_9900ed39a18caec5
-  :: HsBindgen.Runtime.LibC.CSize
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO (BG.Ptr BG.Void)
-hs_bindgen_9900ed39a18caec5 =
-  BG.fromFFIType hs_bindgen_9900ed39a18caec5_base
-
--- | Allocate memory aligned to a specific alignment.
---
---     The memory returned by this function must be freed with @SDL_aligned_free()@, /not/ @SDL_free()@.
---
---     If @alignment@ is less than the size of @void *@, it will be increased to match that.
---
---     The returned memory address will be a multiple of the alignment value, and the size of the memory allocated will be a multiple of the alignment value.
---
---     [Returns]: a pointer to the aligned memory, or NULL if allocation failed.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_aligned_free'
---
---     [C declaration]: @SDL_aligned_alloc@, defined at @SDL3\/SDL_stdinc.h 1605:47@
-sDL_aligned_alloc
-  :: HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@alignment@]: the alignment of the memory.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@size@]: the size to allocate.
-  -> IO (BG.Ptr BG.Void)
-sDL_aligned_alloc = hs_bindgen_9900ed39a18caec5
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_aligned_free@
-foreign import ccall unsafe "hs_bindgen_2bf7e303c1a730bf"
-  hs_bindgen_2bf7e303c1a730bf_base
-    :: BG.Ptr BG.Void
-    -> IO ()
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_aligned_free@
-hs_bindgen_2bf7e303c1a730bf
-  :: BG.Ptr BG.Void
-  -> IO ()
-hs_bindgen_2bf7e303c1a730bf =
-  BG.fromFFIType hs_bindgen_2bf7e303c1a730bf_base
-
--- | Free memory allocated by @SDL_aligned_alloc()@.
---
---     The pointer is no longer valid after this call and cannot be dereferenced anymore.
---
---     If @mem@ is NULL, this function does nothing.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_aligned_alloc'
---
---     [C declaration]: @SDL_aligned_free@, defined at @SDL3\/SDL_stdinc.h 1623:34@
-sDL_aligned_free
-  :: BG.Ptr BG.Void
-  -- ^
-  --
-  --           [@mem@]: a pointer previously returned by @SDL_aligned_alloc()@, or NULL.
-  -> IO ()
-sDL_aligned_free = hs_bindgen_2bf7e303c1a730bf
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_GetNumAllocations@
-foreign import ccall unsafe "hs_bindgen_4528828ea69b3f8b"
-  hs_bindgen_4528828ea69b3f8b_base
-    :: IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_GetNumAllocations@
-hs_bindgen_4528828ea69b3f8b :: IO BG.CInt
-hs_bindgen_4528828ea69b3f8b =
-  BG.fromFFIType hs_bindgen_4528828ea69b3f8b_base
-
--- | Get the number of outstanding (unfreed) allocations.
---
---     [Returns]: the number of allocations or -1 if allocation counting is disabled.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_GetNumAllocations@, defined at @SDL3\/SDL_stdinc.h 1635:33@
-sDL_GetNumAllocations :: IO BG.CInt
-sDL_GetNumAllocations = hs_bindgen_4528828ea69b3f8b
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_GetEnvironment@
-foreign import ccall unsafe "hs_bindgen_e1f4a04ee814291a"
-  hs_bindgen_e1f4a04ee814291a_base
-    :: IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_GetEnvironment@
-hs_bindgen_e1f4a04ee814291a :: IO (BG.Ptr SDL_Environment)
-hs_bindgen_e1f4a04ee814291a =
-  BG.fromFFIType hs_bindgen_e1f4a04ee814291a_base
-
--- | Get the process environment.
---
---     This is initialized at application start and is not affected by setenv() and unsetenv() calls after that point. Use @SDL_SetEnvironmentVariable()@ and @SDL_UnsetEnvironmentVariable()@ if you want to modify this environment, or @SDL_setenv_unsafe()@ or @SDL_unsetenv_unsafe()@ if you want changes to persist in the C runtime environment after SDL_Quit().
---
---     [Returns]: a pointer to the environment for the process or NULL on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetEnvironmentVariable', 'sDL_GetEnvironmentVariables', 'sDL_SetEnvironmentVariable', 'sDL_UnsetEnvironmentVariable'
---
---     [C declaration]: @SDL_GetEnvironment@, defined at @SDL3\/SDL_stdinc.h 1673:47@
-sDL_GetEnvironment :: IO (BG.Ptr SDL_Environment)
-sDL_GetEnvironment = hs_bindgen_e1f4a04ee814291a
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_CreateEnvironment@
-foreign import ccall unsafe "hs_bindgen_e85a9062a561d535"
-  hs_bindgen_e85a9062a561d535_base
-    :: BG.Word8
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_CreateEnvironment@
-hs_bindgen_e85a9062a561d535
-  :: BG.CBool
-  -> IO (BG.Ptr SDL_Environment)
-hs_bindgen_e85a9062a561d535 =
-  BG.fromFFIType hs_bindgen_e85a9062a561d535_base
-
--- | Create a set of environment variables
---
---     [Returns]: a pointer to the new environment or NULL on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: If @populated@ is false, it is safe to call this function from any thread, otherwise it is safe if no other threads are calling setenv() or unsetenv()
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetEnvironmentVariable', 'sDL_GetEnvironmentVariables', 'sDL_SetEnvironmentVariable', 'sDL_UnsetEnvironmentVariable', 'sDL_DestroyEnvironment'
---
---     [C declaration]: @SDL_CreateEnvironment@, defined at @SDL3\/SDL_stdinc.h 1695:47@
-sDL_CreateEnvironment
-  :: BG.CBool
-  -- ^
-  --
-  --           [@populated@]: true to initialize it from the C runtime environment, false to create an empty environment.
-  -> IO (BG.Ptr SDL_Environment)
-sDL_CreateEnvironment = hs_bindgen_e85a9062a561d535
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_GetEnvironmentVariable@
-foreign import ccall unsafe "hs_bindgen_5beeb06044229d5f"
-  hs_bindgen_5beeb06044229d5f_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_GetEnvironmentVariable@
-hs_bindgen_5beeb06044229d5f
-  :: BG.Ptr SDL_Environment
-  -> PtrConst.PtrConst BG.CChar
-  -> IO (PtrConst.PtrConst BG.CChar)
-hs_bindgen_5beeb06044229d5f =
-  BG.fromFFIType hs_bindgen_5beeb06044229d5f_base
-
--- | Get the value of a variable in the environment.
---
---     [Returns]: a pointer to the value of the variable or NULL if it can\'t be found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetEnvironment', 'sDL_CreateEnvironment', 'sDL_GetEnvironmentVariables', 'sDL_SetEnvironmentVariable', 'sDL_UnsetEnvironmentVariable'
---
---     [C declaration]: @SDL_GetEnvironmentVariable@, defined at @SDL3\/SDL_stdinc.h 1715:42@
-sDL_GetEnvironmentVariable
-  :: BG.Ptr SDL_Environment
-  -- ^
-  --
-  --           [@env@]: the environment to query.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@name@]: the name of the variable to get.
-  -> IO (PtrConst.PtrConst BG.CChar)
-sDL_GetEnvironmentVariable =
-  hs_bindgen_5beeb06044229d5f
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_GetEnvironmentVariables@
-foreign import ccall unsafe "hs_bindgen_b31ecc5c3d715978"
-  hs_bindgen_b31ecc5c3d715978_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_GetEnvironmentVariables@
-hs_bindgen_b31ecc5c3d715978
-  :: BG.Ptr SDL_Environment
-  -> IO (BG.Ptr (BG.Ptr BG.CChar))
-hs_bindgen_b31ecc5c3d715978 =
-  BG.fromFFIType hs_bindgen_b31ecc5c3d715978_base
-
--- | Get all variables in the environment.
---
---     [Returns]: a NULL terminated array of pointers to environment variables in the form \"variable=value\" or NULL on failure; call SDL_GetError() for more information. This is a single allocation that should be freed with @SDL_free()@ when it is no longer needed.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetEnvironment', 'sDL_CreateEnvironment', 'sDL_GetEnvironmentVariables', 'sDL_SetEnvironmentVariable', 'sDL_UnsetEnvironmentVariable'
---
---     [C declaration]: @SDL_GetEnvironmentVariables@, defined at @SDL3\/SDL_stdinc.h 1736:37@
-sDL_GetEnvironmentVariables
-  :: BG.Ptr SDL_Environment
-  -- ^
-  --
-  --           [@env@]: the environment to query.
-  -> IO (BG.Ptr (BG.Ptr BG.CChar))
-sDL_GetEnvironmentVariables =
-  hs_bindgen_b31ecc5c3d715978
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_SetEnvironmentVariable@
-foreign import ccall unsafe "hs_bindgen_a9acd1c932154b24"
-  hs_bindgen_a9acd1c932154b24_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_SetEnvironmentVariable@
-hs_bindgen_a9acd1c932154b24
-  :: BG.Ptr SDL_Environment
-  -> PtrConst.PtrConst BG.CChar
-  -> PtrConst.PtrConst BG.CChar
-  -> BG.CBool
-  -> IO BG.CBool
-hs_bindgen_a9acd1c932154b24 =
-  BG.fromFFIType hs_bindgen_a9acd1c932154b24_base
-
--- | Set the value of a variable in the environment.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetEnvironment', 'sDL_CreateEnvironment', 'sDL_GetEnvironmentVariable', 'sDL_GetEnvironmentVariables', 'sDL_UnsetEnvironmentVariable'
---
---     [C declaration]: @SDL_SetEnvironmentVariable@, defined at @SDL3\/SDL_stdinc.h 1760:34@
-sDL_SetEnvironmentVariable
-  :: BG.Ptr SDL_Environment
-  -- ^
-  --
-  --           [@env@]: the environment to modify.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@name@]: the name of the variable to set.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@value@]: the value of the variable to set.
-  -> BG.CBool
-  -- ^
-  --
-  --           [@overwrite@]: true to overwrite the variable if it exists, false to return success without setting the variable if it already exists.
-  -> IO BG.CBool
-sDL_SetEnvironmentVariable =
-  hs_bindgen_a9acd1c932154b24
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_UnsetEnvironmentVariable@
-foreign import ccall unsafe "hs_bindgen_c64095b9c616bfe0"
-  hs_bindgen_c64095b9c616bfe0_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_UnsetEnvironmentVariable@
-hs_bindgen_c64095b9c616bfe0
-  :: BG.Ptr SDL_Environment
-  -> PtrConst.PtrConst BG.CChar
-  -> IO BG.CBool
-hs_bindgen_c64095b9c616bfe0 =
-  BG.fromFFIType hs_bindgen_c64095b9c616bfe0_base
-
--- | Clear a variable from the environment.
---
---     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_GetEnvironment', 'sDL_CreateEnvironment', 'sDL_GetEnvironmentVariable', 'sDL_GetEnvironmentVariables', 'sDL_SetEnvironmentVariable', 'sDL_UnsetEnvironmentVariable'
---
---     [C declaration]: @SDL_UnsetEnvironmentVariable@, defined at @SDL3\/SDL_stdinc.h 1781:34@
-sDL_UnsetEnvironmentVariable
-  :: BG.Ptr SDL_Environment
-  -- ^
-  --
-  --           [@env@]: the environment to modify.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@name@]: the name of the variable to unset.
-  -> IO BG.CBool
-sDL_UnsetEnvironmentVariable =
-  hs_bindgen_c64095b9c616bfe0
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_DestroyEnvironment@
-foreign import ccall unsafe "hs_bindgen_099a6ae1ccd5370b"
-  hs_bindgen_099a6ae1ccd5370b_base
-    :: BG.Ptr BG.Void
-    -> IO ()
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_DestroyEnvironment@
-hs_bindgen_099a6ae1ccd5370b
-  :: BG.Ptr SDL_Environment
-  -> IO ()
-hs_bindgen_099a6ae1ccd5370b =
-  BG.fromFFIType hs_bindgen_099a6ae1ccd5370b_base
-
--- | Destroy a set of environment variables.
---
---     [Thread safety]: It is safe to call this function from any thread, as long as the environment is no longer in use.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_CreateEnvironment'
---
---     [C declaration]: @SDL_DestroyEnvironment@, defined at @SDL3\/SDL_stdinc.h 1795:34@
-sDL_DestroyEnvironment
-  :: BG.Ptr SDL_Environment
-  -- ^
-  --
-  --           [@env@]: the environment to destroy.
-  -> IO ()
-sDL_DestroyEnvironment = hs_bindgen_099a6ae1ccd5370b
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_getenv@
-foreign import ccall unsafe "hs_bindgen_bf38503a85842347"
-  hs_bindgen_bf38503a85842347_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_getenv@
-hs_bindgen_bf38503a85842347
-  :: PtrConst.PtrConst BG.CChar
-  -> IO (PtrConst.PtrConst BG.CChar)
-hs_bindgen_bf38503a85842347 =
-  BG.fromFFIType hs_bindgen_bf38503a85842347_base
-
--- | Get the value of a variable in the environment.
---
---     The name of the variable is case sensitive on all platforms.
---
---     This function uses SDL\'s cached copy of the environment and is thread-safe.
---
---     [Returns]: a pointer to the value of the variable or NULL if it can\'t be found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_getenv@, defined at @SDL3\/SDL_stdinc.h 1812:42@
-sDL_getenv
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@name@]: the name of the variable to get.
-  -> IO (PtrConst.PtrConst BG.CChar)
-sDL_getenv = hs_bindgen_bf38503a85842347
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_getenv_unsafe@
-foreign import ccall unsafe "hs_bindgen_8bb86791a34eff6a"
-  hs_bindgen_8bb86791a34eff6a_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_getenv_unsafe@
-hs_bindgen_8bb86791a34eff6a
-  :: PtrConst.PtrConst BG.CChar
-  -> IO (PtrConst.PtrConst BG.CChar)
-hs_bindgen_8bb86791a34eff6a =
-  BG.fromFFIType hs_bindgen_8bb86791a34eff6a_base
-
--- | Get the value of a variable in the environment.
---
---     This function bypasses SDL\'s cached copy of the environment and is not thread-safe.
---
---     On some platforms, this may make case-insensitive matches, while other platforms are case-sensitive. It is best to be precise with strings used for queries through this interface. SDL_getenv is always case-sensitive, however.
---
---     [Returns]: a pointer to the value of the variable or NULL if it can\'t be found.
---
---     [Thread safety]: This function is not thread safe, consider using @SDL_getenv()@ instead.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_getenv'
---
---     [C declaration]: @SDL_getenv_unsafe@, defined at @SDL3\/SDL_stdinc.h 1836:42@
-sDL_getenv_unsafe
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@name@]: the name of the variable to get.
-  -> IO (PtrConst.PtrConst BG.CChar)
-sDL_getenv_unsafe = hs_bindgen_8bb86791a34eff6a
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_setenv_unsafe@
-foreign import ccall unsafe "hs_bindgen_07289159390730ef"
-  hs_bindgen_07289159390730ef_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_setenv_unsafe@
-hs_bindgen_07289159390730ef
-  :: PtrConst.PtrConst BG.CChar
-  -> PtrConst.PtrConst BG.CChar
-  -> BG.CInt
-  -> IO BG.CInt
-hs_bindgen_07289159390730ef =
-  BG.fromFFIType hs_bindgen_07289159390730ef_base
-
--- | Set the value of a variable in the environment.
---
---     [Returns]: 0 on success, -1 on error.
---
---     [Thread safety]: This function is not thread safe, consider using @SDL_SetEnvironmentVariable()@ instead.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_SetEnvironmentVariable'
---
---     [C declaration]: @SDL_setenv_unsafe@, defined at @SDL3\/SDL_stdinc.h 1854:33@
-sDL_setenv_unsafe
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@name@]: the name of the variable to set.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@value@]: the value of the variable to set.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@overwrite@]: 1 to overwrite the variable if it exists, 0 to return success without setting the variable if it already exists.
-  -> IO BG.CInt
-sDL_setenv_unsafe = hs_bindgen_07289159390730ef
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_unsetenv_unsafe@
-foreign import ccall unsafe "hs_bindgen_8eb1656d4bfcd1be"
-  hs_bindgen_8eb1656d4bfcd1be_base
-    :: BG.Ptr BG.Void
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_unsetenv_unsafe@
-hs_bindgen_8eb1656d4bfcd1be
-  :: PtrConst.PtrConst BG.CChar
-  -> IO BG.CInt
-hs_bindgen_8eb1656d4bfcd1be =
-  BG.fromFFIType hs_bindgen_8eb1656d4bfcd1be_base
-
--- | Clear a variable from the environment.
---
---     [Returns]: 0 on success, -1 on error.
---
---     [Thread safety]: This function is not thread safe, consider using @SDL_UnsetEnvironmentVariable()@ instead.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_UnsetEnvironmentVariable'
---
---     [C declaration]: @SDL_unsetenv_unsafe@, defined at @SDL3\/SDL_stdinc.h 1869:33@
-sDL_unsetenv_unsafe
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@name@]: the name of the variable to unset.
-  -> IO BG.CInt
-sDL_unsetenv_unsafe = hs_bindgen_8eb1656d4bfcd1be
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_qsort@
-foreign import ccall unsafe "hs_bindgen_95192c7f785c4c45"
-  hs_bindgen_95192c7f785c4c45_base
-    :: BG.Ptr BG.Void
-    -> BG.Word64
-    -> BG.Word64
-    -> BG.FunPtr BG.Void
-    -> IO ()
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_qsort@
-hs_bindgen_95192c7f785c4c45
-  :: BG.Ptr BG.Void
-  -> HsBindgen.Runtime.LibC.CSize
-  -> HsBindgen.Runtime.LibC.CSize
-  -> SDL_CompareCallback
-  -> IO ()
-hs_bindgen_95192c7f785c4c45 =
-  BG.fromFFIType hs_bindgen_95192c7f785c4c45_base
-
--- | Sort an array.
---
---     For example:
---
---     @
---     typedef struct {
---         int key;
---         const char *string;
---     } data;
---
---     int SDLCALL compare(const void *a, const void *b)
---     {
---         const data *A = (const data *)a;
---         const data *B = (const data *)b;
---
---         if (A->n \< B->n) {
---             return -1;
---         } else if (B->n \< A->n) {
---             return 1;
---         } else {
---             return 0;
---         }
---     }
---
---     data values[] = {
---         { 3, \"third\" }, { 1, \"first\" }, { 2, \"second\" }
---     };
---
---     SDL_qsort(values, SDL_arraysize(values), sizeof(values[0]), compare);
---     @
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_bsearch', 'sDL_qsort_r'
---
---     [C declaration]: @SDL_qsort@, defined at @SDL3\/SDL_stdinc.h 1931:34@
-sDL_qsort
-  :: BG.Ptr BG.Void
-  -- ^
-  --
-  --           [@base@]: a pointer to the start of the array.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@nmemb@]: the number of elements in the array.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@size@]: the size of the elements in the array.
-  -> SDL_CompareCallback
-  -- ^
-  --
-  --           [@compare@]: a function used to compare elements in the array.
-  -> IO ()
-sDL_qsort = hs_bindgen_95192c7f785c4c45
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_bsearch@
-foreign import ccall unsafe "hs_bindgen_e3d85c2fcc0e0182"
-  hs_bindgen_e3d85c2fcc0e0182_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> BG.Word64
-    -> BG.FunPtr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_bsearch@
-hs_bindgen_e3d85c2fcc0e0182
-  :: PtrConst.PtrConst BG.Void
-  -> PtrConst.PtrConst BG.Void
-  -> HsBindgen.Runtime.LibC.CSize
-  -> HsBindgen.Runtime.LibC.CSize
-  -> SDL_CompareCallback
-  -> IO (BG.Ptr BG.Void)
-hs_bindgen_e3d85c2fcc0e0182 =
-  BG.fromFFIType hs_bindgen_e3d85c2fcc0e0182_base
-
--- | Perform a binary search on a previously sorted array.
---
---     For example:
---
---     @
---     typedef struct {
---         int key;
---         const char *string;
---     } data;
---
---     int SDLCALL compare(const void *a, const void *b)
---     {
---         const data *A = (const data *)a;
---         const data *B = (const data *)b;
---
---         if (A->n \< B->n) {
---             return -1;
---         } else if (B->n \< A->n) {
---             return 1;
---         } else {
---             return 0;
---         }
---     }
---
---     data values[] = {
---         { 1, \"first\" }, { 2, \"second\" }, { 3, \"third\" }
---     };
---     data key = { 2, NULL };
---
---     data *result = SDL_bsearch(&key, values, SDL_arraysize(values), sizeof(values[0]), compare);
---     @
---
---     [Returns]: a pointer to the matching element in the array, or NULL if not found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_bsearch_r', 'sDL_qsort'
---
---     [C declaration]: @SDL_bsearch@, defined at @SDL3\/SDL_stdinc.h 1981:36@
-sDL_bsearch
-  :: PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@key@]: a pointer to a key equal to the element being searched for.
-  -> PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@base@]: a pointer to the start of the array.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@nmemb@]: the number of elements in the array.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@size@]: the size of the elements in the array.
-  -> SDL_CompareCallback
-  -- ^
-  --
-  --           [@compare@]: a function used to compare elements in the array.
-  -> IO (BG.Ptr BG.Void)
-sDL_bsearch = hs_bindgen_e3d85c2fcc0e0182
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_qsort_r@
-foreign import ccall unsafe "hs_bindgen_7a30995c664569a4"
-  hs_bindgen_7a30995c664569a4_base
-    :: BG.Ptr BG.Void
-    -> BG.Word64
-    -> BG.Word64
-    -> BG.FunPtr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO ()
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_qsort_r@
-hs_bindgen_7a30995c664569a4
-  :: BG.Ptr BG.Void
-  -> HsBindgen.Runtime.LibC.CSize
-  -> HsBindgen.Runtime.LibC.CSize
-  -> SDL_CompareCallback_r
-  -> BG.Ptr BG.Void
-  -> IO ()
-hs_bindgen_7a30995c664569a4 =
-  BG.fromFFIType hs_bindgen_7a30995c664569a4_base
-
--- | Sort an array, passing a userdata pointer to the compare function.
---
---     For example:
---
---     @
---     typedef enum {
---         sort_increasing,
---         sort_decreasing,
---     } sort_method;
---
---     typedef struct {
---         int key;
---         const char *string;
---     } data;
---
---     int SDLCALL compare(const void *userdata, const void *a, const void *b)
---     {
---         sort_method method = (sort_method)(uintptr_t)userdata;
---         const data *A = (const data *)a;
---         const data *B = (const data *)b;
---
---         if (A->key \< B->key) {
---             return (method == sort_increasing) ? -1 : 1;
---         } else if (B->key \< A->key) {
---             return (method == sort_increasing) ? 1 : -1;
---         } else {
---             return 0;
---         }
---     }
---
---     data values[] = {
---         { 3, \"third\" }, { 1, \"first\" }, { 2, \"second\" }
---     };
---
---     SDL_qsort_r(values, SDL_arraysize(values), sizeof(values[0]), compare, (const void *)(uintptr_t)sort_increasing);
---     @
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_bsearch_r', 'sDL_qsort'
---
---     [C declaration]: @SDL_qsort_r@, defined at @SDL3\/SDL_stdinc.h 2051:34@
-sDL_qsort_r
-  :: BG.Ptr BG.Void
-  -- ^
-  --
-  --           [@base@]: a pointer to the start of the array.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@nmemb@]: the number of elements in the array.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@size@]: the size of the elements in the array.
-  -> SDL_CompareCallback_r
-  -- ^
-  --
-  --           [@compare@]: a function used to compare elements in the array.
-  -> BG.Ptr BG.Void
-  -- ^
-  --
-  --           [@userdata@]: a pointer to pass to the compare function.
-  -> IO ()
-sDL_qsort_r = hs_bindgen_7a30995c664569a4
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_bsearch_r@
-foreign import ccall unsafe "hs_bindgen_57399b9b8aa9f8f0"
-  hs_bindgen_57399b9b8aa9f8f0_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> BG.Word64
-    -> BG.FunPtr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_bsearch_r@
-hs_bindgen_57399b9b8aa9f8f0
-  :: PtrConst.PtrConst BG.Void
-  -> PtrConst.PtrConst BG.Void
-  -> HsBindgen.Runtime.LibC.CSize
-  -> HsBindgen.Runtime.LibC.CSize
-  -> SDL_CompareCallback_r
-  -> BG.Ptr BG.Void
-  -> IO (BG.Ptr BG.Void)
-hs_bindgen_57399b9b8aa9f8f0 =
-  BG.fromFFIType hs_bindgen_57399b9b8aa9f8f0_base
-
--- | Perform a binary search on a previously sorted array, passing a userdata pointer to the compare function.
---
---     For example:
---
---     @
---     typedef enum {
---         sort_increasing,
---         sort_decreasing,
---     } sort_method;
---
---     typedef struct {
---         int key;
---         const char *string;
---     } data;
---
---     int SDLCALL compare(const void *userdata, const void *a, const void *b)
---     {
---         sort_method method = (sort_method)(uintptr_t)userdata;
---         const data *A = (const data *)a;
---         const data *B = (const data *)b;
---
---         if (A->key \< B->key) {
---             return (method == sort_increasing) ? -1 : 1;
---         } else if (B->key \< A->key) {
---             return (method == sort_increasing) ? 1 : -1;
---         } else {
---             return 0;
---         }
---     }
---
---     data values[] = {
---         { 1, \"first\" }, { 2, \"second\" }, { 3, \"third\" }
---     };
---     data key = { 2, NULL };
---
---     data *result = SDL_bsearch_r(&key, values, SDL_arraysize(values), sizeof(values[0]), compare, (const void *)(uintptr_t)sort_increasing);
---     @
---
---     [Returns]: a pointer to the matching element in the array, or NULL if not found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_bsearch', 'sDL_qsort_r'
---
---     [C declaration]: @SDL_bsearch_r@, defined at @SDL3\/SDL_stdinc.h 2109:36@
-sDL_bsearch_r
-  :: PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@key@]: a pointer to a key equal to the element being searched for.
-  -> PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@base@]: a pointer to the start of the array.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@nmemb@]: the number of elements in the array.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@size@]: the size of the elements in the array.
-  -> SDL_CompareCallback_r
-  -- ^
-  --
-  --           [@compare@]: a function used to compare elements in the array.
-  -> BG.Ptr BG.Void
-  -- ^
-  --
-  --           [@userdata@]: a pointer to pass to the compare function.
-  -> IO (BG.Ptr BG.Void)
-sDL_bsearch_r = hs_bindgen_57399b9b8aa9f8f0
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_abs@
-foreign import ccall unsafe "hs_bindgen_a928603d6470ca50"
-  hs_bindgen_a928603d6470ca50_base
-    :: BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_abs@
-hs_bindgen_a928603d6470ca50
-  :: BG.CInt
-  -> IO BG.CInt
-hs_bindgen_a928603d6470ca50 =
-  BG.fromFFIType hs_bindgen_a928603d6470ca50_base
-
--- | Compute the absolute value of @x@.
---
---     [Returns]: the absolute value of x.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_abs@, defined at @SDL3\/SDL_stdinc.h 2121:33@
-sDL_abs
-  :: BG.CInt
-  -- ^
-  --
-  --           [@x@]: an integer value.
-  -> IO BG.CInt
-sDL_abs = hs_bindgen_a928603d6470ca50
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isalpha@
-foreign import ccall unsafe "hs_bindgen_89185a009225cfaf"
-  hs_bindgen_89185a009225cfaf_base
-    :: BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isalpha@
-hs_bindgen_89185a009225cfaf
-  :: BG.CInt
-  -> IO BG.CInt
-hs_bindgen_89185a009225cfaf =
-  BG.fromFFIType hs_bindgen_89185a009225cfaf_base
-
--- | Query if a character is alphabetic (a letter).
---
---     __WARNING__: Regardless of system locale, this will only treat ASCII values for English \'a-z\' and \'A-Z\' as true.
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_isalpha@, defined at @SDL3\/SDL_stdinc.h 2196:33@
-sDL_isalpha
-  :: BG.CInt
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.CInt
-sDL_isalpha = hs_bindgen_89185a009225cfaf
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isalnum@
-foreign import ccall unsafe "hs_bindgen_1ab6c2f3868de0bb"
-  hs_bindgen_1ab6c2f3868de0bb_base
-    :: BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isalnum@
-hs_bindgen_1ab6c2f3868de0bb
-  :: BG.CInt
-  -> IO BG.CInt
-hs_bindgen_1ab6c2f3868de0bb =
-  BG.fromFFIType hs_bindgen_1ab6c2f3868de0bb_base
-
--- | Query if a character is alphabetic (a letter) or a number.
---
---     __WARNING__: Regardless of system locale, this will only treat ASCII values for English \'a-z\', \'A-Z\', and \'0-9\' as true.
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_isalnum@, defined at @SDL3\/SDL_stdinc.h 2211:33@
-sDL_isalnum
-  :: BG.CInt
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.CInt
-sDL_isalnum = hs_bindgen_1ab6c2f3868de0bb
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isblank@
-foreign import ccall unsafe "hs_bindgen_3c28b4a4af971951"
-  hs_bindgen_3c28b4a4af971951_base
-    :: BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isblank@
-hs_bindgen_3c28b4a4af971951
-  :: BG.CInt
-  -> IO BG.CInt
-hs_bindgen_3c28b4a4af971951 =
-  BG.fromFFIType hs_bindgen_3c28b4a4af971951_base
-
--- | Report if a character is blank (a space or tab).
---
---     __WARNING__: Regardless of system locale, this will only treat ASCII values 0x20 (space) or 0x9 (tab) as true.
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_isblank@, defined at @SDL3\/SDL_stdinc.h 2226:33@
-sDL_isblank
-  :: BG.CInt
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.CInt
-sDL_isblank = hs_bindgen_3c28b4a4af971951
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_iscntrl@
-foreign import ccall unsafe "hs_bindgen_13a0eb9bfa9faec7"
-  hs_bindgen_13a0eb9bfa9faec7_base
-    :: BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_iscntrl@
-hs_bindgen_13a0eb9bfa9faec7
-  :: BG.CInt
-  -> IO BG.CInt
-hs_bindgen_13a0eb9bfa9faec7 =
-  BG.fromFFIType hs_bindgen_13a0eb9bfa9faec7_base
-
--- | Report if a character is a control character.
---
---     __WARNING__: Regardless of system locale, this will only treat ASCII values 0 through 0x1F, and 0x7F, as true.
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_iscntrl@, defined at @SDL3\/SDL_stdinc.h 2241:33@
-sDL_iscntrl
-  :: BG.CInt
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.CInt
-sDL_iscntrl = hs_bindgen_13a0eb9bfa9faec7
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isdigit@
-foreign import ccall unsafe "hs_bindgen_9fae2f93c08cfbf0"
-  hs_bindgen_9fae2f93c08cfbf0_base
-    :: BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isdigit@
-hs_bindgen_9fae2f93c08cfbf0
-  :: BG.CInt
-  -> IO BG.CInt
-hs_bindgen_9fae2f93c08cfbf0 =
-  BG.fromFFIType hs_bindgen_9fae2f93c08cfbf0_base
-
--- | Report if a character is a numeric digit.
---
---     __WARNING__: Regardless of system locale, this will only treat ASCII values \'0\' (0x30) through \'9\' (0x39), as true.
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_isdigit@, defined at @SDL3\/SDL_stdinc.h 2256:33@
-sDL_isdigit
-  :: BG.CInt
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.CInt
-sDL_isdigit = hs_bindgen_9fae2f93c08cfbf0
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isxdigit@
-foreign import ccall unsafe "hs_bindgen_0f033c6150a762a3"
-  hs_bindgen_0f033c6150a762a3_base
-    :: BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isxdigit@
-hs_bindgen_0f033c6150a762a3
-  :: BG.CInt
-  -> IO BG.CInt
-hs_bindgen_0f033c6150a762a3 =
-  BG.fromFFIType hs_bindgen_0f033c6150a762a3_base
-
--- | Report if a character is a hexadecimal digit.
---
---     __WARNING__: Regardless of system locale, this will only treat ASCII values \'A\' through \'F\', \'a\' through \'f\', and \'0\' through \'9\', as true.
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_isxdigit@, defined at @SDL3\/SDL_stdinc.h 2271:33@
-sDL_isxdigit
-  :: BG.CInt
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.CInt
-sDL_isxdigit = hs_bindgen_0f033c6150a762a3
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_ispunct@
-foreign import ccall unsafe "hs_bindgen_9b835961c1753aa6"
-  hs_bindgen_9b835961c1753aa6_base
-    :: BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_ispunct@
-hs_bindgen_9b835961c1753aa6
-  :: BG.CInt
-  -> IO BG.CInt
-hs_bindgen_9b835961c1753aa6 =
-  BG.fromFFIType hs_bindgen_9b835961c1753aa6_base
-
--- | Report if a character is a punctuation mark.
---
---     __WARNING__: Regardless of system locale, this is equivalent to @((SDL_isgraph(x)) && (!SDL_isalnum(x)))@.
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_isgraph', 'sDL_isalnum'
---
---     [C declaration]: @SDL_ispunct@, defined at @SDL3\/SDL_stdinc.h 2289:33@
-sDL_ispunct
-  :: BG.CInt
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.CInt
-sDL_ispunct = hs_bindgen_9b835961c1753aa6
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isspace@
-foreign import ccall unsafe "hs_bindgen_37bfc6e46aee6fcc"
-  hs_bindgen_37bfc6e46aee6fcc_base
-    :: BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isspace@
-hs_bindgen_37bfc6e46aee6fcc
-  :: BG.CInt
-  -> IO BG.CInt
-hs_bindgen_37bfc6e46aee6fcc =
-  BG.fromFFIType hs_bindgen_37bfc6e46aee6fcc_base
-
--- | Report if a character is whitespace.
---
---     __WARNING__: Regardless of system locale, this will only treat the following ASCII values as true:
---
---     * space (0x20)
---
---     * tab (0x09)
---
---     * newline (0x0A)
---
---     * vertical tab (0x0B)
---
---     * form feed (0x0C)
---
---     * return (0x0D)
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_isspace@, defined at @SDL3\/SDL_stdinc.h 2311:33@
-sDL_isspace
-  :: BG.CInt
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.CInt
-sDL_isspace = hs_bindgen_37bfc6e46aee6fcc
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isupper@
-foreign import ccall unsafe "hs_bindgen_6a23210549f82553"
-  hs_bindgen_6a23210549f82553_base
-    :: BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isupper@
-hs_bindgen_6a23210549f82553
-  :: BG.CInt
-  -> IO BG.CInt
-hs_bindgen_6a23210549f82553 =
-  BG.fromFFIType hs_bindgen_6a23210549f82553_base
-
--- | Report if a character is upper case.
---
---     __WARNING__: Regardless of system locale, this will only treat ASCII values \'A\' through \'Z\' as true.
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_isupper@, defined at @SDL3\/SDL_stdinc.h 2326:33@
-sDL_isupper
-  :: BG.CInt
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.CInt
-sDL_isupper = hs_bindgen_6a23210549f82553
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_islower@
-foreign import ccall unsafe "hs_bindgen_4ef887be849a9002"
-  hs_bindgen_4ef887be849a9002_base
-    :: BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_islower@
-hs_bindgen_4ef887be849a9002
-  :: BG.CInt
-  -> IO BG.CInt
-hs_bindgen_4ef887be849a9002 =
-  BG.fromFFIType hs_bindgen_4ef887be849a9002_base
-
--- | Report if a character is lower case.
---
---     __WARNING__: Regardless of system locale, this will only treat ASCII values \'a\' through \'z\' as true.
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_islower@, defined at @SDL3\/SDL_stdinc.h 2341:33@
-sDL_islower
-  :: BG.CInt
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.CInt
-sDL_islower = hs_bindgen_4ef887be849a9002
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isprint@
-foreign import ccall unsafe "hs_bindgen_258633f7820b5c3c"
-  hs_bindgen_258633f7820b5c3c_base
-    :: BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isprint@
-hs_bindgen_258633f7820b5c3c
-  :: BG.CInt
-  -> IO BG.CInt
-hs_bindgen_258633f7820b5c3c =
-  BG.fromFFIType hs_bindgen_258633f7820b5c3c_base
-
--- | Report if a character is \"printable\".
---
---     Be advised that \"printable\" has a definition that goes back to text terminals from the dawn of computing, making this a sort of special case function that is not suitable for Unicode (or most any) text management.
---
---     __WARNING__: Regardless of system locale, this will only treat ASCII values \' \' (0x20) through \'~\' (0x7E) as true.
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_isprint@, defined at @SDL3\/SDL_stdinc.h 2360:33@
-sDL_isprint
-  :: BG.CInt
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.CInt
-sDL_isprint = hs_bindgen_258633f7820b5c3c
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isgraph@
-foreign import ccall unsafe "hs_bindgen_64e7a8597c7c9710"
-  hs_bindgen_64e7a8597c7c9710_base
-    :: BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isgraph@
-hs_bindgen_64e7a8597c7c9710
-  :: BG.CInt
-  -> IO BG.CInt
-hs_bindgen_64e7a8597c7c9710 =
-  BG.fromFFIType hs_bindgen_64e7a8597c7c9710_base
-
--- | Report if a character is any \"printable\" except space.
---
---     Be advised that \"printable\" has a definition that goes back to text terminals from the dawn of computing, making this a sort of special case function that is not suitable for Unicode (or most any) text management.
---
---     __WARNING__: Regardless of system locale, this is equivalent to @(SDL_isprint(x)) && ((x) != \' \')@.
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_isprint'
---
---     [C declaration]: @SDL_isgraph@, defined at @SDL3\/SDL_stdinc.h 2381:33@
-sDL_isgraph
-  :: BG.CInt
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.CInt
-sDL_isgraph = hs_bindgen_64e7a8597c7c9710
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_toupper@
-foreign import ccall unsafe "hs_bindgen_c1347761ea69159d"
-  hs_bindgen_c1347761ea69159d_base
-    :: BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_toupper@
-hs_bindgen_c1347761ea69159d
-  :: BG.CInt
-  -> IO BG.CInt
-hs_bindgen_c1347761ea69159d =
-  BG.fromFFIType hs_bindgen_c1347761ea69159d_base
-
--- | Convert low-ASCII English letters to uppercase.
---
---     __WARNING__: Regardless of system locale, this will only convert ASCII values \'a\' through \'z\' to uppercase.
---
---     This function returns the uppercase equivalent of @x@. If a character cannot be converted, or is already uppercase, this function returns @x@.
---
---     [Returns]: capitalized version of x, or x if no conversion available.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_toupper@, defined at @SDL3\/SDL_stdinc.h 2399:33@
-sDL_toupper
-  :: BG.CInt
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.CInt
-sDL_toupper = hs_bindgen_c1347761ea69159d
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_tolower@
-foreign import ccall unsafe "hs_bindgen_b3fecd41676fe4be"
-  hs_bindgen_b3fecd41676fe4be_base
-    :: BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_tolower@
-hs_bindgen_b3fecd41676fe4be
-  :: BG.CInt
-  -> IO BG.CInt
-hs_bindgen_b3fecd41676fe4be =
-  BG.fromFFIType hs_bindgen_b3fecd41676fe4be_base
-
--- | Convert low-ASCII English letters to lowercase.
---
---     __WARNING__: Regardless of system locale, this will only convert ASCII values \'A\' through \'Z\' to lowercase.
---
---     This function returns the lowercase equivalent of @x@. If a character cannot be converted, or is already lowercase, this function returns @x@.
---
---     [Returns]: lowercase version of x, or x if no conversion available.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_tolower@, defined at @SDL3\/SDL_stdinc.h 2417:33@
-sDL_tolower
-  :: BG.CInt
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.CInt
-sDL_tolower = hs_bindgen_b3fecd41676fe4be
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_crc16@
-foreign import ccall unsafe "hs_bindgen_35ff41be4e4da9d1"
-  hs_bindgen_35ff41be4e4da9d1_base
-    :: BG.Word16
-    -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word16
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_crc16@
-hs_bindgen_35ff41be4e4da9d1
-  :: Uint16
-  -> PtrConst.PtrConst BG.Void
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO Uint16
-hs_bindgen_35ff41be4e4da9d1 =
-  BG.fromFFIType hs_bindgen_35ff41be4e4da9d1_base
-
--- | Calculate a CRC-16 value.
---
---     [https:\/\/en.wikipedia.org\/wiki\/Cyclic_redundancy_check](https://en.wikipedia.org/wiki/Cyclic_redundancy_check)
---
---     This function can be called multiple times, to stream data to be checksummed in blocks. Each call must provide the previous CRC-16 return value to be updated with the next block. The first call to this function for a set of blocks should pass in a zero CRC value.
---
---     [Returns]: a CRC-16 checksum value of all blocks in the data set.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_crc16@, defined at @SDL3\/SDL_stdinc.h 2438:36@
-sDL_crc16
-  :: Uint16
-  -- ^
-  --
-  --           [@crc@]: the current checksum for this data set, or 0 for a new data set.
-  -> PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@data@]: a new block of data to add to the checksum.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@len@]: the size, in bytes, of the new block of data.
-  -> IO Uint16
-sDL_crc16 = hs_bindgen_35ff41be4e4da9d1
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_crc32@
-foreign import ccall unsafe "hs_bindgen_6755f946704473dc"
-  hs_bindgen_6755f946704473dc_base
-    :: BG.Word32
-    -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_crc32@
-hs_bindgen_6755f946704473dc
-  :: Uint32
-  -> PtrConst.PtrConst BG.Void
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO Uint32
-hs_bindgen_6755f946704473dc =
-  BG.fromFFIType hs_bindgen_6755f946704473dc_base
-
--- | Calculate a CRC-32 value.
---
---     [https:\/\/en.wikipedia.org\/wiki\/Cyclic_redundancy_check](https://en.wikipedia.org/wiki/Cyclic_redundancy_check)
---
---     This function can be called multiple times, to stream data to be checksummed in blocks. Each call must provide the previous CRC-32 return value to be updated with the next block. The first call to this function for a set of blocks should pass in a zero CRC value.
---
---     [Returns]: a CRC-32 checksum value of all blocks in the data set.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_crc32@, defined at @SDL3\/SDL_stdinc.h 2459:36@
-sDL_crc32
-  :: Uint32
-  -- ^
-  --
-  --           [@crc@]: the current checksum for this data set, or 0 for a new data set.
-  -> PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@data@]: a new block of data to add to the checksum.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@len@]: the size, in bytes, of the new block of data.
-  -> IO Uint32
-sDL_crc32 = hs_bindgen_6755f946704473dc
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_murmur3_32@
-foreign import ccall unsafe "hs_bindgen_4538e03ee60f6976"
-  hs_bindgen_4538e03ee60f6976_base
-    :: BG.Ptr BG.Void
-    -> BG.Word64
-    -> BG.Word32
-    -> IO BG.Word32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_murmur3_32@
-hs_bindgen_4538e03ee60f6976
-  :: PtrConst.PtrConst BG.Void
-  -> HsBindgen.Runtime.LibC.CSize
-  -> Uint32
-  -> IO Uint32
-hs_bindgen_4538e03ee60f6976 =
-  BG.fromFFIType hs_bindgen_4538e03ee60f6976_base
-
--- | Calculate a 32-bit MurmurHash3 value for a block of data.
---
---     [https:\/\/en.wikipedia.org\/wiki\/MurmurHash](https://en.wikipedia.org/wiki/MurmurHash)
---
---     A seed may be specified, which changes the final results consistently, but this does not work like SDL_crc16 and SDL_crc32: you can\'t feed a previous result from this function back into itself as the next seed value to calculate a hash in chunks; it won\'t produce the same hash as it would if the same data was provided in a single call.
---
---     If you aren\'t sure what to provide for a seed, zero is fine. Murmur3 is not cryptographically secure, so it shouldn\'t be used for hashing top-secret data.
---
---     [Returns]: a Murmur3 32-bit hash value.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_murmur3_32@, defined at @SDL3\/SDL_stdinc.h 2485:36@
-sDL_murmur3_32
-  :: PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@data@]: the data to be hashed.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@len@]: the size of data, in bytes.
-  -> Uint32
-  -- ^
-  --
-  --           [@seed@]: a value that alters the final hash value.
-  -> IO Uint32
-sDL_murmur3_32 = hs_bindgen_4538e03ee60f6976
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_memset4@
-foreign import ccall unsafe "hs_bindgen_006ad9913290aee0"
-  hs_bindgen_006ad9913290aee0_base
-    :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Word64
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_memset4@
-hs_bindgen_006ad9913290aee0
-  :: BG.Ptr BG.Void
-  -> Uint32
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO (BG.Ptr BG.Void)
-hs_bindgen_006ad9913290aee0 =
-  BG.fromFFIType hs_bindgen_006ad9913290aee0_base
-
--- | Initialize all 32-bit words of buffer of memory to a specific value.
---
---     This function will set a buffer of @dwords@ 'Uint32' values, pointed to by @dst@, to the value specified in @val@.
---
---     Unlike SDL_memset, this sets 32-bit values, not bytes, so it\'s not limited to a range of 0-255.
---
---     [Returns]: @dst@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_memset4@, defined at @SDL3\/SDL_stdinc.h 2609:36@
-sDL_memset4
-  :: BG.Ptr BG.Void
-  -- ^
-  --
-  --           [@dst@]: the destination memory region. Must not be NULL.
-  -> Uint32
-  -- ^
-  --
-  --           [@val@]: the 'Uint32' value to set.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@dwords@]: the number of 'Uint32' values to set in @dst@.
-  -> IO (BG.Ptr BG.Void)
-sDL_memset4 = hs_bindgen_006ad9913290aee0
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_memcmp@
-foreign import ccall unsafe "hs_bindgen_f8312f3094e9811f"
-  hs_bindgen_f8312f3094e9811f_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_memcmp@
-hs_bindgen_f8312f3094e9811f
-  :: PtrConst.PtrConst BG.Void
-  -> PtrConst.PtrConst BG.Void
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO BG.CInt
-hs_bindgen_f8312f3094e9811f =
-  BG.fromFFIType hs_bindgen_f8312f3094e9811f_base
-
--- | Compare two buffers of memory.
---
---     [Returns]: less than zero if s1 is \"less than\" s2, greater than zero if s1 is \"greater than\" s2, and zero if the buffers match exactly for @len@ bytes.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_memcmp@, defined at @SDL3\/SDL_stdinc.h 2691:33@
-sDL_memcmp
-  :: PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@s1@]: the first buffer to compare. NULL is not permitted!
-  -> PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@s2@]: the second buffer to compare. NULL is not permitted!
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@len@]: the number of bytes to compare between the buffers.
-  -> IO BG.CInt
-sDL_memcmp = hs_bindgen_f8312f3094e9811f
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcslen@
-foreign import ccall unsafe "hs_bindgen_7819cc3f05f6e767"
-  hs_bindgen_7819cc3f05f6e767_base
-    :: BG.Ptr BG.Void
-    -> IO BG.Word64
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcslen@
-hs_bindgen_7819cc3f05f6e767
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -> IO HsBindgen.Runtime.LibC.CSize
-hs_bindgen_7819cc3f05f6e767 =
-  BG.fromFFIType hs_bindgen_7819cc3f05f6e767_base
-
--- | This works exactly like wcslen() but doesn\'t require access to a C runtime.
---
---     Counts the number of wchar_t values in @wstr@, excluding the null terminator.
---
---     Like SDL_strlen only counts bytes and not codepoints in a UTF-8 string, this counts wchar_t values in a string, even if the string\'s encoding is of variable width, like UTF-16.
---
---     Also be aware that wchar_t is different sizes on different platforms (4 bytes on Linux, 2 on Windows, etc).
---
---     [Returns]: the length (in wchar_t values, excluding the null terminator) of @wstr@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_wcsnlen', 'sDL_utf8strlen', 'sDL_utf8strnlen'
---
---     [C declaration]: @SDL_wcslen@, defined at @SDL3\/SDL_stdinc.h 2718:36@
-sDL_wcslen
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@wstr@]: The null-terminated wide string to read. Must not be NULL.
-  -> IO HsBindgen.Runtime.LibC.CSize
-sDL_wcslen = hs_bindgen_7819cc3f05f6e767
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcsnlen@
-foreign import ccall unsafe "hs_bindgen_4d4c9962d27e8c57"
-  hs_bindgen_4d4c9962d27e8c57_base
-    :: BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word64
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcsnlen@
-hs_bindgen_4d4c9962d27e8c57
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO HsBindgen.Runtime.LibC.CSize
-hs_bindgen_4d4c9962d27e8c57 =
-  BG.fromFFIType hs_bindgen_4d4c9962d27e8c57_base
-
--- | This works exactly like wcsnlen() but doesn\'t require access to a C runtime.
---
---     Counts up to a maximum of @maxlen@ wchar_t values in @wstr@, excluding the null terminator.
---
---     Like SDL_strnlen only counts bytes and not codepoints in a UTF-8 string, this counts wchar_t values in a string, even if the string\'s encoding is of variable width, like UTF-16.
---
---     Also be aware that wchar_t is different sizes on different platforms (4 bytes on Linux, 2 on Windows, etc).
---
---     Also, @maxlen@ is a count of wide characters, not bytes!
---
---     [Returns]: the length (in wide characters, excluding the null terminator) of @wstr@ but never more than @maxlen@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_wcslen', 'sDL_utf8strlen', 'sDL_utf8strnlen'
---
---     [C declaration]: @SDL_wcsnlen@, defined at @SDL3\/SDL_stdinc.h 2749:36@
-sDL_wcsnlen
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@wstr@]: The null-terminated wide string to read. Must not be NULL.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@maxlen@]: The maximum amount of wide characters to count.
-  -> IO HsBindgen.Runtime.LibC.CSize
-sDL_wcsnlen = hs_bindgen_4d4c9962d27e8c57
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcslcpy@
-foreign import ccall unsafe "hs_bindgen_6a63636fffe52a27"
-  hs_bindgen_6a63636fffe52a27_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word64
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcslcpy@
-hs_bindgen_6a63636fffe52a27
-  :: BG.Ptr HsBindgen.Runtime.LibC.CWchar
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO HsBindgen.Runtime.LibC.CSize
-hs_bindgen_6a63636fffe52a27 =
-  BG.fromFFIType hs_bindgen_6a63636fffe52a27_base
-
--- | Copy a wide string.
---
---     This function copies @maxlen@ - 1 wide characters from @src@ to @dst@, then appends a null terminator.
---
---     @src@ and @dst@ must not overlap.
---
---     If @maxlen@ is 0, no wide characters are copied and no null terminator is written.
---
---     [Returns]: the length (in wide characters, excluding the null terminator) of @src@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_wcslcat'
---
---     [C declaration]: @SDL_wcslcpy@, defined at @SDL3\/SDL_stdinc.h 2776:36@
-sDL_wcslcpy
-  :: BG.Ptr HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@dst@]: The destination buffer. Must not be NULL, and must not overlap with @src@.
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@src@]: The null-terminated wide string to copy. Must not be NULL, and must not overlap with @dst@.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@maxlen@]: The length (in wide characters) of the destination buffer.
-  -> IO HsBindgen.Runtime.LibC.CSize
-sDL_wcslcpy = hs_bindgen_6a63636fffe52a27
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcslcat@
-foreign import ccall unsafe "hs_bindgen_ae63311931250a61"
-  hs_bindgen_ae63311931250a61_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word64
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcslcat@
-hs_bindgen_ae63311931250a61
-  :: BG.Ptr HsBindgen.Runtime.LibC.CWchar
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO HsBindgen.Runtime.LibC.CSize
-hs_bindgen_ae63311931250a61 =
-  BG.fromFFIType hs_bindgen_ae63311931250a61_base
-
--- | Concatenate wide strings.
---
---     This function appends up to @maxlen@ - SDL_wcslen(dst) - 1 wide characters from @src@ to the end of the wide string in @dst@, then appends a null terminator.
---
---     @src@ and @dst@ must not overlap.
---
---     If @maxlen@ - SDL_wcslen(dst) - 1 is less than or equal to 0, then @dst@ is unmodified.
---
---     [Returns]: the length (in wide characters, excluding the null terminator) of the string in @dst@ plus the length of @src@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_wcslcpy'
---
---     [C declaration]: @SDL_wcslcat@, defined at @SDL3\/SDL_stdinc.h 2805:36@
-sDL_wcslcat
-  :: BG.Ptr HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@dst@]: The destination buffer already containing the first null-terminated wide string. Must not be NULL and must not overlap with @src@.
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@src@]: The second null-terminated wide string. Must not be NULL, and must not overlap with @dst@.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@maxlen@]: The length (in wide characters) of the destination buffer.
-  -> IO HsBindgen.Runtime.LibC.CSize
-sDL_wcslcat = hs_bindgen_ae63311931250a61
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcsdup@
-foreign import ccall unsafe "hs_bindgen_0c56a99a680dde86"
-  hs_bindgen_0c56a99a680dde86_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcsdup@
-hs_bindgen_0c56a99a680dde86
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -> IO (BG.Ptr HsBindgen.Runtime.LibC.CWchar)
-hs_bindgen_0c56a99a680dde86 =
-  BG.fromFFIType hs_bindgen_0c56a99a680dde86_base
-
--- | Allocate a copy of a wide string.
---
---     This allocates enough space for a null-terminated copy of @wstr@, using SDL_malloc, and then makes a copy of the string into this space.
---
---     The returned string is owned by the caller, and should be passed to SDL_free when no longer needed.
---
---     [Returns]: a pointer to the newly-allocated wide string.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_wcsdup@, defined at @SDL3\/SDL_stdinc.h 2823:39@
-sDL_wcsdup
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@wstr@]: the string to copy.
-  -> IO (BG.Ptr HsBindgen.Runtime.LibC.CWchar)
-sDL_wcsdup = hs_bindgen_0c56a99a680dde86
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcsstr@
-foreign import ccall unsafe "hs_bindgen_0e15f64725300a1d"
-  hs_bindgen_0e15f64725300a1d_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcsstr@
-hs_bindgen_0e15f64725300a1d
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -> IO (BG.Ptr HsBindgen.Runtime.LibC.CWchar)
-hs_bindgen_0e15f64725300a1d =
-  BG.fromFFIType hs_bindgen_0e15f64725300a1d_base
-
--- | Search a wide string for the first instance of a specific substring.
---
---     The search ends once it finds the requested substring, or a null terminator byte to end the string.
---
---     Note that this looks for strings of /wide characters/, not /codepoints/, so it\'s legal to search for malformed and incomplete UTF-16 sequences.
---
---     [Returns]: a pointer to the first instance of @needle@ in the string, or NULL if not found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_wcsstr@, defined at @SDL3\/SDL_stdinc.h 2843:39@
-sDL_wcsstr
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@haystack@]: the wide string to search. Must not be NULL.
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@needle@]: the wide string to search for. Must not be NULL.
-  -> IO (BG.Ptr HsBindgen.Runtime.LibC.CWchar)
-sDL_wcsstr = hs_bindgen_0e15f64725300a1d
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcsnstr@
-foreign import ccall unsafe "hs_bindgen_ed81408c495114ac"
-  hs_bindgen_ed81408c495114ac_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcsnstr@
-hs_bindgen_ed81408c495114ac
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO (BG.Ptr HsBindgen.Runtime.LibC.CWchar)
-hs_bindgen_ed81408c495114ac =
-  BG.fromFFIType hs_bindgen_ed81408c495114ac_base
-
--- | Search a wide string, up to n wide chars, for the first instance of a specific substring.
---
---     The search ends once it finds the requested substring, or a null terminator value to end the string, or @maxlen@ wide character have been examined. It is possible to use this function on a wide string without a null terminator.
---
---     Note that this looks for strings of /wide characters/, not /codepoints/, so it\'s legal to search for malformed and incomplete UTF-16 sequences.
---
---     [Returns]: a pointer to the first instance of @needle@ in the string, or NULL if not found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_wcsnstr@, defined at @SDL3\/SDL_stdinc.h 2868:39@
-sDL_wcsnstr
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@haystack@]: the wide string to search. Must not be NULL.
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@needle@]: the wide string to search for. Must not be NULL.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@maxlen@]: the maximum number of wide characters to search in @haystack@.
-  -> IO (BG.Ptr HsBindgen.Runtime.LibC.CWchar)
-sDL_wcsnstr = hs_bindgen_ed81408c495114ac
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcscmp@
-foreign import ccall unsafe "hs_bindgen_523128c66baf772a"
-  hs_bindgen_523128c66baf772a_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcscmp@
-hs_bindgen_523128c66baf772a
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -> IO BG.CInt
-hs_bindgen_523128c66baf772a =
-  BG.fromFFIType hs_bindgen_523128c66baf772a_base
-
--- | Compare two null-terminated wide strings.
---
---     This only compares wchar_t values until it hits a null-terminating character; it does not care if the string is well-formed UTF-16 (or UTF-32, depending on your platform\'s wchar_t size), or uses valid Unicode values.
---
---     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_wcscmp@, defined at @SDL3\/SDL_stdinc.h 2887:33@
-sDL_wcscmp
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@str1@]: the first string to compare. NULL is not permitted!
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@str2@]: the second string to compare. NULL is not permitted!
-  -> IO BG.CInt
-sDL_wcscmp = hs_bindgen_523128c66baf772a
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcsncmp@
-foreign import ccall unsafe "hs_bindgen_ae16252c87514b75"
-  hs_bindgen_ae16252c87514b75_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcsncmp@
-hs_bindgen_ae16252c87514b75
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO BG.CInt
-hs_bindgen_ae16252c87514b75 =
-  BG.fromFFIType hs_bindgen_ae16252c87514b75_base
-
--- | Compare two wide strings up to a number of wchar_t values.
---
---     This only compares wchar_t values; it does not care if the string is well-formed UTF-16 (or UTF-32, depending on your platform\'s wchar_t size), or uses valid Unicode values.
---
---     Note that while this function is intended to be used with UTF-16 (or UTF-32, depending on your platform\'s definition of wchar_t), it is comparing raw wchar_t values and not Unicode codepoints: @maxlen@ specifies a wchar_t limit! If the limit lands in the middle of a multi-wchar UTF-16 sequence, it will only compare a portion of the final character.
---
---     @maxlen@ specifies a maximum number of wchar_t to compare; if the strings match to this number of wide chars (or both have matched to a null-terminator character before this count), they will be considered equal.
---
---     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_wcsncmp@, defined at @SDL3\/SDL_stdinc.h 2918:33@
-sDL_wcsncmp
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@str1@]: the first string to compare. NULL is not permitted!
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@str2@]: the second string to compare. NULL is not permitted!
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@maxlen@]: the maximum number of wchar_t to compare.
-  -> IO BG.CInt
-sDL_wcsncmp = hs_bindgen_ae16252c87514b75
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcscasecmp@
-foreign import ccall unsafe "hs_bindgen_2a1f0e71a040879b"
-  hs_bindgen_2a1f0e71a040879b_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcscasecmp@
-hs_bindgen_2a1f0e71a040879b
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -> IO BG.CInt
-hs_bindgen_2a1f0e71a040879b =
-  BG.fromFFIType hs_bindgen_2a1f0e71a040879b_base
-
--- | Compare two null-terminated wide strings, case-insensitively.
---
---     This will work with Unicode strings, using a technique called \"case-folding\" to handle the vast majority of case-sensitive human languages regardless of system locale. It can deal with expanding values: a German Eszett character can compare against two ASCII \'s\' chars and be considered a match, for example. A notable exception: it does not handle the Turkish \'i\' character; human language is complicated!
---
---     Depending on your platform, \"wchar_t\" might be 2 bytes, and expected to be UTF-16 encoded (like Windows), or 4 bytes in UTF-32 format. Since this handles Unicode, it expects the string to be well-formed and not a null-terminated string of arbitrary bytes. Characters that are not valid UTF-16 (or UTF-32) are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), which is to say two strings of random bits may turn out to match if they convert to the same amount of replacement characters.
---
---     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_wcscasecmp@, defined at @SDL3\/SDL_stdinc.h 2948:33@
-sDL_wcscasecmp
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@str1@]: the first string to compare. NULL is not permitted!
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@str2@]: the second string to compare. NULL is not permitted!
-  -> IO BG.CInt
-sDL_wcscasecmp = hs_bindgen_2a1f0e71a040879b
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcsncasecmp@
-foreign import ccall unsafe "hs_bindgen_1c13738568f12d1d"
-  hs_bindgen_1c13738568f12d1d_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcsncasecmp@
-hs_bindgen_1c13738568f12d1d
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO BG.CInt
-hs_bindgen_1c13738568f12d1d =
-  BG.fromFFIType hs_bindgen_1c13738568f12d1d_base
-
--- | Compare two wide strings, case-insensitively, up to a number of wchar_t.
---
---     This will work with Unicode strings, using a technique called \"case-folding\" to handle the vast majority of case-sensitive human languages regardless of system locale. It can deal with expanding values: a German Eszett character can compare against two ASCII \'s\' chars and be considered a match, for example. A notable exception: it does not handle the Turkish \'i\' character; human language is complicated!
---
---     Depending on your platform, \"wchar_t\" might be 2 bytes, and expected to be UTF-16 encoded (like Windows), or 4 bytes in UTF-32 format. Since this handles Unicode, it expects the string to be well-formed and not a null-terminated string of arbitrary bytes. Characters that are not valid UTF-16 (or UTF-32) are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), which is to say two strings of random bits may turn out to match if they convert to the same amount of replacement characters.
---
---     Note that while this function might deal with variable-sized characters, @maxlen@ specifies a /wchar/ limit! If the limit lands in the middle of a multi-byte UTF-16 sequence, it may convert a portion of the final character to one or more Unicode character U+FFFD (REPLACEMENT CHARACTER) so as not to overflow a buffer.
---
---     @maxlen@ specifies a maximum number of wchar_t values to compare; if the strings match to this number of wchar_t (or both have matched to a null-terminator character before this number of bytes), they will be considered equal.
---
---     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_wcsncasecmp@, defined at @SDL3\/SDL_stdinc.h 2990:33@
-sDL_wcsncasecmp
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@str1@]: the first string to compare. NULL is not permitted!
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@str2@]: the second string to compare. NULL is not permitted!
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@maxlen@]: the maximum number of wchar_t values to compare.
-  -> IO BG.CInt
-sDL_wcsncasecmp = hs_bindgen_1c13738568f12d1d
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strlen@
-foreign import ccall unsafe "hs_bindgen_59a6bfea24e96b34"
-  hs_bindgen_59a6bfea24e96b34_base
-    :: BG.Ptr BG.Void
-    -> IO BG.Word64
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strlen@
-hs_bindgen_59a6bfea24e96b34
-  :: PtrConst.PtrConst BG.CChar
-  -> IO HsBindgen.Runtime.LibC.CSize
-hs_bindgen_59a6bfea24e96b34 =
-  BG.fromFFIType hs_bindgen_59a6bfea24e96b34_base
-
--- | This works exactly like strlen() but doesn\'t require access to a C runtime.
---
---     Counts the bytes in @str@, excluding the null terminator.
---
---     If you need the length of a UTF-8 string, consider using @SDL_utf8strlen()@.
---
---     [Returns]: the length (in bytes, excluding the null terminator) of @src@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_strnlen', 'sDL_utf8strlen', 'sDL_utf8strnlen'
---
---     [C declaration]: @SDL_strlen@, defined at @SDL3\/SDL_stdinc.h 3037:36@
-sDL_strlen
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: The null-terminated string to read. Must not be NULL.
-  -> IO HsBindgen.Runtime.LibC.CSize
-sDL_strlen = hs_bindgen_59a6bfea24e96b34
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strnlen@
-foreign import ccall unsafe "hs_bindgen_c8b4424317df84e9"
-  hs_bindgen_c8b4424317df84e9_base
-    :: BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word64
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strnlen@
-hs_bindgen_c8b4424317df84e9
-  :: PtrConst.PtrConst BG.CChar
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO HsBindgen.Runtime.LibC.CSize
-hs_bindgen_c8b4424317df84e9 =
-  BG.fromFFIType hs_bindgen_c8b4424317df84e9_base
-
--- | This works exactly like strnlen() but doesn\'t require access to a C runtime.
---
---     Counts up to a maximum of @maxlen@ bytes in @str@, excluding the null terminator.
---
---     If you need the length of a UTF-8 string, consider using @SDL_utf8strnlen()@.
---
---     [Returns]: the length (in bytes, excluding the null terminator) of @src@ but never more than @maxlen@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_strlen', 'sDL_utf8strlen', 'sDL_utf8strnlen'
---
---     [C declaration]: @SDL_strnlen@, defined at @SDL3\/SDL_stdinc.h 3061:36@
-sDL_strnlen
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: The null-terminated string to read. Must not be NULL.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@maxlen@]: The maximum amount of bytes to count.
-  -> IO HsBindgen.Runtime.LibC.CSize
-sDL_strnlen = hs_bindgen_c8b4424317df84e9
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strlcpy@
-foreign import ccall unsafe "hs_bindgen_e26f240b36c1f7f4"
-  hs_bindgen_e26f240b36c1f7f4_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word64
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strlcpy@
-hs_bindgen_e26f240b36c1f7f4
-  :: BG.Ptr BG.CChar
-  -> PtrConst.PtrConst BG.CChar
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO HsBindgen.Runtime.LibC.CSize
-hs_bindgen_e26f240b36c1f7f4 =
-  BG.fromFFIType hs_bindgen_e26f240b36c1f7f4_base
-
--- | Copy a string.
---
---     This function copies up to @maxlen@ - 1 characters from @src@ to @dst@, then appends a null terminator.
---
---     If @maxlen@ is 0, no characters are copied and no null terminator is written.
---
---     If you want to copy an UTF-8 string but need to ensure that multi-byte sequences are not truncated, consider using @SDL_utf8strlcpy()@.
---
---     [Returns]: the length (in characters, excluding the null terminator) of @src@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_strlcat', 'sDL_utf8strlcpy'
---
---     [C declaration]: @SDL_strlcpy@, defined at @SDL3\/SDL_stdinc.h 3090:36@
-sDL_strlcpy
-  :: BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@dst@]: The destination buffer. Must not be NULL, and must not overlap with @src@.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@src@]: The null-terminated string to copy. Must not be NULL, and must not overlap with @dst@.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@maxlen@]: The length (in characters) of the destination buffer.
-  -> IO HsBindgen.Runtime.LibC.CSize
-sDL_strlcpy = hs_bindgen_e26f240b36c1f7f4
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_utf8strlcpy@
-foreign import ccall unsafe "hs_bindgen_a6570a6c65177caf"
-  hs_bindgen_a6570a6c65177caf_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word64
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_utf8strlcpy@
-hs_bindgen_a6570a6c65177caf
-  :: BG.Ptr BG.CChar
-  -> PtrConst.PtrConst BG.CChar
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO HsBindgen.Runtime.LibC.CSize
-hs_bindgen_a6570a6c65177caf =
-  BG.fromFFIType hs_bindgen_a6570a6c65177caf_base
-
--- | Copy an UTF-8 string.
---
---     This function copies up to @dst_bytes@ - 1 bytes from @src@ to @dst@ while also ensuring that the string written to @dst@ does not end in a truncated multi-byte sequence. Finally, it appends a null terminator.
---
---     @src@ and @dst@ must not overlap.
---
---     Note that unlike @SDL_strlcpy()@, this function returns the number of bytes written, not the length of @src@.
---
---     [Returns]: the number of bytes written, excluding the null terminator.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_strlcpy'
---
---     [C declaration]: @SDL_utf8strlcpy@, defined at @SDL3\/SDL_stdinc.h 3118:36@
-sDL_utf8strlcpy
-  :: BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@dst@]: The destination buffer. Must not be NULL, and must not overlap with @src@.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@src@]: The null-terminated UTF-8 string to copy. Must not be NULL, and must not overlap with @dst@.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@dst_bytes@]: The length (in bytes) of the destination buffer. Must not be 0.
-  -> IO HsBindgen.Runtime.LibC.CSize
-sDL_utf8strlcpy = hs_bindgen_a6570a6c65177caf
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strlcat@
-foreign import ccall unsafe "hs_bindgen_6776d8c4c9824b69"
-  hs_bindgen_6776d8c4c9824b69_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word64
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strlcat@
-hs_bindgen_6776d8c4c9824b69
-  :: BG.Ptr BG.CChar
-  -> PtrConst.PtrConst BG.CChar
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO HsBindgen.Runtime.LibC.CSize
-hs_bindgen_6776d8c4c9824b69 =
-  BG.fromFFIType hs_bindgen_6776d8c4c9824b69_base
-
--- | Concatenate strings.
---
---     This function appends up to @maxlen@ - SDL_strlen(dst) - 1 characters from @src@ to the end of the string in @dst@, then appends a null terminator.
---
---     @src@ and @dst@ must not overlap.
---
---     If @maxlen@ - SDL_strlen(dst) - 1 is less than or equal to 0, then @dst@ is unmodified.
---
---     [Returns]: the length (in characters, excluding the null terminator) of the string in @dst@ plus the length of @src@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_strlcpy'
---
---     [C declaration]: @SDL_strlcat@, defined at @SDL3\/SDL_stdinc.h 3146:36@
-sDL_strlcat
-  :: BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@dst@]: The destination buffer already containing the first null-terminated string. Must not be NULL and must not overlap with @src@.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@src@]: The second null-terminated string. Must not be NULL, and must not overlap with @dst@.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@maxlen@]: The length (in characters) of the destination buffer.
-  -> IO HsBindgen.Runtime.LibC.CSize
-sDL_strlcat = hs_bindgen_6776d8c4c9824b69
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strdup@
-foreign import ccall unsafe "hs_bindgen_642470a5439764a1"
-  hs_bindgen_642470a5439764a1_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strdup@
-hs_bindgen_642470a5439764a1
-  :: PtrConst.PtrConst BG.CChar
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_642470a5439764a1 =
-  BG.fromFFIType hs_bindgen_642470a5439764a1_base
-
--- | Allocate a copy of a string.
---
---     This allocates enough space for a null-terminated copy of @str@, using SDL_malloc, and then makes a copy of the string into this space.
---
---     The returned string is owned by the caller, and should be passed to SDL_free when no longer needed.
---
---     [Returns]: a pointer to the newly-allocated string.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_strdup@, defined at @SDL3\/SDL_stdinc.h 3164:47@
-sDL_strdup
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: the string to copy.
-  -> IO (BG.Ptr BG.CChar)
-sDL_strdup = hs_bindgen_642470a5439764a1
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strndup@
-foreign import ccall unsafe "hs_bindgen_2d11135d4a4cd09d"
-  hs_bindgen_2d11135d4a4cd09d_base
-    :: BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strndup@
-hs_bindgen_2d11135d4a4cd09d
-  :: PtrConst.PtrConst BG.CChar
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_2d11135d4a4cd09d =
-  BG.fromFFIType hs_bindgen_2d11135d4a4cd09d_base
-
--- | Allocate a copy of a string, up to n characters.
---
---     This allocates enough space for a null-terminated copy of @str@, up to @maxlen@ bytes, using SDL_malloc, and then makes a copy of the string into this space.
---
---     If the string is longer than @maxlen@ bytes, the returned string will be @maxlen@ bytes long, plus a null-terminator character that isn\'t included in the count.
---
---     The returned string is owned by the caller, and should be passed to SDL_free when no longer needed.
---
---     [Returns]: a pointer to the newly-allocated string.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_strndup@, defined at @SDL3\/SDL_stdinc.h 3189:47@
-sDL_strndup
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: the string to copy.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@maxlen@]: the maximum length of the copied string, not counting the null-terminator character.
-  -> IO (BG.Ptr BG.CChar)
-sDL_strndup = hs_bindgen_2d11135d4a4cd09d
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strrev@
-foreign import ccall unsafe "hs_bindgen_3e344b4dbd1fefd5"
-  hs_bindgen_3e344b4dbd1fefd5_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strrev@
-hs_bindgen_3e344b4dbd1fefd5
-  :: BG.Ptr BG.CChar
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_3e344b4dbd1fefd5 =
-  BG.fromFFIType hs_bindgen_3e344b4dbd1fefd5_base
-
--- | Reverse a string\'s contents.
---
---     This reverses a null-terminated string in-place. Only the content of the string is reversed; the null-terminator character remains at the end of the reversed string.
---
---     __WARNING__: This function reverses the /bytes/ of the string, not the codepoints. If @str@ is a UTF-8 string with Unicode codepoints > 127, this will ruin the string data. You should only use this function on strings that are completely comprised of low ASCII characters.
---
---     [Returns]: @str@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_strrev@, defined at @SDL3\/SDL_stdinc.h 3210:36@
-sDL_strrev
-  :: BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@str@]: the string to reverse.
-  -> IO (BG.Ptr BG.CChar)
-sDL_strrev = hs_bindgen_3e344b4dbd1fefd5
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strupr@
-foreign import ccall unsafe "hs_bindgen_2a6a16beae86f690"
-  hs_bindgen_2a6a16beae86f690_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strupr@
-hs_bindgen_2a6a16beae86f690
-  :: BG.Ptr BG.CChar
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_2a6a16beae86f690 =
-  BG.fromFFIType hs_bindgen_2a6a16beae86f690_base
-
--- | Convert a string to uppercase.
---
---     __WARNING__: Regardless of system locale, this will only convert ASCII values \'A\' through \'Z\' to uppercase.
---
---     This function operates on a null-terminated string of bytes even if it is malformed UTF-8! and converts ASCII characters \'a\' through \'z\' to their uppercase equivalents in-place, returning the original @str@ pointer.
---
---     [Returns]: the @str@ pointer passed into this function.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_strlwr'
---
---     [C declaration]: @SDL_strupr@, defined at @SDL3\/SDL_stdinc.h 3231:36@
-sDL_strupr
-  :: BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@str@]: the string to convert in-place. Can not be NULL.
-  -> IO (BG.Ptr BG.CChar)
-sDL_strupr = hs_bindgen_2a6a16beae86f690
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strlwr@
-foreign import ccall unsafe "hs_bindgen_d398f95cc6b941fb"
-  hs_bindgen_d398f95cc6b941fb_base
-    :: BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strlwr@
-hs_bindgen_d398f95cc6b941fb
-  :: BG.Ptr BG.CChar
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_d398f95cc6b941fb =
-  BG.fromFFIType hs_bindgen_d398f95cc6b941fb_base
-
--- | Convert a string to lowercase.
---
---     __WARNING__: Regardless of system locale, this will only convert ASCII values \'A\' through \'Z\' to lowercase.
---
---     This function operates on a null-terminated string of bytes even if it is malformed UTF-8! and converts ASCII characters \'A\' through \'Z\' to their lowercase equivalents in-place, returning the original @str@ pointer.
---
---     [Returns]: the @str@ pointer passed into this function.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_strupr'
---
---     [C declaration]: @SDL_strlwr@, defined at @SDL3\/SDL_stdinc.h 3252:36@
-sDL_strlwr
-  :: BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@str@]: the string to convert in-place. Can not be NULL.
-  -> IO (BG.Ptr BG.CChar)
-sDL_strlwr = hs_bindgen_d398f95cc6b941fb
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strchr@
-foreign import ccall unsafe "hs_bindgen_ce84b72a37d721aa"
-  hs_bindgen_ce84b72a37d721aa_base
-    :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strchr@
-hs_bindgen_ce84b72a37d721aa
-  :: PtrConst.PtrConst BG.CChar
-  -> BG.CInt
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_ce84b72a37d721aa =
-  BG.fromFFIType hs_bindgen_ce84b72a37d721aa_base
-
--- | Search a string for the first instance of a specific byte.
---
---     The search ends once it finds the requested byte value, or a null terminator byte to end the string.
---
---     Note that this looks for /bytes/, not /characters/, so you cannot match against a Unicode codepoint > 255, regardless of character encoding.
---
---     [Returns]: a pointer to the first instance of @c@ in the string, or NULL if not found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_strchr@, defined at @SDL3\/SDL_stdinc.h 3272:36@
-sDL_strchr
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: the string to search. Must not be NULL.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@c@]: the byte value to search for.
-  -> IO (BG.Ptr BG.CChar)
-sDL_strchr = hs_bindgen_ce84b72a37d721aa
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strrchr@
-foreign import ccall unsafe "hs_bindgen_42f6725f3eb6c437"
-  hs_bindgen_42f6725f3eb6c437_base
-    :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strrchr@
-hs_bindgen_42f6725f3eb6c437
-  :: PtrConst.PtrConst BG.CChar
-  -> BG.CInt
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_42f6725f3eb6c437 =
-  BG.fromFFIType hs_bindgen_42f6725f3eb6c437_base
-
--- | Search a string for the last instance of a specific byte.
---
---     The search must go until it finds a null terminator byte to end the string.
---
---     Note that this looks for /bytes/, not /characters/, so you cannot match against a Unicode codepoint > 255, regardless of character encoding.
---
---     [Returns]: a pointer to the last instance of @c@ in the string, or NULL if not found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_strrchr@, defined at @SDL3\/SDL_stdinc.h 3291:36@
-sDL_strrchr
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: the string to search. Must not be NULL.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@c@]: the byte value to search for.
-  -> IO (BG.Ptr BG.CChar)
-sDL_strrchr = hs_bindgen_42f6725f3eb6c437
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strstr@
-foreign import ccall unsafe "hs_bindgen_4dd450b42cd71d7b"
-  hs_bindgen_4dd450b42cd71d7b_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strstr@
-hs_bindgen_4dd450b42cd71d7b
-  :: PtrConst.PtrConst BG.CChar
-  -> PtrConst.PtrConst BG.CChar
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_4dd450b42cd71d7b =
-  BG.fromFFIType hs_bindgen_4dd450b42cd71d7b_base
-
--- | Search a string for the first instance of a specific substring.
---
---     The search ends once it finds the requested substring, or a null terminator byte to end the string.
---
---     Note that this looks for strings of /bytes/, not /characters/, so it\'s legal to search for malformed and incomplete UTF-8 sequences.
---
---     [Returns]: a pointer to the first instance of @needle@ in the string, or NULL if not found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_strstr@, defined at @SDL3\/SDL_stdinc.h 3311:36@
-sDL_strstr
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@haystack@]: the string to search. Must not be NULL.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@needle@]: the string to search for. Must not be NULL.
-  -> IO (BG.Ptr BG.CChar)
-sDL_strstr = hs_bindgen_4dd450b42cd71d7b
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strnstr@
-foreign import ccall unsafe "hs_bindgen_84a9d060fbe6dadf"
-  hs_bindgen_84a9d060fbe6dadf_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strnstr@
-hs_bindgen_84a9d060fbe6dadf
-  :: PtrConst.PtrConst BG.CChar
-  -> PtrConst.PtrConst BG.CChar
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_84a9d060fbe6dadf =
-  BG.fromFFIType hs_bindgen_84a9d060fbe6dadf_base
-
--- | Search a string, up to n bytes, for the first instance of a specific substring.
---
---     The search ends once it finds the requested substring, or a null terminator byte to end the string, or @maxlen@ bytes have been examined. It is possible to use this function on a string without a null terminator.
---
---     Note that this looks for strings of /bytes/, not /characters/, so it\'s legal to search for malformed and incomplete UTF-8 sequences.
---
---     [Returns]: a pointer to the first instance of @needle@ in the string, or NULL if not found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_strnstr@, defined at @SDL3\/SDL_stdinc.h 3334:36@
-sDL_strnstr
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@haystack@]: the string to search. Must not be NULL.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@needle@]: the string to search for. Must not be NULL.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@maxlen@]: the maximum number of bytes to search in @haystack@.
-  -> IO (BG.Ptr BG.CChar)
-sDL_strnstr = hs_bindgen_84a9d060fbe6dadf
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strcasestr@
-foreign import ccall unsafe "hs_bindgen_81f801141b3ad731"
-  hs_bindgen_81f801141b3ad731_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strcasestr@
-hs_bindgen_81f801141b3ad731
-  :: PtrConst.PtrConst BG.CChar
-  -> PtrConst.PtrConst BG.CChar
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_81f801141b3ad731 =
-  BG.fromFFIType hs_bindgen_81f801141b3ad731_base
-
--- | Search a UTF-8 string for the first instance of a specific substring, case-insensitively.
---
---     This will work with Unicode strings, using a technique called \"case-folding\" to handle the vast majority of case-sensitive human languages regardless of system locale. It can deal with expanding values: a German Eszett character can compare against two ASCII \'s\' chars and be considered a match, for example. A notable exception: it does not handle the Turkish \'i\' character; human language is complicated!
---
---     Since this handles Unicode, it expects the strings to be well-formed UTF-8 and not a null-terminated string of arbitrary bytes. Bytes that are not valid UTF-8 are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), which is to say two strings of random bits may turn out to match if they convert to the same amount of replacement characters.
---
---     [Returns]: a pointer to the first instance of @needle@ in the string, or NULL if not found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_strcasestr@, defined at @SDL3\/SDL_stdinc.h 3362:36@
-sDL_strcasestr
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@haystack@]: the string to search. Must not be NULL.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@needle@]: the string to search for. Must not be NULL.
-  -> IO (BG.Ptr BG.CChar)
-sDL_strcasestr = hs_bindgen_81f801141b3ad731
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strtok_r@
-foreign import ccall unsafe "hs_bindgen_409faece247c319b"
-  hs_bindgen_409faece247c319b_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strtok_r@
-hs_bindgen_409faece247c319b
-  :: BG.Ptr BG.CChar
-  -> PtrConst.PtrConst BG.CChar
-  -> BG.Ptr (BG.Ptr BG.CChar)
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_409faece247c319b =
-  BG.fromFFIType hs_bindgen_409faece247c319b_base
-
--- | This works exactly like strtok_r() but doesn\'t require access to a C runtime.
---
---     Break a string up into a series of tokens.
---
---     To start tokenizing a new string, @str@ should be the non-NULL address of the string to start tokenizing. Future calls to get the next token from the same string should specify a NULL.
---
---     Note that this function will overwrite pieces of @str@ with null chars to split it into tokens. This function cannot be used with const\/read-only strings!
---
---     @saveptr@ just needs to point to a @char *@ that can be overwritten; SDL will use this to save tokenizing state between calls. It is initialized if @str@ is non-NULL, and used to resume tokenizing when @str@ is NULL.
---
---     [Returns]: A pointer to the next token, or NULL if no tokens remain.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_strtok_r@, defined at @SDL3\/SDL_stdinc.h 3391:36@
-sDL_strtok_r
-  :: BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@str@]: the string to tokenize, or NULL to continue tokenizing.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@delim@]: the delimiter string that separates tokens.
-  -> BG.Ptr (BG.Ptr BG.CChar)
-  -- ^
-  --
-  --           [@saveptr@]: pointer to a char *, used for ongoing state.
-  -> IO (BG.Ptr BG.CChar)
-sDL_strtok_r = hs_bindgen_409faece247c319b
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_utf8strlen@
-foreign import ccall unsafe "hs_bindgen_36470941402cdd53"
-  hs_bindgen_36470941402cdd53_base
-    :: BG.Ptr BG.Void
-    -> IO BG.Word64
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_utf8strlen@
-hs_bindgen_36470941402cdd53
-  :: PtrConst.PtrConst BG.CChar
-  -> IO HsBindgen.Runtime.LibC.CSize
-hs_bindgen_36470941402cdd53 =
-  BG.fromFFIType hs_bindgen_36470941402cdd53_base
-
--- | Count the number of codepoints in a UTF-8 string.
---
---     Counts the /codepoints/, not /bytes/, in @str@, excluding the null terminator.
---
---     If you need to count the bytes in a string instead, consider using @SDL_strlen()@.
---
---     Since this handles Unicode, it expects the strings to be well-formed UTF-8 and not a null-terminated string of arbitrary bytes. Bytes that are not valid UTF-8 are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), so a malformed or incomplete UTF-8 sequence might increase the count by several replacement characters.
---
---     [Returns]: The length (in codepoints, excluding the null terminator) of @src@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_utf8strnlen', 'sDL_strlen'
---
---     [C declaration]: @SDL_utf8strlen@, defined at @SDL3\/SDL_stdinc.h 3419:36@
-sDL_utf8strlen
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: The null-terminated UTF-8 string to read. Must not be NULL.
-  -> IO HsBindgen.Runtime.LibC.CSize
-sDL_utf8strlen = hs_bindgen_36470941402cdd53
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_utf8strnlen@
-foreign import ccall unsafe "hs_bindgen_479082db51ecf46b"
-  hs_bindgen_479082db51ecf46b_base
-    :: BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word64
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_utf8strnlen@
-hs_bindgen_479082db51ecf46b
-  :: PtrConst.PtrConst BG.CChar
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO HsBindgen.Runtime.LibC.CSize
-hs_bindgen_479082db51ecf46b =
-  BG.fromFFIType hs_bindgen_479082db51ecf46b_base
-
--- | Count the number of codepoints in a UTF-8 string, up to n bytes.
---
---     Counts the /codepoints/, not /bytes/, in @str@, excluding the null terminator.
---
---     If you need to count the bytes in a string instead, consider using @SDL_strnlen()@.
---
---     The counting stops at @bytes@ bytes (not codepoints!). This seems counterintuitive, but makes it easy to express the total size of the string\'s buffer.
---
---     Since this handles Unicode, it expects the strings to be well-formed UTF-8 and not a null-terminated string of arbitrary bytes. Bytes that are not valid UTF-8 are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), so a malformed or incomplete UTF-8 sequence might increase the count by several replacement characters.
---
---     [Returns]: The length (in codepoints, excluding the null terminator) of @src@ but never more than @maxlen@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_utf8strlen', 'sDL_strnlen'
---
---     [C declaration]: @SDL_utf8strnlen@, defined at @SDL3\/SDL_stdinc.h 3452:36@
-sDL_utf8strnlen
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: The null-terminated UTF-8 string to read. Must not be NULL.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@bytes@]: The maximum amount of bytes to count.
-  -> IO HsBindgen.Runtime.LibC.CSize
-sDL_utf8strnlen = hs_bindgen_479082db51ecf46b
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_itoa@
-foreign import ccall unsafe "hs_bindgen_c69b2ef36677f953"
-  hs_bindgen_c69b2ef36677f953_base
-    :: BG.Int32
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_itoa@
-hs_bindgen_c69b2ef36677f953
-  :: BG.CInt
-  -> BG.Ptr BG.CChar
-  -> BG.CInt
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_c69b2ef36677f953 =
-  BG.fromFFIType hs_bindgen_c69b2ef36677f953_base
-
--- | Convert an integer into a string.
---
---     This requires a radix to specified for string format. Specifying 10 produces a decimal number, 16 hexadecimal, etc. Must be in the range of 2 to 36.
---
---     Note that this function will overflow a buffer if @str@ is not large enough to hold the output! It may be safer to use SDL_snprintf to clamp output, or SDL_asprintf to allocate a buffer. Otherwise, it doesn\'t hurt to allocate much more space than you expect to use (and don\'t forget possible negative signs, null terminator bytes, etc).
---
---     [Returns]: @str@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_uitoa', @SDL_ltoa@, 'sDL_lltoa'
---
---     [C declaration]: @SDL_itoa@, defined at @SDL3\/SDL_stdinc.h 3480:36@
-sDL_itoa
-  :: BG.CInt
-  -- ^
-  --
-  --           [@value@]: the integer to convert.
-  -> BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@str@]: the buffer to write the string into.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@radix@]: the radix to use for string generation.
-  -> IO (BG.Ptr BG.CChar)
-sDL_itoa = hs_bindgen_c69b2ef36677f953
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_uitoa@
-foreign import ccall unsafe "hs_bindgen_dbe69ee767be00c8"
-  hs_bindgen_dbe69ee767be00c8_base
-    :: BG.Word32
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_uitoa@
-hs_bindgen_dbe69ee767be00c8
-  :: BG.CUInt
-  -> BG.Ptr BG.CChar
-  -> BG.CInt
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_dbe69ee767be00c8 =
-  BG.fromFFIType hs_bindgen_dbe69ee767be00c8_base
-
--- | Convert an unsigned integer into a string.
---
---     This requires a radix to specified for string format. Specifying 10 produces a decimal number, 16 hexadecimal, etc. Must be in the range of 2 to 36.
---
---     Note that this function will overflow a buffer if @str@ is not large enough to hold the output! It may be safer to use SDL_snprintf to clamp output, or SDL_asprintf to allocate a buffer. Otherwise, it doesn\'t hurt to allocate much more space than you expect to use (and don\'t forget null terminator bytes, etc).
---
---     [Returns]: @str@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_itoa', @SDL_ultoa@, 'sDL_ulltoa'
---
---     [C declaration]: @SDL_uitoa@, defined at @SDL3\/SDL_stdinc.h 3508:36@
-sDL_uitoa
-  :: BG.CUInt
-  -- ^
-  --
-  --           [@value@]: the unsigned integer to convert.
-  -> BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@str@]: the buffer to write the string into.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@radix@]: the radix to use for string generation.
-  -> IO (BG.Ptr BG.CChar)
-sDL_uitoa = hs_bindgen_dbe69ee767be00c8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_lltoa@
-foreign import ccall unsafe "hs_bindgen_94ca108dca07ec6f"
-  hs_bindgen_94ca108dca07ec6f_base
-    :: BG.Int64
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_lltoa@
-hs_bindgen_94ca108dca07ec6f
-  :: BG.CLLong
-  -> BG.Ptr BG.CChar
-  -> BG.CInt
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_94ca108dca07ec6f =
-  BG.fromFFIType hs_bindgen_94ca108dca07ec6f_base
-
--- | Convert a long long integer into a string.
---
---     This requires a radix to specified for string format. Specifying 10 produces a decimal number, 16 hexadecimal, etc. Must be in the range of 2 to 36.
---
---     Note that this function will overflow a buffer if @str@ is not large enough to hold the output! It may be safer to use SDL_snprintf to clamp output, or SDL_asprintf to allocate a buffer. Otherwise, it doesn\'t hurt to allocate much more space than you expect to use (and don\'t forget possible negative signs, null terminator bytes, etc).
---
---     [Returns]: @str@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_ulltoa', 'sDL_itoa', @SDL_ltoa@
---
---     [C declaration]: @SDL_lltoa@, defined at @SDL3\/SDL_stdinc.h 3594:36@
-sDL_lltoa
-  :: BG.CLLong
-  -- ^
-  --
-  --           [@value@]: the long long integer to convert.
-  -> BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@str@]: the buffer to write the string into.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@radix@]: the radix to use for string generation.
-  -> IO (BG.Ptr BG.CChar)
-sDL_lltoa = hs_bindgen_94ca108dca07ec6f
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_ulltoa@
-foreign import ccall unsafe "hs_bindgen_d122b88ccc45fe33"
-  hs_bindgen_d122b88ccc45fe33_base
-    :: BG.Word64
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_ulltoa@
-hs_bindgen_d122b88ccc45fe33
-  :: BG.CULLong
-  -> BG.Ptr BG.CChar
-  -> BG.CInt
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_d122b88ccc45fe33 =
-  BG.fromFFIType hs_bindgen_d122b88ccc45fe33_base
-
--- | Convert an unsigned long long integer into a string.
---
---     This requires a radix to specified for string format. Specifying 10 produces a decimal number, 16 hexadecimal, etc. Must be in the range of 2 to 36.
---
---     Note that this function will overflow a buffer if @str@ is not large enough to hold the output! It may be safer to use SDL_snprintf to clamp output, or SDL_asprintf to allocate a buffer. Otherwise, it doesn\'t hurt to allocate much more space than you expect to use (and don\'t forget null terminator bytes, etc).
---
---     [Returns]: @str@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_lltoa', 'sDL_uitoa', @SDL_ultoa@
---
---     [C declaration]: @SDL_ulltoa@, defined at @SDL3\/SDL_stdinc.h 3622:36@
-sDL_ulltoa
-  :: BG.CULLong
-  -- ^
-  --
-  --           [@value@]: the unsigned long long integer to convert.
-  -> BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@str@]: the buffer to write the string into.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@radix@]: the radix to use for string generation.
-  -> IO (BG.Ptr BG.CChar)
-sDL_ulltoa = hs_bindgen_d122b88ccc45fe33
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_atoi@
-foreign import ccall unsafe "hs_bindgen_ca9f4297368b5437"
-  hs_bindgen_ca9f4297368b5437_base
-    :: BG.Ptr BG.Void
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_atoi@
-hs_bindgen_ca9f4297368b5437
-  :: PtrConst.PtrConst BG.CChar
-  -> IO BG.CInt
-hs_bindgen_ca9f4297368b5437 =
-  BG.fromFFIType hs_bindgen_ca9f4297368b5437_base
-
--- | Parse an @int@ from a string.
---
---     The result of calling @SDL_atoi(str)@ is equivalent to @(int)SDL_strtol(str, NULL, 10)@.
---
---     [Returns]: the parsed @int@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_atof', @SDL_strtol@, @SDL_strtoul@, 'sDL_strtoll', 'sDL_strtoull', 'sDL_strtod', 'sDL_itoa'
---
---     [C declaration]: @SDL_atoi@, defined at @SDL3\/SDL_stdinc.h 3646:33@
-sDL_atoi
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: The null-terminated string to read. Must not be NULL.
-  -> IO BG.CInt
-sDL_atoi = hs_bindgen_ca9f4297368b5437
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_atof@
-foreign import ccall unsafe "hs_bindgen_81f2fcbff595d766"
-  hs_bindgen_81f2fcbff595d766_base
-    :: BG.Ptr BG.Void
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_atof@
-hs_bindgen_81f2fcbff595d766
-  :: PtrConst.PtrConst BG.CChar
-  -> IO BG.CDouble
-hs_bindgen_81f2fcbff595d766 =
-  BG.fromFFIType hs_bindgen_81f2fcbff595d766_base
-
--- | Parse a @double@ from a string.
---
---     The result of calling @SDL_atof(str)@ is equivalent to @SDL_strtod(str, NULL)@.
---
---     [Returns]: the parsed @double@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_atoi', @SDL_strtol@, @SDL_strtoul@, 'sDL_strtoll', 'sDL_strtoull', 'sDL_strtod'
---
---     [C declaration]: @SDL_atof@, defined at @SDL3\/SDL_stdinc.h 3668:36@
-sDL_atof
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: The null-terminated string to read. Must not be NULL.
-  -> IO BG.CDouble
-sDL_atof = hs_bindgen_81f2fcbff595d766
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strtoll@
-foreign import ccall unsafe "hs_bindgen_29424912342d9a55"
-  hs_bindgen_29424912342d9a55_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Int64
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strtoll@
-hs_bindgen_29424912342d9a55
-  :: PtrConst.PtrConst BG.CChar
-  -> BG.Ptr (BG.Ptr BG.CChar)
-  -> BG.CInt
-  -> IO BG.CLLong
-hs_bindgen_29424912342d9a55 =
-  BG.fromFFIType hs_bindgen_29424912342d9a55_base
-
--- | Parse a @long long@ from a string.
---
---     If @str@ starts with whitespace, then those whitespace characters are skipped before attempting to parse the number.
---
---     If the parsed number does not fit inside a @long long@, the result is clamped to the minimum and maximum representable @long long@ values.
---
---     [Returns]: the parsed @long long@, or 0 if no number could be parsed.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_atoi', 'sDL_atof', @SDL_strtol@, @SDL_strtoul@, 'sDL_strtoull', 'sDL_strtod', 'sDL_lltoa'
---
---     [C declaration]: @SDL_strtoll@, defined at @SDL3\/SDL_stdinc.h 3770:39@
-sDL_strtoll
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: The null-terminated string to read. Must not be NULL.
-  -> BG.Ptr (BG.Ptr BG.CChar)
-  -- ^
-  --
-  --           [@endp@]: If not NULL, the address of the first invalid character (i.e. the next character after the parsed number) will be written to this pointer.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@base@]: The base of the integer to read. Supported values are 0 and 2 to 36 inclusive. If 0, the base will be inferred from the number\'s prefix (0x for hexadecimal, 0 for octal, decimal otherwise).
-  -> IO BG.CLLong
-sDL_strtoll = hs_bindgen_29424912342d9a55
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strtoull@
-foreign import ccall unsafe "hs_bindgen_fe908f5a8d183e7b"
-  hs_bindgen_fe908f5a8d183e7b_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word64
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strtoull@
-hs_bindgen_fe908f5a8d183e7b
-  :: PtrConst.PtrConst BG.CChar
-  -> BG.Ptr (BG.Ptr BG.CChar)
-  -> BG.CInt
-  -> IO BG.CULLong
-hs_bindgen_fe908f5a8d183e7b =
-  BG.fromFFIType hs_bindgen_fe908f5a8d183e7b_base
-
--- | Parse an @unsigned long long@ from a string.
---
---     If @str@ starts with whitespace, then those whitespace characters are skipped before attempting to parse the number.
---
---     If the parsed number does not fit inside an @unsigned long long@, the result is clamped to the maximum representable @unsigned long long@ value.
---
---     [Returns]: the parsed @unsigned long long@, or 0 if no number could be parsed.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_atoi', 'sDL_atof', @SDL_strtol@, 'sDL_strtoll', @SDL_strtoul@, 'sDL_strtod', 'sDL_ulltoa'
---
---     [C declaration]: @SDL_strtoull@, defined at @SDL3\/SDL_stdinc.h 3804:48@
-sDL_strtoull
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: The null-terminated string to read. Must not be NULL.
-  -> BG.Ptr (BG.Ptr BG.CChar)
-  -- ^
-  --
-  --           [@endp@]: If not NULL, the address of the first invalid character (i.e. the next character after the parsed number) will be written to this pointer.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@base@]: The base of the integer to read. Supported values are 0 and 2 to 36 inclusive. If 0, the base will be inferred from the number\'s prefix (0x for hexadecimal, 0 for octal, decimal otherwise).
-  -> IO BG.CULLong
-sDL_strtoull = hs_bindgen_fe908f5a8d183e7b
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strtod@
-foreign import ccall unsafe "hs_bindgen_93115f1648467a21"
-  hs_bindgen_93115f1648467a21_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strtod@
-hs_bindgen_93115f1648467a21
-  :: PtrConst.PtrConst BG.CChar
-  -> BG.Ptr (BG.Ptr BG.CChar)
-  -> IO BG.CDouble
-hs_bindgen_93115f1648467a21 =
-  BG.fromFFIType hs_bindgen_93115f1648467a21_base
-
--- | Parse a @double@ from a string.
---
---     This function makes fewer guarantees than the C runtime @strtod@:
---
---     * Only decimal notation is guaranteed to be supported. The handling of scientific and hexadecimal notation is unspecified.
---
---     * Whether or not INF and NAN can be parsed is unspecified.
---
---     * The precision of the result is unspecified.
---
---     [Returns]: the parsed @double@, or 0 if no number could be parsed.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_atoi', 'sDL_atof', @SDL_strtol@, 'sDL_strtoll', @SDL_strtoul@, 'sDL_strtoull'
---
---     [C declaration]: @SDL_strtod@, defined at @SDL3\/SDL_stdinc.h 3834:36@
-sDL_strtod
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: the null-terminated string to read. Must not be NULL.
-  -> BG.Ptr (BG.Ptr BG.CChar)
-  -- ^
-  --
-  --           [@endp@]: if not NULL, the address of the first invalid character (i.e. the next character after the parsed number) will be written to this pointer.
-  -> IO BG.CDouble
-sDL_strtod = hs_bindgen_93115f1648467a21
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strcmp@
-foreign import ccall unsafe "hs_bindgen_1165e1ac637a910f"
-  hs_bindgen_1165e1ac637a910f_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strcmp@
-hs_bindgen_1165e1ac637a910f
-  :: PtrConst.PtrConst BG.CChar
-  -> PtrConst.PtrConst BG.CChar
-  -> IO BG.CInt
-hs_bindgen_1165e1ac637a910f =
-  BG.fromFFIType hs_bindgen_1165e1ac637a910f_base
-
--- | Compare two null-terminated UTF-8 strings.
---
---     Due to the nature of UTF-8 encoding, this will work with Unicode strings, since effectively this function just compares bytes until it hits a null-terminating character. Also due to the nature of UTF-8, this can be used with @SDL_qsort()@ to put strings in (roughly) alphabetical order.
---
---     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_strcmp@, defined at @SDL3\/SDL_stdinc.h 3854:33@
-sDL_strcmp
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str1@]: the first string to compare. NULL is not permitted!
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str2@]: the second string to compare. NULL is not permitted!
-  -> IO BG.CInt
-sDL_strcmp = hs_bindgen_1165e1ac637a910f
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strncmp@
-foreign import ccall unsafe "hs_bindgen_6286679cc5d88e95"
-  hs_bindgen_6286679cc5d88e95_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strncmp@
-hs_bindgen_6286679cc5d88e95
-  :: PtrConst.PtrConst BG.CChar
-  -> PtrConst.PtrConst BG.CChar
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO BG.CInt
-hs_bindgen_6286679cc5d88e95 =
-  BG.fromFFIType hs_bindgen_6286679cc5d88e95_base
-
--- | Compare two UTF-8 strings up to a number of bytes.
---
---     Due to the nature of UTF-8 encoding, this will work with Unicode strings, since effectively this function just compares bytes until it hits a null-terminating character. Also due to the nature of UTF-8, this can be used with @SDL_qsort()@ to put strings in (roughly) alphabetical order.
---
---     Note that while this function is intended to be used with UTF-8, it is doing a bytewise comparison, and @maxlen@ specifies a /byte/ limit! If the limit lands in the middle of a multi-byte UTF-8 sequence, it will only compare a portion of the final character.
---
---     @maxlen@ specifies a maximum number of bytes to compare; if the strings match to this number of bytes (or both have matched to a null-terminator character before this number of bytes), they will be considered equal.
---
---     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_strncmp@, defined at @SDL3\/SDL_stdinc.h 3884:33@
-sDL_strncmp
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str1@]: the first string to compare. NULL is not permitted!
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str2@]: the second string to compare. NULL is not permitted!
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@maxlen@]: the maximum number of /bytes/ to compare.
-  -> IO BG.CInt
-sDL_strncmp = hs_bindgen_6286679cc5d88e95
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strcasecmp@
-foreign import ccall unsafe "hs_bindgen_592440e0cc89a66c"
-  hs_bindgen_592440e0cc89a66c_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strcasecmp@
-hs_bindgen_592440e0cc89a66c
-  :: PtrConst.PtrConst BG.CChar
-  -> PtrConst.PtrConst BG.CChar
-  -> IO BG.CInt
-hs_bindgen_592440e0cc89a66c =
-  BG.fromFFIType hs_bindgen_592440e0cc89a66c_base
-
--- | Compare two null-terminated UTF-8 strings, case-insensitively.
---
---     This will work with Unicode strings, using a technique called \"case-folding\" to handle the vast majority of case-sensitive human languages regardless of system locale. It can deal with expanding values: a German Eszett character can compare against two ASCII \'s\' chars and be considered a match, for example. A notable exception: it does not handle the Turkish \'i\' character; human language is complicated!
---
---     Since this handles Unicode, it expects the string to be well-formed UTF-8 and not a null-terminated string of arbitrary bytes. Bytes that are not valid UTF-8 are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), which is to say two strings of random bits may turn out to match if they convert to the same amount of replacement characters.
---
---     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_strcasecmp@, defined at @SDL3\/SDL_stdinc.h 3912:33@
-sDL_strcasecmp
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str1@]: the first string to compare. NULL is not permitted!
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str2@]: the second string to compare. NULL is not permitted!
-  -> IO BG.CInt
-sDL_strcasecmp = hs_bindgen_592440e0cc89a66c
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strncasecmp@
-foreign import ccall unsafe "hs_bindgen_9a7486257c6bf068"
-  hs_bindgen_9a7486257c6bf068_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strncasecmp@
-hs_bindgen_9a7486257c6bf068
-  :: PtrConst.PtrConst BG.CChar
-  -> PtrConst.PtrConst BG.CChar
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO BG.CInt
-hs_bindgen_9a7486257c6bf068 =
-  BG.fromFFIType hs_bindgen_9a7486257c6bf068_base
-
--- | Compare two UTF-8 strings, case-insensitively, up to a number of bytes.
---
---     This will work with Unicode strings, using a technique called \"case-folding\" to handle the vast majority of case-sensitive human languages regardless of system locale. It can deal with expanding values: a German Eszett character can compare against two ASCII \'s\' chars and be considered a match, for example. A notable exception: it does not handle the Turkish \'i\' character; human language is complicated!
---
---     Since this handles Unicode, it expects the string to be well-formed UTF-8 and not a null-terminated string of arbitrary bytes. Bytes that are not valid UTF-8 are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), which is to say two strings of random bits may turn out to match if they convert to the same amount of replacement characters.
---
---     Note that while this function is intended to be used with UTF-8, @maxlen@ specifies a /byte/ limit! If the limit lands in the middle of a multi-byte UTF-8 sequence, it may convert a portion of the final character to one or more Unicode character U+FFFD (REPLACEMENT CHARACTER) so as not to overflow a buffer.
---
---     @maxlen@ specifies a maximum number of bytes to compare; if the strings match to this number of bytes (or both have matched to a null-terminator character before this number of bytes), they will be considered equal.
---
---     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_strncasecmp@, defined at @SDL3\/SDL_stdinc.h 3952:33@
-sDL_strncasecmp
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str1@]: the first string to compare. NULL is not permitted!
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str2@]: the second string to compare. NULL is not permitted!
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@maxlen@]: the maximum number of bytes to compare.
-  -> IO BG.CInt
-sDL_strncasecmp = hs_bindgen_9a7486257c6bf068
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strpbrk@
-foreign import ccall unsafe "hs_bindgen_e53784dcceef6c88"
-  hs_bindgen_e53784dcceef6c88_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strpbrk@
-hs_bindgen_e53784dcceef6c88
-  :: PtrConst.PtrConst BG.CChar
-  -> PtrConst.PtrConst BG.CChar
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_e53784dcceef6c88 =
-  BG.fromFFIType hs_bindgen_e53784dcceef6c88_base
-
--- | Searches a string for the first occurrence of any character contained in a breakset, and returns a pointer from the string to that character.
---
---     [Returns]: A pointer to the location, in str, of the first occurrence of a character present in the breakset, or NULL if none is found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_strpbrk@, defined at @SDL3\/SDL_stdinc.h 3970:36@
-sDL_strpbrk
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: The null-terminated string to be searched. Must not be NULL, and must not overlap with @breakset@.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@breakset@]: A null-terminated string containing the list of characters to look for. Must not be NULL, and must not overlap with @str@.
-  -> IO (BG.Ptr BG.CChar)
-sDL_strpbrk = hs_bindgen_e53784dcceef6c88
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_StepUTF8@
-foreign import ccall unsafe "hs_bindgen_5010b6d322eef729"
-  hs_bindgen_5010b6d322eef729_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_StepUTF8@
-hs_bindgen_5010b6d322eef729
-  :: BG.Ptr (PtrConst.PtrConst BG.CChar)
-  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
-  -> IO Uint32
-hs_bindgen_5010b6d322eef729 =
-  BG.fromFFIType hs_bindgen_5010b6d322eef729_base
-
--- | Decode a UTF-8 string, one Unicode codepoint at a time.
---
---     This will return the first Unicode codepoint in the UTF-8 encoded string in @*pstr@, and then advance @*pstr@ past any consumed bytes before returning.
---
---     It will not access more than @*pslen@ bytes from the string. @*pslen@ will be adjusted, as well, subtracting the number of bytes consumed.
---
---     @pslen@ is allowed to be NULL, in which case the string /must/ be NULL-terminated, as the function will blindly read until it sees the NULL char.
---
---     if @*pslen@ is zero, it assumes the end of string is reached and returns a zero codepoint regardless of the contents of the string buffer.
---
---     If the resulting codepoint is zero (a NULL terminator), or @*pslen@ is zero, it will not advance @*pstr@ or @*pslen@ at all.
---
---     Generally this function is called in a loop until it returns zero, adjusting its parameters each iteration.
---
---     If an invalid UTF-8 sequence is encountered, this function returns SDL_INVALID_UNICODE_CODEPOINT and advances the string\/length by one byte (which is to say, a multibyte sequence might produce several SDL_INVALID_UNICODE_CODEPOINT returns before it syncs to the next valid UTF-8 sequence).
---
---     Several things can generate invalid UTF-8 sequences, including overlong encodings, the use of UTF-16 surrogate values, and truncated data. Please refer to [RFC3629](https://www.ietf.org/rfc/rfc3629.txt) for details.
---
---     [Returns]: the first Unicode codepoint in the string.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_StepUTF8@, defined at @SDL3\/SDL_stdinc.h 4030:36@
-sDL_StepUTF8
-  :: BG.Ptr (PtrConst.PtrConst BG.CChar)
-  -- ^
-  --
-  --           [@pstr@]: a pointer to a UTF-8 string pointer to be read and adjusted.
-  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@pslen@]: a pointer to the number of bytes in the string, to be read and adjusted. NULL is allowed.
-  -> IO Uint32
-sDL_StepUTF8 = hs_bindgen_5010b6d322eef729
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_StepBackUTF8@
-foreign import ccall unsafe "hs_bindgen_e9d45c14c965c799"
-  hs_bindgen_e9d45c14c965c799_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_StepBackUTF8@
-hs_bindgen_e9d45c14c965c799
-  :: PtrConst.PtrConst BG.CChar
-  -> BG.Ptr (PtrConst.PtrConst BG.CChar)
-  -> IO Uint32
-hs_bindgen_e9d45c14c965c799 =
-  BG.fromFFIType hs_bindgen_e9d45c14c965c799_base
-
--- | Decode a UTF-8 string in reverse, one Unicode codepoint at a time.
---
---     This will go to the start of the previous Unicode codepoint in the string, move @*pstr@ to that location and return that codepoint.
---
---     If @*pstr@ is already at the start of the string), it will not advance @*pstr@ at all.
---
---     Generally this function is called in a loop until it returns zero, adjusting its parameter each iteration.
---
---     If an invalid UTF-8 sequence is encountered, this function returns SDL_INVALID_UNICODE_CODEPOINT.
---
---     Several things can generate invalid UTF-8 sequences, including overlong encodings, the use of UTF-16 surrogate values, and truncated data. Please refer to [RFC3629](https://www.ietf.org/rfc/rfc3629.txt) for details.
---
---     [Returns]: the previous Unicode codepoint in the string.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_StepBackUTF8@, defined at @SDL3\/SDL_stdinc.h 4061:36@
-sDL_StepBackUTF8
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@start@]: a pointer to the beginning of the UTF-8 string.
-  -> BG.Ptr (PtrConst.PtrConst BG.CChar)
-  -- ^
-  --
-  --           [@pstr@]: a pointer to a UTF-8 string pointer to be read and adjusted.
-  -> IO Uint32
-sDL_StepBackUTF8 = hs_bindgen_e9d45c14c965c799
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_UCS4ToUTF8@
-foreign import ccall unsafe "hs_bindgen_2621d8f742eba582"
-  hs_bindgen_2621d8f742eba582_base
-    :: BG.Word32
-    -> BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_UCS4ToUTF8@
-hs_bindgen_2621d8f742eba582
-  :: Uint32
-  -> BG.Ptr BG.CChar
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_2621d8f742eba582 =
-  BG.fromFFIType hs_bindgen_2621d8f742eba582_base
-
--- | Convert a single Unicode codepoint to UTF-8.
---
---     The buffer pointed to by @dst@ must be at least 4 bytes long, as this function may generate between 1 and 4 bytes of output.
---
---     This function returns the first byte /after/ the newly-written UTF-8 sequence, which is useful for encoding multiple codepoints in a loop, or knowing where to write a NULL-terminator character to end the string (in either case, plan to have a buffer of /more/ than 4 bytes!).
---
---     If @codepoint@ is an invalid value (outside the Unicode range, or a UTF-16 surrogate value, etc), this will use U+FFFD (REPLACEMENT CHARACTER) for the codepoint instead, and not set an error.
---
---     If @dst@ is NULL, this returns NULL immediately without writing to the pointer and without setting an error.
---
---     [Returns]: the first byte past the newly-written UTF-8 sequence.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [C declaration]: @SDL_UCS4ToUTF8@, defined at @SDL3\/SDL_stdinc.h 4090:36@
-sDL_UCS4ToUTF8
-  :: Uint32
-  -- ^
-  --
-  --           [@codepoint@]: a Unicode codepoint to convert to UTF-8.
-  -> BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@dst@]: the location to write the encoded UTF-8. Must point to at least 4 bytes!
-  -> IO (BG.Ptr BG.CChar)
-sDL_UCS4ToUTF8 = hs_bindgen_2621d8f742eba582
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_srand@
-foreign import ccall unsafe "hs_bindgen_1620e07051837ddb"
-  hs_bindgen_1620e07051837ddb_base
-    :: BG.Word64
-    -> IO ()
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_srand@
-hs_bindgen_1620e07051837ddb
-  :: Uint64
-  -> IO ()
-hs_bindgen_1620e07051837ddb =
-  BG.fromFFIType hs_bindgen_1620e07051837ddb_base
-
--- | Seeds the pseudo-random number generator.
---
---     Reusing the seed number will cause @SDL_rand()@ to repeat the same stream of \'random\' numbers.
---
---     [Thread safety]: This should be called on the same thread that calls @SDL_rand()@
---
---     @since 3.2.0
---
---     [See also]: 'sDL_rand', 'sDL_rand_bits', 'sDL_randf'
---
---     [C declaration]: @SDL_srand@, defined at @SDL3\/SDL_stdinc.h 4302:34@
-sDL_srand
-  :: Uint64
-  -- ^
-  --
-  --           [@seed@]: the value to use as a random number seed, or 0 to use SDL_GetPerformanceCounter().
-  -> IO ()
-sDL_srand = hs_bindgen_1620e07051837ddb
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_rand@
-foreign import ccall unsafe "hs_bindgen_bb32712cf4e3959c"
-  hs_bindgen_bb32712cf4e3959c_base
-    :: BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_rand@
-hs_bindgen_bb32712cf4e3959c
-  :: Sint32
-  -> IO Sint32
-hs_bindgen_bb32712cf4e3959c =
-  BG.fromFFIType hs_bindgen_bb32712cf4e3959c_base
-
--- | Generate a pseudo-random number less than n for positive n
---
---     The method used is faster and of better quality than @rand() % n@. Odds are roughly 99.9% even for n = 1 million. Evenness is better for smaller n, and much worse as n gets bigger.
---
---     Example: to simulate a d6 use @SDL_rand(6) + 1@ The +1 converts 0..5 to 1..6
---
---     If you want to generate a pseudo-random number in the full range of 'Sint32', you should use: ('Sint32') @SDL_rand_bits()@
---
---     If you want reproducible output, be sure to initialize with @SDL_srand()@ first.
---
---     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
---
---     [Returns]: a random value in the range of [0 .. n-1].
---
---     [Thread safety]: All calls should be made from a single thread
---
---     @since 3.2.0
---
---     [See also]: 'sDL_srand', 'sDL_randf'
---
---     [C declaration]: @SDL_rand@, defined at @SDL3\/SDL_stdinc.h 4336:36@
-sDL_rand
-  :: Sint32
-  -- ^
-  --
-  --           [@n@]: the number of possible outcomes. n must be positive.
-  -> IO Sint32
-sDL_rand = hs_bindgen_bb32712cf4e3959c
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_randf@
-foreign import ccall unsafe "hs_bindgen_4354197498dc7635"
-  hs_bindgen_4354197498dc7635_base
-    :: IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_randf@
-hs_bindgen_4354197498dc7635 :: IO BG.CFloat
-hs_bindgen_4354197498dc7635 =
-  BG.fromFFIType hs_bindgen_4354197498dc7635_base
-
--- | Generate a uniform pseudo-random floating point number less than 1.0
---
---     If you want reproducible output, be sure to initialize with @SDL_srand()@ first.
---
---     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
---
---     [Returns]: a random value in the range of [0.0, 1.0).
---
---     [Thread safety]: All calls should be made from a single thread
---
---     @since 3.2.0
---
---     [See also]: 'sDL_srand', 'sDL_rand'
---
---     [C declaration]: @SDL_randf@, defined at @SDL3\/SDL_stdinc.h 4359:35@
-sDL_randf :: IO BG.CFloat
-sDL_randf = hs_bindgen_4354197498dc7635
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_rand_bits@
-foreign import ccall unsafe "hs_bindgen_eed752851bd8b3e2"
-  hs_bindgen_eed752851bd8b3e2_base
-    :: IO BG.Word32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_rand_bits@
-hs_bindgen_eed752851bd8b3e2 :: IO Uint32
-hs_bindgen_eed752851bd8b3e2 =
-  BG.fromFFIType hs_bindgen_eed752851bd8b3e2_base
-
--- | Generate 32 pseudo-random bits.
---
---     You likely want to use @SDL_rand()@ to get a psuedo-random number instead.
---
---     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
---
---     [Returns]: a random value in the range of [0-SDL_MAX_UINT32].
---
---     [Thread safety]: All calls should be made from a single thread
---
---     @since 3.2.0
---
---     [See also]: 'sDL_rand', 'sDL_randf', 'sDL_srand'
---
---     [C declaration]: @SDL_rand_bits@, defined at @SDL3\/SDL_stdinc.h 4382:36@
-sDL_rand_bits :: IO Uint32
-sDL_rand_bits = hs_bindgen_eed752851bd8b3e2
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_rand_r@
-foreign import ccall unsafe "hs_bindgen_e31222be551ae9d1"
-  hs_bindgen_e31222be551ae9d1_base
-    :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_rand_r@
-hs_bindgen_e31222be551ae9d1
-  :: BG.Ptr Uint64
-  -> Sint32
-  -> IO Sint32
-hs_bindgen_e31222be551ae9d1 =
-  BG.fromFFIType hs_bindgen_e31222be551ae9d1_base
-
--- | Generate a pseudo-random number less than n for positive n
---
---     The method used is faster and of better quality than @rand() % n@. Odds are roughly 99.9% even for n = 1 million. Evenness is better for smaller n, and much worse as n gets bigger.
---
---     Example: to simulate a d6 use @SDL_rand_r(state, 6) + 1@ The +1 converts 0..5 to 1..6
---
---     If you want to generate a pseudo-random number in the full range of 'Sint32', you should use: ('Sint32')SDL_rand_bits_r(state)
---
---     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
---
---     [Returns]: a random value in the range of [0 .. n-1].
---
---     [Thread safety]: This function is thread-safe, as long as the state pointer isn\'t shared between threads.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_rand', 'sDL_rand_bits_r', 'sDL_randf_r'
---
---     [C declaration]: @SDL_rand_r@, defined at @SDL3\/SDL_stdinc.h 4417:36@
-sDL_rand_r
-  :: BG.Ptr Uint64
-  -- ^
-  --
-  --           [@state@]: a pointer to the current random number state, this may not be NULL.
-  -> Sint32
-  -- ^
-  --
-  --           [@n@]: the number of possible outcomes. n must be positive.
-  -> IO Sint32
-sDL_rand_r = hs_bindgen_e31222be551ae9d1
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_randf_r@
-foreign import ccall unsafe "hs_bindgen_b728fa521e1f33ba"
-  hs_bindgen_b728fa521e1f33ba_base
-    :: BG.Ptr BG.Void
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_randf_r@
-hs_bindgen_b728fa521e1f33ba
-  :: BG.Ptr Uint64
-  -> IO BG.CFloat
-hs_bindgen_b728fa521e1f33ba =
-  BG.fromFFIType hs_bindgen_b728fa521e1f33ba_base
-
--- | Generate a uniform pseudo-random floating point number less than 1.0
---
---     If you want reproducible output, be sure to initialize with @SDL_srand()@ first.
---
---     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
---
---     [Returns]: a random value in the range of [0.0, 1.0).
---
---     [Thread safety]: This function is thread-safe, as long as the state pointer isn\'t shared between threads.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_rand_bits_r', 'sDL_rand_r', 'sDL_randf'
---
---     [C declaration]: @SDL_randf_r@, defined at @SDL3\/SDL_stdinc.h 4444:35@
-sDL_randf_r
-  :: BG.Ptr Uint64
-  -- ^
-  --
-  --           [@state@]: a pointer to the current random number state, this may not be NULL.
-  -> IO BG.CFloat
-sDL_randf_r = hs_bindgen_b728fa521e1f33ba
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_rand_bits_r@
-foreign import ccall unsafe "hs_bindgen_1779b3d1ac6c6ca0"
-  hs_bindgen_1779b3d1ac6c6ca0_base
-    :: BG.Ptr BG.Void
-    -> IO BG.Word32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_rand_bits_r@
-hs_bindgen_1779b3d1ac6c6ca0
-  :: BG.Ptr Uint64
-  -> IO Uint32
-hs_bindgen_1779b3d1ac6c6ca0 =
-  BG.fromFFIType hs_bindgen_1779b3d1ac6c6ca0_base
-
--- | Generate 32 pseudo-random bits.
---
---     You likely want to use @SDL_rand_r()@ to get a psuedo-random number instead.
---
---     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
---
---     [Returns]: a random value in the range of [0-SDL_MAX_UINT32].
---
---     [Thread safety]: This function is thread-safe, as long as the state pointer isn\'t shared between threads.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_rand_r', 'sDL_randf_r'
---
---     [C declaration]: @SDL_rand_bits_r@, defined at @SDL3\/SDL_stdinc.h 4469:36@
-sDL_rand_bits_r
-  :: BG.Ptr Uint64
-  -- ^
-  --
-  --           [@state@]: a pointer to the current random number state, this may not be NULL.
-  -> IO Uint32
-sDL_rand_bits_r = hs_bindgen_1779b3d1ac6c6ca0
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_acos@
-foreign import ccall unsafe "hs_bindgen_77d2b09de2f907bb"
-  hs_bindgen_77d2b09de2f907bb_base
-    :: Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_acos@
-hs_bindgen_77d2b09de2f907bb
-  :: BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_77d2b09de2f907bb =
-  BG.fromFFIType hs_bindgen_77d2b09de2f907bb_base
-
--- | Compute the arc cosine of @x@.
---
---     The definition of @y = acos(x)@ is @x = cos(y)@.
---
---     Domain: @-1 \<= x \<= 1@
---
---     Range: @0 \<= y \<= Pi@
---
---     This function operates on double-precision floating point values, use SDL_acosf for single-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: arc cosine of @x@, in radians.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_acosf', 'sDL_asin', 'sDL_cos'
---
---     [C declaration]: @SDL_acos@, defined at @SDL3\/SDL_stdinc.h 4523:36@
-sDL_acos
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CDouble
-sDL_acos = hs_bindgen_77d2b09de2f907bb
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_acosf@
-foreign import ccall unsafe "hs_bindgen_a7dfe79fdc884d97"
-  hs_bindgen_a7dfe79fdc884d97_base
-    :: Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_acosf@
-hs_bindgen_a7dfe79fdc884d97
-  :: BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_a7dfe79fdc884d97 =
-  BG.fromFFIType hs_bindgen_a7dfe79fdc884d97_base
-
--- | Compute the arc cosine of @x@.
---
---     The definition of @y = acos(x)@ is @x = cos(y)@.
---
---     Domain: @-1 \<= x \<= 1@
---
---     Range: @0 \<= y \<= Pi@
---
---     This function operates on single-precision floating point values, use SDL_acos for double-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: arc cosine of @x@, in radians.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_acos', 'sDL_asinf', 'sDL_cosf'
---
---     [C declaration]: @SDL_acosf@, defined at @SDL3\/SDL_stdinc.h 4553:35@
-sDL_acosf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CFloat
-sDL_acosf = hs_bindgen_a7dfe79fdc884d97
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_asin@
-foreign import ccall unsafe "hs_bindgen_c1c2c5b2424934f7"
-  hs_bindgen_c1c2c5b2424934f7_base
-    :: Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_asin@
-hs_bindgen_c1c2c5b2424934f7
-  :: BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_c1c2c5b2424934f7 =
-  BG.fromFFIType hs_bindgen_c1c2c5b2424934f7_base
-
--- | Compute the arc sine of @x@.
---
---     The definition of @y = asin(x)@ is @x = sin(y)@.
---
---     Domain: @-1 \<= x \<= 1@
---
---     Range: @-Pi\/2 \<= y \<= Pi\/2@
---
---     This function operates on double-precision floating point values, use SDL_asinf for single-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: arc sine of @x@, in radians.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_asinf', 'sDL_acos', 'sDL_sin'
---
---     [C declaration]: @SDL_asin@, defined at @SDL3\/SDL_stdinc.h 4583:36@
-sDL_asin
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CDouble
-sDL_asin = hs_bindgen_c1c2c5b2424934f7
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_asinf@
-foreign import ccall unsafe "hs_bindgen_c0162f35a592c4d6"
-  hs_bindgen_c0162f35a592c4d6_base
-    :: Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_asinf@
-hs_bindgen_c0162f35a592c4d6
-  :: BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_c0162f35a592c4d6 =
-  BG.fromFFIType hs_bindgen_c0162f35a592c4d6_base
-
--- | Compute the arc sine of @x@.
---
---     The definition of @y = asin(x)@ is @x = sin(y)@.
---
---     Domain: @-1 \<= x \<= 1@
---
---     Range: @-Pi\/2 \<= y \<= Pi\/2@
---
---     This function operates on single-precision floating point values, use SDL_asin for double-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: arc sine of @x@, in radians.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_asin', 'sDL_acosf', 'sDL_sinf'
---
---     [C declaration]: @SDL_asinf@, defined at @SDL3\/SDL_stdinc.h 4613:35@
-sDL_asinf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CFloat
-sDL_asinf = hs_bindgen_c0162f35a592c4d6
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_atan@
-foreign import ccall unsafe "hs_bindgen_62e948cecf885b31"
-  hs_bindgen_62e948cecf885b31_base
-    :: Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_atan@
-hs_bindgen_62e948cecf885b31
-  :: BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_62e948cecf885b31 =
-  BG.fromFFIType hs_bindgen_62e948cecf885b31_base
-
--- | Compute the arc tangent of @x@.
---
---     The definition of @y = atan(x)@ is @x = tan(y)@.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-Pi\/2 \<= y \<= Pi\/2@
---
---     This function operates on double-precision floating point values, use SDL_atanf for single-precision floats.
---
---     To calculate the arc tangent of y \/ x, use SDL_atan2.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: arc tangent of of @x@ in radians, or 0 if @x = 0@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_atanf', 'sDL_atan2', 'sDL_tan'
---
---     [C declaration]: @SDL_atan@, defined at @SDL3\/SDL_stdinc.h 4645:36@
-sDL_atan
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CDouble
-sDL_atan = hs_bindgen_62e948cecf885b31
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_atanf@
-foreign import ccall unsafe "hs_bindgen_429e4b987b465ff9"
-  hs_bindgen_429e4b987b465ff9_base
-    :: Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_atanf@
-hs_bindgen_429e4b987b465ff9
-  :: BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_429e4b987b465ff9 =
-  BG.fromFFIType hs_bindgen_429e4b987b465ff9_base
-
--- | Compute the arc tangent of @x@.
---
---     The definition of @y = atan(x)@ is @x = tan(y)@.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-Pi\/2 \<= y \<= Pi\/2@
---
---     This function operates on single-precision floating point values, use SDL_atan for dboule-precision floats.
---
---     To calculate the arc tangent of y \/ x, use SDL_atan2f.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: arc tangent of of @x@ in radians, or 0 if @x = 0@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_atan', 'sDL_atan2f', 'sDL_tanf'
---
---     [C declaration]: @SDL_atanf@, defined at @SDL3\/SDL_stdinc.h 4677:35@
-sDL_atanf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CFloat
-sDL_atanf = hs_bindgen_429e4b987b465ff9
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_atan2@
-foreign import ccall unsafe "hs_bindgen_dd25876f2db3e27f"
-  hs_bindgen_dd25876f2db3e27f_base
-    :: Double
-    -> Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_atan2@
-hs_bindgen_dd25876f2db3e27f
-  :: BG.CDouble
-  -> BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_dd25876f2db3e27f =
-  BG.fromFFIType hs_bindgen_dd25876f2db3e27f_base
-
--- | Compute the arc tangent of @y \/ x@, using the signs of x and y to adjust the result\'s quadrant.
---
---     The definition of @z = atan2(x, y)@ is @y = x tan(z)@, where the quadrant of z is determined based on the signs of x and y.
---
---     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= INF@
---
---     Range: @-Pi \<= y \<= Pi@
---
---     This function operates on double-precision floating point values, use SDL_atan2f for single-precision floats.
---
---     To calculate the arc tangent of a single value, use SDL_atan.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: arc tangent of of @y \/ x@ in radians, or, if @x = 0@, either @-Pi\/2@, @0@, or @Pi\/2@, depending on the value of @y@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_atan2f', 'sDL_atan', 'sDL_tan'
---
---     [C declaration]: @SDL_atan2@, defined at @SDL3\/SDL_stdinc.h 4713:36@
-sDL_atan2
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@y@]: floating point value of the numerator (y coordinate).
-  -> BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value of the denominator (x coordinate).
-  -> IO BG.CDouble
-sDL_atan2 = hs_bindgen_dd25876f2db3e27f
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_atan2f@
-foreign import ccall unsafe "hs_bindgen_8131501831457d98"
-  hs_bindgen_8131501831457d98_base
-    :: Float
-    -> Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_atan2f@
-hs_bindgen_8131501831457d98
-  :: BG.CFloat
-  -> BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_8131501831457d98 =
-  BG.fromFFIType hs_bindgen_8131501831457d98_base
-
--- | Compute the arc tangent of @y \/ x@, using the signs of x and y to adjust the result\'s quadrant.
---
---     The definition of @z = atan2(x, y)@ is @y = x tan(z)@, where the quadrant of z is determined based on the signs of x and y.
---
---     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= INF@
---
---     Range: @-Pi \<= y \<= Pi@
---
---     This function operates on single-precision floating point values, use SDL_atan2 for double-precision floats.
---
---     To calculate the arc tangent of a single value, use SDL_atanf.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: arc tangent of of @y \/ x@ in radians, or, if @x = 0@, either @-Pi\/2@, @0@, or @Pi\/2@, depending on the value of @y@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_atan2', 'sDL_atan', 'sDL_tan'
---
---     [C declaration]: @SDL_atan2f@, defined at @SDL3\/SDL_stdinc.h 4749:35@
-sDL_atan2f
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@y@]: floating point value of the numerator (y coordinate).
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value of the denominator (x coordinate).
-  -> IO BG.CFloat
-sDL_atan2f = hs_bindgen_8131501831457d98
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_ceil@
-foreign import ccall unsafe "hs_bindgen_6654a059aee78106"
-  hs_bindgen_6654a059aee78106_base
-    :: Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_ceil@
-hs_bindgen_6654a059aee78106
-  :: BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_6654a059aee78106 =
-  BG.fromFFIType hs_bindgen_6654a059aee78106_base
-
--- | Compute the ceiling of @x@.
---
---     The ceiling of @x@ is the smallest integer @y@ such that @y >= x@, i.e @x@ rounded up to the nearest integer.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-INF \<= y \<= INF@, y integer
---
---     This function operates on double-precision floating point values, use SDL_ceilf for single-precision floats.
---
---     [Returns]: the ceiling of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_ceilf', 'sDL_floor', 'sDL_trunc', 'sDL_round', @SDL_lround@
---
---     [C declaration]: @SDL_ceil@, defined at @SDL3\/SDL_stdinc.h 4777:36@
-sDL_ceil
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CDouble
-sDL_ceil = hs_bindgen_6654a059aee78106
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_ceilf@
-foreign import ccall unsafe "hs_bindgen_ad644f683da406f9"
-  hs_bindgen_ad644f683da406f9_base
-    :: Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_ceilf@
-hs_bindgen_ad644f683da406f9
-  :: BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_ad644f683da406f9 =
-  BG.fromFFIType hs_bindgen_ad644f683da406f9_base
-
--- | Compute the ceiling of @x@.
---
---     The ceiling of @x@ is the smallest integer @y@ such that @y >= x@, i.e @x@ rounded up to the nearest integer.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-INF \<= y \<= INF@, y integer
---
---     This function operates on single-precision floating point values, use SDL_ceil for double-precision floats.
---
---     [Returns]: the ceiling of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_ceil', 'sDL_floorf', 'sDL_truncf', 'sDL_roundf', @SDL_lroundf@
---
---     [C declaration]: @SDL_ceilf@, defined at @SDL3\/SDL_stdinc.h 4805:35@
-sDL_ceilf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CFloat
-sDL_ceilf = hs_bindgen_ad644f683da406f9
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_copysign@
-foreign import ccall unsafe "hs_bindgen_8091ddede7c04cbc"
-  hs_bindgen_8091ddede7c04cbc_base
-    :: Double
-    -> Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_copysign@
-hs_bindgen_8091ddede7c04cbc
-  :: BG.CDouble
-  -> BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_8091ddede7c04cbc =
-  BG.fromFFIType hs_bindgen_8091ddede7c04cbc_base
-
--- | Copy the sign of one floating-point value to another.
---
---     The definition of copysign is that @copysign(x, y) = abs(x) * sign(y)@.
---
---     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= f@
---
---     Range: @-INF \<= z \<= INF@
---
---     This function operates on double-precision floating point values, use SDL_copysignf for single-precision floats.
---
---     [Returns]: the floating point value with the sign of y and the magnitude of x.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_copysignf', 'sDL_fabs'
---
---     [C declaration]: @SDL_copysign@, defined at @SDL3\/SDL_stdinc.h 4831:36@
-sDL_copysign
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value to use as the magnitude.
-  -> BG.CDouble
-  -- ^
-  --
-  --           [@y@]: floating point value to use as the sign.
-  -> IO BG.CDouble
-sDL_copysign = hs_bindgen_8091ddede7c04cbc
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_copysignf@
-foreign import ccall unsafe "hs_bindgen_b3f4ceb6b2fe20ee"
-  hs_bindgen_b3f4ceb6b2fe20ee_base
-    :: Float
-    -> Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_copysignf@
-hs_bindgen_b3f4ceb6b2fe20ee
-  :: BG.CFloat
-  -> BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_b3f4ceb6b2fe20ee =
-  BG.fromFFIType hs_bindgen_b3f4ceb6b2fe20ee_base
-
--- | Copy the sign of one floating-point value to another.
---
---     The definition of copysign is that @copysign(x, y) = abs(x) * sign(y)@.
---
---     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= f@
---
---     Range: @-INF \<= z \<= INF@
---
---     This function operates on single-precision floating point values, use SDL_copysign for double-precision floats.
---
---     [Returns]: the floating point value with the sign of y and the magnitude of x.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_copysign', 'sDL_fabsf'
---
---     [C declaration]: @SDL_copysignf@, defined at @SDL3\/SDL_stdinc.h 4857:35@
-sDL_copysignf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value to use as the magnitude.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@y@]: floating point value to use as the sign.
-  -> IO BG.CFloat
-sDL_copysignf = hs_bindgen_b3f4ceb6b2fe20ee
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_cos@
-foreign import ccall unsafe "hs_bindgen_a3469aec056551e2"
-  hs_bindgen_a3469aec056551e2_base
-    :: Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_cos@
-hs_bindgen_a3469aec056551e2
-  :: BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_a3469aec056551e2 =
-  BG.fromFFIType hs_bindgen_a3469aec056551e2_base
-
--- | Compute the cosine of @x@.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-1 \<= y \<= 1@
---
---     This function operates on double-precision floating point values, use SDL_cosf for single-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: cosine of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_cosf', 'sDL_acos', 'sDL_sin'
---
---     [C declaration]: @SDL_cos@, defined at @SDL3\/SDL_stdinc.h 4885:36@
-sDL_cos
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value, in radians.
-  -> IO BG.CDouble
-sDL_cos = hs_bindgen_a3469aec056551e2
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_cosf@
-foreign import ccall unsafe "hs_bindgen_905fd229e6d8b35e"
-  hs_bindgen_905fd229e6d8b35e_base
-    :: Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_cosf@
-hs_bindgen_905fd229e6d8b35e
-  :: BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_905fd229e6d8b35e =
-  BG.fromFFIType hs_bindgen_905fd229e6d8b35e_base
-
--- | Compute the cosine of @x@.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-1 \<= y \<= 1@
---
---     This function operates on single-precision floating point values, use SDL_cos for double-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: cosine of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_cos', 'sDL_acosf', 'sDL_sinf'
---
---     [C declaration]: @SDL_cosf@, defined at @SDL3\/SDL_stdinc.h 4913:35@
-sDL_cosf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value, in radians.
-  -> IO BG.CFloat
-sDL_cosf = hs_bindgen_905fd229e6d8b35e
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_exp@
-foreign import ccall unsafe "hs_bindgen_1512e406037d12ac"
-  hs_bindgen_1512e406037d12ac_base
-    :: Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_exp@
-hs_bindgen_1512e406037d12ac
-  :: BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_1512e406037d12ac =
-  BG.fromFFIType hs_bindgen_1512e406037d12ac_base
-
--- | Compute the exponential of @x@.
---
---     The definition of @y = exp(x)@ is @y = e^x@, where @e@ is the base of the natural logarithm. The inverse is the natural logarithm, SDL_log.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @0 \<= y \<= INF@
---
---     The output will overflow if @exp(x)@ is too large to be represented.
---
---     This function operates on double-precision floating point values, use SDL_expf for single-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: value of @e^x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_expf', 'sDL_log'
---
---     [C declaration]: @SDL_exp@, defined at @SDL3\/SDL_stdinc.h 4945:36@
-sDL_exp
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CDouble
-sDL_exp = hs_bindgen_1512e406037d12ac
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_expf@
-foreign import ccall unsafe "hs_bindgen_d3dd134efe3abfff"
-  hs_bindgen_d3dd134efe3abfff_base
-    :: Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_expf@
-hs_bindgen_d3dd134efe3abfff
-  :: BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_d3dd134efe3abfff =
-  BG.fromFFIType hs_bindgen_d3dd134efe3abfff_base
-
--- | Compute the exponential of @x@.
---
---     The definition of @y = exp(x)@ is @y = e^x@, where @e@ is the base of the natural logarithm. The inverse is the natural logarithm, SDL_logf.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @0 \<= y \<= INF@
---
---     The output will overflow if @exp(x)@ is too large to be represented.
---
---     This function operates on single-precision floating point values, use SDL_exp for double-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: value of @e^x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_exp', 'sDL_logf'
---
---     [C declaration]: @SDL_expf@, defined at @SDL3\/SDL_stdinc.h 4977:35@
-sDL_expf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CFloat
-sDL_expf = hs_bindgen_d3dd134efe3abfff
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_fabs@
-foreign import ccall unsafe "hs_bindgen_52ba4ac175596d0a"
-  hs_bindgen_52ba4ac175596d0a_base
-    :: Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_fabs@
-hs_bindgen_52ba4ac175596d0a
-  :: BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_52ba4ac175596d0a =
-  BG.fromFFIType hs_bindgen_52ba4ac175596d0a_base
-
--- | Compute the absolute value of @x@
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @0 \<= y \<= INF@
---
---     This function operates on double-precision floating point values, use SDL_fabsf for single-precision floats.
---
---     [Returns]: the absolute value of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_fabsf'
---
---     [C declaration]: @SDL_fabs@, defined at @SDL3\/SDL_stdinc.h 4998:36@
-sDL_fabs
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value to use as the magnitude.
-  -> IO BG.CDouble
-sDL_fabs = hs_bindgen_52ba4ac175596d0a
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_fabsf@
-foreign import ccall unsafe "hs_bindgen_184b19c145435e41"
-  hs_bindgen_184b19c145435e41_base
-    :: Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_fabsf@
-hs_bindgen_184b19c145435e41
-  :: BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_184b19c145435e41 =
-  BG.fromFFIType hs_bindgen_184b19c145435e41_base
-
--- | Compute the absolute value of @x@
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @0 \<= y \<= INF@
---
---     This function operates on single-precision floating point values, use SDL_fabs for double-precision floats.
---
---     [Returns]: the absolute value of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_fabs'
---
---     [C declaration]: @SDL_fabsf@, defined at @SDL3\/SDL_stdinc.h 5019:35@
-sDL_fabsf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value to use as the magnitude.
-  -> IO BG.CFloat
-sDL_fabsf = hs_bindgen_184b19c145435e41
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_floor@
-foreign import ccall unsafe "hs_bindgen_f490c8eee1698a66"
-  hs_bindgen_f490c8eee1698a66_base
-    :: Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_floor@
-hs_bindgen_f490c8eee1698a66
-  :: BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_f490c8eee1698a66 =
-  BG.fromFFIType hs_bindgen_f490c8eee1698a66_base
-
--- | Compute the floor of @x@.
---
---     The floor of @x@ is the largest integer @y@ such that @y \<= x@, i.e @x@ rounded down to the nearest integer.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-INF \<= y \<= INF@, y integer
---
---     This function operates on double-precision floating point values, use SDL_floorf for single-precision floats.
---
---     [Returns]: the floor of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_floorf', 'sDL_ceil', 'sDL_trunc', 'sDL_round', @SDL_lround@
---
---     [C declaration]: @SDL_floor@, defined at @SDL3\/SDL_stdinc.h 5047:36@
-sDL_floor
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CDouble
-sDL_floor = hs_bindgen_f490c8eee1698a66
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_floorf@
-foreign import ccall unsafe "hs_bindgen_2f0b4572dde60cf4"
-  hs_bindgen_2f0b4572dde60cf4_base
-    :: Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_floorf@
-hs_bindgen_2f0b4572dde60cf4
-  :: BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_2f0b4572dde60cf4 =
-  BG.fromFFIType hs_bindgen_2f0b4572dde60cf4_base
-
--- | Compute the floor of @x@.
---
---     The floor of @x@ is the largest integer @y@ such that @y \<= x@, i.e @x@ rounded down to the nearest integer.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-INF \<= y \<= INF@, y integer
---
---     This function operates on single-precision floating point values, use SDL_floor for double-precision floats.
---
---     [Returns]: the floor of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_floor', 'sDL_ceilf', 'sDL_truncf', 'sDL_roundf', @SDL_lroundf@
---
---     [C declaration]: @SDL_floorf@, defined at @SDL3\/SDL_stdinc.h 5075:35@
-sDL_floorf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CFloat
-sDL_floorf = hs_bindgen_2f0b4572dde60cf4
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_trunc@
-foreign import ccall unsafe "hs_bindgen_0babb20dade49b7a"
-  hs_bindgen_0babb20dade49b7a_base
-    :: Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_trunc@
-hs_bindgen_0babb20dade49b7a
-  :: BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_0babb20dade49b7a =
-  BG.fromFFIType hs_bindgen_0babb20dade49b7a_base
-
--- | Truncate @x@ to an integer.
---
---     Rounds @x@ to the next closest integer to 0. This is equivalent to removing the fractional part of @x@, leaving only the integer part.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-INF \<= y \<= INF@, y integer
---
---     This function operates on double-precision floating point values, use SDL_truncf for single-precision floats.
---
---     [Returns]: @x@ truncated to an integer.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_truncf', 'sDL_fmod', 'sDL_ceil', 'sDL_floor', 'sDL_round', @SDL_lround@
---
---     [C declaration]: @SDL_trunc@, defined at @SDL3\/SDL_stdinc.h 5104:36@
-sDL_trunc
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CDouble
-sDL_trunc = hs_bindgen_0babb20dade49b7a
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_truncf@
-foreign import ccall unsafe "hs_bindgen_90bf99d352a2662e"
-  hs_bindgen_90bf99d352a2662e_base
-    :: Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_truncf@
-hs_bindgen_90bf99d352a2662e
-  :: BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_90bf99d352a2662e =
-  BG.fromFFIType hs_bindgen_90bf99d352a2662e_base
-
--- | Truncate @x@ to an integer.
---
---     Rounds @x@ to the next closest integer to 0. This is equivalent to removing the fractional part of @x@, leaving only the integer part.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-INF \<= y \<= INF@, y integer
---
---     This function operates on single-precision floating point values, use SDL_trunc for double-precision floats.
---
---     [Returns]: @x@ truncated to an integer.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_trunc', 'sDL_fmodf', 'sDL_ceilf', 'sDL_floorf', 'sDL_roundf', @SDL_lroundf@
---
---     [C declaration]: @SDL_truncf@, defined at @SDL3\/SDL_stdinc.h 5133:35@
-sDL_truncf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CFloat
-sDL_truncf = hs_bindgen_90bf99d352a2662e
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_fmod@
-foreign import ccall unsafe "hs_bindgen_01e3fd06ce04c71f"
-  hs_bindgen_01e3fd06ce04c71f_base
-    :: Double
-    -> Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_fmod@
-hs_bindgen_01e3fd06ce04c71f
-  :: BG.CDouble
-  -> BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_01e3fd06ce04c71f =
-  BG.fromFFIType hs_bindgen_01e3fd06ce04c71f_base
-
--- | Return the floating-point remainder of @x \/ y@
---
---     Divides @x@ by @y@, and returns the remainder.
---
---     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= INF@, @y != 0@
---
---     Range: @-y \<= z \<= y@
---
---     This function operates on double-precision floating point values, use SDL_fmodf for single-precision floats.
---
---     [Returns]: the remainder of @x \/ y@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_fmodf', 'sDL_modf', 'sDL_trunc', 'sDL_ceil', 'sDL_floor', 'sDL_round', @SDL_lround@
---
---     [C declaration]: @SDL_fmod@, defined at @SDL3\/SDL_stdinc.h 5163:36@
-sDL_fmod
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: the numerator.
-  -> BG.CDouble
-  -- ^
-  --
-  --           [@y@]: the denominator. Must not be 0.
-  -> IO BG.CDouble
-sDL_fmod = hs_bindgen_01e3fd06ce04c71f
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_fmodf@
-foreign import ccall unsafe "hs_bindgen_d31c39dbd23d1312"
-  hs_bindgen_d31c39dbd23d1312_base
-    :: Float
-    -> Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_fmodf@
-hs_bindgen_d31c39dbd23d1312
-  :: BG.CFloat
-  -> BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_d31c39dbd23d1312 =
-  BG.fromFFIType hs_bindgen_d31c39dbd23d1312_base
-
--- | Return the floating-point remainder of @x \/ y@
---
---     Divides @x@ by @y@, and returns the remainder.
---
---     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= INF@, @y != 0@
---
---     Range: @-y \<= z \<= y@
---
---     This function operates on single-precision floating point values, use SDL_fmod for double-precision floats.
---
---     [Returns]: the remainder of @x \/ y@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_fmod', 'sDL_truncf', 'sDL_modff', 'sDL_ceilf', 'sDL_floorf', 'sDL_roundf', @SDL_lroundf@
---
---     [C declaration]: @SDL_fmodf@, defined at @SDL3\/SDL_stdinc.h 5193:35@
-sDL_fmodf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: the numerator.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@y@]: the denominator. Must not be 0.
-  -> IO BG.CFloat
-sDL_fmodf = hs_bindgen_d31c39dbd23d1312
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isinf@
-foreign import ccall unsafe "hs_bindgen_a7c939d2e78d66af"
-  hs_bindgen_a7c939d2e78d66af_base
-    :: Double
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isinf@
-hs_bindgen_a7c939d2e78d66af
-  :: BG.CDouble
-  -> IO BG.CInt
-hs_bindgen_a7c939d2e78d66af =
-  BG.fromFFIType hs_bindgen_a7c939d2e78d66af_base
-
--- | Return whether the value is infinity.
---
---     [Returns]: non-zero if the value is infinity, 0 otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_isinff'
---
---     [C declaration]: @SDL_isinf@, defined at @SDL3\/SDL_stdinc.h 5207:33@
-sDL_isinf
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: double-precision floating point value.
-  -> IO BG.CInt
-sDL_isinf = hs_bindgen_a7c939d2e78d66af
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isinff@
-foreign import ccall unsafe "hs_bindgen_dd1421aaa48b6683"
-  hs_bindgen_dd1421aaa48b6683_base
-    :: Float
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isinff@
-hs_bindgen_dd1421aaa48b6683
-  :: BG.CFloat
-  -> IO BG.CInt
-hs_bindgen_dd1421aaa48b6683 =
-  BG.fromFFIType hs_bindgen_dd1421aaa48b6683_base
-
--- | Return whether the value is infinity.
---
---     [Returns]: non-zero if the value is infinity, 0 otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_isinf'
---
---     [C declaration]: @SDL_isinff@, defined at @SDL3\/SDL_stdinc.h 5221:33@
-sDL_isinff
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CInt
-sDL_isinff = hs_bindgen_dd1421aaa48b6683
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isnan@
-foreign import ccall unsafe "hs_bindgen_8b37e78060d7faba"
-  hs_bindgen_8b37e78060d7faba_base
-    :: Double
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isnan@
-hs_bindgen_8b37e78060d7faba
-  :: BG.CDouble
-  -> IO BG.CInt
-hs_bindgen_8b37e78060d7faba =
-  BG.fromFFIType hs_bindgen_8b37e78060d7faba_base
-
--- | Return whether the value is NaN.
---
---     [Returns]: non-zero if the value is NaN, 0 otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_isnanf'
---
---     [C declaration]: @SDL_isnan@, defined at @SDL3\/SDL_stdinc.h 5235:33@
-sDL_isnan
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: double-precision floating point value.
-  -> IO BG.CInt
-sDL_isnan = hs_bindgen_8b37e78060d7faba
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isnanf@
-foreign import ccall unsafe "hs_bindgen_a7fc9d37cba1e7fb"
-  hs_bindgen_a7fc9d37cba1e7fb_base
-    :: Float
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isnanf@
-hs_bindgen_a7fc9d37cba1e7fb
-  :: BG.CFloat
-  -> IO BG.CInt
-hs_bindgen_a7fc9d37cba1e7fb =
-  BG.fromFFIType hs_bindgen_a7fc9d37cba1e7fb_base
-
--- | Return whether the value is NaN.
---
---     [Returns]: non-zero if the value is NaN, 0 otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_isnan'
---
---     [C declaration]: @SDL_isnanf@, defined at @SDL3\/SDL_stdinc.h 5249:33@
-sDL_isnanf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CInt
-sDL_isnanf = hs_bindgen_a7fc9d37cba1e7fb
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_log@
-foreign import ccall unsafe "hs_bindgen_e20d665d8e9d64dc"
-  hs_bindgen_e20d665d8e9d64dc_base
-    :: Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_log@
-hs_bindgen_e20d665d8e9d64dc
-  :: BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_e20d665d8e9d64dc =
-  BG.fromFFIType hs_bindgen_e20d665d8e9d64dc_base
-
--- | Compute the natural logarithm of @x@.
---
---     Domain: @0 \< x \<= INF@
---
---     Range: @-INF \<= y \<= INF@
---
---     It is an error for @x@ to be less than or equal to 0.
---
---     This function operates on double-precision floating point values, use SDL_logf for single-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: the natural logarithm of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_logf', 'sDL_log10', 'sDL_exp'
---
---     [C declaration]: @SDL_log@, defined at @SDL3\/SDL_stdinc.h 5279:36@
-sDL_log
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value. Must be greater than 0.
-  -> IO BG.CDouble
-sDL_log = hs_bindgen_e20d665d8e9d64dc
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_logf@
-foreign import ccall unsafe "hs_bindgen_7e096c5f793dcab0"
-  hs_bindgen_7e096c5f793dcab0_base
-    :: Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_logf@
-hs_bindgen_7e096c5f793dcab0
-  :: BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_7e096c5f793dcab0 =
-  BG.fromFFIType hs_bindgen_7e096c5f793dcab0_base
-
--- | Compute the natural logarithm of @x@.
---
---     Domain: @0 \< x \<= INF@
---
---     Range: @-INF \<= y \<= INF@
---
---     It is an error for @x@ to be less than or equal to 0.
---
---     This function operates on single-precision floating point values, use SDL_log for double-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: the natural logarithm of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_log', 'sDL_expf'
---
---     [C declaration]: @SDL_logf@, defined at @SDL3\/SDL_stdinc.h 5308:35@
-sDL_logf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value. Must be greater than 0.
-  -> IO BG.CFloat
-sDL_logf = hs_bindgen_7e096c5f793dcab0
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_log10@
-foreign import ccall unsafe "hs_bindgen_923087147ca0e620"
-  hs_bindgen_923087147ca0e620_base
-    :: Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_log10@
-hs_bindgen_923087147ca0e620
-  :: BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_923087147ca0e620 =
-  BG.fromFFIType hs_bindgen_923087147ca0e620_base
-
--- | Compute the base-10 logarithm of @x@.
---
---     Domain: @0 \< x \<= INF@
---
---     Range: @-INF \<= y \<= INF@
---
---     It is an error for @x@ to be less than or equal to 0.
---
---     This function operates on double-precision floating point values, use SDL_log10f for single-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: the logarithm of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_log10f', 'sDL_log', 'sDL_pow'
---
---     [C declaration]: @SDL_log10@, defined at @SDL3\/SDL_stdinc.h 5338:36@
-sDL_log10
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value. Must be greater than 0.
-  -> IO BG.CDouble
-sDL_log10 = hs_bindgen_923087147ca0e620
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_log10f@
-foreign import ccall unsafe "hs_bindgen_bfd8d2db495dd53c"
-  hs_bindgen_bfd8d2db495dd53c_base
-    :: Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_log10f@
-hs_bindgen_bfd8d2db495dd53c
-  :: BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_bfd8d2db495dd53c =
-  BG.fromFFIType hs_bindgen_bfd8d2db495dd53c_base
-
--- | Compute the base-10 logarithm of @x@.
---
---     Domain: @0 \< x \<= INF@
---
---     Range: @-INF \<= y \<= INF@
---
---     It is an error for @x@ to be less than or equal to 0.
---
---     This function operates on single-precision floating point values, use SDL_log10 for double-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: the logarithm of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_log10', 'sDL_logf', 'sDL_powf'
---
---     [C declaration]: @SDL_log10f@, defined at @SDL3\/SDL_stdinc.h 5368:35@
-sDL_log10f
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value. Must be greater than 0.
-  -> IO BG.CFloat
-sDL_log10f = hs_bindgen_bfd8d2db495dd53c
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_modf@
-foreign import ccall unsafe "hs_bindgen_b899f8ade3afe831"
-  hs_bindgen_b899f8ade3afe831_base
-    :: Double
-    -> BG.Ptr BG.Void
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_modf@
-hs_bindgen_b899f8ade3afe831
-  :: BG.CDouble
-  -> BG.Ptr BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_b899f8ade3afe831 =
-  BG.fromFFIType hs_bindgen_b899f8ade3afe831_base
-
--- | Split @x@ into integer and fractional parts
---
---     This function operates on double-precision floating point values, use SDL_modff for single-precision floats.
---
---     [Returns]: the fractional part of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_modff', 'sDL_trunc', 'sDL_fmod'
---
---     [C declaration]: @SDL_modf@, defined at @SDL3\/SDL_stdinc.h 5388:36@
-sDL_modf
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> BG.Ptr BG.CDouble
-  -- ^
-  --
-  --           [@y@]: output pointer to store the integer part of @x@.
-  -> IO BG.CDouble
-sDL_modf = hs_bindgen_b899f8ade3afe831
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_modff@
-foreign import ccall unsafe "hs_bindgen_6ff7524556040016"
-  hs_bindgen_6ff7524556040016_base
-    :: Float
-    -> BG.Ptr BG.Void
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_modff@
-hs_bindgen_6ff7524556040016
-  :: BG.CFloat
-  -> BG.Ptr BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_6ff7524556040016 =
-  BG.fromFFIType hs_bindgen_6ff7524556040016_base
-
--- | Split @x@ into integer and fractional parts
---
---     This function operates on single-precision floating point values, use SDL_modf for double-precision floats.
---
---     [Returns]: the fractional part of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_modf', 'sDL_truncf', 'sDL_fmodf'
---
---     [C declaration]: @SDL_modff@, defined at @SDL3\/SDL_stdinc.h 5408:35@
-sDL_modff
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@y@]: output pointer to store the integer part of @x@.
-  -> IO BG.CFloat
-sDL_modff = hs_bindgen_6ff7524556040016
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_pow@
-foreign import ccall unsafe "hs_bindgen_fd54b81ef06bf15c"
-  hs_bindgen_fd54b81ef06bf15c_base
-    :: Double
-    -> Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_pow@
-hs_bindgen_fd54b81ef06bf15c
-  :: BG.CDouble
-  -> BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_fd54b81ef06bf15c =
-  BG.fromFFIType hs_bindgen_fd54b81ef06bf15c_base
-
--- | Raise @x@ to the power @y@
---
---     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= INF@
---
---     Range: @-INF \<= z \<= INF@
---
---     If @y@ is the base of the natural logarithm (e), consider using SDL_exp instead.
---
---     This function operates on double-precision floating point values, use SDL_powf for single-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: @x@ raised to the power @y@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_powf', 'sDL_exp', 'sDL_log'
---
---     [C declaration]: @SDL_pow@, defined at @SDL3\/SDL_stdinc.h 5440:36@
-sDL_pow
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: the base.
-  -> BG.CDouble
-  -- ^
-  --
-  --           [@y@]: the exponent.
-  -> IO BG.CDouble
-sDL_pow = hs_bindgen_fd54b81ef06bf15c
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_powf@
-foreign import ccall unsafe "hs_bindgen_e6e1cafad3d1ca48"
-  hs_bindgen_e6e1cafad3d1ca48_base
-    :: Float
-    -> Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_powf@
-hs_bindgen_e6e1cafad3d1ca48
-  :: BG.CFloat
-  -> BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_e6e1cafad3d1ca48 =
-  BG.fromFFIType hs_bindgen_e6e1cafad3d1ca48_base
-
--- | Raise @x@ to the power @y@
---
---     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= INF@
---
---     Range: @-INF \<= z \<= INF@
---
---     If @y@ is the base of the natural logarithm (e), consider using SDL_exp instead.
---
---     This function operates on single-precision floating point values, use SDL_pow for double-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: @x@ raised to the power @y@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_pow', 'sDL_expf', 'sDL_logf'
---
---     [C declaration]: @SDL_powf@, defined at @SDL3\/SDL_stdinc.h 5472:35@
-sDL_powf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: the base.
-  -> BG.CFloat
-  -- ^
-  --
-  --           [@y@]: the exponent.
-  -> IO BG.CFloat
-sDL_powf = hs_bindgen_e6e1cafad3d1ca48
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_round@
-foreign import ccall unsafe "hs_bindgen_263d784275f69beb"
-  hs_bindgen_263d784275f69beb_base
-    :: Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_round@
-hs_bindgen_263d784275f69beb
-  :: BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_263d784275f69beb =
-  BG.fromFFIType hs_bindgen_263d784275f69beb_base
-
--- | Round @x@ to the nearest integer.
---
---     Rounds @x@ to the nearest integer. Values halfway between integers will be rounded away from zero.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-INF \<= y \<= INF@, y integer
---
---     This function operates on double-precision floating point values, use SDL_roundf for single-precision floats. To get the result as an integer type, use SDL_lround.
---
---     [Returns]: the nearest integer to @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_roundf', @SDL_lround@, 'sDL_floor', 'sDL_ceil', 'sDL_trunc'
---
---     [C declaration]: @SDL_round@, defined at @SDL3\/SDL_stdinc.h 5501:36@
-sDL_round
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CDouble
-sDL_round = hs_bindgen_263d784275f69beb
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_roundf@
-foreign import ccall unsafe "hs_bindgen_11783f7b112ca4ce"
-  hs_bindgen_11783f7b112ca4ce_base
-    :: Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_roundf@
-hs_bindgen_11783f7b112ca4ce
-  :: BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_11783f7b112ca4ce =
-  BG.fromFFIType hs_bindgen_11783f7b112ca4ce_base
-
--- | Round @x@ to the nearest integer.
---
---     Rounds @x@ to the nearest integer. Values halfway between integers will be rounded away from zero.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-INF \<= y \<= INF@, y integer
---
---     This function operates on single-precision floating point values, use SDL_round for double-precision floats. To get the result as an integer type, use SDL_lroundf.
---
---     [Returns]: the nearest integer to @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_round', @SDL_lroundf@, 'sDL_floorf', 'sDL_ceilf', 'sDL_truncf'
---
---     [C declaration]: @SDL_roundf@, defined at @SDL3\/SDL_stdinc.h 5530:35@
-sDL_roundf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.CFloat
-sDL_roundf = hs_bindgen_11783f7b112ca4ce
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_scalbn@
-foreign import ccall unsafe "hs_bindgen_e6bb2ac10b5df120"
-  hs_bindgen_e6bb2ac10b5df120_base
-    :: Double
-    -> BG.Int32
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_scalbn@
-hs_bindgen_e6bb2ac10b5df120
-  :: BG.CDouble
-  -> BG.CInt
-  -> IO BG.CDouble
-hs_bindgen_e6bb2ac10b5df120 =
-  BG.fromFFIType hs_bindgen_e6bb2ac10b5df120_base
-
--- | Scale @x@ by an integer power of two.
---
---     Multiplies @x@ by the @n@ th power of the floating point radix (always 2).
---
---     Domain: @-INF \<= x \<= INF@, @n@ integer
---
---     Range: @-INF \<= y \<= INF@
---
---     This function operates on double-precision floating point values, use SDL_scalbnf for single-precision floats.
---
---     [Returns]: @x * 2^n@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_scalbnf', 'sDL_pow'
---
---     [C declaration]: @SDL_scalbn@, defined at @SDL3\/SDL_stdinc.h 5613:36@
-sDL_scalbn
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value to be scaled.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@n@]: integer exponent.
-  -> IO BG.CDouble
-sDL_scalbn = hs_bindgen_e6bb2ac10b5df120
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_scalbnf@
-foreign import ccall unsafe "hs_bindgen_98b72e0135481fa6"
-  hs_bindgen_98b72e0135481fa6_base
-    :: Float
-    -> BG.Int32
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_scalbnf@
-hs_bindgen_98b72e0135481fa6
-  :: BG.CFloat
-  -> BG.CInt
-  -> IO BG.CFloat
-hs_bindgen_98b72e0135481fa6 =
-  BG.fromFFIType hs_bindgen_98b72e0135481fa6_base
-
--- | Scale @x@ by an integer power of two.
---
---     Multiplies @x@ by the @n@ th power of the floating point radix (always 2).
---
---     Domain: @-INF \<= x \<= INF@, @n@ integer
---
---     Range: @-INF \<= y \<= INF@
---
---     This function operates on single-precision floating point values, use SDL_scalbn for double-precision floats.
---
---     [Returns]: @x * 2^n@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_scalbn', 'sDL_powf'
---
---     [C declaration]: @SDL_scalbnf@, defined at @SDL3\/SDL_stdinc.h 5638:35@
-sDL_scalbnf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value to be scaled.
-  -> BG.CInt
-  -- ^
-  --
-  --           [@n@]: integer exponent.
-  -> IO BG.CFloat
-sDL_scalbnf = hs_bindgen_98b72e0135481fa6
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_sin@
-foreign import ccall unsafe "hs_bindgen_7f63dcf686d5381e"
-  hs_bindgen_7f63dcf686d5381e_base
-    :: Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_sin@
-hs_bindgen_7f63dcf686d5381e
-  :: BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_7f63dcf686d5381e =
-  BG.fromFFIType hs_bindgen_7f63dcf686d5381e_base
-
--- | Compute the sine of @x@.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-1 \<= y \<= 1@
---
---     This function operates on double-precision floating point values, use SDL_sinf for single-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: sine of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_sinf', 'sDL_asin', 'sDL_cos'
---
---     [C declaration]: @SDL_sin@, defined at @SDL3\/SDL_stdinc.h 5666:36@
-sDL_sin
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value, in radians.
-  -> IO BG.CDouble
-sDL_sin = hs_bindgen_7f63dcf686d5381e
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_sinf@
-foreign import ccall unsafe "hs_bindgen_3b77259c6cddba0e"
-  hs_bindgen_3b77259c6cddba0e_base
-    :: Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_sinf@
-hs_bindgen_3b77259c6cddba0e
-  :: BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_3b77259c6cddba0e =
-  BG.fromFFIType hs_bindgen_3b77259c6cddba0e_base
-
--- | Compute the sine of @x@.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-1 \<= y \<= 1@
---
---     This function operates on single-precision floating point values, use SDL_sin for double-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: sine of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_sin', 'sDL_asinf', 'sDL_cosf'
---
---     [C declaration]: @SDL_sinf@, defined at @SDL3\/SDL_stdinc.h 5694:35@
-sDL_sinf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value, in radians.
-  -> IO BG.CFloat
-sDL_sinf = hs_bindgen_3b77259c6cddba0e
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_sqrt@
-foreign import ccall unsafe "hs_bindgen_911bffe699be4bcc"
-  hs_bindgen_911bffe699be4bcc_base
-    :: Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_sqrt@
-hs_bindgen_911bffe699be4bcc
-  :: BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_911bffe699be4bcc =
-  BG.fromFFIType hs_bindgen_911bffe699be4bcc_base
-
--- | Compute the square root of @x@.
---
---     Domain: @0 \<= x \<= INF@
---
---     Range: @0 \<= y \<= INF@
---
---     This function operates on double-precision floating point values, use SDL_sqrtf for single-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: square root of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_sqrtf'
---
---     [C declaration]: @SDL_sqrt@, defined at @SDL3\/SDL_stdinc.h 5720:36@
-sDL_sqrt
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value. Must be greater than or equal to 0.
-  -> IO BG.CDouble
-sDL_sqrt = hs_bindgen_911bffe699be4bcc
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_sqrtf@
-foreign import ccall unsafe "hs_bindgen_44ac9f7898a32796"
-  hs_bindgen_44ac9f7898a32796_base
-    :: Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_sqrtf@
-hs_bindgen_44ac9f7898a32796
-  :: BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_44ac9f7898a32796 =
-  BG.fromFFIType hs_bindgen_44ac9f7898a32796_base
-
--- | Compute the square root of @x@.
---
---     Domain: @0 \<= x \<= INF@
---
---     Range: @0 \<= y \<= INF@
---
---     This function operates on single-precision floating point values, use SDL_sqrt for double-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: square root of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_sqrt'
---
---     [C declaration]: @SDL_sqrtf@, defined at @SDL3\/SDL_stdinc.h 5746:35@
-sDL_sqrtf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value. Must be greater than or equal to 0.
-  -> IO BG.CFloat
-sDL_sqrtf = hs_bindgen_44ac9f7898a32796
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_tan@
-foreign import ccall unsafe "hs_bindgen_aece2559e5dc0392"
-  hs_bindgen_aece2559e5dc0392_base
-    :: Double
-    -> IO Double
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_tan@
-hs_bindgen_aece2559e5dc0392
-  :: BG.CDouble
-  -> IO BG.CDouble
-hs_bindgen_aece2559e5dc0392 =
-  BG.fromFFIType hs_bindgen_aece2559e5dc0392_base
-
--- | Compute the tangent of @x@.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-INF \<= y \<= INF@
---
---     This function operates on double-precision floating point values, use SDL_tanf for single-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: tangent of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_tanf', 'sDL_sin', 'sDL_cos', 'sDL_atan', 'sDL_atan2'
---
---     [C declaration]: @SDL_tan@, defined at @SDL3\/SDL_stdinc.h 5776:36@
-sDL_tan
-  :: BG.CDouble
-  -- ^
-  --
-  --           [@x@]: floating point value, in radians.
-  -> IO BG.CDouble
-sDL_tan = hs_bindgen_aece2559e5dc0392
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_tanf@
-foreign import ccall unsafe "hs_bindgen_c528bf7014ccff4b"
-  hs_bindgen_c528bf7014ccff4b_base
-    :: Float
-    -> IO Float
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_tanf@
-hs_bindgen_c528bf7014ccff4b
-  :: BG.CFloat
-  -> IO BG.CFloat
-hs_bindgen_c528bf7014ccff4b =
-  BG.fromFFIType hs_bindgen_c528bf7014ccff4b_base
-
--- | Compute the tangent of @x@.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-INF \<= y \<= INF@
---
---     This function operates on single-precision floating point values, use SDL_tan for double-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: tangent of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_tan', 'sDL_sinf', 'sDL_cosf', 'sDL_atanf', 'sDL_atan2f'
---
---     [C declaration]: @SDL_tanf@, defined at @SDL3\/SDL_stdinc.h 5806:35@
-sDL_tanf
-  :: BG.CFloat
-  -- ^
-  --
-  --           [@x@]: floating point value, in radians.
-  -> IO BG.CFloat
-sDL_tanf = hs_bindgen_c528bf7014ccff4b
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_iconv_open@
-foreign import ccall unsafe "hs_bindgen_f0bd929aee0b42ea"
-  hs_bindgen_f0bd929aee0b42ea_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_iconv_open@
-hs_bindgen_f0bd929aee0b42ea
-  :: PtrConst.PtrConst BG.CChar
-  -> PtrConst.PtrConst BG.CChar
-  -> IO SDL_iconv_t
-hs_bindgen_f0bd929aee0b42ea =
-  BG.fromFFIType hs_bindgen_f0bd929aee0b42ea_base
-
--- | This function allocates a context for the specified character set conversion.
---
---     [Returns]: a handle that must be freed with SDL_iconv_close, or SDL_ICONV_ERROR on failure.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_iconv', 'sDL_iconv_close', 'sDL_iconv_string'
---
---     [C declaration]: @SDL_iconv_open@, defined at @SDL3\/SDL_stdinc.h 5834:41@
-sDL_iconv_open
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@tocode@]: The target character encoding, must not be NULL.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@fromcode@]: The source character encoding, must not be NULL.
-  -> IO SDL_iconv_t
-sDL_iconv_open = hs_bindgen_f0bd929aee0b42ea
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_iconv_close@
-foreign import ccall unsafe "hs_bindgen_3f715b186320f23e"
-  hs_bindgen_3f715b186320f23e_base
-    :: BG.Ptr BG.Void
-    -> IO BG.Int32
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_iconv_close@
-hs_bindgen_3f715b186320f23e
-  :: SDL_iconv_t
-  -> IO BG.CInt
-hs_bindgen_3f715b186320f23e =
-  BG.fromFFIType hs_bindgen_3f715b186320f23e_base
-
--- | This function frees a context used for character set conversion.
---
---     [Returns]: 0 on success, or -1 on failure.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_iconv', 'sDL_iconv_open', 'sDL_iconv_string'
---
---     [C declaration]: @SDL_iconv_close@, defined at @SDL3\/SDL_stdinc.h 5851:33@
-sDL_iconv_close
-  :: SDL_iconv_t
-  -- ^
-  --
-  --           [@cd@]: The character set conversion handle.
-  -> IO BG.CInt
-sDL_iconv_close = hs_bindgen_3f715b186320f23e
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_iconv@
-foreign import ccall unsafe "hs_bindgen_97b150fcf3a8acd6"
-  hs_bindgen_97b150fcf3a8acd6_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> IO BG.Word64
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_iconv@
-hs_bindgen_97b150fcf3a8acd6
-  :: SDL_iconv_t
-  -> BG.Ptr (PtrConst.PtrConst BG.CChar)
-  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
-  -> BG.Ptr (BG.Ptr BG.CChar)
-  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
-  -> IO HsBindgen.Runtime.LibC.CSize
-hs_bindgen_97b150fcf3a8acd6 =
-  BG.fromFFIType hs_bindgen_97b150fcf3a8acd6_base
-
--- | This function converts text between encodings, reading from and writing to a buffer.
---
---     It returns the number of successful conversions on success. On error, SDL_ICONV_E2BIG is returned when the output buffer is too small, or SDL_ICONV_EILSEQ is returned when an invalid input sequence is encountered, or SDL_ICONV_EINVAL is returned when an incomplete input sequence is encountered.
---
---     On exit:
---
---     * inbuf will point to the beginning of the next multibyte sequence. On error, this is the location of the problematic input sequence. On success, this is the end of the input sequence.
---
---     * inbytesleft will be set to the number of bytes left to convert, which will be 0 on success.
---
---     * outbuf will point to the location where to store the next output byte.
---
---     * outbytesleft will be set to the number of bytes left in the output buffer.
---
---     [Returns]: the number of conversions on success, or a negative error code.
---
---     [Thread safety]: Do not use the same 'SDL_iconv_t' from two threads at once.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_iconv_open', 'sDL_iconv_close', 'sDL_iconv_string'
---
---     [C declaration]: @SDL_iconv@, defined at @SDL3\/SDL_stdinc.h 5891:36@
-sDL_iconv
-  :: SDL_iconv_t
-  -- ^
-  --
-  --           [@cd@]: The character set conversion context, created in @SDL_iconv_open()@.
-  -> BG.Ptr (PtrConst.PtrConst BG.CChar)
-  -- ^
-  --
-  --           [@inbuf@]: Address of variable that points to the first character of the input sequence.
-  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@inbytesleft@]: The number of bytes in the input buffer.
-  -> BG.Ptr (BG.Ptr BG.CChar)
-  -- ^
-  --
-  --           [@outbuf@]: Address of variable that points to the output buffer.
-  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@outbytesleft@]: The number of bytes in the output buffer.
-  -> IO HsBindgen.Runtime.LibC.CSize
-sDL_iconv = hs_bindgen_97b150fcf3a8acd6
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_iconv_string@
-foreign import ccall unsafe "hs_bindgen_75bcf8b9f2da9e0a"
-  hs_bindgen_75bcf8b9f2da9e0a_base
-    :: BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO (BG.Ptr BG.Void)
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_iconv_string@
-hs_bindgen_75bcf8b9f2da9e0a
-  :: PtrConst.PtrConst BG.CChar
-  -> PtrConst.PtrConst BG.CChar
-  -> PtrConst.PtrConst BG.CChar
-  -> HsBindgen.Runtime.LibC.CSize
-  -> IO (BG.Ptr BG.CChar)
-hs_bindgen_75bcf8b9f2da9e0a =
-  BG.fromFFIType hs_bindgen_75bcf8b9f2da9e0a_base
-
--- | Helper function to convert a string\'s encoding in one call.
---
---     This function converts a buffer or string between encodings in one pass.
---
---     The string does not need to be NULL-terminated; this function operates on the number of bytes specified in @inbytesleft@ whether there is a NULL character anywhere in the buffer.
---
---     The returned string is owned by the caller, and should be passed to SDL_free when no longer needed.
---
---     [Returns]: a new string, converted to the new encoding, or NULL on error.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sDL_iconv_open', 'sDL_iconv_close', 'sDL_iconv'
---
---     [C declaration]: @SDL_iconv_string@, defined at @SDL3\/SDL_stdinc.h 5928:36@
-sDL_iconv_string
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@tocode@]: the character encoding of the output string. Examples are \"UTF-8\", \"UCS-4\", etc.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@fromcode@]: the character encoding of data in @inbuf@.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@inbuf@]: the string to convert to a different encoding.
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@inbytesleft@]: the size of the input string /in bytes/.
-  -> IO (BG.Ptr BG.CChar)
-sDL_iconv_string = hs_bindgen_75bcf8b9f2da9e0a
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_size_mul_check_overflow_builtin@
-foreign import ccall unsafe "hs_bindgen_51dba5ddaea9f2e4"
-  hs_bindgen_51dba5ddaea9f2e4_base
-    :: BG.Word64
-    -> BG.Word64
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_size_mul_check_overflow_builtin@
-hs_bindgen_51dba5ddaea9f2e4
-  :: HsBindgen.Runtime.LibC.CSize
-  -> HsBindgen.Runtime.LibC.CSize
-  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
-  -> IO BG.CBool
-hs_bindgen_51dba5ddaea9f2e4 =
-  BG.fromFFIType hs_bindgen_51dba5ddaea9f2e4_base
-
--- | [C declaration]: @SDL_size_mul_check_overflow_builtin@, defined at @SDL3\/SDL_stdinc.h 6109:23@
-sDL_size_mul_check_overflow_builtin
-  :: HsBindgen.Runtime.LibC.CSize
-  -- ^ [C declaration]: @a@
-  -> HsBindgen.Runtime.LibC.CSize
-  -- ^ [C declaration]: @b@
-  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
-  -- ^ [C declaration]: @ret@
-  -> IO BG.CBool
-sDL_size_mul_check_overflow_builtin =
-  hs_bindgen_51dba5ddaea9f2e4
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_size_add_check_overflow_builtin@
-foreign import ccall unsafe "hs_bindgen_7509bdb3d2cd84da"
-  hs_bindgen_7509bdb3d2cd84da_base
-    :: BG.Word64
-    -> BG.Word64
-    -> BG.Ptr BG.Void
-    -> IO BG.Word8
-
--- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_size_add_check_overflow_builtin@
-hs_bindgen_7509bdb3d2cd84da
-  :: HsBindgen.Runtime.LibC.CSize
-  -> HsBindgen.Runtime.LibC.CSize
-  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
-  -> IO BG.CBool
-hs_bindgen_7509bdb3d2cd84da =
-  BG.fromFFIType hs_bindgen_7509bdb3d2cd84da_base
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.Stdinc.Unsafe (
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_malloc,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_calloc,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_realloc,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_free,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_GetOriginalMemoryFunctions,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_GetMemoryFunctions,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_SetMemoryFunctions,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_aligned_alloc,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_aligned_free,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_GetNumAllocations,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_GetEnvironment,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_CreateEnvironment,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_GetEnvironmentVariable,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_GetEnvironmentVariables,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_SetEnvironmentVariable,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_UnsetEnvironmentVariable,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_DestroyEnvironment,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_getenv,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_getenv_unsafe,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_setenv_unsafe,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_unsetenv_unsafe,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_qsort,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_bsearch,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_qsort_r,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_bsearch_r,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_abs,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_isalpha,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_isalnum,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_isblank,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_iscntrl,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_isdigit,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_isxdigit,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_ispunct,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_isspace,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_isupper,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_islower,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_isprint,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_isgraph,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_toupper,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_tolower,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_crc16,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_crc32,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_murmur3_32,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_memcpy,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_memmove,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_memset,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_memset4,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_memcmp,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_wcslen,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_wcsnlen,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_wcslcpy,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_wcslcat,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_wcsdup,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_wcsstr,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_wcsnstr,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_wcscmp,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_wcsncmp,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_wcscasecmp,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_wcsncasecmp,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strlen,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strnlen,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strlcpy,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_utf8strlcpy,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strlcat,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strdup,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strndup,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strrev,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strupr,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strlwr,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strchr,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strrchr,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strstr,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strnstr,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strcasestr,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strtok_r,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_utf8strlen,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_utf8strnlen,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_itoa,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_uitoa,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_lltoa,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_ulltoa,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_atoi,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_atof,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strtoll,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strtoull,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strtod,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strcmp,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strncmp,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strcasecmp,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strncasecmp,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_strpbrk,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_StepUTF8,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_StepBackUTF8,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_UCS4ToUTF8,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_srand,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_rand,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_randf,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_rand_bits,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_rand_r,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_randf_r,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_rand_bits_r,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_acos,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_acosf,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_asin,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_asinf,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_atan,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_atanf,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_atan2,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_atan2f,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_ceil,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_ceilf,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_copysign,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_copysignf,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_cos,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_cosf,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_exp,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_expf,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_fabs,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_fabsf,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_floor,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_floorf,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_trunc,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_truncf,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_fmod,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_fmodf,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_isinf,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_isinff,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_isnan,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_isnanf,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_log,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_logf,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_log10,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_log10f,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_modf,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_modff,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_pow,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_powf,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_round,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_roundf,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_scalbn,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_scalbnf,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_sin,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_sinf,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_sqrt,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_sqrtf,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_tan,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_tanf,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_iconv_open,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_iconv_close,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_iconv,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_iconv_string,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_size_mul_check_overflow_builtin,
+  SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_size_add_check_overflow_builtin,
+)
+where
+
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
+import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+import SDL3.Sys.Bindgen.Stdinc
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_stdinc.h>"
+         , "void *hs_bindgen_5bd8a699d72971c5 ("
+         , "  size_t arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_malloc)(arg1);"
+         , "}"
+         , "void *hs_bindgen_08746ff05ca3003c ("
+         , "  size_t arg1,"
+         , "  size_t arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_calloc)(arg1, arg2);"
+         , "}"
+         , "void *hs_bindgen_0730e7e13356c626 ("
+         , "  void *arg1,"
+         , "  size_t arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_realloc)(arg1, arg2);"
+         , "}"
+         , "void hs_bindgen_22f31e5d111da6c1 ("
+         , "  void *arg1"
+         , ")"
+         , "{"
+         , "  (SDL_free)(arg1);"
+         , "}"
+         , "void hs_bindgen_f517f867f38f6071 ("
+         , "  SDL_malloc_func *arg1,"
+         , "  SDL_calloc_func *arg2,"
+         , "  SDL_realloc_func *arg3,"
+         , "  SDL_free_func *arg4"
+         , ")"
+         , "{"
+         , "  (SDL_GetOriginalMemoryFunctions)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "void hs_bindgen_25189a0da3d426a6 ("
+         , "  SDL_malloc_func *arg1,"
+         , "  SDL_calloc_func *arg2,"
+         , "  SDL_realloc_func *arg3,"
+         , "  SDL_free_func *arg4"
+         , ")"
+         , "{"
+         , "  (SDL_GetMemoryFunctions)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "_Bool hs_bindgen_226182971f75d2c0 ("
+         , "  SDL_malloc_func arg1,"
+         , "  SDL_calloc_func arg2,"
+         , "  SDL_realloc_func arg3,"
+         , "  SDL_free_func arg4"
+         , ")"
+         , "{"
+         , "  return (SDL_SetMemoryFunctions)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "void *hs_bindgen_9900ed39a18caec5 ("
+         , "  size_t arg1,"
+         , "  size_t arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_aligned_alloc)(arg1, arg2);"
+         , "}"
+         , "void hs_bindgen_2bf7e303c1a730bf ("
+         , "  void *arg1"
+         , ")"
+         , "{"
+         , "  (SDL_aligned_free)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_4528828ea69b3f8b (void)"
+         , "{"
+         , "  return (SDL_GetNumAllocations)();"
+         , "}"
+         , "SDL_Environment *hs_bindgen_e1f4a04ee814291a (void)"
+         , "{"
+         , "  return (SDL_GetEnvironment)();"
+         , "}"
+         , "SDL_Environment *hs_bindgen_e85a9062a561d535 ("
+         , "  _Bool arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_CreateEnvironment)(arg1);"
+         , "}"
+         , "char const *hs_bindgen_5beeb06044229d5f ("
+         , "  SDL_Environment *arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_GetEnvironmentVariable)(arg1, arg2);"
+         , "}"
+         , "char **hs_bindgen_b31ecc5c3d715978 ("
+         , "  SDL_Environment *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_GetEnvironmentVariables)(arg1);"
+         , "}"
+         , "_Bool hs_bindgen_a9acd1c932154b24 ("
+         , "  SDL_Environment *arg1,"
+         , "  char const *arg2,"
+         , "  char const *arg3,"
+         , "  _Bool arg4"
+         , ")"
+         , "{"
+         , "  return (SDL_SetEnvironmentVariable)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "_Bool hs_bindgen_c64095b9c616bfe0 ("
+         , "  SDL_Environment *arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_UnsetEnvironmentVariable)(arg1, arg2);"
+         , "}"
+         , "void hs_bindgen_099a6ae1ccd5370b ("
+         , "  SDL_Environment *arg1"
+         , ")"
+         , "{"
+         , "  (SDL_DestroyEnvironment)(arg1);"
+         , "}"
+         , "char const *hs_bindgen_bf38503a85842347 ("
+         , "  char const *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_getenv)(arg1);"
+         , "}"
+         , "char const *hs_bindgen_8bb86791a34eff6a ("
+         , "  char const *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_getenv_unsafe)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_07289159390730ef ("
+         , "  char const *arg1,"
+         , "  char const *arg2,"
+         , "  signed int arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_setenv_unsafe)(arg1, arg2, arg3);"
+         , "}"
+         , "signed int hs_bindgen_8eb1656d4bfcd1be ("
+         , "  char const *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_unsetenv_unsafe)(arg1);"
+         , "}"
+         , "void hs_bindgen_95192c7f785c4c45 ("
+         , "  void *arg1,"
+         , "  size_t arg2,"
+         , "  size_t arg3,"
+         , "  SDL_CompareCallback arg4"
+         , ")"
+         , "{"
+         , "  (SDL_qsort)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "void *hs_bindgen_e3d85c2fcc0e0182 ("
+         , "  void const *arg1,"
+         , "  void const *arg2,"
+         , "  size_t arg3,"
+         , "  size_t arg4,"
+         , "  SDL_CompareCallback arg5"
+         , ")"
+         , "{"
+         , "  return (SDL_bsearch)(arg1, arg2, arg3, arg4, arg5);"
+         , "}"
+         , "void hs_bindgen_7a30995c664569a4 ("
+         , "  void *arg1,"
+         , "  size_t arg2,"
+         , "  size_t arg3,"
+         , "  SDL_CompareCallback_r arg4,"
+         , "  void *arg5"
+         , ")"
+         , "{"
+         , "  (SDL_qsort_r)(arg1, arg2, arg3, arg4, arg5);"
+         , "}"
+         , "void *hs_bindgen_57399b9b8aa9f8f0 ("
+         , "  void const *arg1,"
+         , "  void const *arg2,"
+         , "  size_t arg3,"
+         , "  size_t arg4,"
+         , "  SDL_CompareCallback_r arg5,"
+         , "  void *arg6"
+         , ")"
+         , "{"
+         , "  return (SDL_bsearch_r)(arg1, arg2, arg3, arg4, arg5, arg6);"
+         , "}"
+         , "signed int hs_bindgen_a928603d6470ca50 ("
+         , "  signed int arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_abs)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_89185a009225cfaf ("
+         , "  signed int arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_isalpha)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_1ab6c2f3868de0bb ("
+         , "  signed int arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_isalnum)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_3c28b4a4af971951 ("
+         , "  signed int arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_isblank)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_13a0eb9bfa9faec7 ("
+         , "  signed int arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_iscntrl)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_9fae2f93c08cfbf0 ("
+         , "  signed int arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_isdigit)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_0f033c6150a762a3 ("
+         , "  signed int arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_isxdigit)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_9b835961c1753aa6 ("
+         , "  signed int arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_ispunct)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_37bfc6e46aee6fcc ("
+         , "  signed int arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_isspace)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_6a23210549f82553 ("
+         , "  signed int arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_isupper)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_4ef887be849a9002 ("
+         , "  signed int arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_islower)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_258633f7820b5c3c ("
+         , "  signed int arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_isprint)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_64e7a8597c7c9710 ("
+         , "  signed int arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_isgraph)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_c1347761ea69159d ("
+         , "  signed int arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_toupper)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_b3fecd41676fe4be ("
+         , "  signed int arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_tolower)(arg1);"
+         , "}"
+         , "Uint16 hs_bindgen_35ff41be4e4da9d1 ("
+         , "  Uint16 arg1,"
+         , "  void const *arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_crc16)(arg1, arg2, arg3);"
+         , "}"
+         , "Uint32 hs_bindgen_6755f946704473dc ("
+         , "  Uint32 arg1,"
+         , "  void const *arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_crc32)(arg1, arg2, arg3);"
+         , "}"
+         , "Uint32 hs_bindgen_4538e03ee60f6976 ("
+         , "  void const *arg1,"
+         , "  size_t arg2,"
+         , "  Uint32 arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_murmur3_32)(arg1, arg2, arg3);"
+         , "}"
+         , "void *hs_bindgen_455d4e0308a7fc2b ("
+         , "  void *arg1,"
+         , "  void const *arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_memcpy)(arg1, arg2, arg3);"
+         , "}"
+         , "void *hs_bindgen_6db8be082a8110dc ("
+         , "  void *arg1,"
+         , "  void const *arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_memmove)(arg1, arg2, arg3);"
+         , "}"
+         , "void *hs_bindgen_951115e41714b35e ("
+         , "  void *arg1,"
+         , "  signed int arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_memset)(arg1, arg2, arg3);"
+         , "}"
+         , "void *hs_bindgen_006ad9913290aee0 ("
+         , "  void *arg1,"
+         , "  Uint32 arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_memset4)(arg1, arg2, arg3);"
+         , "}"
+         , "signed int hs_bindgen_f8312f3094e9811f ("
+         , "  void const *arg1,"
+         , "  void const *arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_memcmp)(arg1, arg2, arg3);"
+         , "}"
+         , "size_t hs_bindgen_7819cc3f05f6e767 ("
+         , "  wchar_t const *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_wcslen)(arg1);"
+         , "}"
+         , "size_t hs_bindgen_4d4c9962d27e8c57 ("
+         , "  wchar_t const *arg1,"
+         , "  size_t arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_wcsnlen)(arg1, arg2);"
+         , "}"
+         , "size_t hs_bindgen_6a63636fffe52a27 ("
+         , "  wchar_t *arg1,"
+         , "  wchar_t const *arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_wcslcpy)(arg1, arg2, arg3);"
+         , "}"
+         , "size_t hs_bindgen_ae63311931250a61 ("
+         , "  wchar_t *arg1,"
+         , "  wchar_t const *arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_wcslcat)(arg1, arg2, arg3);"
+         , "}"
+         , "wchar_t *hs_bindgen_0c56a99a680dde86 ("
+         , "  wchar_t const *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_wcsdup)(arg1);"
+         , "}"
+         , "wchar_t *hs_bindgen_0e15f64725300a1d ("
+         , "  wchar_t const *arg1,"
+         , "  wchar_t const *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_wcsstr)(arg1, arg2);"
+         , "}"
+         , "wchar_t *hs_bindgen_ed81408c495114ac ("
+         , "  wchar_t const *arg1,"
+         , "  wchar_t const *arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_wcsnstr)(arg1, arg2, arg3);"
+         , "}"
+         , "signed int hs_bindgen_523128c66baf772a ("
+         , "  wchar_t const *arg1,"
+         , "  wchar_t const *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_wcscmp)(arg1, arg2);"
+         , "}"
+         , "signed int hs_bindgen_ae16252c87514b75 ("
+         , "  wchar_t const *arg1,"
+         , "  wchar_t const *arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_wcsncmp)(arg1, arg2, arg3);"
+         , "}"
+         , "signed int hs_bindgen_2a1f0e71a040879b ("
+         , "  wchar_t const *arg1,"
+         , "  wchar_t const *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_wcscasecmp)(arg1, arg2);"
+         , "}"
+         , "signed int hs_bindgen_1c13738568f12d1d ("
+         , "  wchar_t const *arg1,"
+         , "  wchar_t const *arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_wcsncasecmp)(arg1, arg2, arg3);"
+         , "}"
+         , "size_t hs_bindgen_59a6bfea24e96b34 ("
+         , "  char const *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_strlen)(arg1);"
+         , "}"
+         , "size_t hs_bindgen_c8b4424317df84e9 ("
+         , "  char const *arg1,"
+         , "  size_t arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_strnlen)(arg1, arg2);"
+         , "}"
+         , "size_t hs_bindgen_e26f240b36c1f7f4 ("
+         , "  char *arg1,"
+         , "  char const *arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_strlcpy)(arg1, arg2, arg3);"
+         , "}"
+         , "size_t hs_bindgen_a6570a6c65177caf ("
+         , "  char *arg1,"
+         , "  char const *arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_utf8strlcpy)(arg1, arg2, arg3);"
+         , "}"
+         , "size_t hs_bindgen_6776d8c4c9824b69 ("
+         , "  char *arg1,"
+         , "  char const *arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_strlcat)(arg1, arg2, arg3);"
+         , "}"
+         , "char *hs_bindgen_642470a5439764a1 ("
+         , "  char const *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_strdup)(arg1);"
+         , "}"
+         , "char *hs_bindgen_2d11135d4a4cd09d ("
+         , "  char const *arg1,"
+         , "  size_t arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_strndup)(arg1, arg2);"
+         , "}"
+         , "char *hs_bindgen_3e344b4dbd1fefd5 ("
+         , "  char *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_strrev)(arg1);"
+         , "}"
+         , "char *hs_bindgen_2a6a16beae86f690 ("
+         , "  char *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_strupr)(arg1);"
+         , "}"
+         , "char *hs_bindgen_d398f95cc6b941fb ("
+         , "  char *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_strlwr)(arg1);"
+         , "}"
+         , "char *hs_bindgen_ce84b72a37d721aa ("
+         , "  char const *arg1,"
+         , "  signed int arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_strchr)(arg1, arg2);"
+         , "}"
+         , "char *hs_bindgen_42f6725f3eb6c437 ("
+         , "  char const *arg1,"
+         , "  signed int arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_strrchr)(arg1, arg2);"
+         , "}"
+         , "char *hs_bindgen_4dd450b42cd71d7b ("
+         , "  char const *arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_strstr)(arg1, arg2);"
+         , "}"
+         , "char *hs_bindgen_84a9d060fbe6dadf ("
+         , "  char const *arg1,"
+         , "  char const *arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_strnstr)(arg1, arg2, arg3);"
+         , "}"
+         , "char *hs_bindgen_81f801141b3ad731 ("
+         , "  char const *arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_strcasestr)(arg1, arg2);"
+         , "}"
+         , "char *hs_bindgen_409faece247c319b ("
+         , "  char *arg1,"
+         , "  char const *arg2,"
+         , "  char **arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_strtok_r)(arg1, arg2, arg3);"
+         , "}"
+         , "size_t hs_bindgen_36470941402cdd53 ("
+         , "  char const *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_utf8strlen)(arg1);"
+         , "}"
+         , "size_t hs_bindgen_479082db51ecf46b ("
+         , "  char const *arg1,"
+         , "  size_t arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_utf8strnlen)(arg1, arg2);"
+         , "}"
+         , "char *hs_bindgen_c69b2ef36677f953 ("
+         , "  signed int arg1,"
+         , "  char *arg2,"
+         , "  signed int arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_itoa)(arg1, arg2, arg3);"
+         , "}"
+         , "char *hs_bindgen_dbe69ee767be00c8 ("
+         , "  unsigned int arg1,"
+         , "  char *arg2,"
+         , "  signed int arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_uitoa)(arg1, arg2, arg3);"
+         , "}"
+         , "char *hs_bindgen_94ca108dca07ec6f ("
+         , "  signed long long arg1,"
+         , "  char *arg2,"
+         , "  signed int arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_lltoa)(arg1, arg2, arg3);"
+         , "}"
+         , "char *hs_bindgen_d122b88ccc45fe33 ("
+         , "  unsigned long long arg1,"
+         , "  char *arg2,"
+         , "  signed int arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_ulltoa)(arg1, arg2, arg3);"
+         , "}"
+         , "signed int hs_bindgen_ca9f4297368b5437 ("
+         , "  char const *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_atoi)(arg1);"
+         , "}"
+         , "double hs_bindgen_81f2fcbff595d766 ("
+         , "  char const *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_atof)(arg1);"
+         , "}"
+         , "signed long long hs_bindgen_29424912342d9a55 ("
+         , "  char const *arg1,"
+         , "  char **arg2,"
+         , "  signed int arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_strtoll)(arg1, arg2, arg3);"
+         , "}"
+         , "unsigned long long hs_bindgen_fe908f5a8d183e7b ("
+         , "  char const *arg1,"
+         , "  char **arg2,"
+         , "  signed int arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_strtoull)(arg1, arg2, arg3);"
+         , "}"
+         , "double hs_bindgen_93115f1648467a21 ("
+         , "  char const *arg1,"
+         , "  char **arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_strtod)(arg1, arg2);"
+         , "}"
+         , "signed int hs_bindgen_1165e1ac637a910f ("
+         , "  char const *arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_strcmp)(arg1, arg2);"
+         , "}"
+         , "signed int hs_bindgen_6286679cc5d88e95 ("
+         , "  char const *arg1,"
+         , "  char const *arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_strncmp)(arg1, arg2, arg3);"
+         , "}"
+         , "signed int hs_bindgen_592440e0cc89a66c ("
+         , "  char const *arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_strcasecmp)(arg1, arg2);"
+         , "}"
+         , "signed int hs_bindgen_9a7486257c6bf068 ("
+         , "  char const *arg1,"
+         , "  char const *arg2,"
+         , "  size_t arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_strncasecmp)(arg1, arg2, arg3);"
+         , "}"
+         , "char *hs_bindgen_e53784dcceef6c88 ("
+         , "  char const *arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_strpbrk)(arg1, arg2);"
+         , "}"
+         , "Uint32 hs_bindgen_5010b6d322eef729 ("
+         , "  char const **arg1,"
+         , "  size_t *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_StepUTF8)(arg1, arg2);"
+         , "}"
+         , "Uint32 hs_bindgen_e9d45c14c965c799 ("
+         , "  char const *arg1,"
+         , "  char const **arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_StepBackUTF8)(arg1, arg2);"
+         , "}"
+         , "char *hs_bindgen_2621d8f742eba582 ("
+         , "  Uint32 arg1,"
+         , "  char *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_UCS4ToUTF8)(arg1, arg2);"
+         , "}"
+         , "void hs_bindgen_1620e07051837ddb ("
+         , "  Uint64 arg1"
+         , ")"
+         , "{"
+         , "  (SDL_srand)(arg1);"
+         , "}"
+         , "Sint32 hs_bindgen_bb32712cf4e3959c ("
+         , "  Sint32 arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_rand)(arg1);"
+         , "}"
+         , "float hs_bindgen_4354197498dc7635 (void)"
+         , "{"
+         , "  return (SDL_randf)();"
+         , "}"
+         , "Uint32 hs_bindgen_eed752851bd8b3e2 (void)"
+         , "{"
+         , "  return (SDL_rand_bits)();"
+         , "}"
+         , "Sint32 hs_bindgen_e31222be551ae9d1 ("
+         , "  Uint64 *arg1,"
+         , "  Sint32 arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_rand_r)(arg1, arg2);"
+         , "}"
+         , "float hs_bindgen_b728fa521e1f33ba ("
+         , "  Uint64 *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_randf_r)(arg1);"
+         , "}"
+         , "Uint32 hs_bindgen_1779b3d1ac6c6ca0 ("
+         , "  Uint64 *arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_rand_bits_r)(arg1);"
+         , "}"
+         , "double hs_bindgen_77d2b09de2f907bb ("
+         , "  double arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_acos)(arg1);"
+         , "}"
+         , "float hs_bindgen_a7dfe79fdc884d97 ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_acosf)(arg1);"
+         , "}"
+         , "double hs_bindgen_c1c2c5b2424934f7 ("
+         , "  double arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_asin)(arg1);"
+         , "}"
+         , "float hs_bindgen_c0162f35a592c4d6 ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_asinf)(arg1);"
+         , "}"
+         , "double hs_bindgen_62e948cecf885b31 ("
+         , "  double arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_atan)(arg1);"
+         , "}"
+         , "float hs_bindgen_429e4b987b465ff9 ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_atanf)(arg1);"
+         , "}"
+         , "double hs_bindgen_dd25876f2db3e27f ("
+         , "  double arg1,"
+         , "  double arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_atan2)(arg1, arg2);"
+         , "}"
+         , "float hs_bindgen_8131501831457d98 ("
+         , "  float arg1,"
+         , "  float arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_atan2f)(arg1, arg2);"
+         , "}"
+         , "double hs_bindgen_6654a059aee78106 ("
+         , "  double arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_ceil)(arg1);"
+         , "}"
+         , "float hs_bindgen_ad644f683da406f9 ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_ceilf)(arg1);"
+         , "}"
+         , "double hs_bindgen_8091ddede7c04cbc ("
+         , "  double arg1,"
+         , "  double arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_copysign)(arg1, arg2);"
+         , "}"
+         , "float hs_bindgen_b3f4ceb6b2fe20ee ("
+         , "  float arg1,"
+         , "  float arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_copysignf)(arg1, arg2);"
+         , "}"
+         , "double hs_bindgen_a3469aec056551e2 ("
+         , "  double arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_cos)(arg1);"
+         , "}"
+         , "float hs_bindgen_905fd229e6d8b35e ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_cosf)(arg1);"
+         , "}"
+         , "double hs_bindgen_1512e406037d12ac ("
+         , "  double arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_exp)(arg1);"
+         , "}"
+         , "float hs_bindgen_d3dd134efe3abfff ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_expf)(arg1);"
+         , "}"
+         , "double hs_bindgen_52ba4ac175596d0a ("
+         , "  double arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_fabs)(arg1);"
+         , "}"
+         , "float hs_bindgen_184b19c145435e41 ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_fabsf)(arg1);"
+         , "}"
+         , "double hs_bindgen_f490c8eee1698a66 ("
+         , "  double arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_floor)(arg1);"
+         , "}"
+         , "float hs_bindgen_2f0b4572dde60cf4 ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_floorf)(arg1);"
+         , "}"
+         , "double hs_bindgen_0babb20dade49b7a ("
+         , "  double arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_trunc)(arg1);"
+         , "}"
+         , "float hs_bindgen_90bf99d352a2662e ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_truncf)(arg1);"
+         , "}"
+         , "double hs_bindgen_01e3fd06ce04c71f ("
+         , "  double arg1,"
+         , "  double arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_fmod)(arg1, arg2);"
+         , "}"
+         , "float hs_bindgen_d31c39dbd23d1312 ("
+         , "  float arg1,"
+         , "  float arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_fmodf)(arg1, arg2);"
+         , "}"
+         , "signed int hs_bindgen_a7c939d2e78d66af ("
+         , "  double arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_isinf)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_dd1421aaa48b6683 ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_isinff)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_8b37e78060d7faba ("
+         , "  double arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_isnan)(arg1);"
+         , "}"
+         , "signed int hs_bindgen_a7fc9d37cba1e7fb ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_isnanf)(arg1);"
+         , "}"
+         , "double hs_bindgen_e20d665d8e9d64dc ("
+         , "  double arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_log)(arg1);"
+         , "}"
+         , "float hs_bindgen_7e096c5f793dcab0 ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_logf)(arg1);"
+         , "}"
+         , "double hs_bindgen_923087147ca0e620 ("
+         , "  double arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_log10)(arg1);"
+         , "}"
+         , "float hs_bindgen_bfd8d2db495dd53c ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_log10f)(arg1);"
+         , "}"
+         , "double hs_bindgen_b899f8ade3afe831 ("
+         , "  double arg1,"
+         , "  double *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_modf)(arg1, arg2);"
+         , "}"
+         , "float hs_bindgen_6ff7524556040016 ("
+         , "  float arg1,"
+         , "  float *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_modff)(arg1, arg2);"
+         , "}"
+         , "double hs_bindgen_fd54b81ef06bf15c ("
+         , "  double arg1,"
+         , "  double arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_pow)(arg1, arg2);"
+         , "}"
+         , "float hs_bindgen_e6e1cafad3d1ca48 ("
+         , "  float arg1,"
+         , "  float arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_powf)(arg1, arg2);"
+         , "}"
+         , "double hs_bindgen_263d784275f69beb ("
+         , "  double arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_round)(arg1);"
+         , "}"
+         , "float hs_bindgen_11783f7b112ca4ce ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_roundf)(arg1);"
+         , "}"
+         , "double hs_bindgen_e6bb2ac10b5df120 ("
+         , "  double arg1,"
+         , "  signed int arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_scalbn)(arg1, arg2);"
+         , "}"
+         , "float hs_bindgen_98b72e0135481fa6 ("
+         , "  float arg1,"
+         , "  signed int arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_scalbnf)(arg1, arg2);"
+         , "}"
+         , "double hs_bindgen_7f63dcf686d5381e ("
+         , "  double arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_sin)(arg1);"
+         , "}"
+         , "float hs_bindgen_3b77259c6cddba0e ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_sinf)(arg1);"
+         , "}"
+         , "double hs_bindgen_911bffe699be4bcc ("
+         , "  double arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_sqrt)(arg1);"
+         , "}"
+         , "float hs_bindgen_44ac9f7898a32796 ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_sqrtf)(arg1);"
+         , "}"
+         , "double hs_bindgen_aece2559e5dc0392 ("
+         , "  double arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_tan)(arg1);"
+         , "}"
+         , "float hs_bindgen_c528bf7014ccff4b ("
+         , "  float arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_tanf)(arg1);"
+         , "}"
+         , "SDL_iconv_t hs_bindgen_f0bd929aee0b42ea ("
+         , "  char const *arg1,"
+         , "  char const *arg2"
+         , ")"
+         , "{"
+         , "  return (SDL_iconv_open)(arg1, arg2);"
+         , "}"
+         , "signed int hs_bindgen_3f715b186320f23e ("
+         , "  SDL_iconv_t arg1"
+         , ")"
+         , "{"
+         , "  return (SDL_iconv_close)(arg1);"
+         , "}"
+         , "size_t hs_bindgen_97b150fcf3a8acd6 ("
+         , "  SDL_iconv_t arg1,"
+         , "  char const **arg2,"
+         , "  size_t *arg3,"
+         , "  char **arg4,"
+         , "  size_t *arg5"
+         , ")"
+         , "{"
+         , "  return (SDL_iconv)(arg1, arg2, arg3, arg4, arg5);"
+         , "}"
+         , "char *hs_bindgen_75bcf8b9f2da9e0a ("
+         , "  char const *arg1,"
+         , "  char const *arg2,"
+         , "  char const *arg3,"
+         , "  size_t arg4"
+         , ")"
+         , "{"
+         , "  return (SDL_iconv_string)(arg1, arg2, arg3, arg4);"
+         , "}"
+         , "_Bool hs_bindgen_51dba5ddaea9f2e4 ("
+         , "  size_t arg1,"
+         , "  size_t arg2,"
+         , "  size_t *arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_size_mul_check_overflow_builtin)(arg1, arg2, arg3);"
+         , "}"
+         , "_Bool hs_bindgen_7509bdb3d2cd84da ("
+         , "  size_t arg1,"
+         , "  size_t arg2,"
+         , "  size_t *arg3"
+         , ")"
+         , "{"
+         , "  return (SDL_size_add_check_overflow_builtin)(arg1, arg2, arg3);"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_malloc@
+foreign import ccall unsafe "hs_bindgen_5bd8a699d72971c5"
+  hs_bindgen_5bd8a699d72971c5_base
+    :: HsBindgen.Runtime.LibC.CSize
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_malloc@
+hs_bindgen_5bd8a699d72971c5
+  :: HsBindgen.Runtime.LibC.CSize
+  -> IO (BG.Ptr BG.Void)
+hs_bindgen_5bd8a699d72971c5 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_5bd8a699d72971c5_base (BG.toFFIType x0))
+
+-- | Allocate uninitialized memory.
+--
+--     The allocated memory returned by this function must be freed with @SDL_free()@.
+--
+--     If @size@ is 0, it will be set to 1.
+--
+--     If the allocation is successful, the returned pointer is guaranteed to be aligned to either the /fundamental alignment/ (@alignof(max_align_t)@ in C11 and later) or @2 * sizeof(void *)@, whichever is smaller. Use @SDL_aligned_alloc()@ if you need to allocate memory aligned to an alignment greater than this guarantee.
+--
+--     [Returns]: a pointer to the allocated memory, or NULL if allocation failed.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_free', SDL_calloc, SDL_realloc, 'sDL_aligned_alloc'
+--
+--     [C declaration]: @SDL_malloc@, defined at @SDL3\/SDL_stdinc.h 1342:47@
+sDL_malloc
+  :: HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@size@]: the size to allocate.
+  -> IO (BG.Ptr BG.Void)
+sDL_malloc = hs_bindgen_5bd8a699d72971c5
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_calloc@
+foreign import ccall unsafe "hs_bindgen_08746ff05ca3003c"
+  hs_bindgen_08746ff05ca3003c_base
+    :: HsBindgen.Runtime.LibC.CSize
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_calloc@
+hs_bindgen_08746ff05ca3003c
+  :: HsBindgen.Runtime.LibC.CSize
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO (BG.Ptr BG.Void)
+hs_bindgen_08746ff05ca3003c =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_08746ff05ca3003c_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | [C declaration]: @SDL_calloc@, defined at @SDL3\/SDL_stdinc.h 1367:69@
+sDL_calloc
+  :: HsBindgen.Runtime.LibC.CSize
+  -- ^ [C declaration]: @nmemb@
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^ [C declaration]: @size@
+  -> IO (BG.Ptr BG.Void)
+sDL_calloc = hs_bindgen_08746ff05ca3003c
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_realloc@
+foreign import ccall unsafe "hs_bindgen_0730e7e13356c626"
+  hs_bindgen_0730e7e13356c626_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_realloc@
+hs_bindgen_0730e7e13356c626
+  :: BG.Ptr BG.Void
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO (BG.Ptr BG.Void)
+hs_bindgen_0730e7e13356c626 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_0730e7e13356c626_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | [C declaration]: @SDL_realloc@, defined at @SDL3\/SDL_stdinc.h 1407:54@
+sDL_realloc
+  :: BG.Ptr BG.Void
+  -- ^ [C declaration]: @mem@
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^ [C declaration]: @size@
+  -> IO (BG.Ptr BG.Void)
+sDL_realloc = hs_bindgen_0730e7e13356c626
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_free@
+foreign import ccall unsafe "hs_bindgen_22f31e5d111da6c1"
+  hs_bindgen_22f31e5d111da6c1_base
+    :: BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_free@
+hs_bindgen_22f31e5d111da6c1
+  :: BG.Ptr BG.Void
+  -> IO ()
+hs_bindgen_22f31e5d111da6c1 =
+  \x0 ->
+    hs_bindgen_22f31e5d111da6c1_base (BG.toFFIType x0)
+
+-- | Free allocated memory.
+--
+--     The pointer is no longer valid after this call and cannot be dereferenced anymore.
+--
+--     If @mem@ is NULL, this function does nothing.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_malloc', SDL_calloc, SDL_realloc
+--
+--     [C declaration]: @SDL_free@, defined at @SDL3\/SDL_stdinc.h 1427:34@
+sDL_free
+  :: BG.Ptr BG.Void
+  -- ^
+  --
+  --           [@mem@]: a pointer to allocated memory, or NULL.
+  -> IO ()
+sDL_free = hs_bindgen_22f31e5d111da6c1
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_GetOriginalMemoryFunctions@
+foreign import ccall unsafe "hs_bindgen_f517f867f38f6071"
+  hs_bindgen_f517f867f38f6071_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_GetOriginalMemoryFunctions@
+hs_bindgen_f517f867f38f6071
+  :: BG.Ptr SDL_malloc_func
+  -> BG.Ptr SDL_calloc_func
+  -> BG.Ptr SDL_realloc_func
+  -> BG.Ptr SDL_free_func
+  -> IO ()
+hs_bindgen_f517f867f38f6071 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_f517f867f38f6071_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
+
+-- | Get the original set of SDL memory functions.
+--
+--     This is what SDL_malloc and friends will use by default, if there has been no call to SDL_SetMemoryFunctions. This is not necessarily using the C runtime\'s @malloc@ functions behind the scenes! Different platforms and build configurations might do any number of unexpected things.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_GetOriginalMemoryFunctions@, defined at @SDL3\/SDL_stdinc.h 1525:34@
+sDL_GetOriginalMemoryFunctions
+  :: BG.Ptr SDL_malloc_func
+  -- ^
+  --
+  --           [@malloc_func@]: filled with malloc function.
+  -> BG.Ptr SDL_calloc_func
+  -- ^
+  --
+  --           [@calloc_func@]: filled with calloc function.
+  -> BG.Ptr SDL_realloc_func
+  -- ^
+  --
+  --           [@realloc_func@]: filled with realloc function.
+  -> BG.Ptr SDL_free_func
+  -- ^
+  --
+  --           [@free_func@]: filled with free function.
+  -> IO ()
+sDL_GetOriginalMemoryFunctions =
+  hs_bindgen_f517f867f38f6071
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_GetMemoryFunctions@
+foreign import ccall unsafe "hs_bindgen_25189a0da3d426a6"
+  hs_bindgen_25189a0da3d426a6_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_GetMemoryFunctions@
+hs_bindgen_25189a0da3d426a6
+  :: BG.Ptr SDL_malloc_func
+  -> BG.Ptr SDL_calloc_func
+  -> BG.Ptr SDL_realloc_func
+  -> BG.Ptr SDL_free_func
+  -> IO ()
+hs_bindgen_25189a0da3d426a6 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_25189a0da3d426a6_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
+
+-- | Get the current set of SDL memory functions.
+--
+--     [Thread safety]: This does not hold a lock, so do not call this in the unlikely event of a background thread calling SDL_SetMemoryFunctions simultaneously.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_SetMemoryFunctions', 'sDL_GetOriginalMemoryFunctions'
+--
+--     [C declaration]: @SDL_GetMemoryFunctions@, defined at @SDL3\/SDL_stdinc.h 1547:34@
+sDL_GetMemoryFunctions
+  :: BG.Ptr SDL_malloc_func
+  -- ^
+  --
+  --           [@malloc_func@]: filled with malloc function.
+  -> BG.Ptr SDL_calloc_func
+  -- ^
+  --
+  --           [@calloc_func@]: filled with calloc function.
+  -> BG.Ptr SDL_realloc_func
+  -- ^
+  --
+  --           [@realloc_func@]: filled with realloc function.
+  -> BG.Ptr SDL_free_func
+  -- ^
+  --
+  --           [@free_func@]: filled with free function.
+  -> IO ()
+sDL_GetMemoryFunctions = hs_bindgen_25189a0da3d426a6
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_SetMemoryFunctions@
+foreign import ccall unsafe "hs_bindgen_226182971f75d2c0"
+  hs_bindgen_226182971f75d2c0_base
+    :: BG.FunPtr BG.Void
+    -> BG.FunPtr BG.Void
+    -> BG.FunPtr BG.Void
+    -> BG.FunPtr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_SetMemoryFunctions@
+hs_bindgen_226182971f75d2c0
+  :: SDL_malloc_func
+  -> SDL_calloc_func
+  -> SDL_realloc_func
+  -> SDL_free_func
+  -> IO BG.CBool
+hs_bindgen_226182971f75d2c0 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_226182971f75d2c0_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Replace SDL\'s memory allocation functions with a custom set.
+--
+--     It is not safe to call this function once any allocations have been made, as future calls to SDL_free will use the new allocator, even if they came from an SDL_malloc made with the old one!
+--
+--     If used, usually this needs to be the first call made into the SDL library, if not the very first thing done at program startup time.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread, but one should not replace the memory functions once any allocations are made!
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetMemoryFunctions', 'sDL_GetOriginalMemoryFunctions'
+--
+--     [C declaration]: @SDL_SetMemoryFunctions@, defined at @SDL3\/SDL_stdinc.h 1578:34@
+sDL_SetMemoryFunctions
+  :: SDL_malloc_func
+  -- ^
+  --
+  --           [@malloc_func@]: custom malloc function.
+  -> SDL_calloc_func
+  -- ^
+  --
+  --           [@calloc_func@]: custom calloc function.
+  -> SDL_realloc_func
+  -- ^
+  --
+  --           [@realloc_func@]: custom realloc function.
+  -> SDL_free_func
+  -- ^
+  --
+  --           [@free_func@]: custom free function.
+  -> IO BG.CBool
+sDL_SetMemoryFunctions = hs_bindgen_226182971f75d2c0
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_aligned_alloc@
+foreign import ccall unsafe "hs_bindgen_9900ed39a18caec5"
+  hs_bindgen_9900ed39a18caec5_base
+    :: HsBindgen.Runtime.LibC.CSize
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_aligned_alloc@
+hs_bindgen_9900ed39a18caec5
+  :: HsBindgen.Runtime.LibC.CSize
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO (BG.Ptr BG.Void)
+hs_bindgen_9900ed39a18caec5 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_9900ed39a18caec5_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Allocate memory aligned to a specific alignment.
+--
+--     The memory returned by this function must be freed with @SDL_aligned_free()@, /not/ @SDL_free()@.
+--
+--     If @alignment@ is less than the size of @void *@, it will be increased to match that.
+--
+--     The returned memory address will be a multiple of the alignment value, and the size of the memory allocated will be a multiple of the alignment value.
+--
+--     [Returns]: a pointer to the aligned memory, or NULL if allocation failed.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_aligned_free'
+--
+--     [C declaration]: @SDL_aligned_alloc@, defined at @SDL3\/SDL_stdinc.h 1605:47@
+sDL_aligned_alloc
+  :: HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@alignment@]: the alignment of the memory.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@size@]: the size to allocate.
+  -> IO (BG.Ptr BG.Void)
+sDL_aligned_alloc = hs_bindgen_9900ed39a18caec5
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_aligned_free@
+foreign import ccall unsafe "hs_bindgen_2bf7e303c1a730bf"
+  hs_bindgen_2bf7e303c1a730bf_base
+    :: BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_aligned_free@
+hs_bindgen_2bf7e303c1a730bf
+  :: BG.Ptr BG.Void
+  -> IO ()
+hs_bindgen_2bf7e303c1a730bf =
+  \x0 ->
+    hs_bindgen_2bf7e303c1a730bf_base (BG.toFFIType x0)
+
+-- | Free memory allocated by @SDL_aligned_alloc()@.
+--
+--     The pointer is no longer valid after this call and cannot be dereferenced anymore.
+--
+--     If @mem@ is NULL, this function does nothing.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_aligned_alloc'
+--
+--     [C declaration]: @SDL_aligned_free@, defined at @SDL3\/SDL_stdinc.h 1623:34@
+sDL_aligned_free
+  :: BG.Ptr BG.Void
+  -- ^
+  --
+  --           [@mem@]: a pointer previously returned by @SDL_aligned_alloc()@, or NULL.
+  -> IO ()
+sDL_aligned_free = hs_bindgen_2bf7e303c1a730bf
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_GetNumAllocations@
+foreign import ccall unsafe "hs_bindgen_4528828ea69b3f8b"
+  hs_bindgen_4528828ea69b3f8b_base
+    :: IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_GetNumAllocations@
+hs_bindgen_4528828ea69b3f8b :: IO BG.CInt
+hs_bindgen_4528828ea69b3f8b =
+  fmap BG.fromFFIType hs_bindgen_4528828ea69b3f8b_base
+
+-- | Get the number of outstanding (unfreed) allocations.
+--
+--     [Returns]: the number of allocations or -1 if allocation counting is disabled.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_GetNumAllocations@, defined at @SDL3\/SDL_stdinc.h 1635:33@
+sDL_GetNumAllocations :: IO BG.CInt
+sDL_GetNumAllocations = hs_bindgen_4528828ea69b3f8b
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_GetEnvironment@
+foreign import ccall unsafe "hs_bindgen_e1f4a04ee814291a"
+  hs_bindgen_e1f4a04ee814291a_base
+    :: IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_GetEnvironment@
+hs_bindgen_e1f4a04ee814291a :: IO (BG.Ptr SDL_Environment)
+hs_bindgen_e1f4a04ee814291a =
+  fmap BG.fromFFIType hs_bindgen_e1f4a04ee814291a_base
+
+-- | Get the process environment.
+--
+--     This is initialized at application start and is not affected by setenv() and unsetenv() calls after that point. Use @SDL_SetEnvironmentVariable()@ and @SDL_UnsetEnvironmentVariable()@ if you want to modify this environment, or @SDL_setenv_unsafe()@ or @SDL_unsetenv_unsafe()@ if you want changes to persist in the C runtime environment after SDL_Quit().
+--
+--     [Returns]: a pointer to the environment for the process or NULL on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetEnvironmentVariable', 'sDL_GetEnvironmentVariables', 'sDL_SetEnvironmentVariable', 'sDL_UnsetEnvironmentVariable'
+--
+--     [C declaration]: @SDL_GetEnvironment@, defined at @SDL3\/SDL_stdinc.h 1673:47@
+sDL_GetEnvironment :: IO (BG.Ptr SDL_Environment)
+sDL_GetEnvironment = hs_bindgen_e1f4a04ee814291a
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_CreateEnvironment@
+foreign import ccall unsafe "hs_bindgen_e85a9062a561d535"
+  hs_bindgen_e85a9062a561d535_base
+    :: BG.CBool
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_CreateEnvironment@
+hs_bindgen_e85a9062a561d535
+  :: BG.CBool
+  -> IO (BG.Ptr SDL_Environment)
+hs_bindgen_e85a9062a561d535 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_e85a9062a561d535_base (BG.toFFIType x0))
+
+-- | Create a set of environment variables
+--
+--     [Returns]: a pointer to the new environment or NULL on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: If @populated@ is false, it is safe to call this function from any thread, otherwise it is safe if no other threads are calling setenv() or unsetenv()
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetEnvironmentVariable', 'sDL_GetEnvironmentVariables', 'sDL_SetEnvironmentVariable', 'sDL_UnsetEnvironmentVariable', 'sDL_DestroyEnvironment'
+--
+--     [C declaration]: @SDL_CreateEnvironment@, defined at @SDL3\/SDL_stdinc.h 1695:47@
+sDL_CreateEnvironment
+  :: BG.CBool
+  -- ^
+  --
+  --           [@populated@]: true to initialize it from the C runtime environment, false to create an empty environment.
+  -> IO (BG.Ptr SDL_Environment)
+sDL_CreateEnvironment = hs_bindgen_e85a9062a561d535
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_GetEnvironmentVariable@
+foreign import ccall unsafe "hs_bindgen_5beeb06044229d5f"
+  hs_bindgen_5beeb06044229d5f_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_GetEnvironmentVariable@
+hs_bindgen_5beeb06044229d5f
+  :: BG.Ptr SDL_Environment
+  -> PtrConst.PtrConst BG.CChar
+  -> IO (PtrConst.PtrConst BG.CChar)
+hs_bindgen_5beeb06044229d5f =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_5beeb06044229d5f_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Get the value of a variable in the environment.
+--
+--     [Returns]: a pointer to the value of the variable or NULL if it can\'t be found.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetEnvironment', 'sDL_CreateEnvironment', 'sDL_GetEnvironmentVariables', 'sDL_SetEnvironmentVariable', 'sDL_UnsetEnvironmentVariable'
+--
+--     [C declaration]: @SDL_GetEnvironmentVariable@, defined at @SDL3\/SDL_stdinc.h 1715:42@
+sDL_GetEnvironmentVariable
+  :: BG.Ptr SDL_Environment
+  -- ^
+  --
+  --           [@env@]: the environment to query.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@name@]: the name of the variable to get.
+  -> IO (PtrConst.PtrConst BG.CChar)
+sDL_GetEnvironmentVariable =
+  hs_bindgen_5beeb06044229d5f
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_GetEnvironmentVariables@
+foreign import ccall unsafe "hs_bindgen_b31ecc5c3d715978"
+  hs_bindgen_b31ecc5c3d715978_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_GetEnvironmentVariables@
+hs_bindgen_b31ecc5c3d715978
+  :: BG.Ptr SDL_Environment
+  -> IO (BG.Ptr (BG.Ptr BG.CChar))
+hs_bindgen_b31ecc5c3d715978 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_b31ecc5c3d715978_base (BG.toFFIType x0))
+
+-- | Get all variables in the environment.
+--
+--     [Returns]: a NULL terminated array of pointers to environment variables in the form \"variable=value\" or NULL on failure; call SDL_GetError() for more information. This is a single allocation that should be freed with @SDL_free()@ when it is no longer needed.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetEnvironment', 'sDL_CreateEnvironment', 'sDL_GetEnvironmentVariables', 'sDL_SetEnvironmentVariable', 'sDL_UnsetEnvironmentVariable'
+--
+--     [C declaration]: @SDL_GetEnvironmentVariables@, defined at @SDL3\/SDL_stdinc.h 1736:37@
+sDL_GetEnvironmentVariables
+  :: BG.Ptr SDL_Environment
+  -- ^
+  --
+  --           [@env@]: the environment to query.
+  -> IO (BG.Ptr (BG.Ptr BG.CChar))
+sDL_GetEnvironmentVariables =
+  hs_bindgen_b31ecc5c3d715978
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_SetEnvironmentVariable@
+foreign import ccall unsafe "hs_bindgen_a9acd1c932154b24"
+  hs_bindgen_a9acd1c932154b24_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.CBool
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_SetEnvironmentVariable@
+hs_bindgen_a9acd1c932154b24
+  :: BG.Ptr SDL_Environment
+  -> PtrConst.PtrConst BG.CChar
+  -> PtrConst.PtrConst BG.CChar
+  -> BG.CBool
+  -> IO BG.CBool
+hs_bindgen_a9acd1c932154b24 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_a9acd1c932154b24_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Set the value of a variable in the environment.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetEnvironment', 'sDL_CreateEnvironment', 'sDL_GetEnvironmentVariable', 'sDL_GetEnvironmentVariables', 'sDL_UnsetEnvironmentVariable'
+--
+--     [C declaration]: @SDL_SetEnvironmentVariable@, defined at @SDL3\/SDL_stdinc.h 1760:34@
+sDL_SetEnvironmentVariable
+  :: BG.Ptr SDL_Environment
+  -- ^
+  --
+  --           [@env@]: the environment to modify.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@name@]: the name of the variable to set.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@value@]: the value of the variable to set.
+  -> BG.CBool
+  -- ^
+  --
+  --           [@overwrite@]: true to overwrite the variable if it exists, false to return success without setting the variable if it already exists.
+  -> IO BG.CBool
+sDL_SetEnvironmentVariable =
+  hs_bindgen_a9acd1c932154b24
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_UnsetEnvironmentVariable@
+foreign import ccall unsafe "hs_bindgen_c64095b9c616bfe0"
+  hs_bindgen_c64095b9c616bfe0_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_UnsetEnvironmentVariable@
+hs_bindgen_c64095b9c616bfe0
+  :: BG.Ptr SDL_Environment
+  -> PtrConst.PtrConst BG.CChar
+  -> IO BG.CBool
+hs_bindgen_c64095b9c616bfe0 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_c64095b9c616bfe0_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Clear a variable from the environment.
+--
+--     [Returns]: true on success or false on failure; call SDL_GetError() for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_GetEnvironment', 'sDL_CreateEnvironment', 'sDL_GetEnvironmentVariable', 'sDL_GetEnvironmentVariables', 'sDL_SetEnvironmentVariable', 'sDL_UnsetEnvironmentVariable'
+--
+--     [C declaration]: @SDL_UnsetEnvironmentVariable@, defined at @SDL3\/SDL_stdinc.h 1781:34@
+sDL_UnsetEnvironmentVariable
+  :: BG.Ptr SDL_Environment
+  -- ^
+  --
+  --           [@env@]: the environment to modify.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@name@]: the name of the variable to unset.
+  -> IO BG.CBool
+sDL_UnsetEnvironmentVariable =
+  hs_bindgen_c64095b9c616bfe0
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_DestroyEnvironment@
+foreign import ccall unsafe "hs_bindgen_099a6ae1ccd5370b"
+  hs_bindgen_099a6ae1ccd5370b_base
+    :: BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_DestroyEnvironment@
+hs_bindgen_099a6ae1ccd5370b
+  :: BG.Ptr SDL_Environment
+  -> IO ()
+hs_bindgen_099a6ae1ccd5370b =
+  \x0 ->
+    hs_bindgen_099a6ae1ccd5370b_base (BG.toFFIType x0)
+
+-- | Destroy a set of environment variables.
+--
+--     [Thread safety]: It is safe to call this function from any thread, as long as the environment is no longer in use.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_CreateEnvironment'
+--
+--     [C declaration]: @SDL_DestroyEnvironment@, defined at @SDL3\/SDL_stdinc.h 1795:34@
+sDL_DestroyEnvironment
+  :: BG.Ptr SDL_Environment
+  -- ^
+  --
+  --           [@env@]: the environment to destroy.
+  -> IO ()
+sDL_DestroyEnvironment = hs_bindgen_099a6ae1ccd5370b
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_getenv@
+foreign import ccall unsafe "hs_bindgen_bf38503a85842347"
+  hs_bindgen_bf38503a85842347_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_getenv@
+hs_bindgen_bf38503a85842347
+  :: PtrConst.PtrConst BG.CChar
+  -> IO (PtrConst.PtrConst BG.CChar)
+hs_bindgen_bf38503a85842347 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_bf38503a85842347_base (BG.toFFIType x0))
+
+-- | Get the value of a variable in the environment.
+--
+--     The name of the variable is case sensitive on all platforms.
+--
+--     This function uses SDL\'s cached copy of the environment and is thread-safe.
+--
+--     [Returns]: a pointer to the value of the variable or NULL if it can\'t be found.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_getenv@, defined at @SDL3\/SDL_stdinc.h 1812:42@
+sDL_getenv
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@name@]: the name of the variable to get.
+  -> IO (PtrConst.PtrConst BG.CChar)
+sDL_getenv = hs_bindgen_bf38503a85842347
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_getenv_unsafe@
+foreign import ccall unsafe "hs_bindgen_8bb86791a34eff6a"
+  hs_bindgen_8bb86791a34eff6a_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_getenv_unsafe@
+hs_bindgen_8bb86791a34eff6a
+  :: PtrConst.PtrConst BG.CChar
+  -> IO (PtrConst.PtrConst BG.CChar)
+hs_bindgen_8bb86791a34eff6a =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_8bb86791a34eff6a_base (BG.toFFIType x0))
+
+-- | Get the value of a variable in the environment.
+--
+--     This function bypasses SDL\'s cached copy of the environment and is not thread-safe.
+--
+--     On some platforms, this may make case-insensitive matches, while other platforms are case-sensitive. It is best to be precise with strings used for queries through this interface. SDL_getenv is always case-sensitive, however.
+--
+--     [Returns]: a pointer to the value of the variable or NULL if it can\'t be found.
+--
+--     [Thread safety]: This function is not thread safe, consider using @SDL_getenv()@ instead.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_getenv'
+--
+--     [C declaration]: @SDL_getenv_unsafe@, defined at @SDL3\/SDL_stdinc.h 1836:42@
+sDL_getenv_unsafe
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@name@]: the name of the variable to get.
+  -> IO (PtrConst.PtrConst BG.CChar)
+sDL_getenv_unsafe = hs_bindgen_8bb86791a34eff6a
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_setenv_unsafe@
+foreign import ccall unsafe "hs_bindgen_07289159390730ef"
+  hs_bindgen_07289159390730ef_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_setenv_unsafe@
+hs_bindgen_07289159390730ef
+  :: PtrConst.PtrConst BG.CChar
+  -> PtrConst.PtrConst BG.CChar
+  -> BG.CInt
+  -> IO BG.CInt
+hs_bindgen_07289159390730ef =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_07289159390730ef_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Set the value of a variable in the environment.
+--
+--     [Returns]: 0 on success, -1 on error.
+--
+--     [Thread safety]: This function is not thread safe, consider using @SDL_SetEnvironmentVariable()@ instead.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_SetEnvironmentVariable'
+--
+--     [C declaration]: @SDL_setenv_unsafe@, defined at @SDL3\/SDL_stdinc.h 1854:33@
+sDL_setenv_unsafe
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@name@]: the name of the variable to set.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@value@]: the value of the variable to set.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@overwrite@]: 1 to overwrite the variable if it exists, 0 to return success without setting the variable if it already exists.
+  -> IO BG.CInt
+sDL_setenv_unsafe = hs_bindgen_07289159390730ef
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_unsetenv_unsafe@
+foreign import ccall unsafe "hs_bindgen_8eb1656d4bfcd1be"
+  hs_bindgen_8eb1656d4bfcd1be_base
+    :: BG.Ptr BG.Void
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_unsetenv_unsafe@
+hs_bindgen_8eb1656d4bfcd1be
+  :: PtrConst.PtrConst BG.CChar
+  -> IO BG.CInt
+hs_bindgen_8eb1656d4bfcd1be =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_8eb1656d4bfcd1be_base (BG.toFFIType x0))
+
+-- | Clear a variable from the environment.
+--
+--     [Returns]: 0 on success, -1 on error.
+--
+--     [Thread safety]: This function is not thread safe, consider using @SDL_UnsetEnvironmentVariable()@ instead.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_UnsetEnvironmentVariable'
+--
+--     [C declaration]: @SDL_unsetenv_unsafe@, defined at @SDL3\/SDL_stdinc.h 1869:33@
+sDL_unsetenv_unsafe
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@name@]: the name of the variable to unset.
+  -> IO BG.CInt
+sDL_unsetenv_unsafe = hs_bindgen_8eb1656d4bfcd1be
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_qsort@
+foreign import ccall unsafe "hs_bindgen_95192c7f785c4c45"
+  hs_bindgen_95192c7f785c4c45_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> HsBindgen.Runtime.LibC.CSize
+    -> BG.FunPtr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_qsort@
+hs_bindgen_95192c7f785c4c45
+  :: BG.Ptr BG.Void
+  -> HsBindgen.Runtime.LibC.CSize
+  -> HsBindgen.Runtime.LibC.CSize
+  -> SDL_CompareCallback
+  -> IO ()
+hs_bindgen_95192c7f785c4c45 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_95192c7f785c4c45_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
+
+-- | Sort an array.
+--
+--     For example:
+--
+--     @
+--     typedef struct {
+--         int key;
+--         const char *string;
+--     } data;
+--
+--     int SDLCALL compare(const void *a, const void *b)
+--     {
+--         const data *A = (const data *)a;
+--         const data *B = (const data *)b;
+--
+--         if (A->n \< B->n) {
+--             return -1;
+--         } else if (B->n \< A->n) {
+--             return 1;
+--         } else {
+--             return 0;
+--         }
+--     }
+--
+--     data values[] = {
+--         { 3, \"third\" }, { 1, \"first\" }, { 2, \"second\" }
+--     };
+--
+--     SDL_qsort(values, SDL_arraysize(values), sizeof(values[0]), compare);
+--     @
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_bsearch', 'sDL_qsort_r'
+--
+--     [C declaration]: @SDL_qsort@, defined at @SDL3\/SDL_stdinc.h 1931:34@
+sDL_qsort
+  :: BG.Ptr BG.Void
+  -- ^
+  --
+  --           [@base@]: a pointer to the start of the array.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@nmemb@]: the number of elements in the array.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@size@]: the size of the elements in the array.
+  -> SDL_CompareCallback
+  -- ^
+  --
+  --           [@compare@]: a function used to compare elements in the array.
+  -> IO ()
+sDL_qsort = hs_bindgen_95192c7f785c4c45
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_bsearch@
+foreign import ccall unsafe "hs_bindgen_e3d85c2fcc0e0182"
+  hs_bindgen_e3d85c2fcc0e0182_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> HsBindgen.Runtime.LibC.CSize
+    -> BG.FunPtr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_bsearch@
+hs_bindgen_e3d85c2fcc0e0182
+  :: PtrConst.PtrConst BG.Void
+  -> PtrConst.PtrConst BG.Void
+  -> HsBindgen.Runtime.LibC.CSize
+  -> HsBindgen.Runtime.LibC.CSize
+  -> SDL_CompareCallback
+  -> IO (BG.Ptr BG.Void)
+hs_bindgen_e3d85c2fcc0e0182 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_e3d85c2fcc0e0182_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
+
+-- | Perform a binary search on a previously sorted array.
+--
+--     For example:
+--
+--     @
+--     typedef struct {
+--         int key;
+--         const char *string;
+--     } data;
+--
+--     int SDLCALL compare(const void *a, const void *b)
+--     {
+--         const data *A = (const data *)a;
+--         const data *B = (const data *)b;
+--
+--         if (A->n \< B->n) {
+--             return -1;
+--         } else if (B->n \< A->n) {
+--             return 1;
+--         } else {
+--             return 0;
+--         }
+--     }
+--
+--     data values[] = {
+--         { 1, \"first\" }, { 2, \"second\" }, { 3, \"third\" }
+--     };
+--     data key = { 2, NULL };
+--
+--     data *result = SDL_bsearch(&key, values, SDL_arraysize(values), sizeof(values[0]), compare);
+--     @
+--
+--     [Returns]: a pointer to the matching element in the array, or NULL if not found.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_bsearch_r', 'sDL_qsort'
+--
+--     [C declaration]: @SDL_bsearch@, defined at @SDL3\/SDL_stdinc.h 1981:36@
+sDL_bsearch
+  :: PtrConst.PtrConst BG.Void
+  -- ^
+  --
+  --           [@key@]: a pointer to a key equal to the element being searched for.
+  -> PtrConst.PtrConst BG.Void
+  -- ^
+  --
+  --           [@base@]: a pointer to the start of the array.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@nmemb@]: the number of elements in the array.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@size@]: the size of the elements in the array.
+  -> SDL_CompareCallback
+  -- ^
+  --
+  --           [@compare@]: a function used to compare elements in the array.
+  -> IO (BG.Ptr BG.Void)
+sDL_bsearch = hs_bindgen_e3d85c2fcc0e0182
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_qsort_r@
+foreign import ccall unsafe "hs_bindgen_7a30995c664569a4"
+  hs_bindgen_7a30995c664569a4_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> HsBindgen.Runtime.LibC.CSize
+    -> BG.FunPtr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_qsort_r@
+hs_bindgen_7a30995c664569a4
+  :: BG.Ptr BG.Void
+  -> HsBindgen.Runtime.LibC.CSize
+  -> HsBindgen.Runtime.LibC.CSize
+  -> SDL_CompareCallback_r
+  -> BG.Ptr BG.Void
+  -> IO ()
+hs_bindgen_7a30995c664569a4 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            hs_bindgen_7a30995c664569a4_base
+              (BG.toFFIType x0)
+              (BG.toFFIType x1)
+              (BG.toFFIType x2)
+              (BG.toFFIType x3)
+              (BG.toFFIType x4)
+
+-- | Sort an array, passing a userdata pointer to the compare function.
+--
+--     For example:
+--
+--     @
+--     typedef enum {
+--         sort_increasing,
+--         sort_decreasing,
+--     } sort_method;
+--
+--     typedef struct {
+--         int key;
+--         const char *string;
+--     } data;
+--
+--     int SDLCALL compare(const void *userdata, const void *a, const void *b)
+--     {
+--         sort_method method = (sort_method)(uintptr_t)userdata;
+--         const data *A = (const data *)a;
+--         const data *B = (const data *)b;
+--
+--         if (A->key \< B->key) {
+--             return (method == sort_increasing) ? -1 : 1;
+--         } else if (B->key \< A->key) {
+--             return (method == sort_increasing) ? 1 : -1;
+--         } else {
+--             return 0;
+--         }
+--     }
+--
+--     data values[] = {
+--         { 3, \"third\" }, { 1, \"first\" }, { 2, \"second\" }
+--     };
+--
+--     SDL_qsort_r(values, SDL_arraysize(values), sizeof(values[0]), compare, (const void *)(uintptr_t)sort_increasing);
+--     @
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_bsearch_r', 'sDL_qsort'
+--
+--     [C declaration]: @SDL_qsort_r@, defined at @SDL3\/SDL_stdinc.h 2051:34@
+sDL_qsort_r
+  :: BG.Ptr BG.Void
+  -- ^
+  --
+  --           [@base@]: a pointer to the start of the array.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@nmemb@]: the number of elements in the array.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@size@]: the size of the elements in the array.
+  -> SDL_CompareCallback_r
+  -- ^
+  --
+  --           [@compare@]: a function used to compare elements in the array.
+  -> BG.Ptr BG.Void
+  -- ^
+  --
+  --           [@userdata@]: a pointer to pass to the compare function.
+  -> IO ()
+sDL_qsort_r = hs_bindgen_7a30995c664569a4
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_bsearch_r@
+foreign import ccall unsafe "hs_bindgen_57399b9b8aa9f8f0"
+  hs_bindgen_57399b9b8aa9f8f0_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> HsBindgen.Runtime.LibC.CSize
+    -> BG.FunPtr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_bsearch_r@
+hs_bindgen_57399b9b8aa9f8f0
+  :: PtrConst.PtrConst BG.Void
+  -> PtrConst.PtrConst BG.Void
+  -> HsBindgen.Runtime.LibC.CSize
+  -> HsBindgen.Runtime.LibC.CSize
+  -> SDL_CompareCallback_r
+  -> BG.Ptr BG.Void
+  -> IO (BG.Ptr BG.Void)
+hs_bindgen_57399b9b8aa9f8f0 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_57399b9b8aa9f8f0_base
+                    (BG.toFFIType x0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                    (BG.toFFIType x4)
+                    (BG.toFFIType x5)
+                )
+
+-- | Perform a binary search on a previously sorted array, passing a userdata pointer to the compare function.
+--
+--     For example:
+--
+--     @
+--     typedef enum {
+--         sort_increasing,
+--         sort_decreasing,
+--     } sort_method;
+--
+--     typedef struct {
+--         int key;
+--         const char *string;
+--     } data;
+--
+--     int SDLCALL compare(const void *userdata, const void *a, const void *b)
+--     {
+--         sort_method method = (sort_method)(uintptr_t)userdata;
+--         const data *A = (const data *)a;
+--         const data *B = (const data *)b;
+--
+--         if (A->key \< B->key) {
+--             return (method == sort_increasing) ? -1 : 1;
+--         } else if (B->key \< A->key) {
+--             return (method == sort_increasing) ? 1 : -1;
+--         } else {
+--             return 0;
+--         }
+--     }
+--
+--     data values[] = {
+--         { 1, \"first\" }, { 2, \"second\" }, { 3, \"third\" }
+--     };
+--     data key = { 2, NULL };
+--
+--     data *result = SDL_bsearch_r(&key, values, SDL_arraysize(values), sizeof(values[0]), compare, (const void *)(uintptr_t)sort_increasing);
+--     @
+--
+--     [Returns]: a pointer to the matching element in the array, or NULL if not found.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_bsearch', 'sDL_qsort_r'
+--
+--     [C declaration]: @SDL_bsearch_r@, defined at @SDL3\/SDL_stdinc.h 2109:36@
+sDL_bsearch_r
+  :: PtrConst.PtrConst BG.Void
+  -- ^
+  --
+  --           [@key@]: a pointer to a key equal to the element being searched for.
+  -> PtrConst.PtrConst BG.Void
+  -- ^
+  --
+  --           [@base@]: a pointer to the start of the array.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@nmemb@]: the number of elements in the array.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@size@]: the size of the elements in the array.
+  -> SDL_CompareCallback_r
+  -- ^
+  --
+  --           [@compare@]: a function used to compare elements in the array.
+  -> BG.Ptr BG.Void
+  -- ^
+  --
+  --           [@userdata@]: a pointer to pass to the compare function.
+  -> IO (BG.Ptr BG.Void)
+sDL_bsearch_r = hs_bindgen_57399b9b8aa9f8f0
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_abs@
+foreign import ccall unsafe "hs_bindgen_a928603d6470ca50"
+  hs_bindgen_a928603d6470ca50_base
+    :: BG.CInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_abs@
+hs_bindgen_a928603d6470ca50
+  :: BG.CInt
+  -> IO BG.CInt
+hs_bindgen_a928603d6470ca50 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a928603d6470ca50_base (BG.toFFIType x0))
+
+-- | Compute the absolute value of @x@.
+--
+--     [Returns]: the absolute value of x.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_abs@, defined at @SDL3\/SDL_stdinc.h 2121:33@
+sDL_abs
+  :: BG.CInt
+  -- ^
+  --
+  --           [@x@]: an integer value.
+  -> IO BG.CInt
+sDL_abs = hs_bindgen_a928603d6470ca50
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isalpha@
+foreign import ccall unsafe "hs_bindgen_89185a009225cfaf"
+  hs_bindgen_89185a009225cfaf_base
+    :: BG.CInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isalpha@
+hs_bindgen_89185a009225cfaf
+  :: BG.CInt
+  -> IO BG.CInt
+hs_bindgen_89185a009225cfaf =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_89185a009225cfaf_base (BG.toFFIType x0))
+
+-- | Query if a character is alphabetic (a letter).
+--
+--     __WARNING__: Regardless of system locale, this will only treat ASCII values for English \'a-z\' and \'A-Z\' as true.
+--
+--     [Returns]: non-zero if x falls within the character class, zero otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_isalpha@, defined at @SDL3\/SDL_stdinc.h 2196:33@
+sDL_isalpha
+  :: BG.CInt
+  -- ^
+  --
+  --           [@x@]: character value to check.
+  -> IO BG.CInt
+sDL_isalpha = hs_bindgen_89185a009225cfaf
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isalnum@
+foreign import ccall unsafe "hs_bindgen_1ab6c2f3868de0bb"
+  hs_bindgen_1ab6c2f3868de0bb_base
+    :: BG.CInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isalnum@
+hs_bindgen_1ab6c2f3868de0bb
+  :: BG.CInt
+  -> IO BG.CInt
+hs_bindgen_1ab6c2f3868de0bb =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_1ab6c2f3868de0bb_base (BG.toFFIType x0))
+
+-- | Query if a character is alphabetic (a letter) or a number.
+--
+--     __WARNING__: Regardless of system locale, this will only treat ASCII values for English \'a-z\', \'A-Z\', and \'0-9\' as true.
+--
+--     [Returns]: non-zero if x falls within the character class, zero otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_isalnum@, defined at @SDL3\/SDL_stdinc.h 2211:33@
+sDL_isalnum
+  :: BG.CInt
+  -- ^
+  --
+  --           [@x@]: character value to check.
+  -> IO BG.CInt
+sDL_isalnum = hs_bindgen_1ab6c2f3868de0bb
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isblank@
+foreign import ccall unsafe "hs_bindgen_3c28b4a4af971951"
+  hs_bindgen_3c28b4a4af971951_base
+    :: BG.CInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isblank@
+hs_bindgen_3c28b4a4af971951
+  :: BG.CInt
+  -> IO BG.CInt
+hs_bindgen_3c28b4a4af971951 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3c28b4a4af971951_base (BG.toFFIType x0))
+
+-- | Report if a character is blank (a space or tab).
+--
+--     __WARNING__: Regardless of system locale, this will only treat ASCII values 0x20 (space) or 0x9 (tab) as true.
+--
+--     [Returns]: non-zero if x falls within the character class, zero otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_isblank@, defined at @SDL3\/SDL_stdinc.h 2226:33@
+sDL_isblank
+  :: BG.CInt
+  -- ^
+  --
+  --           [@x@]: character value to check.
+  -> IO BG.CInt
+sDL_isblank = hs_bindgen_3c28b4a4af971951
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_iscntrl@
+foreign import ccall unsafe "hs_bindgen_13a0eb9bfa9faec7"
+  hs_bindgen_13a0eb9bfa9faec7_base
+    :: BG.CInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_iscntrl@
+hs_bindgen_13a0eb9bfa9faec7
+  :: BG.CInt
+  -> IO BG.CInt
+hs_bindgen_13a0eb9bfa9faec7 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_13a0eb9bfa9faec7_base (BG.toFFIType x0))
+
+-- | Report if a character is a control character.
+--
+--     __WARNING__: Regardless of system locale, this will only treat ASCII values 0 through 0x1F, and 0x7F, as true.
+--
+--     [Returns]: non-zero if x falls within the character class, zero otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_iscntrl@, defined at @SDL3\/SDL_stdinc.h 2241:33@
+sDL_iscntrl
+  :: BG.CInt
+  -- ^
+  --
+  --           [@x@]: character value to check.
+  -> IO BG.CInt
+sDL_iscntrl = hs_bindgen_13a0eb9bfa9faec7
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isdigit@
+foreign import ccall unsafe "hs_bindgen_9fae2f93c08cfbf0"
+  hs_bindgen_9fae2f93c08cfbf0_base
+    :: BG.CInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isdigit@
+hs_bindgen_9fae2f93c08cfbf0
+  :: BG.CInt
+  -> IO BG.CInt
+hs_bindgen_9fae2f93c08cfbf0 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_9fae2f93c08cfbf0_base (BG.toFFIType x0))
+
+-- | Report if a character is a numeric digit.
+--
+--     __WARNING__: Regardless of system locale, this will only treat ASCII values \'0\' (0x30) through \'9\' (0x39), as true.
+--
+--     [Returns]: non-zero if x falls within the character class, zero otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_isdigit@, defined at @SDL3\/SDL_stdinc.h 2256:33@
+sDL_isdigit
+  :: BG.CInt
+  -- ^
+  --
+  --           [@x@]: character value to check.
+  -> IO BG.CInt
+sDL_isdigit = hs_bindgen_9fae2f93c08cfbf0
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isxdigit@
+foreign import ccall unsafe "hs_bindgen_0f033c6150a762a3"
+  hs_bindgen_0f033c6150a762a3_base
+    :: BG.CInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isxdigit@
+hs_bindgen_0f033c6150a762a3
+  :: BG.CInt
+  -> IO BG.CInt
+hs_bindgen_0f033c6150a762a3 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_0f033c6150a762a3_base (BG.toFFIType x0))
+
+-- | Report if a character is a hexadecimal digit.
+--
+--     __WARNING__: Regardless of system locale, this will only treat ASCII values \'A\' through \'F\', \'a\' through \'f\', and \'0\' through \'9\', as true.
+--
+--     [Returns]: non-zero if x falls within the character class, zero otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_isxdigit@, defined at @SDL3\/SDL_stdinc.h 2271:33@
+sDL_isxdigit
+  :: BG.CInt
+  -- ^
+  --
+  --           [@x@]: character value to check.
+  -> IO BG.CInt
+sDL_isxdigit = hs_bindgen_0f033c6150a762a3
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_ispunct@
+foreign import ccall unsafe "hs_bindgen_9b835961c1753aa6"
+  hs_bindgen_9b835961c1753aa6_base
+    :: BG.CInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_ispunct@
+hs_bindgen_9b835961c1753aa6
+  :: BG.CInt
+  -> IO BG.CInt
+hs_bindgen_9b835961c1753aa6 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_9b835961c1753aa6_base (BG.toFFIType x0))
+
+-- | Report if a character is a punctuation mark.
+--
+--     __WARNING__: Regardless of system locale, this is equivalent to @((SDL_isgraph(x)) && (!SDL_isalnum(x)))@.
+--
+--     [Returns]: non-zero if x falls within the character class, zero otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_isgraph', 'sDL_isalnum'
+--
+--     [C declaration]: @SDL_ispunct@, defined at @SDL3\/SDL_stdinc.h 2289:33@
+sDL_ispunct
+  :: BG.CInt
+  -- ^
+  --
+  --           [@x@]: character value to check.
+  -> IO BG.CInt
+sDL_ispunct = hs_bindgen_9b835961c1753aa6
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isspace@
+foreign import ccall unsafe "hs_bindgen_37bfc6e46aee6fcc"
+  hs_bindgen_37bfc6e46aee6fcc_base
+    :: BG.CInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isspace@
+hs_bindgen_37bfc6e46aee6fcc
+  :: BG.CInt
+  -> IO BG.CInt
+hs_bindgen_37bfc6e46aee6fcc =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_37bfc6e46aee6fcc_base (BG.toFFIType x0))
+
+-- | Report if a character is whitespace.
+--
+--     __WARNING__: Regardless of system locale, this will only treat the following ASCII values as true:
+--
+--     * space (0x20)
+--
+--     * tab (0x09)
+--
+--     * newline (0x0A)
+--
+--     * vertical tab (0x0B)
+--
+--     * form feed (0x0C)
+--
+--     * return (0x0D)
+--
+--     [Returns]: non-zero if x falls within the character class, zero otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_isspace@, defined at @SDL3\/SDL_stdinc.h 2311:33@
+sDL_isspace
+  :: BG.CInt
+  -- ^
+  --
+  --           [@x@]: character value to check.
+  -> IO BG.CInt
+sDL_isspace = hs_bindgen_37bfc6e46aee6fcc
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isupper@
+foreign import ccall unsafe "hs_bindgen_6a23210549f82553"
+  hs_bindgen_6a23210549f82553_base
+    :: BG.CInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isupper@
+hs_bindgen_6a23210549f82553
+  :: BG.CInt
+  -> IO BG.CInt
+hs_bindgen_6a23210549f82553 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_6a23210549f82553_base (BG.toFFIType x0))
+
+-- | Report if a character is upper case.
+--
+--     __WARNING__: Regardless of system locale, this will only treat ASCII values \'A\' through \'Z\' as true.
+--
+--     [Returns]: non-zero if x falls within the character class, zero otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_isupper@, defined at @SDL3\/SDL_stdinc.h 2326:33@
+sDL_isupper
+  :: BG.CInt
+  -- ^
+  --
+  --           [@x@]: character value to check.
+  -> IO BG.CInt
+sDL_isupper = hs_bindgen_6a23210549f82553
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_islower@
+foreign import ccall unsafe "hs_bindgen_4ef887be849a9002"
+  hs_bindgen_4ef887be849a9002_base
+    :: BG.CInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_islower@
+hs_bindgen_4ef887be849a9002
+  :: BG.CInt
+  -> IO BG.CInt
+hs_bindgen_4ef887be849a9002 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_4ef887be849a9002_base (BG.toFFIType x0))
+
+-- | Report if a character is lower case.
+--
+--     __WARNING__: Regardless of system locale, this will only treat ASCII values \'a\' through \'z\' as true.
+--
+--     [Returns]: non-zero if x falls within the character class, zero otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_islower@, defined at @SDL3\/SDL_stdinc.h 2341:33@
+sDL_islower
+  :: BG.CInt
+  -- ^
+  --
+  --           [@x@]: character value to check.
+  -> IO BG.CInt
+sDL_islower = hs_bindgen_4ef887be849a9002
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isprint@
+foreign import ccall unsafe "hs_bindgen_258633f7820b5c3c"
+  hs_bindgen_258633f7820b5c3c_base
+    :: BG.CInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isprint@
+hs_bindgen_258633f7820b5c3c
+  :: BG.CInt
+  -> IO BG.CInt
+hs_bindgen_258633f7820b5c3c =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_258633f7820b5c3c_base (BG.toFFIType x0))
+
+-- | Report if a character is \"printable\".
+--
+--     Be advised that \"printable\" has a definition that goes back to text terminals from the dawn of computing, making this a sort of special case function that is not suitable for Unicode (or most any) text management.
+--
+--     __WARNING__: Regardless of system locale, this will only treat ASCII values \' \' (0x20) through \'~\' (0x7E) as true.
+--
+--     [Returns]: non-zero if x falls within the character class, zero otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_isprint@, defined at @SDL3\/SDL_stdinc.h 2360:33@
+sDL_isprint
+  :: BG.CInt
+  -- ^
+  --
+  --           [@x@]: character value to check.
+  -> IO BG.CInt
+sDL_isprint = hs_bindgen_258633f7820b5c3c
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isgraph@
+foreign import ccall unsafe "hs_bindgen_64e7a8597c7c9710"
+  hs_bindgen_64e7a8597c7c9710_base
+    :: BG.CInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isgraph@
+hs_bindgen_64e7a8597c7c9710
+  :: BG.CInt
+  -> IO BG.CInt
+hs_bindgen_64e7a8597c7c9710 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_64e7a8597c7c9710_base (BG.toFFIType x0))
+
+-- | Report if a character is any \"printable\" except space.
+--
+--     Be advised that \"printable\" has a definition that goes back to text terminals from the dawn of computing, making this a sort of special case function that is not suitable for Unicode (or most any) text management.
+--
+--     __WARNING__: Regardless of system locale, this is equivalent to @(SDL_isprint(x)) && ((x) != \' \')@.
+--
+--     [Returns]: non-zero if x falls within the character class, zero otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_isprint'
+--
+--     [C declaration]: @SDL_isgraph@, defined at @SDL3\/SDL_stdinc.h 2381:33@
+sDL_isgraph
+  :: BG.CInt
+  -- ^
+  --
+  --           [@x@]: character value to check.
+  -> IO BG.CInt
+sDL_isgraph = hs_bindgen_64e7a8597c7c9710
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_toupper@
+foreign import ccall unsafe "hs_bindgen_c1347761ea69159d"
+  hs_bindgen_c1347761ea69159d_base
+    :: BG.CInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_toupper@
+hs_bindgen_c1347761ea69159d
+  :: BG.CInt
+  -> IO BG.CInt
+hs_bindgen_c1347761ea69159d =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c1347761ea69159d_base (BG.toFFIType x0))
+
+-- | Convert low-ASCII English letters to uppercase.
+--
+--     __WARNING__: Regardless of system locale, this will only convert ASCII values \'a\' through \'z\' to uppercase.
+--
+--     This function returns the uppercase equivalent of @x@. If a character cannot be converted, or is already uppercase, this function returns @x@.
+--
+--     [Returns]: capitalized version of x, or x if no conversion available.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_toupper@, defined at @SDL3\/SDL_stdinc.h 2399:33@
+sDL_toupper
+  :: BG.CInt
+  -- ^
+  --
+  --           [@x@]: character value to check.
+  -> IO BG.CInt
+sDL_toupper = hs_bindgen_c1347761ea69159d
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_tolower@
+foreign import ccall unsafe "hs_bindgen_b3fecd41676fe4be"
+  hs_bindgen_b3fecd41676fe4be_base
+    :: BG.CInt
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_tolower@
+hs_bindgen_b3fecd41676fe4be
+  :: BG.CInt
+  -> IO BG.CInt
+hs_bindgen_b3fecd41676fe4be =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_b3fecd41676fe4be_base (BG.toFFIType x0))
+
+-- | Convert low-ASCII English letters to lowercase.
+--
+--     __WARNING__: Regardless of system locale, this will only convert ASCII values \'A\' through \'Z\' to lowercase.
+--
+--     This function returns the lowercase equivalent of @x@. If a character cannot be converted, or is already lowercase, this function returns @x@.
+--
+--     [Returns]: lowercase version of x, or x if no conversion available.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_tolower@, defined at @SDL3\/SDL_stdinc.h 2417:33@
+sDL_tolower
+  :: BG.CInt
+  -- ^
+  --
+  --           [@x@]: character value to check.
+  -> IO BG.CInt
+sDL_tolower = hs_bindgen_b3fecd41676fe4be
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_crc16@
+foreign import ccall unsafe "hs_bindgen_35ff41be4e4da9d1"
+  hs_bindgen_35ff41be4e4da9d1_base
+    :: HsBindgen.Runtime.LibC.Word16
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO HsBindgen.Runtime.LibC.Word16
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_crc16@
+hs_bindgen_35ff41be4e4da9d1
+  :: Uint16
+  -> PtrConst.PtrConst BG.Void
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO Uint16
+hs_bindgen_35ff41be4e4da9d1 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_35ff41be4e4da9d1_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Calculate a CRC-16 value.
+--
+--     [https:\/\/en.wikipedia.org\/wiki\/Cyclic_redundancy_check](https://en.wikipedia.org/wiki/Cyclic_redundancy_check)
+--
+--     This function can be called multiple times, to stream data to be checksummed in blocks. Each call must provide the previous CRC-16 return value to be updated with the next block. The first call to this function for a set of blocks should pass in a zero CRC value.
+--
+--     [Returns]: a CRC-16 checksum value of all blocks in the data set.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_crc16@, defined at @SDL3\/SDL_stdinc.h 2438:36@
+sDL_crc16
+  :: Uint16
+  -- ^
+  --
+  --           [@crc@]: the current checksum for this data set, or 0 for a new data set.
+  -> PtrConst.PtrConst BG.Void
+  -- ^
+  --
+  --           [@data@]: a new block of data to add to the checksum.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@len@]: the size, in bytes, of the new block of data.
+  -> IO Uint16
+sDL_crc16 = hs_bindgen_35ff41be4e4da9d1
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_crc32@
+foreign import ccall unsafe "hs_bindgen_6755f946704473dc"
+  hs_bindgen_6755f946704473dc_base
+    :: HsBindgen.Runtime.LibC.Word32
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO HsBindgen.Runtime.LibC.Word32
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_crc32@
+hs_bindgen_6755f946704473dc
+  :: Uint32
+  -> PtrConst.PtrConst BG.Void
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO Uint32
+hs_bindgen_6755f946704473dc =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_6755f946704473dc_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Calculate a CRC-32 value.
+--
+--     [https:\/\/en.wikipedia.org\/wiki\/Cyclic_redundancy_check](https://en.wikipedia.org/wiki/Cyclic_redundancy_check)
+--
+--     This function can be called multiple times, to stream data to be checksummed in blocks. Each call must provide the previous CRC-32 return value to be updated with the next block. The first call to this function for a set of blocks should pass in a zero CRC value.
+--
+--     [Returns]: a CRC-32 checksum value of all blocks in the data set.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_crc32@, defined at @SDL3\/SDL_stdinc.h 2459:36@
+sDL_crc32
+  :: Uint32
+  -- ^
+  --
+  --           [@crc@]: the current checksum for this data set, or 0 for a new data set.
+  -> PtrConst.PtrConst BG.Void
+  -- ^
+  --
+  --           [@data@]: a new block of data to add to the checksum.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@len@]: the size, in bytes, of the new block of data.
+  -> IO Uint32
+sDL_crc32 = hs_bindgen_6755f946704473dc
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_murmur3_32@
+foreign import ccall unsafe "hs_bindgen_4538e03ee60f6976"
+  hs_bindgen_4538e03ee60f6976_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_murmur3_32@
+hs_bindgen_4538e03ee60f6976
+  :: PtrConst.PtrConst BG.Void
+  -> HsBindgen.Runtime.LibC.CSize
+  -> Uint32
+  -> IO Uint32
+hs_bindgen_4538e03ee60f6976 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_4538e03ee60f6976_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Calculate a 32-bit MurmurHash3 value for a block of data.
+--
+--     [https:\/\/en.wikipedia.org\/wiki\/MurmurHash](https://en.wikipedia.org/wiki/MurmurHash)
+--
+--     A seed may be specified, which changes the final results consistently, but this does not work like SDL_crc16 and SDL_crc32: you can\'t feed a previous result from this function back into itself as the next seed value to calculate a hash in chunks; it won\'t produce the same hash as it would if the same data was provided in a single call.
+--
+--     If you aren\'t sure what to provide for a seed, zero is fine. Murmur3 is not cryptographically secure, so it shouldn\'t be used for hashing top-secret data.
+--
+--     [Returns]: a Murmur3 32-bit hash value.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_murmur3_32@, defined at @SDL3\/SDL_stdinc.h 2485:36@
+sDL_murmur3_32
+  :: PtrConst.PtrConst BG.Void
+  -- ^
+  --
+  --           [@data@]: the data to be hashed.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@len@]: the size of data, in bytes.
+  -> Uint32
+  -- ^
+  --
+  --           [@seed@]: a value that alters the final hash value.
+  -> IO Uint32
+sDL_murmur3_32 = hs_bindgen_4538e03ee60f6976
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_memcpy@
+foreign import ccall unsafe "hs_bindgen_455d4e0308a7fc2b"
+  hs_bindgen_455d4e0308a7fc2b_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_memcpy@
+hs_bindgen_455d4e0308a7fc2b
+  :: BG.Ptr BG.Void
+  -> PtrConst.PtrConst BG.Void
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO (BG.Ptr BG.Void)
+hs_bindgen_455d4e0308a7fc2b =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_455d4e0308a7fc2b_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Copy non-overlapping memory.
+--
+--     The memory regions must not overlap. If they do, use @SDL_memmove()@ instead.
+--
+--     [Returns]: @dst@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_memmove'
+--
+--     [C declaration]: @SDL_memcpy@, defined at @SDL3\/SDL_stdinc.h 2505:36@
+sDL_memcpy
+  :: BG.Ptr BG.Void
+  -- ^
+  --
+  --           [@dst@]: The destination memory region. Must not be NULL, and must not overlap with @src@.
+  -> PtrConst.PtrConst BG.Void
+  -- ^
+  --
+  --           [@src@]: The source memory region. Must not be NULL, and must not overlap with @dst@.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@len@]: The length in bytes of both @dst@ and @src@.
+  -> IO (BG.Ptr BG.Void)
+sDL_memcpy = hs_bindgen_455d4e0308a7fc2b
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_memmove@
+foreign import ccall unsafe "hs_bindgen_6db8be082a8110dc"
+  hs_bindgen_6db8be082a8110dc_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_memmove@
+hs_bindgen_6db8be082a8110dc
+  :: BG.Ptr BG.Void
+  -> PtrConst.PtrConst BG.Void
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO (BG.Ptr BG.Void)
+hs_bindgen_6db8be082a8110dc =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_6db8be082a8110dc_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Copy memory ranges that might overlap.
+--
+--     It is okay for the memory regions to overlap. If you are confident that the regions never overlap, using @SDL_memcpy()@ may improve performance.
+--
+--     [Returns]: @dst@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_memcpy'
+--
+--     [C declaration]: @SDL_memmove@, defined at @SDL3\/SDL_stdinc.h 2561:36@
+sDL_memmove
+  :: BG.Ptr BG.Void
+  -- ^
+  --
+  --           [@dst@]: The destination memory region. Must not be NULL.
+  -> PtrConst.PtrConst BG.Void
+  -- ^
+  --
+  --           [@src@]: The source memory region. Must not be NULL.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@len@]: The length in bytes of both @dst@ and @src@.
+  -> IO (BG.Ptr BG.Void)
+sDL_memmove = hs_bindgen_6db8be082a8110dc
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_memset@
+foreign import ccall unsafe "hs_bindgen_951115e41714b35e"
+  hs_bindgen_951115e41714b35e_base
+    :: BG.Ptr BG.Void
+    -> BG.CInt
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_memset@
+hs_bindgen_951115e41714b35e
+  :: BG.Ptr BG.Void
+  -> BG.CInt
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO (BG.Ptr BG.Void)
+hs_bindgen_951115e41714b35e =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_951115e41714b35e_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Initialize all bytes of buffer of memory to a specific value.
+--
+--     This function will set @len@ bytes, pointed to by @dst@, to the value specified in @c@.
+--
+--     Despite @c@ being an @int@ instead of a @char@, this only operates on bytes; @c@ must be a value between 0 and 255, inclusive.
+--
+--     [Returns]: @dst@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_memset@, defined at @SDL3\/SDL_stdinc.h 2589:36@
+sDL_memset
+  :: BG.Ptr BG.Void
+  -- ^
+  --
+  --           [@dst@]: the destination memory region. Must not be NULL.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@c@]: the byte value to set.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@len@]: the length, in bytes, to set in @dst@.
+  -> IO (BG.Ptr BG.Void)
+sDL_memset = hs_bindgen_951115e41714b35e
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_memset4@
+foreign import ccall unsafe "hs_bindgen_006ad9913290aee0"
+  hs_bindgen_006ad9913290aee0_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_memset4@
+hs_bindgen_006ad9913290aee0
+  :: BG.Ptr BG.Void
+  -> Uint32
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO (BG.Ptr BG.Void)
+hs_bindgen_006ad9913290aee0 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_006ad9913290aee0_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Initialize all 32-bit words of buffer of memory to a specific value.
+--
+--     This function will set a buffer of @dwords@ 'Uint32' values, pointed to by @dst@, to the value specified in @val@.
+--
+--     Unlike SDL_memset, this sets 32-bit values, not bytes, so it\'s not limited to a range of 0-255.
+--
+--     [Returns]: @dst@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_memset4@, defined at @SDL3\/SDL_stdinc.h 2609:36@
+sDL_memset4
+  :: BG.Ptr BG.Void
+  -- ^
+  --
+  --           [@dst@]: the destination memory region. Must not be NULL.
+  -> Uint32
+  -- ^
+  --
+  --           [@val@]: the 'Uint32' value to set.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@dwords@]: the number of 'Uint32' values to set in @dst@.
+  -> IO (BG.Ptr BG.Void)
+sDL_memset4 = hs_bindgen_006ad9913290aee0
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_memcmp@
+foreign import ccall unsafe "hs_bindgen_f8312f3094e9811f"
+  hs_bindgen_f8312f3094e9811f_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_memcmp@
+hs_bindgen_f8312f3094e9811f
+  :: PtrConst.PtrConst BG.Void
+  -> PtrConst.PtrConst BG.Void
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO BG.CInt
+hs_bindgen_f8312f3094e9811f =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_f8312f3094e9811f_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Compare two buffers of memory.
+--
+--     [Returns]: less than zero if s1 is \"less than\" s2, greater than zero if s1 is \"greater than\" s2, and zero if the buffers match exactly for @len@ bytes.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_memcmp@, defined at @SDL3\/SDL_stdinc.h 2691:33@
+sDL_memcmp
+  :: PtrConst.PtrConst BG.Void
+  -- ^
+  --
+  --           [@s1@]: the first buffer to compare. NULL is not permitted!
+  -> PtrConst.PtrConst BG.Void
+  -- ^
+  --
+  --           [@s2@]: the second buffer to compare. NULL is not permitted!
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@len@]: the number of bytes to compare between the buffers.
+  -> IO BG.CInt
+sDL_memcmp = hs_bindgen_f8312f3094e9811f
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcslen@
+foreign import ccall unsafe "hs_bindgen_7819cc3f05f6e767"
+  hs_bindgen_7819cc3f05f6e767_base
+    :: BG.Ptr BG.Void
+    -> IO HsBindgen.Runtime.LibC.CSize
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcslen@
+hs_bindgen_7819cc3f05f6e767
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -> IO HsBindgen.Runtime.LibC.CSize
+hs_bindgen_7819cc3f05f6e767 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_7819cc3f05f6e767_base (BG.toFFIType x0))
+
+-- | This works exactly like wcslen() but doesn\'t require access to a C runtime.
+--
+--     Counts the number of wchar_t values in @wstr@, excluding the null terminator.
+--
+--     Like SDL_strlen only counts bytes and not codepoints in a UTF-8 string, this counts wchar_t values in a string, even if the string\'s encoding is of variable width, like UTF-16.
+--
+--     Also be aware that wchar_t is different sizes on different platforms (4 bytes on Linux, 2 on Windows, etc).
+--
+--     [Returns]: the length (in wchar_t values, excluding the null terminator) of @wstr@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_wcsnlen', 'sDL_utf8strlen', 'sDL_utf8strnlen'
+--
+--     [C declaration]: @SDL_wcslen@, defined at @SDL3\/SDL_stdinc.h 2718:36@
+sDL_wcslen
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@wstr@]: The null-terminated wide string to read. Must not be NULL.
+  -> IO HsBindgen.Runtime.LibC.CSize
+sDL_wcslen = hs_bindgen_7819cc3f05f6e767
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcsnlen@
+foreign import ccall unsafe "hs_bindgen_4d4c9962d27e8c57"
+  hs_bindgen_4d4c9962d27e8c57_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO HsBindgen.Runtime.LibC.CSize
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcsnlen@
+hs_bindgen_4d4c9962d27e8c57
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO HsBindgen.Runtime.LibC.CSize
+hs_bindgen_4d4c9962d27e8c57 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_4d4c9962d27e8c57_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | This works exactly like wcsnlen() but doesn\'t require access to a C runtime.
+--
+--     Counts up to a maximum of @maxlen@ wchar_t values in @wstr@, excluding the null terminator.
+--
+--     Like SDL_strnlen only counts bytes and not codepoints in a UTF-8 string, this counts wchar_t values in a string, even if the string\'s encoding is of variable width, like UTF-16.
+--
+--     Also be aware that wchar_t is different sizes on different platforms (4 bytes on Linux, 2 on Windows, etc).
+--
+--     Also, @maxlen@ is a count of wide characters, not bytes!
+--
+--     [Returns]: the length (in wide characters, excluding the null terminator) of @wstr@ but never more than @maxlen@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_wcslen', 'sDL_utf8strlen', 'sDL_utf8strnlen'
+--
+--     [C declaration]: @SDL_wcsnlen@, defined at @SDL3\/SDL_stdinc.h 2749:36@
+sDL_wcsnlen
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@wstr@]: The null-terminated wide string to read. Must not be NULL.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@maxlen@]: The maximum amount of wide characters to count.
+  -> IO HsBindgen.Runtime.LibC.CSize
+sDL_wcsnlen = hs_bindgen_4d4c9962d27e8c57
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcslcpy@
+foreign import ccall unsafe "hs_bindgen_6a63636fffe52a27"
+  hs_bindgen_6a63636fffe52a27_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO HsBindgen.Runtime.LibC.CSize
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcslcpy@
+hs_bindgen_6a63636fffe52a27
+  :: BG.Ptr HsBindgen.Runtime.LibC.CWchar
+  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO HsBindgen.Runtime.LibC.CSize
+hs_bindgen_6a63636fffe52a27 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_6a63636fffe52a27_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Copy a wide string.
+--
+--     This function copies @maxlen@ - 1 wide characters from @src@ to @dst@, then appends a null terminator.
+--
+--     @src@ and @dst@ must not overlap.
+--
+--     If @maxlen@ is 0, no wide characters are copied and no null terminator is written.
+--
+--     [Returns]: the length (in wide characters, excluding the null terminator) of @src@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_wcslcat'
+--
+--     [C declaration]: @SDL_wcslcpy@, defined at @SDL3\/SDL_stdinc.h 2776:36@
+sDL_wcslcpy
+  :: BG.Ptr HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@dst@]: The destination buffer. Must not be NULL, and must not overlap with @src@.
+  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@src@]: The null-terminated wide string to copy. Must not be NULL, and must not overlap with @dst@.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@maxlen@]: The length (in wide characters) of the destination buffer.
+  -> IO HsBindgen.Runtime.LibC.CSize
+sDL_wcslcpy = hs_bindgen_6a63636fffe52a27
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcslcat@
+foreign import ccall unsafe "hs_bindgen_ae63311931250a61"
+  hs_bindgen_ae63311931250a61_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO HsBindgen.Runtime.LibC.CSize
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcslcat@
+hs_bindgen_ae63311931250a61
+  :: BG.Ptr HsBindgen.Runtime.LibC.CWchar
+  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO HsBindgen.Runtime.LibC.CSize
+hs_bindgen_ae63311931250a61 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_ae63311931250a61_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Concatenate wide strings.
+--
+--     This function appends up to @maxlen@ - SDL_wcslen(dst) - 1 wide characters from @src@ to the end of the wide string in @dst@, then appends a null terminator.
+--
+--     @src@ and @dst@ must not overlap.
+--
+--     If @maxlen@ - SDL_wcslen(dst) - 1 is less than or equal to 0, then @dst@ is unmodified.
+--
+--     [Returns]: the length (in wide characters, excluding the null terminator) of the string in @dst@ plus the length of @src@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_wcslcpy'
+--
+--     [C declaration]: @SDL_wcslcat@, defined at @SDL3\/SDL_stdinc.h 2805:36@
+sDL_wcslcat
+  :: BG.Ptr HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@dst@]: The destination buffer already containing the first null-terminated wide string. Must not be NULL and must not overlap with @src@.
+  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@src@]: The second null-terminated wide string. Must not be NULL, and must not overlap with @dst@.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@maxlen@]: The length (in wide characters) of the destination buffer.
+  -> IO HsBindgen.Runtime.LibC.CSize
+sDL_wcslcat = hs_bindgen_ae63311931250a61
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcsdup@
+foreign import ccall unsafe "hs_bindgen_0c56a99a680dde86"
+  hs_bindgen_0c56a99a680dde86_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcsdup@
+hs_bindgen_0c56a99a680dde86
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -> IO (BG.Ptr HsBindgen.Runtime.LibC.CWchar)
+hs_bindgen_0c56a99a680dde86 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_0c56a99a680dde86_base (BG.toFFIType x0))
+
+-- | Allocate a copy of a wide string.
+--
+--     This allocates enough space for a null-terminated copy of @wstr@, using SDL_malloc, and then makes a copy of the string into this space.
+--
+--     The returned string is owned by the caller, and should be passed to SDL_free when no longer needed.
+--
+--     [Returns]: a pointer to the newly-allocated wide string.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_wcsdup@, defined at @SDL3\/SDL_stdinc.h 2823:39@
+sDL_wcsdup
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@wstr@]: the string to copy.
+  -> IO (BG.Ptr HsBindgen.Runtime.LibC.CWchar)
+sDL_wcsdup = hs_bindgen_0c56a99a680dde86
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcsstr@
+foreign import ccall unsafe "hs_bindgen_0e15f64725300a1d"
+  hs_bindgen_0e15f64725300a1d_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcsstr@
+hs_bindgen_0e15f64725300a1d
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -> IO (BG.Ptr HsBindgen.Runtime.LibC.CWchar)
+hs_bindgen_0e15f64725300a1d =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_0e15f64725300a1d_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Search a wide string for the first instance of a specific substring.
+--
+--     The search ends once it finds the requested substring, or a null terminator byte to end the string.
+--
+--     Note that this looks for strings of /wide characters/, not /codepoints/, so it\'s legal to search for malformed and incomplete UTF-16 sequences.
+--
+--     [Returns]: a pointer to the first instance of @needle@ in the string, or NULL if not found.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_wcsstr@, defined at @SDL3\/SDL_stdinc.h 2843:39@
+sDL_wcsstr
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@haystack@]: the wide string to search. Must not be NULL.
+  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@needle@]: the wide string to search for. Must not be NULL.
+  -> IO (BG.Ptr HsBindgen.Runtime.LibC.CWchar)
+sDL_wcsstr = hs_bindgen_0e15f64725300a1d
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcsnstr@
+foreign import ccall unsafe "hs_bindgen_ed81408c495114ac"
+  hs_bindgen_ed81408c495114ac_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcsnstr@
+hs_bindgen_ed81408c495114ac
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO (BG.Ptr HsBindgen.Runtime.LibC.CWchar)
+hs_bindgen_ed81408c495114ac =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_ed81408c495114ac_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Search a wide string, up to n wide chars, for the first instance of a specific substring.
+--
+--     The search ends once it finds the requested substring, or a null terminator value to end the string, or @maxlen@ wide character have been examined. It is possible to use this function on a wide string without a null terminator.
+--
+--     Note that this looks for strings of /wide characters/, not /codepoints/, so it\'s legal to search for malformed and incomplete UTF-16 sequences.
+--
+--     [Returns]: a pointer to the first instance of @needle@ in the string, or NULL if not found.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_wcsnstr@, defined at @SDL3\/SDL_stdinc.h 2868:39@
+sDL_wcsnstr
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@haystack@]: the wide string to search. Must not be NULL.
+  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@needle@]: the wide string to search for. Must not be NULL.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@maxlen@]: the maximum number of wide characters to search in @haystack@.
+  -> IO (BG.Ptr HsBindgen.Runtime.LibC.CWchar)
+sDL_wcsnstr = hs_bindgen_ed81408c495114ac
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcscmp@
+foreign import ccall unsafe "hs_bindgen_523128c66baf772a"
+  hs_bindgen_523128c66baf772a_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcscmp@
+hs_bindgen_523128c66baf772a
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -> IO BG.CInt
+hs_bindgen_523128c66baf772a =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_523128c66baf772a_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Compare two null-terminated wide strings.
+--
+--     This only compares wchar_t values until it hits a null-terminating character; it does not care if the string is well-formed UTF-16 (or UTF-32, depending on your platform\'s wchar_t size), or uses valid Unicode values.
+--
+--     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_wcscmp@, defined at @SDL3\/SDL_stdinc.h 2887:33@
+sDL_wcscmp
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@str1@]: the first string to compare. NULL is not permitted!
+  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@str2@]: the second string to compare. NULL is not permitted!
+  -> IO BG.CInt
+sDL_wcscmp = hs_bindgen_523128c66baf772a
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcsncmp@
+foreign import ccall unsafe "hs_bindgen_ae16252c87514b75"
+  hs_bindgen_ae16252c87514b75_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcsncmp@
+hs_bindgen_ae16252c87514b75
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO BG.CInt
+hs_bindgen_ae16252c87514b75 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_ae16252c87514b75_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Compare two wide strings up to a number of wchar_t values.
+--
+--     This only compares wchar_t values; it does not care if the string is well-formed UTF-16 (or UTF-32, depending on your platform\'s wchar_t size), or uses valid Unicode values.
+--
+--     Note that while this function is intended to be used with UTF-16 (or UTF-32, depending on your platform\'s definition of wchar_t), it is comparing raw wchar_t values and not Unicode codepoints: @maxlen@ specifies a wchar_t limit! If the limit lands in the middle of a multi-wchar UTF-16 sequence, it will only compare a portion of the final character.
+--
+--     @maxlen@ specifies a maximum number of wchar_t to compare; if the strings match to this number of wide chars (or both have matched to a null-terminator character before this count), they will be considered equal.
+--
+--     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_wcsncmp@, defined at @SDL3\/SDL_stdinc.h 2918:33@
+sDL_wcsncmp
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@str1@]: the first string to compare. NULL is not permitted!
+  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@str2@]: the second string to compare. NULL is not permitted!
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@maxlen@]: the maximum number of wchar_t to compare.
+  -> IO BG.CInt
+sDL_wcsncmp = hs_bindgen_ae16252c87514b75
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcscasecmp@
+foreign import ccall unsafe "hs_bindgen_2a1f0e71a040879b"
+  hs_bindgen_2a1f0e71a040879b_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcscasecmp@
+hs_bindgen_2a1f0e71a040879b
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -> IO BG.CInt
+hs_bindgen_2a1f0e71a040879b =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_2a1f0e71a040879b_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Compare two null-terminated wide strings, case-insensitively.
+--
+--     This will work with Unicode strings, using a technique called \"case-folding\" to handle the vast majority of case-sensitive human languages regardless of system locale. It can deal with expanding values: a German Eszett character can compare against two ASCII \'s\' chars and be considered a match, for example. A notable exception: it does not handle the Turkish \'i\' character; human language is complicated!
+--
+--     Depending on your platform, \"wchar_t\" might be 2 bytes, and expected to be UTF-16 encoded (like Windows), or 4 bytes in UTF-32 format. Since this handles Unicode, it expects the string to be well-formed and not a null-terminated string of arbitrary bytes. Characters that are not valid UTF-16 (or UTF-32) are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), which is to say two strings of random bits may turn out to match if they convert to the same amount of replacement characters.
+--
+--     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_wcscasecmp@, defined at @SDL3\/SDL_stdinc.h 2948:33@
+sDL_wcscasecmp
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@str1@]: the first string to compare. NULL is not permitted!
+  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@str2@]: the second string to compare. NULL is not permitted!
+  -> IO BG.CInt
+sDL_wcscasecmp = hs_bindgen_2a1f0e71a040879b
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcsncasecmp@
+foreign import ccall unsafe "hs_bindgen_1c13738568f12d1d"
+  hs_bindgen_1c13738568f12d1d_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_wcsncasecmp@
+hs_bindgen_1c13738568f12d1d
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO BG.CInt
+hs_bindgen_1c13738568f12d1d =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_1c13738568f12d1d_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Compare two wide strings, case-insensitively, up to a number of wchar_t.
+--
+--     This will work with Unicode strings, using a technique called \"case-folding\" to handle the vast majority of case-sensitive human languages regardless of system locale. It can deal with expanding values: a German Eszett character can compare against two ASCII \'s\' chars and be considered a match, for example. A notable exception: it does not handle the Turkish \'i\' character; human language is complicated!
+--
+--     Depending on your platform, \"wchar_t\" might be 2 bytes, and expected to be UTF-16 encoded (like Windows), or 4 bytes in UTF-32 format. Since this handles Unicode, it expects the string to be well-formed and not a null-terminated string of arbitrary bytes. Characters that are not valid UTF-16 (or UTF-32) are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), which is to say two strings of random bits may turn out to match if they convert to the same amount of replacement characters.
+--
+--     Note that while this function might deal with variable-sized characters, @maxlen@ specifies a /wchar/ limit! If the limit lands in the middle of a multi-byte UTF-16 sequence, it may convert a portion of the final character to one or more Unicode character U+FFFD (REPLACEMENT CHARACTER) so as not to overflow a buffer.
+--
+--     @maxlen@ specifies a maximum number of wchar_t values to compare; if the strings match to this number of wchar_t (or both have matched to a null-terminator character before this number of bytes), they will be considered equal.
+--
+--     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_wcsncasecmp@, defined at @SDL3\/SDL_stdinc.h 2990:33@
+sDL_wcsncasecmp
+  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@str1@]: the first string to compare. NULL is not permitted!
+  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
+  -- ^
+  --
+  --           [@str2@]: the second string to compare. NULL is not permitted!
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@maxlen@]: the maximum number of wchar_t values to compare.
+  -> IO BG.CInt
+sDL_wcsncasecmp = hs_bindgen_1c13738568f12d1d
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strlen@
+foreign import ccall unsafe "hs_bindgen_59a6bfea24e96b34"
+  hs_bindgen_59a6bfea24e96b34_base
+    :: BG.Ptr BG.Void
+    -> IO HsBindgen.Runtime.LibC.CSize
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strlen@
+hs_bindgen_59a6bfea24e96b34
+  :: PtrConst.PtrConst BG.CChar
+  -> IO HsBindgen.Runtime.LibC.CSize
+hs_bindgen_59a6bfea24e96b34 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_59a6bfea24e96b34_base (BG.toFFIType x0))
+
+-- | This works exactly like strlen() but doesn\'t require access to a C runtime.
+--
+--     Counts the bytes in @str@, excluding the null terminator.
+--
+--     If you need the length of a UTF-8 string, consider using @SDL_utf8strlen()@.
+--
+--     [Returns]: the length (in bytes, excluding the null terminator) of @src@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_strnlen', 'sDL_utf8strlen', 'sDL_utf8strnlen'
+--
+--     [C declaration]: @SDL_strlen@, defined at @SDL3\/SDL_stdinc.h 3037:36@
+sDL_strlen
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: The null-terminated string to read. Must not be NULL.
+  -> IO HsBindgen.Runtime.LibC.CSize
+sDL_strlen = hs_bindgen_59a6bfea24e96b34
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strnlen@
+foreign import ccall unsafe "hs_bindgen_c8b4424317df84e9"
+  hs_bindgen_c8b4424317df84e9_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO HsBindgen.Runtime.LibC.CSize
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strnlen@
+hs_bindgen_c8b4424317df84e9
+  :: PtrConst.PtrConst BG.CChar
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO HsBindgen.Runtime.LibC.CSize
+hs_bindgen_c8b4424317df84e9 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_c8b4424317df84e9_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | This works exactly like strnlen() but doesn\'t require access to a C runtime.
+--
+--     Counts up to a maximum of @maxlen@ bytes in @str@, excluding the null terminator.
+--
+--     If you need the length of a UTF-8 string, consider using @SDL_utf8strnlen()@.
+--
+--     [Returns]: the length (in bytes, excluding the null terminator) of @src@ but never more than @maxlen@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_strlen', 'sDL_utf8strlen', 'sDL_utf8strnlen'
+--
+--     [C declaration]: @SDL_strnlen@, defined at @SDL3\/SDL_stdinc.h 3061:36@
+sDL_strnlen
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: The null-terminated string to read. Must not be NULL.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@maxlen@]: The maximum amount of bytes to count.
+  -> IO HsBindgen.Runtime.LibC.CSize
+sDL_strnlen = hs_bindgen_c8b4424317df84e9
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strlcpy@
+foreign import ccall unsafe "hs_bindgen_e26f240b36c1f7f4"
+  hs_bindgen_e26f240b36c1f7f4_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO HsBindgen.Runtime.LibC.CSize
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strlcpy@
+hs_bindgen_e26f240b36c1f7f4
+  :: BG.Ptr BG.CChar
+  -> PtrConst.PtrConst BG.CChar
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO HsBindgen.Runtime.LibC.CSize
+hs_bindgen_e26f240b36c1f7f4 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_e26f240b36c1f7f4_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Copy a string.
+--
+--     This function copies up to @maxlen@ - 1 characters from @src@ to @dst@, then appends a null terminator.
+--
+--     If @maxlen@ is 0, no characters are copied and no null terminator is written.
+--
+--     If you want to copy an UTF-8 string but need to ensure that multi-byte sequences are not truncated, consider using @SDL_utf8strlcpy()@.
+--
+--     [Returns]: the length (in characters, excluding the null terminator) of @src@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_strlcat', 'sDL_utf8strlcpy'
+--
+--     [C declaration]: @SDL_strlcpy@, defined at @SDL3\/SDL_stdinc.h 3090:36@
+sDL_strlcpy
+  :: BG.Ptr BG.CChar
+  -- ^
+  --
+  --           [@dst@]: The destination buffer. Must not be NULL, and must not overlap with @src@.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@src@]: The null-terminated string to copy. Must not be NULL, and must not overlap with @dst@.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@maxlen@]: The length (in characters) of the destination buffer.
+  -> IO HsBindgen.Runtime.LibC.CSize
+sDL_strlcpy = hs_bindgen_e26f240b36c1f7f4
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_utf8strlcpy@
+foreign import ccall unsafe "hs_bindgen_a6570a6c65177caf"
+  hs_bindgen_a6570a6c65177caf_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO HsBindgen.Runtime.LibC.CSize
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_utf8strlcpy@
+hs_bindgen_a6570a6c65177caf
+  :: BG.Ptr BG.CChar
+  -> PtrConst.PtrConst BG.CChar
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO HsBindgen.Runtime.LibC.CSize
+hs_bindgen_a6570a6c65177caf =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_a6570a6c65177caf_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Copy an UTF-8 string.
+--
+--     This function copies up to @dst_bytes@ - 1 bytes from @src@ to @dst@ while also ensuring that the string written to @dst@ does not end in a truncated multi-byte sequence. Finally, it appends a null terminator.
+--
+--     @src@ and @dst@ must not overlap.
+--
+--     Note that unlike @SDL_strlcpy()@, this function returns the number of bytes written, not the length of @src@.
+--
+--     [Returns]: the number of bytes written, excluding the null terminator.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_strlcpy'
+--
+--     [C declaration]: @SDL_utf8strlcpy@, defined at @SDL3\/SDL_stdinc.h 3118:36@
+sDL_utf8strlcpy
+  :: BG.Ptr BG.CChar
+  -- ^
+  --
+  --           [@dst@]: The destination buffer. Must not be NULL, and must not overlap with @src@.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@src@]: The null-terminated UTF-8 string to copy. Must not be NULL, and must not overlap with @dst@.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@dst_bytes@]: The length (in bytes) of the destination buffer. Must not be 0.
+  -> IO HsBindgen.Runtime.LibC.CSize
+sDL_utf8strlcpy = hs_bindgen_a6570a6c65177caf
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strlcat@
+foreign import ccall unsafe "hs_bindgen_6776d8c4c9824b69"
+  hs_bindgen_6776d8c4c9824b69_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO HsBindgen.Runtime.LibC.CSize
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strlcat@
+hs_bindgen_6776d8c4c9824b69
+  :: BG.Ptr BG.CChar
+  -> PtrConst.PtrConst BG.CChar
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO HsBindgen.Runtime.LibC.CSize
+hs_bindgen_6776d8c4c9824b69 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_6776d8c4c9824b69_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Concatenate strings.
+--
+--     This function appends up to @maxlen@ - SDL_strlen(dst) - 1 characters from @src@ to the end of the string in @dst@, then appends a null terminator.
+--
+--     @src@ and @dst@ must not overlap.
+--
+--     If @maxlen@ - SDL_strlen(dst) - 1 is less than or equal to 0, then @dst@ is unmodified.
+--
+--     [Returns]: the length (in characters, excluding the null terminator) of the string in @dst@ plus the length of @src@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_strlcpy'
+--
+--     [C declaration]: @SDL_strlcat@, defined at @SDL3\/SDL_stdinc.h 3146:36@
+sDL_strlcat
+  :: BG.Ptr BG.CChar
+  -- ^
+  --
+  --           [@dst@]: The destination buffer already containing the first null-terminated string. Must not be NULL and must not overlap with @src@.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@src@]: The second null-terminated string. Must not be NULL, and must not overlap with @dst@.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@maxlen@]: The length (in characters) of the destination buffer.
+  -> IO HsBindgen.Runtime.LibC.CSize
+sDL_strlcat = hs_bindgen_6776d8c4c9824b69
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strdup@
+foreign import ccall unsafe "hs_bindgen_642470a5439764a1"
+  hs_bindgen_642470a5439764a1_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strdup@
+hs_bindgen_642470a5439764a1
+  :: PtrConst.PtrConst BG.CChar
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_642470a5439764a1 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_642470a5439764a1_base (BG.toFFIType x0))
+
+-- | Allocate a copy of a string.
+--
+--     This allocates enough space for a null-terminated copy of @str@, using SDL_malloc, and then makes a copy of the string into this space.
+--
+--     The returned string is owned by the caller, and should be passed to SDL_free when no longer needed.
+--
+--     [Returns]: a pointer to the newly-allocated string.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_strdup@, defined at @SDL3\/SDL_stdinc.h 3164:47@
+sDL_strdup
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: the string to copy.
+  -> IO (BG.Ptr BG.CChar)
+sDL_strdup = hs_bindgen_642470a5439764a1
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strndup@
+foreign import ccall unsafe "hs_bindgen_2d11135d4a4cd09d"
+  hs_bindgen_2d11135d4a4cd09d_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strndup@
+hs_bindgen_2d11135d4a4cd09d
+  :: PtrConst.PtrConst BG.CChar
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_2d11135d4a4cd09d =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_2d11135d4a4cd09d_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Allocate a copy of a string, up to n characters.
+--
+--     This allocates enough space for a null-terminated copy of @str@, up to @maxlen@ bytes, using SDL_malloc, and then makes a copy of the string into this space.
+--
+--     If the string is longer than @maxlen@ bytes, the returned string will be @maxlen@ bytes long, plus a null-terminator character that isn\'t included in the count.
+--
+--     The returned string is owned by the caller, and should be passed to SDL_free when no longer needed.
+--
+--     [Returns]: a pointer to the newly-allocated string.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_strndup@, defined at @SDL3\/SDL_stdinc.h 3189:47@
+sDL_strndup
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: the string to copy.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@maxlen@]: the maximum length of the copied string, not counting the null-terminator character.
+  -> IO (BG.Ptr BG.CChar)
+sDL_strndup = hs_bindgen_2d11135d4a4cd09d
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strrev@
+foreign import ccall unsafe "hs_bindgen_3e344b4dbd1fefd5"
+  hs_bindgen_3e344b4dbd1fefd5_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strrev@
+hs_bindgen_3e344b4dbd1fefd5
+  :: BG.Ptr BG.CChar
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_3e344b4dbd1fefd5 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3e344b4dbd1fefd5_base (BG.toFFIType x0))
+
+-- | Reverse a string\'s contents.
+--
+--     This reverses a null-terminated string in-place. Only the content of the string is reversed; the null-terminator character remains at the end of the reversed string.
+--
+--     __WARNING__: This function reverses the /bytes/ of the string, not the codepoints. If @str@ is a UTF-8 string with Unicode codepoints > 127, this will ruin the string data. You should only use this function on strings that are completely comprised of low ASCII characters.
+--
+--     [Returns]: @str@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_strrev@, defined at @SDL3\/SDL_stdinc.h 3210:36@
+sDL_strrev
+  :: BG.Ptr BG.CChar
+  -- ^
+  --
+  --           [@str@]: the string to reverse.
+  -> IO (BG.Ptr BG.CChar)
+sDL_strrev = hs_bindgen_3e344b4dbd1fefd5
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strupr@
+foreign import ccall unsafe "hs_bindgen_2a6a16beae86f690"
+  hs_bindgen_2a6a16beae86f690_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strupr@
+hs_bindgen_2a6a16beae86f690
+  :: BG.Ptr BG.CChar
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_2a6a16beae86f690 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_2a6a16beae86f690_base (BG.toFFIType x0))
+
+-- | Convert a string to uppercase.
+--
+--     __WARNING__: Regardless of system locale, this will only convert ASCII values \'A\' through \'Z\' to uppercase.
+--
+--     This function operates on a null-terminated string of bytes even if it is malformed UTF-8! and converts ASCII characters \'a\' through \'z\' to their uppercase equivalents in-place, returning the original @str@ pointer.
+--
+--     [Returns]: the @str@ pointer passed into this function.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_strlwr'
+--
+--     [C declaration]: @SDL_strupr@, defined at @SDL3\/SDL_stdinc.h 3231:36@
+sDL_strupr
+  :: BG.Ptr BG.CChar
+  -- ^
+  --
+  --           [@str@]: the string to convert in-place. Can not be NULL.
+  -> IO (BG.Ptr BG.CChar)
+sDL_strupr = hs_bindgen_2a6a16beae86f690
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strlwr@
+foreign import ccall unsafe "hs_bindgen_d398f95cc6b941fb"
+  hs_bindgen_d398f95cc6b941fb_base
+    :: BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strlwr@
+hs_bindgen_d398f95cc6b941fb
+  :: BG.Ptr BG.CChar
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_d398f95cc6b941fb =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d398f95cc6b941fb_base (BG.toFFIType x0))
+
+-- | Convert a string to lowercase.
+--
+--     __WARNING__: Regardless of system locale, this will only convert ASCII values \'A\' through \'Z\' to lowercase.
+--
+--     This function operates on a null-terminated string of bytes even if it is malformed UTF-8! and converts ASCII characters \'A\' through \'Z\' to their lowercase equivalents in-place, returning the original @str@ pointer.
+--
+--     [Returns]: the @str@ pointer passed into this function.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_strupr'
+--
+--     [C declaration]: @SDL_strlwr@, defined at @SDL3\/SDL_stdinc.h 3252:36@
+sDL_strlwr
+  :: BG.Ptr BG.CChar
+  -- ^
+  --
+  --           [@str@]: the string to convert in-place. Can not be NULL.
+  -> IO (BG.Ptr BG.CChar)
+sDL_strlwr = hs_bindgen_d398f95cc6b941fb
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strchr@
+foreign import ccall unsafe "hs_bindgen_ce84b72a37d721aa"
+  hs_bindgen_ce84b72a37d721aa_base
+    :: BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strchr@
+hs_bindgen_ce84b72a37d721aa
+  :: PtrConst.PtrConst BG.CChar
+  -> BG.CInt
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_ce84b72a37d721aa =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_ce84b72a37d721aa_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Search a string for the first instance of a specific byte.
+--
+--     The search ends once it finds the requested byte value, or a null terminator byte to end the string.
+--
+--     Note that this looks for /bytes/, not /characters/, so you cannot match against a Unicode codepoint > 255, regardless of character encoding.
+--
+--     [Returns]: a pointer to the first instance of @c@ in the string, or NULL if not found.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_strchr@, defined at @SDL3\/SDL_stdinc.h 3272:36@
+sDL_strchr
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: the string to search. Must not be NULL.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@c@]: the byte value to search for.
+  -> IO (BG.Ptr BG.CChar)
+sDL_strchr = hs_bindgen_ce84b72a37d721aa
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strrchr@
+foreign import ccall unsafe "hs_bindgen_42f6725f3eb6c437"
+  hs_bindgen_42f6725f3eb6c437_base
+    :: BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strrchr@
+hs_bindgen_42f6725f3eb6c437
+  :: PtrConst.PtrConst BG.CChar
+  -> BG.CInt
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_42f6725f3eb6c437 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_42f6725f3eb6c437_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Search a string for the last instance of a specific byte.
+--
+--     The search must go until it finds a null terminator byte to end the string.
+--
+--     Note that this looks for /bytes/, not /characters/, so you cannot match against a Unicode codepoint > 255, regardless of character encoding.
+--
+--     [Returns]: a pointer to the last instance of @c@ in the string, or NULL if not found.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_strrchr@, defined at @SDL3\/SDL_stdinc.h 3291:36@
+sDL_strrchr
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: the string to search. Must not be NULL.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@c@]: the byte value to search for.
+  -> IO (BG.Ptr BG.CChar)
+sDL_strrchr = hs_bindgen_42f6725f3eb6c437
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strstr@
+foreign import ccall unsafe "hs_bindgen_4dd450b42cd71d7b"
+  hs_bindgen_4dd450b42cd71d7b_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strstr@
+hs_bindgen_4dd450b42cd71d7b
+  :: PtrConst.PtrConst BG.CChar
+  -> PtrConst.PtrConst BG.CChar
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_4dd450b42cd71d7b =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_4dd450b42cd71d7b_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Search a string for the first instance of a specific substring.
+--
+--     The search ends once it finds the requested substring, or a null terminator byte to end the string.
+--
+--     Note that this looks for strings of /bytes/, not /characters/, so it\'s legal to search for malformed and incomplete UTF-8 sequences.
+--
+--     [Returns]: a pointer to the first instance of @needle@ in the string, or NULL if not found.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_strstr@, defined at @SDL3\/SDL_stdinc.h 3311:36@
+sDL_strstr
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@haystack@]: the string to search. Must not be NULL.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@needle@]: the string to search for. Must not be NULL.
+  -> IO (BG.Ptr BG.CChar)
+sDL_strstr = hs_bindgen_4dd450b42cd71d7b
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strnstr@
+foreign import ccall unsafe "hs_bindgen_84a9d060fbe6dadf"
+  hs_bindgen_84a9d060fbe6dadf_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strnstr@
+hs_bindgen_84a9d060fbe6dadf
+  :: PtrConst.PtrConst BG.CChar
+  -> PtrConst.PtrConst BG.CChar
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_84a9d060fbe6dadf =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_84a9d060fbe6dadf_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Search a string, up to n bytes, for the first instance of a specific substring.
+--
+--     The search ends once it finds the requested substring, or a null terminator byte to end the string, or @maxlen@ bytes have been examined. It is possible to use this function on a string without a null terminator.
+--
+--     Note that this looks for strings of /bytes/, not /characters/, so it\'s legal to search for malformed and incomplete UTF-8 sequences.
+--
+--     [Returns]: a pointer to the first instance of @needle@ in the string, or NULL if not found.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_strnstr@, defined at @SDL3\/SDL_stdinc.h 3334:36@
+sDL_strnstr
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@haystack@]: the string to search. Must not be NULL.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@needle@]: the string to search for. Must not be NULL.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@maxlen@]: the maximum number of bytes to search in @haystack@.
+  -> IO (BG.Ptr BG.CChar)
+sDL_strnstr = hs_bindgen_84a9d060fbe6dadf
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strcasestr@
+foreign import ccall unsafe "hs_bindgen_81f801141b3ad731"
+  hs_bindgen_81f801141b3ad731_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strcasestr@
+hs_bindgen_81f801141b3ad731
+  :: PtrConst.PtrConst BG.CChar
+  -> PtrConst.PtrConst BG.CChar
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_81f801141b3ad731 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_81f801141b3ad731_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Search a UTF-8 string for the first instance of a specific substring, case-insensitively.
+--
+--     This will work with Unicode strings, using a technique called \"case-folding\" to handle the vast majority of case-sensitive human languages regardless of system locale. It can deal with expanding values: a German Eszett character can compare against two ASCII \'s\' chars and be considered a match, for example. A notable exception: it does not handle the Turkish \'i\' character; human language is complicated!
+--
+--     Since this handles Unicode, it expects the strings to be well-formed UTF-8 and not a null-terminated string of arbitrary bytes. Bytes that are not valid UTF-8 are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), which is to say two strings of random bits may turn out to match if they convert to the same amount of replacement characters.
+--
+--     [Returns]: a pointer to the first instance of @needle@ in the string, or NULL if not found.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_strcasestr@, defined at @SDL3\/SDL_stdinc.h 3362:36@
+sDL_strcasestr
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@haystack@]: the string to search. Must not be NULL.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@needle@]: the string to search for. Must not be NULL.
+  -> IO (BG.Ptr BG.CChar)
+sDL_strcasestr = hs_bindgen_81f801141b3ad731
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strtok_r@
+foreign import ccall unsafe "hs_bindgen_409faece247c319b"
+  hs_bindgen_409faece247c319b_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strtok_r@
+hs_bindgen_409faece247c319b
+  :: BG.Ptr BG.CChar
+  -> PtrConst.PtrConst BG.CChar
+  -> BG.Ptr (BG.Ptr BG.CChar)
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_409faece247c319b =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_409faece247c319b_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | This works exactly like strtok_r() but doesn\'t require access to a C runtime.
+--
+--     Break a string up into a series of tokens.
+--
+--     To start tokenizing a new string, @str@ should be the non-NULL address of the string to start tokenizing. Future calls to get the next token from the same string should specify a NULL.
+--
+--     Note that this function will overwrite pieces of @str@ with null chars to split it into tokens. This function cannot be used with const\/read-only strings!
+--
+--     @saveptr@ just needs to point to a @char *@ that can be overwritten; SDL will use this to save tokenizing state between calls. It is initialized if @str@ is non-NULL, and used to resume tokenizing when @str@ is NULL.
+--
+--     [Returns]: A pointer to the next token, or NULL if no tokens remain.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_strtok_r@, defined at @SDL3\/SDL_stdinc.h 3391:36@
+sDL_strtok_r
+  :: BG.Ptr BG.CChar
+  -- ^
+  --
+  --           [@str@]: the string to tokenize, or NULL to continue tokenizing.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@delim@]: the delimiter string that separates tokens.
+  -> BG.Ptr (BG.Ptr BG.CChar)
+  -- ^
+  --
+  --           [@saveptr@]: pointer to a char *, used for ongoing state.
+  -> IO (BG.Ptr BG.CChar)
+sDL_strtok_r = hs_bindgen_409faece247c319b
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_utf8strlen@
+foreign import ccall unsafe "hs_bindgen_36470941402cdd53"
+  hs_bindgen_36470941402cdd53_base
+    :: BG.Ptr BG.Void
+    -> IO HsBindgen.Runtime.LibC.CSize
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_utf8strlen@
+hs_bindgen_36470941402cdd53
+  :: PtrConst.PtrConst BG.CChar
+  -> IO HsBindgen.Runtime.LibC.CSize
+hs_bindgen_36470941402cdd53 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_36470941402cdd53_base (BG.toFFIType x0))
+
+-- | Count the number of codepoints in a UTF-8 string.
+--
+--     Counts the /codepoints/, not /bytes/, in @str@, excluding the null terminator.
+--
+--     If you need to count the bytes in a string instead, consider using @SDL_strlen()@.
+--
+--     Since this handles Unicode, it expects the strings to be well-formed UTF-8 and not a null-terminated string of arbitrary bytes. Bytes that are not valid UTF-8 are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), so a malformed or incomplete UTF-8 sequence might increase the count by several replacement characters.
+--
+--     [Returns]: The length (in codepoints, excluding the null terminator) of @src@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_utf8strnlen', 'sDL_strlen'
+--
+--     [C declaration]: @SDL_utf8strlen@, defined at @SDL3\/SDL_stdinc.h 3419:36@
+sDL_utf8strlen
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: The null-terminated UTF-8 string to read. Must not be NULL.
+  -> IO HsBindgen.Runtime.LibC.CSize
+sDL_utf8strlen = hs_bindgen_36470941402cdd53
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_utf8strnlen@
+foreign import ccall unsafe "hs_bindgen_479082db51ecf46b"
+  hs_bindgen_479082db51ecf46b_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO HsBindgen.Runtime.LibC.CSize
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_utf8strnlen@
+hs_bindgen_479082db51ecf46b
+  :: PtrConst.PtrConst BG.CChar
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO HsBindgen.Runtime.LibC.CSize
+hs_bindgen_479082db51ecf46b =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_479082db51ecf46b_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Count the number of codepoints in a UTF-8 string, up to n bytes.
+--
+--     Counts the /codepoints/, not /bytes/, in @str@, excluding the null terminator.
+--
+--     If you need to count the bytes in a string instead, consider using @SDL_strnlen()@.
+--
+--     The counting stops at @bytes@ bytes (not codepoints!). This seems counterintuitive, but makes it easy to express the total size of the string\'s buffer.
+--
+--     Since this handles Unicode, it expects the strings to be well-formed UTF-8 and not a null-terminated string of arbitrary bytes. Bytes that are not valid UTF-8 are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), so a malformed or incomplete UTF-8 sequence might increase the count by several replacement characters.
+--
+--     [Returns]: The length (in codepoints, excluding the null terminator) of @src@ but never more than @maxlen@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_utf8strlen', 'sDL_strnlen'
+--
+--     [C declaration]: @SDL_utf8strnlen@, defined at @SDL3\/SDL_stdinc.h 3452:36@
+sDL_utf8strnlen
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: The null-terminated UTF-8 string to read. Must not be NULL.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@bytes@]: The maximum amount of bytes to count.
+  -> IO HsBindgen.Runtime.LibC.CSize
+sDL_utf8strnlen = hs_bindgen_479082db51ecf46b
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_itoa@
+foreign import ccall unsafe "hs_bindgen_c69b2ef36677f953"
+  hs_bindgen_c69b2ef36677f953_base
+    :: BG.CInt
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_itoa@
+hs_bindgen_c69b2ef36677f953
+  :: BG.CInt
+  -> BG.Ptr BG.CChar
+  -> BG.CInt
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_c69b2ef36677f953 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_c69b2ef36677f953_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Convert an integer into a string.
+--
+--     This requires a radix to specified for string format. Specifying 10 produces a decimal number, 16 hexadecimal, etc. Must be in the range of 2 to 36.
+--
+--     Note that this function will overflow a buffer if @str@ is not large enough to hold the output! It may be safer to use SDL_snprintf to clamp output, or SDL_asprintf to allocate a buffer. Otherwise, it doesn\'t hurt to allocate much more space than you expect to use (and don\'t forget possible negative signs, null terminator bytes, etc).
+--
+--     [Returns]: @str@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_uitoa', @SDL_ltoa@, 'sDL_lltoa'
+--
+--     [C declaration]: @SDL_itoa@, defined at @SDL3\/SDL_stdinc.h 3480:36@
+sDL_itoa
+  :: BG.CInt
+  -- ^
+  --
+  --           [@value@]: the integer to convert.
+  -> BG.Ptr BG.CChar
+  -- ^
+  --
+  --           [@str@]: the buffer to write the string into.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@radix@]: the radix to use for string generation.
+  -> IO (BG.Ptr BG.CChar)
+sDL_itoa = hs_bindgen_c69b2ef36677f953
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_uitoa@
+foreign import ccall unsafe "hs_bindgen_dbe69ee767be00c8"
+  hs_bindgen_dbe69ee767be00c8_base
+    :: BG.CUInt
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_uitoa@
+hs_bindgen_dbe69ee767be00c8
+  :: BG.CUInt
+  -> BG.Ptr BG.CChar
+  -> BG.CInt
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_dbe69ee767be00c8 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_dbe69ee767be00c8_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Convert an unsigned integer into a string.
+--
+--     This requires a radix to specified for string format. Specifying 10 produces a decimal number, 16 hexadecimal, etc. Must be in the range of 2 to 36.
+--
+--     Note that this function will overflow a buffer if @str@ is not large enough to hold the output! It may be safer to use SDL_snprintf to clamp output, or SDL_asprintf to allocate a buffer. Otherwise, it doesn\'t hurt to allocate much more space than you expect to use (and don\'t forget null terminator bytes, etc).
+--
+--     [Returns]: @str@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_itoa', @SDL_ultoa@, 'sDL_ulltoa'
+--
+--     [C declaration]: @SDL_uitoa@, defined at @SDL3\/SDL_stdinc.h 3508:36@
+sDL_uitoa
+  :: BG.CUInt
+  -- ^
+  --
+  --           [@value@]: the unsigned integer to convert.
+  -> BG.Ptr BG.CChar
+  -- ^
+  --
+  --           [@str@]: the buffer to write the string into.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@radix@]: the radix to use for string generation.
+  -> IO (BG.Ptr BG.CChar)
+sDL_uitoa = hs_bindgen_dbe69ee767be00c8
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_lltoa@
+foreign import ccall unsafe "hs_bindgen_94ca108dca07ec6f"
+  hs_bindgen_94ca108dca07ec6f_base
+    :: BG.CLLong
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_lltoa@
+hs_bindgen_94ca108dca07ec6f
+  :: BG.CLLong
+  -> BG.Ptr BG.CChar
+  -> BG.CInt
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_94ca108dca07ec6f =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_94ca108dca07ec6f_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Convert a long long integer into a string.
+--
+--     This requires a radix to specified for string format. Specifying 10 produces a decimal number, 16 hexadecimal, etc. Must be in the range of 2 to 36.
+--
+--     Note that this function will overflow a buffer if @str@ is not large enough to hold the output! It may be safer to use SDL_snprintf to clamp output, or SDL_asprintf to allocate a buffer. Otherwise, it doesn\'t hurt to allocate much more space than you expect to use (and don\'t forget possible negative signs, null terminator bytes, etc).
+--
+--     [Returns]: @str@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_ulltoa', 'sDL_itoa', @SDL_ltoa@
+--
+--     [C declaration]: @SDL_lltoa@, defined at @SDL3\/SDL_stdinc.h 3594:36@
+sDL_lltoa
+  :: BG.CLLong
+  -- ^
+  --
+  --           [@value@]: the long long integer to convert.
+  -> BG.Ptr BG.CChar
+  -- ^
+  --
+  --           [@str@]: the buffer to write the string into.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@radix@]: the radix to use for string generation.
+  -> IO (BG.Ptr BG.CChar)
+sDL_lltoa = hs_bindgen_94ca108dca07ec6f
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_ulltoa@
+foreign import ccall unsafe "hs_bindgen_d122b88ccc45fe33"
+  hs_bindgen_d122b88ccc45fe33_base
+    :: BG.CULLong
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_ulltoa@
+hs_bindgen_d122b88ccc45fe33
+  :: BG.CULLong
+  -> BG.Ptr BG.CChar
+  -> BG.CInt
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_d122b88ccc45fe33 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_d122b88ccc45fe33_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Convert an unsigned long long integer into a string.
+--
+--     This requires a radix to specified for string format. Specifying 10 produces a decimal number, 16 hexadecimal, etc. Must be in the range of 2 to 36.
+--
+--     Note that this function will overflow a buffer if @str@ is not large enough to hold the output! It may be safer to use SDL_snprintf to clamp output, or SDL_asprintf to allocate a buffer. Otherwise, it doesn\'t hurt to allocate much more space than you expect to use (and don\'t forget null terminator bytes, etc).
+--
+--     [Returns]: @str@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_lltoa', 'sDL_uitoa', @SDL_ultoa@
+--
+--     [C declaration]: @SDL_ulltoa@, defined at @SDL3\/SDL_stdinc.h 3622:36@
+sDL_ulltoa
+  :: BG.CULLong
+  -- ^
+  --
+  --           [@value@]: the unsigned long long integer to convert.
+  -> BG.Ptr BG.CChar
+  -- ^
+  --
+  --           [@str@]: the buffer to write the string into.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@radix@]: the radix to use for string generation.
+  -> IO (BG.Ptr BG.CChar)
+sDL_ulltoa = hs_bindgen_d122b88ccc45fe33
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_atoi@
+foreign import ccall unsafe "hs_bindgen_ca9f4297368b5437"
+  hs_bindgen_ca9f4297368b5437_base
+    :: BG.Ptr BG.Void
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_atoi@
+hs_bindgen_ca9f4297368b5437
+  :: PtrConst.PtrConst BG.CChar
+  -> IO BG.CInt
+hs_bindgen_ca9f4297368b5437 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_ca9f4297368b5437_base (BG.toFFIType x0))
+
+-- | Parse an @int@ from a string.
+--
+--     The result of calling @SDL_atoi(str)@ is equivalent to @(int)SDL_strtol(str, NULL, 10)@.
+--
+--     [Returns]: the parsed @int@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_atof', @SDL_strtol@, @SDL_strtoul@, 'sDL_strtoll', 'sDL_strtoull', 'sDL_strtod', 'sDL_itoa'
+--
+--     [C declaration]: @SDL_atoi@, defined at @SDL3\/SDL_stdinc.h 3646:33@
+sDL_atoi
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: The null-terminated string to read. Must not be NULL.
+  -> IO BG.CInt
+sDL_atoi = hs_bindgen_ca9f4297368b5437
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_atof@
+foreign import ccall unsafe "hs_bindgen_81f2fcbff595d766"
+  hs_bindgen_81f2fcbff595d766_base
+    :: BG.Ptr BG.Void
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_atof@
+hs_bindgen_81f2fcbff595d766
+  :: PtrConst.PtrConst BG.CChar
+  -> IO BG.CDouble
+hs_bindgen_81f2fcbff595d766 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_81f2fcbff595d766_base (BG.toFFIType x0))
+
+-- | Parse a @double@ from a string.
+--
+--     The result of calling @SDL_atof(str)@ is equivalent to @SDL_strtod(str, NULL)@.
+--
+--     [Returns]: the parsed @double@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_atoi', @SDL_strtol@, @SDL_strtoul@, 'sDL_strtoll', 'sDL_strtoull', 'sDL_strtod'
+--
+--     [C declaration]: @SDL_atof@, defined at @SDL3\/SDL_stdinc.h 3668:36@
+sDL_atof
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: The null-terminated string to read. Must not be NULL.
+  -> IO BG.CDouble
+sDL_atof = hs_bindgen_81f2fcbff595d766
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strtoll@
+foreign import ccall unsafe "hs_bindgen_29424912342d9a55"
+  hs_bindgen_29424912342d9a55_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO BG.CLLong
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strtoll@
+hs_bindgen_29424912342d9a55
+  :: PtrConst.PtrConst BG.CChar
+  -> BG.Ptr (BG.Ptr BG.CChar)
+  -> BG.CInt
+  -> IO BG.CLLong
+hs_bindgen_29424912342d9a55 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_29424912342d9a55_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Parse a @long long@ from a string.
+--
+--     If @str@ starts with whitespace, then those whitespace characters are skipped before attempting to parse the number.
+--
+--     If the parsed number does not fit inside a @long long@, the result is clamped to the minimum and maximum representable @long long@ values.
+--
+--     [Returns]: the parsed @long long@, or 0 if no number could be parsed.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_atoi', 'sDL_atof', @SDL_strtol@, @SDL_strtoul@, 'sDL_strtoull', 'sDL_strtod', 'sDL_lltoa'
+--
+--     [C declaration]: @SDL_strtoll@, defined at @SDL3\/SDL_stdinc.h 3770:39@
+sDL_strtoll
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: The null-terminated string to read. Must not be NULL.
+  -> BG.Ptr (BG.Ptr BG.CChar)
+  -- ^
+  --
+  --           [@endp@]: If not NULL, the address of the first invalid character (i.e. the next character after the parsed number) will be written to this pointer.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@base@]: The base of the integer to read. Supported values are 0 and 2 to 36 inclusive. If 0, the base will be inferred from the number\'s prefix (0x for hexadecimal, 0 for octal, decimal otherwise).
+  -> IO BG.CLLong
+sDL_strtoll = hs_bindgen_29424912342d9a55
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strtoull@
+foreign import ccall unsafe "hs_bindgen_fe908f5a8d183e7b"
+  hs_bindgen_fe908f5a8d183e7b_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.CInt
+    -> IO BG.CULLong
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strtoull@
+hs_bindgen_fe908f5a8d183e7b
+  :: PtrConst.PtrConst BG.CChar
+  -> BG.Ptr (BG.Ptr BG.CChar)
+  -> BG.CInt
+  -> IO BG.CULLong
+hs_bindgen_fe908f5a8d183e7b =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_fe908f5a8d183e7b_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Parse an @unsigned long long@ from a string.
+--
+--     If @str@ starts with whitespace, then those whitespace characters are skipped before attempting to parse the number.
+--
+--     If the parsed number does not fit inside an @unsigned long long@, the result is clamped to the maximum representable @unsigned long long@ value.
+--
+--     [Returns]: the parsed @unsigned long long@, or 0 if no number could be parsed.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_atoi', 'sDL_atof', @SDL_strtol@, 'sDL_strtoll', @SDL_strtoul@, 'sDL_strtod', 'sDL_ulltoa'
+--
+--     [C declaration]: @SDL_strtoull@, defined at @SDL3\/SDL_stdinc.h 3804:48@
+sDL_strtoull
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: The null-terminated string to read. Must not be NULL.
+  -> BG.Ptr (BG.Ptr BG.CChar)
+  -- ^
+  --
+  --           [@endp@]: If not NULL, the address of the first invalid character (i.e. the next character after the parsed number) will be written to this pointer.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@base@]: The base of the integer to read. Supported values are 0 and 2 to 36 inclusive. If 0, the base will be inferred from the number\'s prefix (0x for hexadecimal, 0 for octal, decimal otherwise).
+  -> IO BG.CULLong
+sDL_strtoull = hs_bindgen_fe908f5a8d183e7b
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strtod@
+foreign import ccall unsafe "hs_bindgen_93115f1648467a21"
+  hs_bindgen_93115f1648467a21_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strtod@
+hs_bindgen_93115f1648467a21
+  :: PtrConst.PtrConst BG.CChar
+  -> BG.Ptr (BG.Ptr BG.CChar)
+  -> IO BG.CDouble
+hs_bindgen_93115f1648467a21 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_93115f1648467a21_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Parse a @double@ from a string.
+--
+--     This function makes fewer guarantees than the C runtime @strtod@:
+--
+--     * Only decimal notation is guaranteed to be supported. The handling of scientific and hexadecimal notation is unspecified.
+--
+--     * Whether or not INF and NAN can be parsed is unspecified.
+--
+--     * The precision of the result is unspecified.
+--
+--     [Returns]: the parsed @double@, or 0 if no number could be parsed.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_atoi', 'sDL_atof', @SDL_strtol@, 'sDL_strtoll', @SDL_strtoul@, 'sDL_strtoull'
+--
+--     [C declaration]: @SDL_strtod@, defined at @SDL3\/SDL_stdinc.h 3834:36@
+sDL_strtod
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: the null-terminated string to read. Must not be NULL.
+  -> BG.Ptr (BG.Ptr BG.CChar)
+  -- ^
+  --
+  --           [@endp@]: if not NULL, the address of the first invalid character (i.e. the next character after the parsed number) will be written to this pointer.
+  -> IO BG.CDouble
+sDL_strtod = hs_bindgen_93115f1648467a21
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strcmp@
+foreign import ccall unsafe "hs_bindgen_1165e1ac637a910f"
+  hs_bindgen_1165e1ac637a910f_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strcmp@
+hs_bindgen_1165e1ac637a910f
+  :: PtrConst.PtrConst BG.CChar
+  -> PtrConst.PtrConst BG.CChar
+  -> IO BG.CInt
+hs_bindgen_1165e1ac637a910f =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_1165e1ac637a910f_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Compare two null-terminated UTF-8 strings.
+--
+--     Due to the nature of UTF-8 encoding, this will work with Unicode strings, since effectively this function just compares bytes until it hits a null-terminating character. Also due to the nature of UTF-8, this can be used with @SDL_qsort()@ to put strings in (roughly) alphabetical order.
+--
+--     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_strcmp@, defined at @SDL3\/SDL_stdinc.h 3854:33@
+sDL_strcmp
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str1@]: the first string to compare. NULL is not permitted!
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str2@]: the second string to compare. NULL is not permitted!
+  -> IO BG.CInt
+sDL_strcmp = hs_bindgen_1165e1ac637a910f
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strncmp@
+foreign import ccall unsafe "hs_bindgen_6286679cc5d88e95"
+  hs_bindgen_6286679cc5d88e95_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strncmp@
+hs_bindgen_6286679cc5d88e95
+  :: PtrConst.PtrConst BG.CChar
+  -> PtrConst.PtrConst BG.CChar
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO BG.CInt
+hs_bindgen_6286679cc5d88e95 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_6286679cc5d88e95_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Compare two UTF-8 strings up to a number of bytes.
+--
+--     Due to the nature of UTF-8 encoding, this will work with Unicode strings, since effectively this function just compares bytes until it hits a null-terminating character. Also due to the nature of UTF-8, this can be used with @SDL_qsort()@ to put strings in (roughly) alphabetical order.
+--
+--     Note that while this function is intended to be used with UTF-8, it is doing a bytewise comparison, and @maxlen@ specifies a /byte/ limit! If the limit lands in the middle of a multi-byte UTF-8 sequence, it will only compare a portion of the final character.
+--
+--     @maxlen@ specifies a maximum number of bytes to compare; if the strings match to this number of bytes (or both have matched to a null-terminator character before this number of bytes), they will be considered equal.
+--
+--     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_strncmp@, defined at @SDL3\/SDL_stdinc.h 3884:33@
+sDL_strncmp
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str1@]: the first string to compare. NULL is not permitted!
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str2@]: the second string to compare. NULL is not permitted!
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@maxlen@]: the maximum number of /bytes/ to compare.
+  -> IO BG.CInt
+sDL_strncmp = hs_bindgen_6286679cc5d88e95
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strcasecmp@
+foreign import ccall unsafe "hs_bindgen_592440e0cc89a66c"
+  hs_bindgen_592440e0cc89a66c_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strcasecmp@
+hs_bindgen_592440e0cc89a66c
+  :: PtrConst.PtrConst BG.CChar
+  -> PtrConst.PtrConst BG.CChar
+  -> IO BG.CInt
+hs_bindgen_592440e0cc89a66c =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_592440e0cc89a66c_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Compare two null-terminated UTF-8 strings, case-insensitively.
+--
+--     This will work with Unicode strings, using a technique called \"case-folding\" to handle the vast majority of case-sensitive human languages regardless of system locale. It can deal with expanding values: a German Eszett character can compare against two ASCII \'s\' chars and be considered a match, for example. A notable exception: it does not handle the Turkish \'i\' character; human language is complicated!
+--
+--     Since this handles Unicode, it expects the string to be well-formed UTF-8 and not a null-terminated string of arbitrary bytes. Bytes that are not valid UTF-8 are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), which is to say two strings of random bits may turn out to match if they convert to the same amount of replacement characters.
+--
+--     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_strcasecmp@, defined at @SDL3\/SDL_stdinc.h 3912:33@
+sDL_strcasecmp
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str1@]: the first string to compare. NULL is not permitted!
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str2@]: the second string to compare. NULL is not permitted!
+  -> IO BG.CInt
+sDL_strcasecmp = hs_bindgen_592440e0cc89a66c
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strncasecmp@
+foreign import ccall unsafe "hs_bindgen_9a7486257c6bf068"
+  hs_bindgen_9a7486257c6bf068_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strncasecmp@
+hs_bindgen_9a7486257c6bf068
+  :: PtrConst.PtrConst BG.CChar
+  -> PtrConst.PtrConst BG.CChar
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO BG.CInt
+hs_bindgen_9a7486257c6bf068 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_9a7486257c6bf068_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Compare two UTF-8 strings, case-insensitively, up to a number of bytes.
+--
+--     This will work with Unicode strings, using a technique called \"case-folding\" to handle the vast majority of case-sensitive human languages regardless of system locale. It can deal with expanding values: a German Eszett character can compare against two ASCII \'s\' chars and be considered a match, for example. A notable exception: it does not handle the Turkish \'i\' character; human language is complicated!
+--
+--     Since this handles Unicode, it expects the string to be well-formed UTF-8 and not a null-terminated string of arbitrary bytes. Bytes that are not valid UTF-8 are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), which is to say two strings of random bits may turn out to match if they convert to the same amount of replacement characters.
+--
+--     Note that while this function is intended to be used with UTF-8, @maxlen@ specifies a /byte/ limit! If the limit lands in the middle of a multi-byte UTF-8 sequence, it may convert a portion of the final character to one or more Unicode character U+FFFD (REPLACEMENT CHARACTER) so as not to overflow a buffer.
+--
+--     @maxlen@ specifies a maximum number of bytes to compare; if the strings match to this number of bytes (or both have matched to a null-terminator character before this number of bytes), they will be considered equal.
+--
+--     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_strncasecmp@, defined at @SDL3\/SDL_stdinc.h 3952:33@
+sDL_strncasecmp
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str1@]: the first string to compare. NULL is not permitted!
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str2@]: the second string to compare. NULL is not permitted!
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@maxlen@]: the maximum number of bytes to compare.
+  -> IO BG.CInt
+sDL_strncasecmp = hs_bindgen_9a7486257c6bf068
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strpbrk@
+foreign import ccall unsafe "hs_bindgen_e53784dcceef6c88"
+  hs_bindgen_e53784dcceef6c88_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_strpbrk@
+hs_bindgen_e53784dcceef6c88
+  :: PtrConst.PtrConst BG.CChar
+  -> PtrConst.PtrConst BG.CChar
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_e53784dcceef6c88 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_e53784dcceef6c88_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Searches a string for the first occurrence of any character contained in a breakset, and returns a pointer from the string to that character.
+--
+--     [Returns]: A pointer to the location, in str, of the first occurrence of a character present in the breakset, or NULL if none is found.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_strpbrk@, defined at @SDL3\/SDL_stdinc.h 3970:36@
+sDL_strpbrk
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: The null-terminated string to be searched. Must not be NULL, and must not overlap with @breakset@.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@breakset@]: A null-terminated string containing the list of characters to look for. Must not be NULL, and must not overlap with @str@.
+  -> IO (BG.Ptr BG.CChar)
+sDL_strpbrk = hs_bindgen_e53784dcceef6c88
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_StepUTF8@
+foreign import ccall unsafe "hs_bindgen_5010b6d322eef729"
+  hs_bindgen_5010b6d322eef729_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO HsBindgen.Runtime.LibC.Word32
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_StepUTF8@
+hs_bindgen_5010b6d322eef729
+  :: BG.Ptr (PtrConst.PtrConst BG.CChar)
+  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
+  -> IO Uint32
+hs_bindgen_5010b6d322eef729 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_5010b6d322eef729_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Decode a UTF-8 string, one Unicode codepoint at a time.
+--
+--     This will return the first Unicode codepoint in the UTF-8 encoded string in @*pstr@, and then advance @*pstr@ past any consumed bytes before returning.
+--
+--     It will not access more than @*pslen@ bytes from the string. @*pslen@ will be adjusted, as well, subtracting the number of bytes consumed.
+--
+--     @pslen@ is allowed to be NULL, in which case the string /must/ be NULL-terminated, as the function will blindly read until it sees the NULL char.
+--
+--     if @*pslen@ is zero, it assumes the end of string is reached and returns a zero codepoint regardless of the contents of the string buffer.
+--
+--     If the resulting codepoint is zero (a NULL terminator), or @*pslen@ is zero, it will not advance @*pstr@ or @*pslen@ at all.
+--
+--     Generally this function is called in a loop until it returns zero, adjusting its parameters each iteration.
+--
+--     If an invalid UTF-8 sequence is encountered, this function returns SDL_INVALID_UNICODE_CODEPOINT and advances the string\/length by one byte (which is to say, a multibyte sequence might produce several SDL_INVALID_UNICODE_CODEPOINT returns before it syncs to the next valid UTF-8 sequence).
+--
+--     Several things can generate invalid UTF-8 sequences, including overlong encodings, the use of UTF-16 surrogate values, and truncated data. Please refer to [RFC3629](https://www.ietf.org/rfc/rfc3629.txt) for details.
+--
+--     [Returns]: the first Unicode codepoint in the string.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_StepUTF8@, defined at @SDL3\/SDL_stdinc.h 4030:36@
+sDL_StepUTF8
+  :: BG.Ptr (PtrConst.PtrConst BG.CChar)
+  -- ^
+  --
+  --           [@pstr@]: a pointer to a UTF-8 string pointer to be read and adjusted.
+  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@pslen@]: a pointer to the number of bytes in the string, to be read and adjusted. NULL is allowed.
+  -> IO Uint32
+sDL_StepUTF8 = hs_bindgen_5010b6d322eef729
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_StepBackUTF8@
+foreign import ccall unsafe "hs_bindgen_e9d45c14c965c799"
+  hs_bindgen_e9d45c14c965c799_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO HsBindgen.Runtime.LibC.Word32
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_StepBackUTF8@
+hs_bindgen_e9d45c14c965c799
+  :: PtrConst.PtrConst BG.CChar
+  -> BG.Ptr (PtrConst.PtrConst BG.CChar)
+  -> IO Uint32
+hs_bindgen_e9d45c14c965c799 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_e9d45c14c965c799_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Decode a UTF-8 string in reverse, one Unicode codepoint at a time.
+--
+--     This will go to the start of the previous Unicode codepoint in the string, move @*pstr@ to that location and return that codepoint.
+--
+--     If @*pstr@ is already at the start of the string), it will not advance @*pstr@ at all.
+--
+--     Generally this function is called in a loop until it returns zero, adjusting its parameter each iteration.
+--
+--     If an invalid UTF-8 sequence is encountered, this function returns SDL_INVALID_UNICODE_CODEPOINT.
+--
+--     Several things can generate invalid UTF-8 sequences, including overlong encodings, the use of UTF-16 surrogate values, and truncated data. Please refer to [RFC3629](https://www.ietf.org/rfc/rfc3629.txt) for details.
+--
+--     [Returns]: the previous Unicode codepoint in the string.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_StepBackUTF8@, defined at @SDL3\/SDL_stdinc.h 4061:36@
+sDL_StepBackUTF8
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@start@]: a pointer to the beginning of the UTF-8 string.
+  -> BG.Ptr (PtrConst.PtrConst BG.CChar)
+  -- ^
+  --
+  --           [@pstr@]: a pointer to a UTF-8 string pointer to be read and adjusted.
+  -> IO Uint32
+sDL_StepBackUTF8 = hs_bindgen_e9d45c14c965c799
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_UCS4ToUTF8@
+foreign import ccall unsafe "hs_bindgen_2621d8f742eba582"
+  hs_bindgen_2621d8f742eba582_base
+    :: HsBindgen.Runtime.LibC.Word32
+    -> BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_UCS4ToUTF8@
+hs_bindgen_2621d8f742eba582
+  :: Uint32
+  -> BG.Ptr BG.CChar
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_2621d8f742eba582 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_2621d8f742eba582_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Convert a single Unicode codepoint to UTF-8.
+--
+--     The buffer pointed to by @dst@ must be at least 4 bytes long, as this function may generate between 1 and 4 bytes of output.
+--
+--     This function returns the first byte /after/ the newly-written UTF-8 sequence, which is useful for encoding multiple codepoints in a loop, or knowing where to write a NULL-terminator character to end the string (in either case, plan to have a buffer of /more/ than 4 bytes!).
+--
+--     If @codepoint@ is an invalid value (outside the Unicode range, or a UTF-16 surrogate value, etc), this will use U+FFFD (REPLACEMENT CHARACTER) for the codepoint instead, and not set an error.
+--
+--     If @dst@ is NULL, this returns NULL immediately without writing to the pointer and without setting an error.
+--
+--     [Returns]: the first byte past the newly-written UTF-8 sequence.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @SDL_UCS4ToUTF8@, defined at @SDL3\/SDL_stdinc.h 4090:36@
+sDL_UCS4ToUTF8
+  :: Uint32
+  -- ^
+  --
+  --           [@codepoint@]: a Unicode codepoint to convert to UTF-8.
+  -> BG.Ptr BG.CChar
+  -- ^
+  --
+  --           [@dst@]: the location to write the encoded UTF-8. Must point to at least 4 bytes!
+  -> IO (BG.Ptr BG.CChar)
+sDL_UCS4ToUTF8 = hs_bindgen_2621d8f742eba582
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_srand@
+foreign import ccall unsafe "hs_bindgen_1620e07051837ddb"
+  hs_bindgen_1620e07051837ddb_base
+    :: HsBindgen.Runtime.LibC.Word64
+    -> IO ()
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_srand@
+hs_bindgen_1620e07051837ddb
+  :: Uint64
+  -> IO ()
+hs_bindgen_1620e07051837ddb =
+  \x0 ->
+    hs_bindgen_1620e07051837ddb_base (BG.toFFIType x0)
+
+-- | Seeds the pseudo-random number generator.
+--
+--     Reusing the seed number will cause @SDL_rand()@ to repeat the same stream of \'random\' numbers.
+--
+--     [Thread safety]: This should be called on the same thread that calls @SDL_rand()@
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_rand', 'sDL_rand_bits', 'sDL_randf'
+--
+--     [C declaration]: @SDL_srand@, defined at @SDL3\/SDL_stdinc.h 4302:34@
+sDL_srand
+  :: Uint64
+  -- ^
+  --
+  --           [@seed@]: the value to use as a random number seed, or 0 to use SDL_GetPerformanceCounter().
+  -> IO ()
+sDL_srand = hs_bindgen_1620e07051837ddb
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_rand@
+foreign import ccall unsafe "hs_bindgen_bb32712cf4e3959c"
+  hs_bindgen_bb32712cf4e3959c_base
+    :: HsBindgen.Runtime.LibC.Int32
+    -> IO HsBindgen.Runtime.LibC.Int32
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_rand@
+hs_bindgen_bb32712cf4e3959c
+  :: Sint32
+  -> IO Sint32
+hs_bindgen_bb32712cf4e3959c =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_bb32712cf4e3959c_base (BG.toFFIType x0))
+
+-- | Generate a pseudo-random number less than n for positive n
+--
+--     The method used is faster and of better quality than @rand() % n@. Odds are roughly 99.9% even for n = 1 million. Evenness is better for smaller n, and much worse as n gets bigger.
+--
+--     Example: to simulate a d6 use @SDL_rand(6) + 1@ The +1 converts 0..5 to 1..6
+--
+--     If you want to generate a pseudo-random number in the full range of 'Sint32', you should use: ('Sint32') @SDL_rand_bits()@
+--
+--     If you want reproducible output, be sure to initialize with @SDL_srand()@ first.
+--
+--     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
+--
+--     [Returns]: a random value in the range of [0 .. n-1].
+--
+--     [Thread safety]: All calls should be made from a single thread
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_srand', 'sDL_randf'
+--
+--     [C declaration]: @SDL_rand@, defined at @SDL3\/SDL_stdinc.h 4336:36@
+sDL_rand
+  :: Sint32
+  -- ^
+  --
+  --           [@n@]: the number of possible outcomes. n must be positive.
+  -> IO Sint32
+sDL_rand = hs_bindgen_bb32712cf4e3959c
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_randf@
+foreign import ccall unsafe "hs_bindgen_4354197498dc7635"
+  hs_bindgen_4354197498dc7635_base
+    :: IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_randf@
+hs_bindgen_4354197498dc7635 :: IO BG.CFloat
+hs_bindgen_4354197498dc7635 =
+  fmap BG.fromFFIType hs_bindgen_4354197498dc7635_base
+
+-- | Generate a uniform pseudo-random floating point number less than 1.0
+--
+--     If you want reproducible output, be sure to initialize with @SDL_srand()@ first.
+--
+--     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
+--
+--     [Returns]: a random value in the range of [0.0, 1.0).
+--
+--     [Thread safety]: All calls should be made from a single thread
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_srand', 'sDL_rand'
+--
+--     [C declaration]: @SDL_randf@, defined at @SDL3\/SDL_stdinc.h 4359:35@
+sDL_randf :: IO BG.CFloat
+sDL_randf = hs_bindgen_4354197498dc7635
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_rand_bits@
+foreign import ccall unsafe "hs_bindgen_eed752851bd8b3e2"
+  hs_bindgen_eed752851bd8b3e2_base
+    :: IO HsBindgen.Runtime.LibC.Word32
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_rand_bits@
+hs_bindgen_eed752851bd8b3e2 :: IO Uint32
+hs_bindgen_eed752851bd8b3e2 =
+  fmap BG.fromFFIType hs_bindgen_eed752851bd8b3e2_base
+
+-- | Generate 32 pseudo-random bits.
+--
+--     You likely want to use @SDL_rand()@ to get a psuedo-random number instead.
+--
+--     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
+--
+--     [Returns]: a random value in the range of [0-SDL_MAX_UINT32].
+--
+--     [Thread safety]: All calls should be made from a single thread
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_rand', 'sDL_randf', 'sDL_srand'
+--
+--     [C declaration]: @SDL_rand_bits@, defined at @SDL3\/SDL_stdinc.h 4382:36@
+sDL_rand_bits :: IO Uint32
+sDL_rand_bits = hs_bindgen_eed752851bd8b3e2
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_rand_r@
+foreign import ccall unsafe "hs_bindgen_e31222be551ae9d1"
+  hs_bindgen_e31222be551ae9d1_base
+    :: BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.Int32
+    -> IO HsBindgen.Runtime.LibC.Int32
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_rand_r@
+hs_bindgen_e31222be551ae9d1
+  :: BG.Ptr Uint64
+  -> Sint32
+  -> IO Sint32
+hs_bindgen_e31222be551ae9d1 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_e31222be551ae9d1_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Generate a pseudo-random number less than n for positive n
+--
+--     The method used is faster and of better quality than @rand() % n@. Odds are roughly 99.9% even for n = 1 million. Evenness is better for smaller n, and much worse as n gets bigger.
+--
+--     Example: to simulate a d6 use @SDL_rand_r(state, 6) + 1@ The +1 converts 0..5 to 1..6
+--
+--     If you want to generate a pseudo-random number in the full range of 'Sint32', you should use: ('Sint32')SDL_rand_bits_r(state)
+--
+--     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
+--
+--     [Returns]: a random value in the range of [0 .. n-1].
+--
+--     [Thread safety]: This function is thread-safe, as long as the state pointer isn\'t shared between threads.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_rand', 'sDL_rand_bits_r', 'sDL_randf_r'
+--
+--     [C declaration]: @SDL_rand_r@, defined at @SDL3\/SDL_stdinc.h 4417:36@
+sDL_rand_r
+  :: BG.Ptr Uint64
+  -- ^
+  --
+  --           [@state@]: a pointer to the current random number state, this may not be NULL.
+  -> Sint32
+  -- ^
+  --
+  --           [@n@]: the number of possible outcomes. n must be positive.
+  -> IO Sint32
+sDL_rand_r = hs_bindgen_e31222be551ae9d1
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_randf_r@
+foreign import ccall unsafe "hs_bindgen_b728fa521e1f33ba"
+  hs_bindgen_b728fa521e1f33ba_base
+    :: BG.Ptr BG.Void
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_randf_r@
+hs_bindgen_b728fa521e1f33ba
+  :: BG.Ptr Uint64
+  -> IO BG.CFloat
+hs_bindgen_b728fa521e1f33ba =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_b728fa521e1f33ba_base (BG.toFFIType x0))
+
+-- | Generate a uniform pseudo-random floating point number less than 1.0
+--
+--     If you want reproducible output, be sure to initialize with @SDL_srand()@ first.
+--
+--     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
+--
+--     [Returns]: a random value in the range of [0.0, 1.0).
+--
+--     [Thread safety]: This function is thread-safe, as long as the state pointer isn\'t shared between threads.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_rand_bits_r', 'sDL_rand_r', 'sDL_randf'
+--
+--     [C declaration]: @SDL_randf_r@, defined at @SDL3\/SDL_stdinc.h 4444:35@
+sDL_randf_r
+  :: BG.Ptr Uint64
+  -- ^
+  --
+  --           [@state@]: a pointer to the current random number state, this may not be NULL.
+  -> IO BG.CFloat
+sDL_randf_r = hs_bindgen_b728fa521e1f33ba
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_rand_bits_r@
+foreign import ccall unsafe "hs_bindgen_1779b3d1ac6c6ca0"
+  hs_bindgen_1779b3d1ac6c6ca0_base
+    :: BG.Ptr BG.Void
+    -> IO HsBindgen.Runtime.LibC.Word32
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_rand_bits_r@
+hs_bindgen_1779b3d1ac6c6ca0
+  :: BG.Ptr Uint64
+  -> IO Uint32
+hs_bindgen_1779b3d1ac6c6ca0 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_1779b3d1ac6c6ca0_base (BG.toFFIType x0))
+
+-- | Generate 32 pseudo-random bits.
+--
+--     You likely want to use @SDL_rand_r()@ to get a psuedo-random number instead.
+--
+--     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
+--
+--     [Returns]: a random value in the range of [0-SDL_MAX_UINT32].
+--
+--     [Thread safety]: This function is thread-safe, as long as the state pointer isn\'t shared between threads.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_rand_r', 'sDL_randf_r'
+--
+--     [C declaration]: @SDL_rand_bits_r@, defined at @SDL3\/SDL_stdinc.h 4469:36@
+sDL_rand_bits_r
+  :: BG.Ptr Uint64
+  -- ^
+  --
+  --           [@state@]: a pointer to the current random number state, this may not be NULL.
+  -> IO Uint32
+sDL_rand_bits_r = hs_bindgen_1779b3d1ac6c6ca0
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_acos@
+foreign import ccall unsafe "hs_bindgen_77d2b09de2f907bb"
+  hs_bindgen_77d2b09de2f907bb_base
+    :: BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_acos@
+hs_bindgen_77d2b09de2f907bb
+  :: BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_77d2b09de2f907bb =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_77d2b09de2f907bb_base (BG.toFFIType x0))
+
+-- | Compute the arc cosine of @x@.
+--
+--     The definition of @y = acos(x)@ is @x = cos(y)@.
+--
+--     Domain: @-1 \<= x \<= 1@
+--
+--     Range: @0 \<= y \<= Pi@
+--
+--     This function operates on double-precision floating point values, use SDL_acosf for single-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: arc cosine of @x@, in radians.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_acosf', 'sDL_asin', 'sDL_cos'
+--
+--     [C declaration]: @SDL_acos@, defined at @SDL3\/SDL_stdinc.h 4523:36@
+sDL_acos
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CDouble
+sDL_acos = hs_bindgen_77d2b09de2f907bb
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_acosf@
+foreign import ccall unsafe "hs_bindgen_a7dfe79fdc884d97"
+  hs_bindgen_a7dfe79fdc884d97_base
+    :: BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_acosf@
+hs_bindgen_a7dfe79fdc884d97
+  :: BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_a7dfe79fdc884d97 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a7dfe79fdc884d97_base (BG.toFFIType x0))
+
+-- | Compute the arc cosine of @x@.
+--
+--     The definition of @y = acos(x)@ is @x = cos(y)@.
+--
+--     Domain: @-1 \<= x \<= 1@
+--
+--     Range: @0 \<= y \<= Pi@
+--
+--     This function operates on single-precision floating point values, use SDL_acos for double-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: arc cosine of @x@, in radians.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_acos', 'sDL_asinf', 'sDL_cosf'
+--
+--     [C declaration]: @SDL_acosf@, defined at @SDL3\/SDL_stdinc.h 4553:35@
+sDL_acosf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CFloat
+sDL_acosf = hs_bindgen_a7dfe79fdc884d97
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_asin@
+foreign import ccall unsafe "hs_bindgen_c1c2c5b2424934f7"
+  hs_bindgen_c1c2c5b2424934f7_base
+    :: BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_asin@
+hs_bindgen_c1c2c5b2424934f7
+  :: BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_c1c2c5b2424934f7 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c1c2c5b2424934f7_base (BG.toFFIType x0))
+
+-- | Compute the arc sine of @x@.
+--
+--     The definition of @y = asin(x)@ is @x = sin(y)@.
+--
+--     Domain: @-1 \<= x \<= 1@
+--
+--     Range: @-Pi\/2 \<= y \<= Pi\/2@
+--
+--     This function operates on double-precision floating point values, use SDL_asinf for single-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: arc sine of @x@, in radians.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_asinf', 'sDL_acos', 'sDL_sin'
+--
+--     [C declaration]: @SDL_asin@, defined at @SDL3\/SDL_stdinc.h 4583:36@
+sDL_asin
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CDouble
+sDL_asin = hs_bindgen_c1c2c5b2424934f7
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_asinf@
+foreign import ccall unsafe "hs_bindgen_c0162f35a592c4d6"
+  hs_bindgen_c0162f35a592c4d6_base
+    :: BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_asinf@
+hs_bindgen_c0162f35a592c4d6
+  :: BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_c0162f35a592c4d6 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c0162f35a592c4d6_base (BG.toFFIType x0))
+
+-- | Compute the arc sine of @x@.
+--
+--     The definition of @y = asin(x)@ is @x = sin(y)@.
+--
+--     Domain: @-1 \<= x \<= 1@
+--
+--     Range: @-Pi\/2 \<= y \<= Pi\/2@
+--
+--     This function operates on single-precision floating point values, use SDL_asin for double-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: arc sine of @x@, in radians.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_asin', 'sDL_acosf', 'sDL_sinf'
+--
+--     [C declaration]: @SDL_asinf@, defined at @SDL3\/SDL_stdinc.h 4613:35@
+sDL_asinf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CFloat
+sDL_asinf = hs_bindgen_c0162f35a592c4d6
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_atan@
+foreign import ccall unsafe "hs_bindgen_62e948cecf885b31"
+  hs_bindgen_62e948cecf885b31_base
+    :: BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_atan@
+hs_bindgen_62e948cecf885b31
+  :: BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_62e948cecf885b31 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_62e948cecf885b31_base (BG.toFFIType x0))
+
+-- | Compute the arc tangent of @x@.
+--
+--     The definition of @y = atan(x)@ is @x = tan(y)@.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @-Pi\/2 \<= y \<= Pi\/2@
+--
+--     This function operates on double-precision floating point values, use SDL_atanf for single-precision floats.
+--
+--     To calculate the arc tangent of y \/ x, use SDL_atan2.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: arc tangent of of @x@ in radians, or 0 if @x = 0@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_atanf', 'sDL_atan2', 'sDL_tan'
+--
+--     [C declaration]: @SDL_atan@, defined at @SDL3\/SDL_stdinc.h 4645:36@
+sDL_atan
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CDouble
+sDL_atan = hs_bindgen_62e948cecf885b31
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_atanf@
+foreign import ccall unsafe "hs_bindgen_429e4b987b465ff9"
+  hs_bindgen_429e4b987b465ff9_base
+    :: BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_atanf@
+hs_bindgen_429e4b987b465ff9
+  :: BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_429e4b987b465ff9 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_429e4b987b465ff9_base (BG.toFFIType x0))
+
+-- | Compute the arc tangent of @x@.
+--
+--     The definition of @y = atan(x)@ is @x = tan(y)@.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @-Pi\/2 \<= y \<= Pi\/2@
+--
+--     This function operates on single-precision floating point values, use SDL_atan for dboule-precision floats.
+--
+--     To calculate the arc tangent of y \/ x, use SDL_atan2f.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: arc tangent of of @x@ in radians, or 0 if @x = 0@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_atan', 'sDL_atan2f', 'sDL_tanf'
+--
+--     [C declaration]: @SDL_atanf@, defined at @SDL3\/SDL_stdinc.h 4677:35@
+sDL_atanf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CFloat
+sDL_atanf = hs_bindgen_429e4b987b465ff9
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_atan2@
+foreign import ccall unsafe "hs_bindgen_dd25876f2db3e27f"
+  hs_bindgen_dd25876f2db3e27f_base
+    :: BG.CDouble
+    -> BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_atan2@
+hs_bindgen_dd25876f2db3e27f
+  :: BG.CDouble
+  -> BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_dd25876f2db3e27f =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_dd25876f2db3e27f_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Compute the arc tangent of @y \/ x@, using the signs of x and y to adjust the result\'s quadrant.
+--
+--     The definition of @z = atan2(x, y)@ is @y = x tan(z)@, where the quadrant of z is determined based on the signs of x and y.
+--
+--     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= INF@
+--
+--     Range: @-Pi \<= y \<= Pi@
+--
+--     This function operates on double-precision floating point values, use SDL_atan2f for single-precision floats.
+--
+--     To calculate the arc tangent of a single value, use SDL_atan.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: arc tangent of of @y \/ x@ in radians, or, if @x = 0@, either @-Pi\/2@, @0@, or @Pi\/2@, depending on the value of @y@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_atan2f', 'sDL_atan', 'sDL_tan'
+--
+--     [C declaration]: @SDL_atan2@, defined at @SDL3\/SDL_stdinc.h 4713:36@
+sDL_atan2
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@y@]: floating point value of the numerator (y coordinate).
+  -> BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value of the denominator (x coordinate).
+  -> IO BG.CDouble
+sDL_atan2 = hs_bindgen_dd25876f2db3e27f
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_atan2f@
+foreign import ccall unsafe "hs_bindgen_8131501831457d98"
+  hs_bindgen_8131501831457d98_base
+    :: BG.CFloat
+    -> BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_atan2f@
+hs_bindgen_8131501831457d98
+  :: BG.CFloat
+  -> BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_8131501831457d98 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_8131501831457d98_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Compute the arc tangent of @y \/ x@, using the signs of x and y to adjust the result\'s quadrant.
+--
+--     The definition of @z = atan2(x, y)@ is @y = x tan(z)@, where the quadrant of z is determined based on the signs of x and y.
+--
+--     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= INF@
+--
+--     Range: @-Pi \<= y \<= Pi@
+--
+--     This function operates on single-precision floating point values, use SDL_atan2 for double-precision floats.
+--
+--     To calculate the arc tangent of a single value, use SDL_atanf.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: arc tangent of of @y \/ x@ in radians, or, if @x = 0@, either @-Pi\/2@, @0@, or @Pi\/2@, depending on the value of @y@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_atan2', 'sDL_atan', 'sDL_tan'
+--
+--     [C declaration]: @SDL_atan2f@, defined at @SDL3\/SDL_stdinc.h 4749:35@
+sDL_atan2f
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@y@]: floating point value of the numerator (y coordinate).
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value of the denominator (x coordinate).
+  -> IO BG.CFloat
+sDL_atan2f = hs_bindgen_8131501831457d98
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_ceil@
+foreign import ccall unsafe "hs_bindgen_6654a059aee78106"
+  hs_bindgen_6654a059aee78106_base
+    :: BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_ceil@
+hs_bindgen_6654a059aee78106
+  :: BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_6654a059aee78106 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_6654a059aee78106_base (BG.toFFIType x0))
+
+-- | Compute the ceiling of @x@.
+--
+--     The ceiling of @x@ is the smallest integer @y@ such that @y >= x@, i.e @x@ rounded up to the nearest integer.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @-INF \<= y \<= INF@, y integer
+--
+--     This function operates on double-precision floating point values, use SDL_ceilf for single-precision floats.
+--
+--     [Returns]: the ceiling of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_ceilf', 'sDL_floor', 'sDL_trunc', 'sDL_round', @SDL_lround@
+--
+--     [C declaration]: @SDL_ceil@, defined at @SDL3\/SDL_stdinc.h 4777:36@
+sDL_ceil
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CDouble
+sDL_ceil = hs_bindgen_6654a059aee78106
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_ceilf@
+foreign import ccall unsafe "hs_bindgen_ad644f683da406f9"
+  hs_bindgen_ad644f683da406f9_base
+    :: BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_ceilf@
+hs_bindgen_ad644f683da406f9
+  :: BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_ad644f683da406f9 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_ad644f683da406f9_base (BG.toFFIType x0))
+
+-- | Compute the ceiling of @x@.
+--
+--     The ceiling of @x@ is the smallest integer @y@ such that @y >= x@, i.e @x@ rounded up to the nearest integer.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @-INF \<= y \<= INF@, y integer
+--
+--     This function operates on single-precision floating point values, use SDL_ceil for double-precision floats.
+--
+--     [Returns]: the ceiling of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_ceil', 'sDL_floorf', 'sDL_truncf', 'sDL_roundf', @SDL_lroundf@
+--
+--     [C declaration]: @SDL_ceilf@, defined at @SDL3\/SDL_stdinc.h 4805:35@
+sDL_ceilf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CFloat
+sDL_ceilf = hs_bindgen_ad644f683da406f9
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_copysign@
+foreign import ccall unsafe "hs_bindgen_8091ddede7c04cbc"
+  hs_bindgen_8091ddede7c04cbc_base
+    :: BG.CDouble
+    -> BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_copysign@
+hs_bindgen_8091ddede7c04cbc
+  :: BG.CDouble
+  -> BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_8091ddede7c04cbc =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_8091ddede7c04cbc_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Copy the sign of one floating-point value to another.
+--
+--     The definition of copysign is that @copysign(x, y) = abs(x) * sign(y)@.
+--
+--     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= f@
+--
+--     Range: @-INF \<= z \<= INF@
+--
+--     This function operates on double-precision floating point values, use SDL_copysignf for single-precision floats.
+--
+--     [Returns]: the floating point value with the sign of y and the magnitude of x.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_copysignf', 'sDL_fabs'
+--
+--     [C declaration]: @SDL_copysign@, defined at @SDL3\/SDL_stdinc.h 4831:36@
+sDL_copysign
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value to use as the magnitude.
+  -> BG.CDouble
+  -- ^
+  --
+  --           [@y@]: floating point value to use as the sign.
+  -> IO BG.CDouble
+sDL_copysign = hs_bindgen_8091ddede7c04cbc
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_copysignf@
+foreign import ccall unsafe "hs_bindgen_b3f4ceb6b2fe20ee"
+  hs_bindgen_b3f4ceb6b2fe20ee_base
+    :: BG.CFloat
+    -> BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_copysignf@
+hs_bindgen_b3f4ceb6b2fe20ee
+  :: BG.CFloat
+  -> BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_b3f4ceb6b2fe20ee =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_b3f4ceb6b2fe20ee_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Copy the sign of one floating-point value to another.
+--
+--     The definition of copysign is that @copysign(x, y) = abs(x) * sign(y)@.
+--
+--     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= f@
+--
+--     Range: @-INF \<= z \<= INF@
+--
+--     This function operates on single-precision floating point values, use SDL_copysign for double-precision floats.
+--
+--     [Returns]: the floating point value with the sign of y and the magnitude of x.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_copysign', 'sDL_fabsf'
+--
+--     [C declaration]: @SDL_copysignf@, defined at @SDL3\/SDL_stdinc.h 4857:35@
+sDL_copysignf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value to use as the magnitude.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@y@]: floating point value to use as the sign.
+  -> IO BG.CFloat
+sDL_copysignf = hs_bindgen_b3f4ceb6b2fe20ee
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_cos@
+foreign import ccall unsafe "hs_bindgen_a3469aec056551e2"
+  hs_bindgen_a3469aec056551e2_base
+    :: BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_cos@
+hs_bindgen_a3469aec056551e2
+  :: BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_a3469aec056551e2 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a3469aec056551e2_base (BG.toFFIType x0))
+
+-- | Compute the cosine of @x@.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @-1 \<= y \<= 1@
+--
+--     This function operates on double-precision floating point values, use SDL_cosf for single-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: cosine of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_cosf', 'sDL_acos', 'sDL_sin'
+--
+--     [C declaration]: @SDL_cos@, defined at @SDL3\/SDL_stdinc.h 4885:36@
+sDL_cos
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value, in radians.
+  -> IO BG.CDouble
+sDL_cos = hs_bindgen_a3469aec056551e2
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_cosf@
+foreign import ccall unsafe "hs_bindgen_905fd229e6d8b35e"
+  hs_bindgen_905fd229e6d8b35e_base
+    :: BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_cosf@
+hs_bindgen_905fd229e6d8b35e
+  :: BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_905fd229e6d8b35e =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_905fd229e6d8b35e_base (BG.toFFIType x0))
+
+-- | Compute the cosine of @x@.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @-1 \<= y \<= 1@
+--
+--     This function operates on single-precision floating point values, use SDL_cos for double-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: cosine of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_cos', 'sDL_acosf', 'sDL_sinf'
+--
+--     [C declaration]: @SDL_cosf@, defined at @SDL3\/SDL_stdinc.h 4913:35@
+sDL_cosf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value, in radians.
+  -> IO BG.CFloat
+sDL_cosf = hs_bindgen_905fd229e6d8b35e
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_exp@
+foreign import ccall unsafe "hs_bindgen_1512e406037d12ac"
+  hs_bindgen_1512e406037d12ac_base
+    :: BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_exp@
+hs_bindgen_1512e406037d12ac
+  :: BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_1512e406037d12ac =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_1512e406037d12ac_base (BG.toFFIType x0))
+
+-- | Compute the exponential of @x@.
+--
+--     The definition of @y = exp(x)@ is @y = e^x@, where @e@ is the base of the natural logarithm. The inverse is the natural logarithm, SDL_log.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @0 \<= y \<= INF@
+--
+--     The output will overflow if @exp(x)@ is too large to be represented.
+--
+--     This function operates on double-precision floating point values, use SDL_expf for single-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: value of @e^x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_expf', 'sDL_log'
+--
+--     [C declaration]: @SDL_exp@, defined at @SDL3\/SDL_stdinc.h 4945:36@
+sDL_exp
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CDouble
+sDL_exp = hs_bindgen_1512e406037d12ac
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_expf@
+foreign import ccall unsafe "hs_bindgen_d3dd134efe3abfff"
+  hs_bindgen_d3dd134efe3abfff_base
+    :: BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_expf@
+hs_bindgen_d3dd134efe3abfff
+  :: BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_d3dd134efe3abfff =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d3dd134efe3abfff_base (BG.toFFIType x0))
+
+-- | Compute the exponential of @x@.
+--
+--     The definition of @y = exp(x)@ is @y = e^x@, where @e@ is the base of the natural logarithm. The inverse is the natural logarithm, SDL_logf.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @0 \<= y \<= INF@
+--
+--     The output will overflow if @exp(x)@ is too large to be represented.
+--
+--     This function operates on single-precision floating point values, use SDL_exp for double-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: value of @e^x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_exp', 'sDL_logf'
+--
+--     [C declaration]: @SDL_expf@, defined at @SDL3\/SDL_stdinc.h 4977:35@
+sDL_expf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CFloat
+sDL_expf = hs_bindgen_d3dd134efe3abfff
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_fabs@
+foreign import ccall unsafe "hs_bindgen_52ba4ac175596d0a"
+  hs_bindgen_52ba4ac175596d0a_base
+    :: BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_fabs@
+hs_bindgen_52ba4ac175596d0a
+  :: BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_52ba4ac175596d0a =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_52ba4ac175596d0a_base (BG.toFFIType x0))
+
+-- | Compute the absolute value of @x@
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @0 \<= y \<= INF@
+--
+--     This function operates on double-precision floating point values, use SDL_fabsf for single-precision floats.
+--
+--     [Returns]: the absolute value of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_fabsf'
+--
+--     [C declaration]: @SDL_fabs@, defined at @SDL3\/SDL_stdinc.h 4998:36@
+sDL_fabs
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value to use as the magnitude.
+  -> IO BG.CDouble
+sDL_fabs = hs_bindgen_52ba4ac175596d0a
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_fabsf@
+foreign import ccall unsafe "hs_bindgen_184b19c145435e41"
+  hs_bindgen_184b19c145435e41_base
+    :: BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_fabsf@
+hs_bindgen_184b19c145435e41
+  :: BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_184b19c145435e41 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_184b19c145435e41_base (BG.toFFIType x0))
+
+-- | Compute the absolute value of @x@
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @0 \<= y \<= INF@
+--
+--     This function operates on single-precision floating point values, use SDL_fabs for double-precision floats.
+--
+--     [Returns]: the absolute value of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_fabs'
+--
+--     [C declaration]: @SDL_fabsf@, defined at @SDL3\/SDL_stdinc.h 5019:35@
+sDL_fabsf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value to use as the magnitude.
+  -> IO BG.CFloat
+sDL_fabsf = hs_bindgen_184b19c145435e41
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_floor@
+foreign import ccall unsafe "hs_bindgen_f490c8eee1698a66"
+  hs_bindgen_f490c8eee1698a66_base
+    :: BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_floor@
+hs_bindgen_f490c8eee1698a66
+  :: BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_f490c8eee1698a66 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_f490c8eee1698a66_base (BG.toFFIType x0))
+
+-- | Compute the floor of @x@.
+--
+--     The floor of @x@ is the largest integer @y@ such that @y \<= x@, i.e @x@ rounded down to the nearest integer.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @-INF \<= y \<= INF@, y integer
+--
+--     This function operates on double-precision floating point values, use SDL_floorf for single-precision floats.
+--
+--     [Returns]: the floor of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_floorf', 'sDL_ceil', 'sDL_trunc', 'sDL_round', @SDL_lround@
+--
+--     [C declaration]: @SDL_floor@, defined at @SDL3\/SDL_stdinc.h 5047:36@
+sDL_floor
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CDouble
+sDL_floor = hs_bindgen_f490c8eee1698a66
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_floorf@
+foreign import ccall unsafe "hs_bindgen_2f0b4572dde60cf4"
+  hs_bindgen_2f0b4572dde60cf4_base
+    :: BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_floorf@
+hs_bindgen_2f0b4572dde60cf4
+  :: BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_2f0b4572dde60cf4 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_2f0b4572dde60cf4_base (BG.toFFIType x0))
+
+-- | Compute the floor of @x@.
+--
+--     The floor of @x@ is the largest integer @y@ such that @y \<= x@, i.e @x@ rounded down to the nearest integer.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @-INF \<= y \<= INF@, y integer
+--
+--     This function operates on single-precision floating point values, use SDL_floor for double-precision floats.
+--
+--     [Returns]: the floor of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_floor', 'sDL_ceilf', 'sDL_truncf', 'sDL_roundf', @SDL_lroundf@
+--
+--     [C declaration]: @SDL_floorf@, defined at @SDL3\/SDL_stdinc.h 5075:35@
+sDL_floorf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CFloat
+sDL_floorf = hs_bindgen_2f0b4572dde60cf4
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_trunc@
+foreign import ccall unsafe "hs_bindgen_0babb20dade49b7a"
+  hs_bindgen_0babb20dade49b7a_base
+    :: BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_trunc@
+hs_bindgen_0babb20dade49b7a
+  :: BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_0babb20dade49b7a =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_0babb20dade49b7a_base (BG.toFFIType x0))
+
+-- | Truncate @x@ to an integer.
+--
+--     Rounds @x@ to the next closest integer to 0. This is equivalent to removing the fractional part of @x@, leaving only the integer part.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @-INF \<= y \<= INF@, y integer
+--
+--     This function operates on double-precision floating point values, use SDL_truncf for single-precision floats.
+--
+--     [Returns]: @x@ truncated to an integer.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_truncf', 'sDL_fmod', 'sDL_ceil', 'sDL_floor', 'sDL_round', @SDL_lround@
+--
+--     [C declaration]: @SDL_trunc@, defined at @SDL3\/SDL_stdinc.h 5104:36@
+sDL_trunc
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CDouble
+sDL_trunc = hs_bindgen_0babb20dade49b7a
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_truncf@
+foreign import ccall unsafe "hs_bindgen_90bf99d352a2662e"
+  hs_bindgen_90bf99d352a2662e_base
+    :: BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_truncf@
+hs_bindgen_90bf99d352a2662e
+  :: BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_90bf99d352a2662e =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_90bf99d352a2662e_base (BG.toFFIType x0))
+
+-- | Truncate @x@ to an integer.
+--
+--     Rounds @x@ to the next closest integer to 0. This is equivalent to removing the fractional part of @x@, leaving only the integer part.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @-INF \<= y \<= INF@, y integer
+--
+--     This function operates on single-precision floating point values, use SDL_trunc for double-precision floats.
+--
+--     [Returns]: @x@ truncated to an integer.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_trunc', 'sDL_fmodf', 'sDL_ceilf', 'sDL_floorf', 'sDL_roundf', @SDL_lroundf@
+--
+--     [C declaration]: @SDL_truncf@, defined at @SDL3\/SDL_stdinc.h 5133:35@
+sDL_truncf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CFloat
+sDL_truncf = hs_bindgen_90bf99d352a2662e
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_fmod@
+foreign import ccall unsafe "hs_bindgen_01e3fd06ce04c71f"
+  hs_bindgen_01e3fd06ce04c71f_base
+    :: BG.CDouble
+    -> BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_fmod@
+hs_bindgen_01e3fd06ce04c71f
+  :: BG.CDouble
+  -> BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_01e3fd06ce04c71f =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_01e3fd06ce04c71f_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Return the floating-point remainder of @x \/ y@
+--
+--     Divides @x@ by @y@, and returns the remainder.
+--
+--     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= INF@, @y != 0@
+--
+--     Range: @-y \<= z \<= y@
+--
+--     This function operates on double-precision floating point values, use SDL_fmodf for single-precision floats.
+--
+--     [Returns]: the remainder of @x \/ y@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_fmodf', 'sDL_modf', 'sDL_trunc', 'sDL_ceil', 'sDL_floor', 'sDL_round', @SDL_lround@
+--
+--     [C declaration]: @SDL_fmod@, defined at @SDL3\/SDL_stdinc.h 5163:36@
+sDL_fmod
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: the numerator.
+  -> BG.CDouble
+  -- ^
+  --
+  --           [@y@]: the denominator. Must not be 0.
+  -> IO BG.CDouble
+sDL_fmod = hs_bindgen_01e3fd06ce04c71f
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_fmodf@
+foreign import ccall unsafe "hs_bindgen_d31c39dbd23d1312"
+  hs_bindgen_d31c39dbd23d1312_base
+    :: BG.CFloat
+    -> BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_fmodf@
+hs_bindgen_d31c39dbd23d1312
+  :: BG.CFloat
+  -> BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_d31c39dbd23d1312 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_d31c39dbd23d1312_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Return the floating-point remainder of @x \/ y@
+--
+--     Divides @x@ by @y@, and returns the remainder.
+--
+--     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= INF@, @y != 0@
+--
+--     Range: @-y \<= z \<= y@
+--
+--     This function operates on single-precision floating point values, use SDL_fmod for double-precision floats.
+--
+--     [Returns]: the remainder of @x \/ y@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_fmod', 'sDL_truncf', 'sDL_modff', 'sDL_ceilf', 'sDL_floorf', 'sDL_roundf', @SDL_lroundf@
+--
+--     [C declaration]: @SDL_fmodf@, defined at @SDL3\/SDL_stdinc.h 5193:35@
+sDL_fmodf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: the numerator.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@y@]: the denominator. Must not be 0.
+  -> IO BG.CFloat
+sDL_fmodf = hs_bindgen_d31c39dbd23d1312
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isinf@
+foreign import ccall unsafe "hs_bindgen_a7c939d2e78d66af"
+  hs_bindgen_a7c939d2e78d66af_base
+    :: BG.CDouble
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isinf@
+hs_bindgen_a7c939d2e78d66af
+  :: BG.CDouble
+  -> IO BG.CInt
+hs_bindgen_a7c939d2e78d66af =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a7c939d2e78d66af_base (BG.toFFIType x0))
+
+-- | Return whether the value is infinity.
+--
+--     [Returns]: non-zero if the value is infinity, 0 otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_isinff'
+--
+--     [C declaration]: @SDL_isinf@, defined at @SDL3\/SDL_stdinc.h 5207:33@
+sDL_isinf
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: double-precision floating point value.
+  -> IO BG.CInt
+sDL_isinf = hs_bindgen_a7c939d2e78d66af
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isinff@
+foreign import ccall unsafe "hs_bindgen_dd1421aaa48b6683"
+  hs_bindgen_dd1421aaa48b6683_base
+    :: BG.CFloat
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isinff@
+hs_bindgen_dd1421aaa48b6683
+  :: BG.CFloat
+  -> IO BG.CInt
+hs_bindgen_dd1421aaa48b6683 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_dd1421aaa48b6683_base (BG.toFFIType x0))
+
+-- | Return whether the value is infinity.
+--
+--     [Returns]: non-zero if the value is infinity, 0 otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_isinf'
+--
+--     [C declaration]: @SDL_isinff@, defined at @SDL3\/SDL_stdinc.h 5221:33@
+sDL_isinff
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CInt
+sDL_isinff = hs_bindgen_dd1421aaa48b6683
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isnan@
+foreign import ccall unsafe "hs_bindgen_8b37e78060d7faba"
+  hs_bindgen_8b37e78060d7faba_base
+    :: BG.CDouble
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isnan@
+hs_bindgen_8b37e78060d7faba
+  :: BG.CDouble
+  -> IO BG.CInt
+hs_bindgen_8b37e78060d7faba =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_8b37e78060d7faba_base (BG.toFFIType x0))
+
+-- | Return whether the value is NaN.
+--
+--     [Returns]: non-zero if the value is NaN, 0 otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_isnanf'
+--
+--     [C declaration]: @SDL_isnan@, defined at @SDL3\/SDL_stdinc.h 5235:33@
+sDL_isnan
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: double-precision floating point value.
+  -> IO BG.CInt
+sDL_isnan = hs_bindgen_8b37e78060d7faba
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isnanf@
+foreign import ccall unsafe "hs_bindgen_a7fc9d37cba1e7fb"
+  hs_bindgen_a7fc9d37cba1e7fb_base
+    :: BG.CFloat
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_isnanf@
+hs_bindgen_a7fc9d37cba1e7fb
+  :: BG.CFloat
+  -> IO BG.CInt
+hs_bindgen_a7fc9d37cba1e7fb =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a7fc9d37cba1e7fb_base (BG.toFFIType x0))
+
+-- | Return whether the value is NaN.
+--
+--     [Returns]: non-zero if the value is NaN, 0 otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_isnan'
+--
+--     [C declaration]: @SDL_isnanf@, defined at @SDL3\/SDL_stdinc.h 5249:33@
+sDL_isnanf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CInt
+sDL_isnanf = hs_bindgen_a7fc9d37cba1e7fb
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_log@
+foreign import ccall unsafe "hs_bindgen_e20d665d8e9d64dc"
+  hs_bindgen_e20d665d8e9d64dc_base
+    :: BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_log@
+hs_bindgen_e20d665d8e9d64dc
+  :: BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_e20d665d8e9d64dc =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_e20d665d8e9d64dc_base (BG.toFFIType x0))
+
+-- | Compute the natural logarithm of @x@.
+--
+--     Domain: @0 \< x \<= INF@
+--
+--     Range: @-INF \<= y \<= INF@
+--
+--     It is an error for @x@ to be less than or equal to 0.
+--
+--     This function operates on double-precision floating point values, use SDL_logf for single-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: the natural logarithm of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_logf', 'sDL_log10', 'sDL_exp'
+--
+--     [C declaration]: @SDL_log@, defined at @SDL3\/SDL_stdinc.h 5279:36@
+sDL_log
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value. Must be greater than 0.
+  -> IO BG.CDouble
+sDL_log = hs_bindgen_e20d665d8e9d64dc
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_logf@
+foreign import ccall unsafe "hs_bindgen_7e096c5f793dcab0"
+  hs_bindgen_7e096c5f793dcab0_base
+    :: BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_logf@
+hs_bindgen_7e096c5f793dcab0
+  :: BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_7e096c5f793dcab0 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_7e096c5f793dcab0_base (BG.toFFIType x0))
+
+-- | Compute the natural logarithm of @x@.
+--
+--     Domain: @0 \< x \<= INF@
+--
+--     Range: @-INF \<= y \<= INF@
+--
+--     It is an error for @x@ to be less than or equal to 0.
+--
+--     This function operates on single-precision floating point values, use SDL_log for double-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: the natural logarithm of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_log', 'sDL_expf'
+--
+--     [C declaration]: @SDL_logf@, defined at @SDL3\/SDL_stdinc.h 5308:35@
+sDL_logf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value. Must be greater than 0.
+  -> IO BG.CFloat
+sDL_logf = hs_bindgen_7e096c5f793dcab0
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_log10@
+foreign import ccall unsafe "hs_bindgen_923087147ca0e620"
+  hs_bindgen_923087147ca0e620_base
+    :: BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_log10@
+hs_bindgen_923087147ca0e620
+  :: BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_923087147ca0e620 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_923087147ca0e620_base (BG.toFFIType x0))
+
+-- | Compute the base-10 logarithm of @x@.
+--
+--     Domain: @0 \< x \<= INF@
+--
+--     Range: @-INF \<= y \<= INF@
+--
+--     It is an error for @x@ to be less than or equal to 0.
+--
+--     This function operates on double-precision floating point values, use SDL_log10f for single-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: the logarithm of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_log10f', 'sDL_log', 'sDL_pow'
+--
+--     [C declaration]: @SDL_log10@, defined at @SDL3\/SDL_stdinc.h 5338:36@
+sDL_log10
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value. Must be greater than 0.
+  -> IO BG.CDouble
+sDL_log10 = hs_bindgen_923087147ca0e620
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_log10f@
+foreign import ccall unsafe "hs_bindgen_bfd8d2db495dd53c"
+  hs_bindgen_bfd8d2db495dd53c_base
+    :: BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_log10f@
+hs_bindgen_bfd8d2db495dd53c
+  :: BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_bfd8d2db495dd53c =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_bfd8d2db495dd53c_base (BG.toFFIType x0))
+
+-- | Compute the base-10 logarithm of @x@.
+--
+--     Domain: @0 \< x \<= INF@
+--
+--     Range: @-INF \<= y \<= INF@
+--
+--     It is an error for @x@ to be less than or equal to 0.
+--
+--     This function operates on single-precision floating point values, use SDL_log10 for double-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: the logarithm of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_log10', 'sDL_logf', 'sDL_powf'
+--
+--     [C declaration]: @SDL_log10f@, defined at @SDL3\/SDL_stdinc.h 5368:35@
+sDL_log10f
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value. Must be greater than 0.
+  -> IO BG.CFloat
+sDL_log10f = hs_bindgen_bfd8d2db495dd53c
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_modf@
+foreign import ccall unsafe "hs_bindgen_b899f8ade3afe831"
+  hs_bindgen_b899f8ade3afe831_base
+    :: BG.CDouble
+    -> BG.Ptr BG.Void
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_modf@
+hs_bindgen_b899f8ade3afe831
+  :: BG.CDouble
+  -> BG.Ptr BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_b899f8ade3afe831 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_b899f8ade3afe831_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Split @x@ into integer and fractional parts
+--
+--     This function operates on double-precision floating point values, use SDL_modff for single-precision floats.
+--
+--     [Returns]: the fractional part of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_modff', 'sDL_trunc', 'sDL_fmod'
+--
+--     [C declaration]: @SDL_modf@, defined at @SDL3\/SDL_stdinc.h 5388:36@
+sDL_modf
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> BG.Ptr BG.CDouble
+  -- ^
+  --
+  --           [@y@]: output pointer to store the integer part of @x@.
+  -> IO BG.CDouble
+sDL_modf = hs_bindgen_b899f8ade3afe831
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_modff@
+foreign import ccall unsafe "hs_bindgen_6ff7524556040016"
+  hs_bindgen_6ff7524556040016_base
+    :: BG.CFloat
+    -> BG.Ptr BG.Void
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_modff@
+hs_bindgen_6ff7524556040016
+  :: BG.CFloat
+  -> BG.Ptr BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_6ff7524556040016 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_6ff7524556040016_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Split @x@ into integer and fractional parts
+--
+--     This function operates on single-precision floating point values, use SDL_modf for double-precision floats.
+--
+--     [Returns]: the fractional part of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_modf', 'sDL_truncf', 'sDL_fmodf'
+--
+--     [C declaration]: @SDL_modff@, defined at @SDL3\/SDL_stdinc.h 5408:35@
+sDL_modff
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> BG.Ptr BG.CFloat
+  -- ^
+  --
+  --           [@y@]: output pointer to store the integer part of @x@.
+  -> IO BG.CFloat
+sDL_modff = hs_bindgen_6ff7524556040016
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_pow@
+foreign import ccall unsafe "hs_bindgen_fd54b81ef06bf15c"
+  hs_bindgen_fd54b81ef06bf15c_base
+    :: BG.CDouble
+    -> BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_pow@
+hs_bindgen_fd54b81ef06bf15c
+  :: BG.CDouble
+  -> BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_fd54b81ef06bf15c =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_fd54b81ef06bf15c_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Raise @x@ to the power @y@
+--
+--     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= INF@
+--
+--     Range: @-INF \<= z \<= INF@
+--
+--     If @y@ is the base of the natural logarithm (e), consider using SDL_exp instead.
+--
+--     This function operates on double-precision floating point values, use SDL_powf for single-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: @x@ raised to the power @y@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_powf', 'sDL_exp', 'sDL_log'
+--
+--     [C declaration]: @SDL_pow@, defined at @SDL3\/SDL_stdinc.h 5440:36@
+sDL_pow
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: the base.
+  -> BG.CDouble
+  -- ^
+  --
+  --           [@y@]: the exponent.
+  -> IO BG.CDouble
+sDL_pow = hs_bindgen_fd54b81ef06bf15c
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_powf@
+foreign import ccall unsafe "hs_bindgen_e6e1cafad3d1ca48"
+  hs_bindgen_e6e1cafad3d1ca48_base
+    :: BG.CFloat
+    -> BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_powf@
+hs_bindgen_e6e1cafad3d1ca48
+  :: BG.CFloat
+  -> BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_e6e1cafad3d1ca48 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_e6e1cafad3d1ca48_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Raise @x@ to the power @y@
+--
+--     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= INF@
+--
+--     Range: @-INF \<= z \<= INF@
+--
+--     If @y@ is the base of the natural logarithm (e), consider using SDL_exp instead.
+--
+--     This function operates on single-precision floating point values, use SDL_pow for double-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: @x@ raised to the power @y@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_pow', 'sDL_expf', 'sDL_logf'
+--
+--     [C declaration]: @SDL_powf@, defined at @SDL3\/SDL_stdinc.h 5472:35@
+sDL_powf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: the base.
+  -> BG.CFloat
+  -- ^
+  --
+  --           [@y@]: the exponent.
+  -> IO BG.CFloat
+sDL_powf = hs_bindgen_e6e1cafad3d1ca48
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_round@
+foreign import ccall unsafe "hs_bindgen_263d784275f69beb"
+  hs_bindgen_263d784275f69beb_base
+    :: BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_round@
+hs_bindgen_263d784275f69beb
+  :: BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_263d784275f69beb =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_263d784275f69beb_base (BG.toFFIType x0))
+
+-- | Round @x@ to the nearest integer.
+--
+--     Rounds @x@ to the nearest integer. Values halfway between integers will be rounded away from zero.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @-INF \<= y \<= INF@, y integer
+--
+--     This function operates on double-precision floating point values, use SDL_roundf for single-precision floats. To get the result as an integer type, use SDL_lround.
+--
+--     [Returns]: the nearest integer to @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_roundf', @SDL_lround@, 'sDL_floor', 'sDL_ceil', 'sDL_trunc'
+--
+--     [C declaration]: @SDL_round@, defined at @SDL3\/SDL_stdinc.h 5501:36@
+sDL_round
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CDouble
+sDL_round = hs_bindgen_263d784275f69beb
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_roundf@
+foreign import ccall unsafe "hs_bindgen_11783f7b112ca4ce"
+  hs_bindgen_11783f7b112ca4ce_base
+    :: BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_roundf@
+hs_bindgen_11783f7b112ca4ce
+  :: BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_11783f7b112ca4ce =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_11783f7b112ca4ce_base (BG.toFFIType x0))
+
+-- | Round @x@ to the nearest integer.
+--
+--     Rounds @x@ to the nearest integer. Values halfway between integers will be rounded away from zero.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @-INF \<= y \<= INF@, y integer
+--
+--     This function operates on single-precision floating point values, use SDL_round for double-precision floats. To get the result as an integer type, use SDL_lroundf.
+--
+--     [Returns]: the nearest integer to @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_round', @SDL_lroundf@, 'sDL_floorf', 'sDL_ceilf', 'sDL_truncf'
+--
+--     [C declaration]: @SDL_roundf@, defined at @SDL3\/SDL_stdinc.h 5530:35@
+sDL_roundf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value.
+  -> IO BG.CFloat
+sDL_roundf = hs_bindgen_11783f7b112ca4ce
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_scalbn@
+foreign import ccall unsafe "hs_bindgen_e6bb2ac10b5df120"
+  hs_bindgen_e6bb2ac10b5df120_base
+    :: BG.CDouble
+    -> BG.CInt
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_scalbn@
+hs_bindgen_e6bb2ac10b5df120
+  :: BG.CDouble
+  -> BG.CInt
+  -> IO BG.CDouble
+hs_bindgen_e6bb2ac10b5df120 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_e6bb2ac10b5df120_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Scale @x@ by an integer power of two.
+--
+--     Multiplies @x@ by the @n@ th power of the floating point radix (always 2).
+--
+--     Domain: @-INF \<= x \<= INF@, @n@ integer
+--
+--     Range: @-INF \<= y \<= INF@
+--
+--     This function operates on double-precision floating point values, use SDL_scalbnf for single-precision floats.
+--
+--     [Returns]: @x * 2^n@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_scalbnf', 'sDL_pow'
+--
+--     [C declaration]: @SDL_scalbn@, defined at @SDL3\/SDL_stdinc.h 5613:36@
+sDL_scalbn
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value to be scaled.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@n@]: integer exponent.
+  -> IO BG.CDouble
+sDL_scalbn = hs_bindgen_e6bb2ac10b5df120
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_scalbnf@
+foreign import ccall unsafe "hs_bindgen_98b72e0135481fa6"
+  hs_bindgen_98b72e0135481fa6_base
+    :: BG.CFloat
+    -> BG.CInt
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_scalbnf@
+hs_bindgen_98b72e0135481fa6
+  :: BG.CFloat
+  -> BG.CInt
+  -> IO BG.CFloat
+hs_bindgen_98b72e0135481fa6 =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_98b72e0135481fa6_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | Scale @x@ by an integer power of two.
+--
+--     Multiplies @x@ by the @n@ th power of the floating point radix (always 2).
+--
+--     Domain: @-INF \<= x \<= INF@, @n@ integer
+--
+--     Range: @-INF \<= y \<= INF@
+--
+--     This function operates on single-precision floating point values, use SDL_scalbn for double-precision floats.
+--
+--     [Returns]: @x * 2^n@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_scalbn', 'sDL_powf'
+--
+--     [C declaration]: @SDL_scalbnf@, defined at @SDL3\/SDL_stdinc.h 5638:35@
+sDL_scalbnf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value to be scaled.
+  -> BG.CInt
+  -- ^
+  --
+  --           [@n@]: integer exponent.
+  -> IO BG.CFloat
+sDL_scalbnf = hs_bindgen_98b72e0135481fa6
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_sin@
+foreign import ccall unsafe "hs_bindgen_7f63dcf686d5381e"
+  hs_bindgen_7f63dcf686d5381e_base
+    :: BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_sin@
+hs_bindgen_7f63dcf686d5381e
+  :: BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_7f63dcf686d5381e =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_7f63dcf686d5381e_base (BG.toFFIType x0))
+
+-- | Compute the sine of @x@.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @-1 \<= y \<= 1@
+--
+--     This function operates on double-precision floating point values, use SDL_sinf for single-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: sine of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_sinf', 'sDL_asin', 'sDL_cos'
+--
+--     [C declaration]: @SDL_sin@, defined at @SDL3\/SDL_stdinc.h 5666:36@
+sDL_sin
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value, in radians.
+  -> IO BG.CDouble
+sDL_sin = hs_bindgen_7f63dcf686d5381e
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_sinf@
+foreign import ccall unsafe "hs_bindgen_3b77259c6cddba0e"
+  hs_bindgen_3b77259c6cddba0e_base
+    :: BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_sinf@
+hs_bindgen_3b77259c6cddba0e
+  :: BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_3b77259c6cddba0e =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3b77259c6cddba0e_base (BG.toFFIType x0))
+
+-- | Compute the sine of @x@.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @-1 \<= y \<= 1@
+--
+--     This function operates on single-precision floating point values, use SDL_sin for double-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: sine of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_sin', 'sDL_asinf', 'sDL_cosf'
+--
+--     [C declaration]: @SDL_sinf@, defined at @SDL3\/SDL_stdinc.h 5694:35@
+sDL_sinf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value, in radians.
+  -> IO BG.CFloat
+sDL_sinf = hs_bindgen_3b77259c6cddba0e
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_sqrt@
+foreign import ccall unsafe "hs_bindgen_911bffe699be4bcc"
+  hs_bindgen_911bffe699be4bcc_base
+    :: BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_sqrt@
+hs_bindgen_911bffe699be4bcc
+  :: BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_911bffe699be4bcc =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_911bffe699be4bcc_base (BG.toFFIType x0))
+
+-- | Compute the square root of @x@.
+--
+--     Domain: @0 \<= x \<= INF@
+--
+--     Range: @0 \<= y \<= INF@
+--
+--     This function operates on double-precision floating point values, use SDL_sqrtf for single-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: square root of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_sqrtf'
+--
+--     [C declaration]: @SDL_sqrt@, defined at @SDL3\/SDL_stdinc.h 5720:36@
+sDL_sqrt
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value. Must be greater than or equal to 0.
+  -> IO BG.CDouble
+sDL_sqrt = hs_bindgen_911bffe699be4bcc
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_sqrtf@
+foreign import ccall unsafe "hs_bindgen_44ac9f7898a32796"
+  hs_bindgen_44ac9f7898a32796_base
+    :: BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_sqrtf@
+hs_bindgen_44ac9f7898a32796
+  :: BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_44ac9f7898a32796 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_44ac9f7898a32796_base (BG.toFFIType x0))
+
+-- | Compute the square root of @x@.
+--
+--     Domain: @0 \<= x \<= INF@
+--
+--     Range: @0 \<= y \<= INF@
+--
+--     This function operates on single-precision floating point values, use SDL_sqrt for double-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: square root of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_sqrt'
+--
+--     [C declaration]: @SDL_sqrtf@, defined at @SDL3\/SDL_stdinc.h 5746:35@
+sDL_sqrtf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value. Must be greater than or equal to 0.
+  -> IO BG.CFloat
+sDL_sqrtf = hs_bindgen_44ac9f7898a32796
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_tan@
+foreign import ccall unsafe "hs_bindgen_aece2559e5dc0392"
+  hs_bindgen_aece2559e5dc0392_base
+    :: BG.CDouble
+    -> IO BG.CDouble
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_tan@
+hs_bindgen_aece2559e5dc0392
+  :: BG.CDouble
+  -> IO BG.CDouble
+hs_bindgen_aece2559e5dc0392 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_aece2559e5dc0392_base (BG.toFFIType x0))
+
+-- | Compute the tangent of @x@.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @-INF \<= y \<= INF@
+--
+--     This function operates on double-precision floating point values, use SDL_tanf for single-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: tangent of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_tanf', 'sDL_sin', 'sDL_cos', 'sDL_atan', 'sDL_atan2'
+--
+--     [C declaration]: @SDL_tan@, defined at @SDL3\/SDL_stdinc.h 5776:36@
+sDL_tan
+  :: BG.CDouble
+  -- ^
+  --
+  --           [@x@]: floating point value, in radians.
+  -> IO BG.CDouble
+sDL_tan = hs_bindgen_aece2559e5dc0392
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_tanf@
+foreign import ccall unsafe "hs_bindgen_c528bf7014ccff4b"
+  hs_bindgen_c528bf7014ccff4b_base
+    :: BG.CFloat
+    -> IO BG.CFloat
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_tanf@
+hs_bindgen_c528bf7014ccff4b
+  :: BG.CFloat
+  -> IO BG.CFloat
+hs_bindgen_c528bf7014ccff4b =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c528bf7014ccff4b_base (BG.toFFIType x0))
+
+-- | Compute the tangent of @x@.
+--
+--     Domain: @-INF \<= x \<= INF@
+--
+--     Range: @-INF \<= y \<= INF@
+--
+--     This function operates on single-precision floating point values, use SDL_tan for double-precision floats.
+--
+--     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
+--
+--     [Returns]: tangent of @x@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_tan', 'sDL_sinf', 'sDL_cosf', 'sDL_atanf', 'sDL_atan2f'
+--
+--     [C declaration]: @SDL_tanf@, defined at @SDL3\/SDL_stdinc.h 5806:35@
+sDL_tanf
+  :: BG.CFloat
+  -- ^
+  --
+  --           [@x@]: floating point value, in radians.
+  -> IO BG.CFloat
+sDL_tanf = hs_bindgen_c528bf7014ccff4b
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_iconv_open@
+foreign import ccall unsafe "hs_bindgen_f0bd929aee0b42ea"
+  hs_bindgen_f0bd929aee0b42ea_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_iconv_open@
+hs_bindgen_f0bd929aee0b42ea
+  :: PtrConst.PtrConst BG.CChar
+  -> PtrConst.PtrConst BG.CChar
+  -> IO SDL_iconv_t
+hs_bindgen_f0bd929aee0b42ea =
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_f0bd929aee0b42ea_base (BG.toFFIType x0) (BG.toFFIType x1))
+
+-- | This function allocates a context for the specified character set conversion.
+--
+--     [Returns]: a handle that must be freed with SDL_iconv_close, or SDL_ICONV_ERROR on failure.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_iconv', 'sDL_iconv_close', 'sDL_iconv_string'
+--
+--     [C declaration]: @SDL_iconv_open@, defined at @SDL3\/SDL_stdinc.h 5834:41@
+sDL_iconv_open
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@tocode@]: The target character encoding, must not be NULL.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@fromcode@]: The source character encoding, must not be NULL.
+  -> IO SDL_iconv_t
+sDL_iconv_open = hs_bindgen_f0bd929aee0b42ea
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_iconv_close@
+foreign import ccall unsafe "hs_bindgen_3f715b186320f23e"
+  hs_bindgen_3f715b186320f23e_base
+    :: BG.Ptr BG.Void
+    -> IO BG.CInt
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_iconv_close@
+hs_bindgen_3f715b186320f23e
+  :: SDL_iconv_t
+  -> IO BG.CInt
+hs_bindgen_3f715b186320f23e =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3f715b186320f23e_base (BG.toFFIType x0))
+
+-- | This function frees a context used for character set conversion.
+--
+--     [Returns]: 0 on success, or -1 on failure.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_iconv', 'sDL_iconv_open', 'sDL_iconv_string'
+--
+--     [C declaration]: @SDL_iconv_close@, defined at @SDL3\/SDL_stdinc.h 5851:33@
+sDL_iconv_close
+  :: SDL_iconv_t
+  -- ^
+  --
+  --           [@cd@]: The character set conversion handle.
+  -> IO BG.CInt
+sDL_iconv_close = hs_bindgen_3f715b186320f23e
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_iconv@
+foreign import ccall unsafe "hs_bindgen_97b150fcf3a8acd6"
+  hs_bindgen_97b150fcf3a8acd6_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO HsBindgen.Runtime.LibC.CSize
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_iconv@
+hs_bindgen_97b150fcf3a8acd6
+  :: SDL_iconv_t
+  -> BG.Ptr (PtrConst.PtrConst BG.CChar)
+  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
+  -> BG.Ptr (BG.Ptr BG.CChar)
+  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
+  -> IO HsBindgen.Runtime.LibC.CSize
+hs_bindgen_97b150fcf3a8acd6 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_97b150fcf3a8acd6_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
+
+-- | This function converts text between encodings, reading from and writing to a buffer.
+--
+--     It returns the number of successful conversions on success. On error, SDL_ICONV_E2BIG is returned when the output buffer is too small, or SDL_ICONV_EILSEQ is returned when an invalid input sequence is encountered, or SDL_ICONV_EINVAL is returned when an incomplete input sequence is encountered.
+--
+--     On exit:
+--
+--     * inbuf will point to the beginning of the next multibyte sequence. On error, this is the location of the problematic input sequence. On success, this is the end of the input sequence.
+--
+--     * inbytesleft will be set to the number of bytes left to convert, which will be 0 on success.
+--
+--     * outbuf will point to the location where to store the next output byte.
+--
+--     * outbytesleft will be set to the number of bytes left in the output buffer.
+--
+--     [Returns]: the number of conversions on success, or a negative error code.
+--
+--     [Thread safety]: Do not use the same 'SDL_iconv_t' from two threads at once.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_iconv_open', 'sDL_iconv_close', 'sDL_iconv_string'
+--
+--     [C declaration]: @SDL_iconv@, defined at @SDL3\/SDL_stdinc.h 5891:36@
+sDL_iconv
+  :: SDL_iconv_t
+  -- ^
+  --
+  --           [@cd@]: The character set conversion context, created in @SDL_iconv_open()@.
+  -> BG.Ptr (PtrConst.PtrConst BG.CChar)
+  -- ^
+  --
+  --           [@inbuf@]: Address of variable that points to the first character of the input sequence.
+  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@inbytesleft@]: The number of bytes in the input buffer.
+  -> BG.Ptr (BG.Ptr BG.CChar)
+  -- ^
+  --
+  --           [@outbuf@]: Address of variable that points to the output buffer.
+  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@outbytesleft@]: The number of bytes in the output buffer.
+  -> IO HsBindgen.Runtime.LibC.CSize
+sDL_iconv = hs_bindgen_97b150fcf3a8acd6
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_iconv_string@
+foreign import ccall unsafe "hs_bindgen_75bcf8b9f2da9e0a"
+  hs_bindgen_75bcf8b9f2da9e0a_base
+    :: BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> HsBindgen.Runtime.LibC.CSize
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_iconv_string@
+hs_bindgen_75bcf8b9f2da9e0a
+  :: PtrConst.PtrConst BG.CChar
+  -> PtrConst.PtrConst BG.CChar
+  -> PtrConst.PtrConst BG.CChar
+  -> HsBindgen.Runtime.LibC.CSize
+  -> IO (BG.Ptr BG.CChar)
+hs_bindgen_75bcf8b9f2da9e0a =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_75bcf8b9f2da9e0a_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Helper function to convert a string\'s encoding in one call.
+--
+--     This function converts a buffer or string between encodings in one pass.
+--
+--     The string does not need to be NULL-terminated; this function operates on the number of bytes specified in @inbytesleft@ whether there is a NULL character anywhere in the buffer.
+--
+--     The returned string is owned by the caller, and should be passed to SDL_free when no longer needed.
+--
+--     [Returns]: a new string, converted to the new encoding, or NULL on error.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'sDL_iconv_open', 'sDL_iconv_close', 'sDL_iconv'
+--
+--     [C declaration]: @SDL_iconv_string@, defined at @SDL3\/SDL_stdinc.h 5928:36@
+sDL_iconv_string
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@tocode@]: the character encoding of the output string. Examples are \"UTF-8\", \"UCS-4\", etc.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@fromcode@]: the character encoding of data in @inbuf@.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@inbuf@]: the string to convert to a different encoding.
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@inbytesleft@]: the size of the input string /in bytes/.
+  -> IO (BG.Ptr BG.CChar)
+sDL_iconv_string = hs_bindgen_75bcf8b9f2da9e0a
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_size_mul_check_overflow_builtin@
+foreign import ccall unsafe "hs_bindgen_51dba5ddaea9f2e4"
+  hs_bindgen_51dba5ddaea9f2e4_base
+    :: HsBindgen.Runtime.LibC.CSize
+    -> HsBindgen.Runtime.LibC.CSize
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_size_mul_check_overflow_builtin@
+hs_bindgen_51dba5ddaea9f2e4
+  :: HsBindgen.Runtime.LibC.CSize
+  -> HsBindgen.Runtime.LibC.CSize
+  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
+  -> IO BG.CBool
+hs_bindgen_51dba5ddaea9f2e4 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_51dba5ddaea9f2e4_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | [C declaration]: @SDL_size_mul_check_overflow_builtin@, defined at @SDL3\/SDL_stdinc.h 6109:23@
+sDL_size_mul_check_overflow_builtin
+  :: HsBindgen.Runtime.LibC.CSize
+  -- ^ [C declaration]: @a@
+  -> HsBindgen.Runtime.LibC.CSize
+  -- ^ [C declaration]: @b@
+  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
+  -- ^ [C declaration]: @ret@
+  -> IO BG.CBool
+sDL_size_mul_check_overflow_builtin =
+  hs_bindgen_51dba5ddaea9f2e4
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_size_add_check_overflow_builtin@
+foreign import ccall unsafe "hs_bindgen_7509bdb3d2cd84da"
+  hs_bindgen_7509bdb3d2cd84da_base
+    :: HsBindgen.Runtime.LibC.CSize
+    -> HsBindgen.Runtime.LibC.CSize
+    -> BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Stdinc_Unsafe_SDL_size_add_check_overflow_builtin@
+hs_bindgen_7509bdb3d2cd84da
+  :: HsBindgen.Runtime.LibC.CSize
+  -> HsBindgen.Runtime.LibC.CSize
+  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
+  -> IO BG.CBool
+hs_bindgen_7509bdb3d2cd84da =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_7509bdb3d2cd84da_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | [C declaration]: @SDL_size_add_check_overflow_builtin@, defined at @SDL3\/SDL_stdinc.h 6147:23@
 sDL_size_add_check_overflow_builtin
diff --git a/src/SDL3/Sys/Bindgen/StdincShims/FunPtr.hs b/src/SDL3/Sys/Bindgen/StdincShims/FunPtr.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/StdincShims/FunPtr.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.StdincShims.FunPtr (
+  SDL3.Sys.Bindgen.StdincShims.FunPtr.lithon_SDL_FOURCC,
+)
+where
+
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+import SDL3.Sys.Bindgen.Stdinc qualified
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <sdl3-bindgen-sys/SDL_stdinc_shims.h>"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.StdincShims_get_lithon_SDL_FOURCC */"
+         , "__attribute__ ((const))"
+         , "Uint32 (*hs_bindgen_be790970a60241f5 (void)) ("
+         , "  Uint8 arg1,"
+         , "  Uint8 arg2,"
+         , "  Uint8 arg3,"
+         , "  Uint8 arg4"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_FOURCC;"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.StdincShims_get_lithon_SDL_FOURCC@
+foreign import ccall unsafe "hs_bindgen_be790970a60241f5"
+  hs_bindgen_be790970a60241f5_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.StdincShims_get_lithon_SDL_FOURCC@
+hs_bindgen_be790970a60241f5
+  :: IO
+       ( BG.FunPtr
+           ( SDL3.Sys.Bindgen.Stdinc.Uint8
+             -> SDL3.Sys.Bindgen.Stdinc.Uint8
+             -> SDL3.Sys.Bindgen.Stdinc.Uint8
+             -> SDL3.Sys.Bindgen.Stdinc.Uint8
+             -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
+           )
+       )
+hs_bindgen_be790970a60241f5 =
+  fmap BG.fromFFIType hs_bindgen_be790970a60241f5_base
+
+{-# NOINLINE lithon_SDL_FOURCC #-}
+
+-- | Define a four character code as a Uint32.
+--
+--     The SDL_FOURCC macro as a function.
+--
+--     [@a@]: the first ASCII character.
+--
+--     [@b@]: the second ASCII character.
+--
+--     [@c@]: the third ASCII character.
+--
+--     [@d@]: the fourth ASCII character.
+--
+--     [Returns]: the four characters converted into a Uint32, one character per-byte.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_FOURCC@, defined at @sdl3-bindgen-sys\/SDL_stdinc_shims.h 40:26@
+lithon_SDL_FOURCC
+  :: BG.FunPtr
+       ( SDL3.Sys.Bindgen.Stdinc.Uint8
+         -> SDL3.Sys.Bindgen.Stdinc.Uint8
+         -> SDL3.Sys.Bindgen.Stdinc.Uint8
+         -> SDL3.Sys.Bindgen.Stdinc.Uint8
+         -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
+       )
+lithon_SDL_FOURCC =
+  BG.unsafePerformIO hs_bindgen_be790970a60241f5
diff --git a/src/SDL3/Sys/Bindgen/StdincShims/Safe.hs b/src/SDL3/Sys/Bindgen/StdincShims/Safe.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/StdincShims/Safe.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.StdincShims.Safe (
+  SDL3.Sys.Bindgen.StdincShims.Safe.lithon_SDL_FOURCC,
+)
+where
+
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+import SDL3.Sys.Bindgen.Stdinc qualified
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <sdl3-bindgen-sys/SDL_stdinc_shims.h>"
+         , "Uint32 hs_bindgen_83ad4ee60e914b33 ("
+         , "  Uint8 arg1,"
+         , "  Uint8 arg2,"
+         , "  Uint8 arg3,"
+         , "  Uint8 arg4"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_FOURCC)(arg1, arg2, arg3, arg4);"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.StdincShims_Safe_lithon_SDL_FOURCC@
+foreign import ccall safe "hs_bindgen_83ad4ee60e914b33"
+  hs_bindgen_83ad4ee60e914b33_base
+    :: HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> IO HsBindgen.Runtime.LibC.Word32
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.StdincShims_Safe_lithon_SDL_FOURCC@
+hs_bindgen_83ad4ee60e914b33
+  :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
+hs_bindgen_83ad4ee60e914b33 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_83ad4ee60e914b33_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Define a four character code as a Uint32.
+--
+--     The SDL_FOURCC macro as a function.
+--
+--     [Returns]: the four characters converted into a Uint32, one character per-byte.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_FOURCC@, defined at @sdl3-bindgen-sys\/SDL_stdinc_shims.h 40:26@
+lithon_SDL_FOURCC
+  :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@a@]: the first ASCII character.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@b@]: the second ASCII character.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@c@]: the third ASCII character.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@d@]: the fourth ASCII character.
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
+lithon_SDL_FOURCC = hs_bindgen_83ad4ee60e914b33
diff --git a/src/SDL3/Sys/Bindgen/StdincShims/Unsafe.hs b/src/SDL3/Sys/Bindgen/StdincShims/Unsafe.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/StdincShims/Unsafe.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.StdincShims.Unsafe (
+  SDL3.Sys.Bindgen.StdincShims.Unsafe.lithon_SDL_FOURCC,
+)
+where
+
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+import SDL3.Sys.Bindgen.Stdinc qualified
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <sdl3-bindgen-sys/SDL_stdinc_shims.h>"
+         , "Uint32 hs_bindgen_253852faf6da7a5b ("
+         , "  Uint8 arg1,"
+         , "  Uint8 arg2,"
+         , "  Uint8 arg3,"
+         , "  Uint8 arg4"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_FOURCC)(arg1, arg2, arg3, arg4);"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.StdincShims_Unsafe_lithon_SDL_FOURCC@
+foreign import ccall unsafe "hs_bindgen_253852faf6da7a5b"
+  hs_bindgen_253852faf6da7a5b_base
+    :: HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> IO HsBindgen.Runtime.LibC.Word32
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.StdincShims_Unsafe_lithon_SDL_FOURCC@
+hs_bindgen_253852faf6da7a5b
+  :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
+hs_bindgen_253852faf6da7a5b =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_253852faf6da7a5b_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
+
+-- | Define a four character code as a Uint32.
+--
+--     The SDL_FOURCC macro as a function.
+--
+--     [Returns]: the four characters converted into a Uint32, one character per-byte.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_FOURCC@, defined at @sdl3-bindgen-sys\/SDL_stdinc_shims.h 40:26@
+lithon_SDL_FOURCC
+  :: SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@a@]: the first ASCII character.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@b@]: the second ASCII character.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@c@]: the third ASCII character.
+  -> SDL3.Sys.Bindgen.Stdinc.Uint8
+  -- ^
+  --
+  --           [@d@]: the fourth ASCII character.
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
+lithon_SDL_FOURCC = hs_bindgen_253852faf6da7a5b
diff --git a/src/SDL3/Sys/Bindgen/Storage.hs b/src/SDL3/Sys/Bindgen/Storage.hs
--- a/src/SDL3/Sys/Bindgen/Storage.hs
+++ b/src/SDL3/Sys/Bindgen/Storage.hs
@@ -14,6 +14,7 @@
 {-# LANGUAGE TypeOperators #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | The storage API is a high-level API designed to abstract away the portability issues that come up when using something lower-level (in SDL\'s case, this sits on top of the [Filesystem](CategoryFilesystem) and [IOStream](CategoryIOStream) subsystems). It is significantly more restrictive than a typical filesystem API, for a number of reasons:
 --
@@ -197,9 +198,12 @@
 )
 where
 
+import Prelude (Eq, IO, Int, Show, pure, (<*>), (>>), type (~))
+
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.Marshal qualified as Marshal
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Struct qualified as Struct
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField
 import SDL3.Sys.Bindgen.Filesystem qualified
@@ -320,6 +324,12 @@
 
 deriving via Marshal.EquivStorable SDL_StorageInterface instance BG.Storable SDL_StorageInterface
 
+deriving via
+  Struct.IsStructViaReadRaw SDL_StorageInterface
+  instance
+    Struct.IsStruct SDL_StorageInterface
+
+-- | [C declaration]: @version@, defined at @SDL3\/SDL_storage.h 277:12@
 instance
   (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
   => BG.CompatHasField.HasField "version" SDL_StorageInterface ty
@@ -357,6 +367,7 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | [C declaration]: @close@, defined at @SDL3\/SDL_storage.h 280:20@
 instance
   (ty ~ BG.FunPtr (BG.Ptr BG.Void -> IO BG.CBool))
   => BG.CompatHasField.HasField "close" SDL_StorageInterface ty
@@ -394,6 +405,7 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | [C declaration]: @ready@, defined at @SDL3\/SDL_storage.h 283:20@
 instance
   (ty ~ BG.FunPtr (BG.Ptr BG.Void -> IO BG.CBool))
   => BG.CompatHasField.HasField "ready" SDL_StorageInterface ty
@@ -431,6 +443,7 @@
 
   offset# = \_ -> \_ -> 16
 
+-- | [C declaration]: @enumerate@, defined at @SDL3\/SDL_storage.h 286:20@
 instance
   ( ty
       ~ BG.FunPtr
@@ -490,6 +503,7 @@
 
   offset# = \_ -> \_ -> 24
 
+-- | [C declaration]: @info@, defined at @SDL3\/SDL_storage.h 289:20@
 instance
   ( ty
       ~ BG.FunPtr
@@ -546,6 +560,7 @@
 
   offset# = \_ -> \_ -> 32
 
+-- | [C declaration]: @read_file@, defined at @SDL3\/SDL_storage.h 292:20@
 instance
   ( ty
       ~ BG.FunPtr
@@ -605,6 +620,7 @@
 
   offset# = \_ -> \_ -> 40
 
+-- | [C declaration]: @write_file@, defined at @SDL3\/SDL_storage.h 295:20@
 instance
   ( ty
       ~ BG.FunPtr
@@ -664,6 +680,7 @@
 
   offset# = \_ -> \_ -> 48
 
+-- | [C declaration]: @mkdir@, defined at @SDL3\/SDL_storage.h 298:20@
 instance
   (ty ~ BG.FunPtr (BG.Ptr BG.Void -> PtrConst.PtrConst BG.CChar -> IO BG.CBool))
   => BG.CompatHasField.HasField "mkdir" SDL_StorageInterface ty
@@ -701,6 +718,7 @@
 
   offset# = \_ -> \_ -> 56
 
+-- | [C declaration]: @remove@, defined at @SDL3\/SDL_storage.h 301:20@
 instance
   (ty ~ BG.FunPtr (BG.Ptr BG.Void -> PtrConst.PtrConst BG.CChar -> IO BG.CBool))
   => BG.CompatHasField.HasField "remove" SDL_StorageInterface ty
@@ -738,6 +756,7 @@
 
   offset# = \_ -> \_ -> 64
 
+-- | [C declaration]: @rename@, defined at @SDL3\/SDL_storage.h 304:20@
 instance
   ( ty
       ~ BG.FunPtr
@@ -782,6 +801,7 @@
 
   offset# = \_ -> \_ -> 72
 
+-- | [C declaration]: @copy@, defined at @SDL3\/SDL_storage.h 307:20@
 instance
   ( ty
       ~ BG.FunPtr
@@ -826,6 +846,7 @@
 
   offset# = \_ -> \_ -> 80
 
+-- | [C declaration]: @space_remaining@, defined at @SDL3\/SDL_storage.h 310:22@
 instance
   (ty ~ BG.FunPtr (BG.Ptr BG.Void -> IO SDL3.Sys.Bindgen.Stdinc.Uint64))
   => BG.CompatHasField.HasField "space_remaining" SDL_StorageInterface ty
diff --git a/src/SDL3/Sys/Bindgen/Storage/FunPtr.hs b/src/SDL3/Sys/Bindgen/Storage/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Storage/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Storage/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Storage.FunPtr (
@@ -23,6 +25,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -33,7 +37,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_storage.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_storage.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Storage_get_SDL_OpenTitleStorage */"
          , "__attribute__ ((const))"
          , "SDL_Storage *(*hs_bindgen_41dc0d42da3c13fb (void)) ("
@@ -216,7 +224,7 @@
            )
        )
 hs_bindgen_41dc0d42da3c13fb =
-  BG.fromFFIType hs_bindgen_41dc0d42da3c13fb_base
+  fmap BG.fromFFIType hs_bindgen_41dc0d42da3c13fb_base
 
 {-# NOINLINE sDL_OpenTitleStorage #-}
 
@@ -260,7 +268,7 @@
            )
        )
 hs_bindgen_12c55994171bb882 =
-  BG.fromFFIType hs_bindgen_12c55994171bb882_base
+  fmap BG.fromFFIType hs_bindgen_12c55994171bb882_base
 
 {-# NOINLINE sDL_OpenUserStorage #-}
 
@@ -300,7 +308,7 @@
 hs_bindgen_fef879e18b533feb
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO (BG.Ptr SDL_Storage)))
 hs_bindgen_fef879e18b533feb =
-  BG.fromFFIType hs_bindgen_fef879e18b533feb_base
+  fmap BG.fromFFIType hs_bindgen_fef879e18b533feb_base
 
 {-# NOINLINE sDL_OpenFileStorage #-}
 
@@ -330,7 +338,7 @@
 hs_bindgen_21801b8b233def48
   :: IO (BG.FunPtr (PtrConst.PtrConst SDL_StorageInterface -> BG.Ptr BG.Void -> IO (BG.Ptr SDL_Storage)))
 hs_bindgen_21801b8b233def48 =
-  BG.fromFFIType hs_bindgen_21801b8b233def48_base
+  fmap BG.fromFFIType hs_bindgen_21801b8b233def48_base
 
 {-# NOINLINE sDL_OpenStorage #-}
 
@@ -364,7 +372,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Storage_get_SDL_CloseStorage@
 hs_bindgen_df81ee6f0c32e051 :: IO (BG.FunPtr (BG.Ptr SDL_Storage -> IO BG.CBool))
 hs_bindgen_df81ee6f0c32e051 =
-  BG.fromFFIType hs_bindgen_df81ee6f0c32e051_base
+  fmap BG.fromFFIType hs_bindgen_df81ee6f0c32e051_base
 
 {-# NOINLINE sDL_CloseStorage #-}
 
@@ -391,7 +399,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Storage_get_SDL_StorageReady@
 hs_bindgen_026acf35472ecd32 :: IO (BG.FunPtr (BG.Ptr SDL_Storage -> IO BG.CBool))
 hs_bindgen_026acf35472ecd32 =
-  BG.fromFFIType hs_bindgen_026acf35472ecd32_base
+  fmap BG.fromFFIType hs_bindgen_026acf35472ecd32_base
 
 {-# NOINLINE sDL_StorageReady #-}
 
@@ -426,7 +434,7 @@
            )
        )
 hs_bindgen_24ba0ea421ce2ba3 =
-  BG.fromFFIType hs_bindgen_24ba0ea421ce2ba3_base
+  fmap BG.fromFFIType hs_bindgen_24ba0ea421ce2ba3_base
 
 {-# NOINLINE sDL_GetStorageFileSize #-}
 
@@ -472,7 +480,7 @@
            )
        )
 hs_bindgen_1b79f3ffe3c4acb4 =
-  BG.fromFFIType hs_bindgen_1b79f3ffe3c4acb4_base
+  fmap BG.fromFFIType hs_bindgen_1b79f3ffe3c4acb4_base
 
 {-# NOINLINE sDL_ReadStorageFile #-}
 
@@ -523,7 +531,7 @@
            )
        )
 hs_bindgen_cf1d254ac8e06322 =
-  BG.fromFFIType hs_bindgen_cf1d254ac8e06322_base
+  fmap BG.fromFFIType hs_bindgen_cf1d254ac8e06322_base
 
 {-# NOINLINE sDL_WriteStorageFile #-}
 
@@ -564,7 +572,7 @@
 hs_bindgen_1ccf47e38725aac9
   :: IO (BG.FunPtr (BG.Ptr SDL_Storage -> PtrConst.PtrConst BG.CChar -> IO BG.CBool))
 hs_bindgen_1ccf47e38725aac9 =
-  BG.fromFFIType hs_bindgen_1ccf47e38725aac9_base
+  fmap BG.fromFFIType hs_bindgen_1ccf47e38725aac9_base
 
 {-# NOINLINE sDL_CreateStorageDirectory #-}
 
@@ -603,7 +611,7 @@
            )
        )
 hs_bindgen_c662a58224242e1a =
-  BG.fromFFIType hs_bindgen_c662a58224242e1a_base
+  fmap BG.fromFFIType hs_bindgen_c662a58224242e1a_base
 
 {-# NOINLINE sDL_EnumerateStorageDirectory #-}
 
@@ -650,7 +658,7 @@
 hs_bindgen_6e74dd5d268a0290
   :: IO (BG.FunPtr (BG.Ptr SDL_Storage -> PtrConst.PtrConst BG.CChar -> IO BG.CBool))
 hs_bindgen_6e74dd5d268a0290 =
-  BG.fromFFIType hs_bindgen_6e74dd5d268a0290_base
+  fmap BG.fromFFIType hs_bindgen_6e74dd5d268a0290_base
 
 {-# NOINLINE sDL_RemoveStoragePath #-}
 
@@ -683,7 +691,7 @@
            (BG.Ptr SDL_Storage -> PtrConst.PtrConst BG.CChar -> PtrConst.PtrConst BG.CChar -> IO BG.CBool)
        )
 hs_bindgen_d9c1fb4dbd31bb7f =
-  BG.fromFFIType hs_bindgen_d9c1fb4dbd31bb7f_base
+  fmap BG.fromFFIType hs_bindgen_d9c1fb4dbd31bb7f_base
 
 {-# NOINLINE sDL_RenameStoragePath #-}
 
@@ -720,7 +728,7 @@
            (BG.Ptr SDL_Storage -> PtrConst.PtrConst BG.CChar -> PtrConst.PtrConst BG.CChar -> IO BG.CBool)
        )
 hs_bindgen_af4030dd32ec02ae =
-  BG.fromFFIType hs_bindgen_af4030dd32ec02ae_base
+  fmap BG.fromFFIType hs_bindgen_af4030dd32ec02ae_base
 
 {-# NOINLINE sDL_CopyStorageFile #-}
 
@@ -761,7 +769,7 @@
            )
        )
 hs_bindgen_5eb9dbc0d85e32f2 =
-  BG.fromFFIType hs_bindgen_5eb9dbc0d85e32f2_base
+  fmap BG.fromFFIType hs_bindgen_5eb9dbc0d85e32f2_base
 
 {-# NOINLINE sDL_GetStoragePathInfo #-}
 
@@ -799,7 +807,7 @@
 hs_bindgen_848d4258c8d4d64e
   :: IO (BG.FunPtr (BG.Ptr SDL_Storage -> IO SDL3.Sys.Bindgen.Stdinc.Uint64))
 hs_bindgen_848d4258c8d4d64e =
-  BG.fromFFIType hs_bindgen_848d4258c8d4d64e_base
+  fmap BG.fromFFIType hs_bindgen_848d4258c8d4d64e_base
 
 {-# NOINLINE sDL_GetStorageSpaceRemaining #-}
 
@@ -836,7 +844,7 @@
            )
        )
 hs_bindgen_d50b8834aa3490cc =
-  BG.fromFFIType hs_bindgen_d50b8834aa3490cc_base
+  fmap BG.fromFFIType hs_bindgen_d50b8834aa3490cc_base
 
 {-# NOINLINE sDL_GlobStorageDirectory #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Storage/Safe.hs b/src/SDL3/Sys/Bindgen/Storage/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Storage/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Storage/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Storage.Safe (
@@ -23,7 +25,11 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Filesystem qualified
@@ -33,7 +39,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_storage.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_storage.h>"
          , "SDL_Storage *hs_bindgen_a269c174e4d6d7b9 ("
          , "  char const *arg1,"
          , "  SDL_PropertiesID arg2"
@@ -171,7 +181,7 @@
 foreign import ccall safe "hs_bindgen_a269c174e4d6d7b9"
   hs_bindgen_a269c174e4d6d7b9_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Storage_Safe_SDL_OpenTitleStorage@
@@ -180,7 +190,9 @@
   -> SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
   -> IO (BG.Ptr SDL_Storage)
 hs_bindgen_a269c174e4d6d7b9 =
-  BG.fromFFIType hs_bindgen_a269c174e4d6d7b9_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_a269c174e4d6d7b9_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Opens up a read-only container for the application\'s filesystem.
 --
@@ -210,7 +222,7 @@
   hs_bindgen_c1288c49648e9aaa_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Storage_Safe_SDL_OpenUserStorage@
@@ -220,7 +232,12 @@
   -> SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
   -> IO (BG.Ptr SDL_Storage)
 hs_bindgen_c1288c49648e9aaa =
-  BG.fromFFIType hs_bindgen_c1288c49648e9aaa_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_c1288c49648e9aaa_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Opens up a container for a user\'s unique read\/write filesystem.
 --
@@ -260,7 +277,8 @@
   :: PtrConst.PtrConst BG.CChar
   -> IO (BG.Ptr SDL_Storage)
 hs_bindgen_4a5bc70f5a32561a =
-  BG.fromFFIType hs_bindgen_4a5bc70f5a32561a_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_4a5bc70f5a32561a_base (BG.toFFIType x0))
 
 -- | Opens up a container for local filesystem storage.
 --
@@ -294,7 +312,9 @@
   -> BG.Ptr BG.Void
   -> IO (BG.Ptr SDL_Storage)
 hs_bindgen_f9cc35fa817572b3 =
-  BG.fromFFIType hs_bindgen_f9cc35fa817572b3_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_f9cc35fa817572b3_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Opens up a container using a client-provided storage interface.
 --
@@ -325,14 +345,15 @@
 foreign import ccall safe "hs_bindgen_00aa433d2a04f831"
   hs_bindgen_00aa433d2a04f831_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Storage_Safe_SDL_CloseStorage@
 hs_bindgen_00aa433d2a04f831
   :: BG.Ptr SDL_Storage
   -> IO BG.CBool
 hs_bindgen_00aa433d2a04f831 =
-  BG.fromFFIType hs_bindgen_00aa433d2a04f831_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_00aa433d2a04f831_base (BG.toFFIType x0))
 
 -- | Closes and frees a storage container.
 --
@@ -355,14 +376,15 @@
 foreign import ccall safe "hs_bindgen_edb4ca27af77b411"
   hs_bindgen_edb4ca27af77b411_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Storage_Safe_SDL_StorageReady@
 hs_bindgen_edb4ca27af77b411
   :: BG.Ptr SDL_Storage
   -> IO BG.CBool
 hs_bindgen_edb4ca27af77b411 =
-  BG.fromFFIType hs_bindgen_edb4ca27af77b411_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_edb4ca27af77b411_base (BG.toFFIType x0))
 
 -- | Checks if the storage container is ready to use.
 --
@@ -387,7 +409,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Storage_Safe_SDL_GetStorageFileSize@
 hs_bindgen_4cb320b95514046a
@@ -396,7 +418,12 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint64
   -> IO BG.CBool
 hs_bindgen_4cb320b95514046a =
-  BG.fromFFIType hs_bindgen_4cb320b95514046a_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_4cb320b95514046a_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Query the size of a file within a storage container.
 --
@@ -429,8 +456,8 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word64
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Storage_Safe_SDL_ReadStorageFile@
 hs_bindgen_86cd3832a2a2afa1
@@ -440,7 +467,18 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint64
   -> IO BG.CBool
 hs_bindgen_86cd3832a2a2afa1 =
-  BG.fromFFIType hs_bindgen_86cd3832a2a2afa1_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_86cd3832a2a2afa1_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Synchronously read a file from a storage container into a client-provided buffer.
 --
@@ -479,8 +517,8 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word64
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Storage_Safe_SDL_WriteStorageFile@
 hs_bindgen_c2571a46edb50775
@@ -490,7 +528,18 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint64
   -> IO BG.CBool
 hs_bindgen_c2571a46edb50775 =
-  BG.fromFFIType hs_bindgen_c2571a46edb50775_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_c2571a46edb50775_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Synchronously write a file from client memory into a storage container.
 --
@@ -526,7 +575,7 @@
   hs_bindgen_d5b607d7f6956e66_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Storage_Safe_SDL_CreateStorageDirectory@
 hs_bindgen_d5b607d7f6956e66
@@ -534,7 +583,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_d5b607d7f6956e66 =
-  BG.fromFFIType hs_bindgen_d5b607d7f6956e66_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_d5b607d7f6956e66_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Create a directory in a writable storage container.
 --
@@ -563,9 +614,9 @@
   hs_bindgen_c3c153b007f4b8d7_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.FunPtr BG.Void
+    -> HsBindgen.Runtime.Support.FunPtrVoid
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Storage_Safe_SDL_EnumerateStorageDirectory@
 hs_bindgen_c3c153b007f4b8d7
@@ -575,7 +626,18 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_c3c153b007f4b8d7 =
-  BG.fromFFIType hs_bindgen_c3c153b007f4b8d7_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_c3c153b007f4b8d7_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Enumerate a directory in a storage container through a callback function.
 --
@@ -618,7 +680,7 @@
   hs_bindgen_d92d44c2f8e020ee_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Storage_Safe_SDL_RemoveStoragePath@
 hs_bindgen_d92d44c2f8e020ee
@@ -626,7 +688,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_d92d44c2f8e020ee =
-  BG.fromFFIType hs_bindgen_d92d44c2f8e020ee_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_d92d44c2f8e020ee_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Remove a file or an empty directory in a writable storage container.
 --
@@ -655,7 +719,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Storage_Safe_SDL_RenameStoragePath@
 hs_bindgen_66aee97b54c3dcb2
@@ -664,7 +728,12 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_66aee97b54c3dcb2 =
-  BG.fromFFIType hs_bindgen_66aee97b54c3dcb2_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_66aee97b54c3dcb2_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Rename a file or directory in a writable storage container.
 --
@@ -697,7 +766,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Storage_Safe_SDL_CopyStorageFile@
 hs_bindgen_d6c508aee11578ae
@@ -706,7 +775,12 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_d6c508aee11578ae =
-  BG.fromFFIType hs_bindgen_d6c508aee11578ae_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_d6c508aee11578ae_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Copy a file in a writable storage container.
 --
@@ -739,7 +813,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Storage_Safe_SDL_GetStoragePathInfo@
 hs_bindgen_cbcca6168ed4f658
@@ -748,7 +822,12 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Filesystem.SDL_PathInfo
   -> IO BG.CBool
 hs_bindgen_cbcca6168ed4f658 =
-  BG.fromFFIType hs_bindgen_cbcca6168ed4f658_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_cbcca6168ed4f658_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get information about a filesystem path in a storage container.
 --
@@ -779,14 +858,15 @@
 foreign import ccall safe "hs_bindgen_33e3e12dc496414b"
   hs_bindgen_33e3e12dc496414b_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word64
+    -> IO HsBindgen.Runtime.LibC.Word64
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Storage_Safe_SDL_GetStorageSpaceRemaining@
 hs_bindgen_33e3e12dc496414b
   :: BG.Ptr SDL_Storage
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint64
 hs_bindgen_33e3e12dc496414b =
-  BG.fromFFIType hs_bindgen_33e3e12dc496414b_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_33e3e12dc496414b_base (BG.toFFIType x0))
 
 -- | Queries the remaining space in a storage container.
 --
@@ -812,7 +892,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> IO (BG.Ptr BG.Void)
 
@@ -825,7 +905,20 @@
   -> BG.Ptr BG.CInt
   -> IO (BG.Ptr (BG.Ptr BG.CChar))
 hs_bindgen_7ef73cac376ed868 =
-  BG.fromFFIType hs_bindgen_7ef73cac376ed868_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_7ef73cac376ed868_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Enumerate a directory tree, filtered by pattern, and return a list.
 --
diff --git a/src/SDL3/Sys/Bindgen/Storage/Unsafe.hs b/src/SDL3/Sys/Bindgen/Storage/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Storage/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Storage/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Storage.Unsafe (
@@ -23,7 +25,11 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Filesystem qualified
@@ -33,7 +39,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_storage.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_storage.h>"
          , "SDL_Storage *hs_bindgen_3efb7b0f89cc88bf ("
          , "  char const *arg1,"
          , "  SDL_PropertiesID arg2"
@@ -171,7 +181,7 @@
 foreign import ccall unsafe "hs_bindgen_3efb7b0f89cc88bf"
   hs_bindgen_3efb7b0f89cc88bf_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Storage_Unsafe_SDL_OpenTitleStorage@
@@ -180,7 +190,9 @@
   -> SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
   -> IO (BG.Ptr SDL_Storage)
 hs_bindgen_3efb7b0f89cc88bf =
-  BG.fromFFIType hs_bindgen_3efb7b0f89cc88bf_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_3efb7b0f89cc88bf_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Opens up a read-only container for the application\'s filesystem.
 --
@@ -210,7 +222,7 @@
   hs_bindgen_091f6a568e98e088_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Storage_Unsafe_SDL_OpenUserStorage@
@@ -220,7 +232,12 @@
   -> SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
   -> IO (BG.Ptr SDL_Storage)
 hs_bindgen_091f6a568e98e088 =
-  BG.fromFFIType hs_bindgen_091f6a568e98e088_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_091f6a568e98e088_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Opens up a container for a user\'s unique read\/write filesystem.
 --
@@ -260,7 +277,8 @@
   :: PtrConst.PtrConst BG.CChar
   -> IO (BG.Ptr SDL_Storage)
 hs_bindgen_7005113c31f7da2f =
-  BG.fromFFIType hs_bindgen_7005113c31f7da2f_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_7005113c31f7da2f_base (BG.toFFIType x0))
 
 -- | Opens up a container for local filesystem storage.
 --
@@ -294,7 +312,9 @@
   -> BG.Ptr BG.Void
   -> IO (BG.Ptr SDL_Storage)
 hs_bindgen_b8dda6b007805de7 =
-  BG.fromFFIType hs_bindgen_b8dda6b007805de7_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_b8dda6b007805de7_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Opens up a container using a client-provided storage interface.
 --
@@ -325,14 +345,15 @@
 foreign import ccall unsafe "hs_bindgen_cbfe2f0e9b4cbc36"
   hs_bindgen_cbfe2f0e9b4cbc36_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Storage_Unsafe_SDL_CloseStorage@
 hs_bindgen_cbfe2f0e9b4cbc36
   :: BG.Ptr SDL_Storage
   -> IO BG.CBool
 hs_bindgen_cbfe2f0e9b4cbc36 =
-  BG.fromFFIType hs_bindgen_cbfe2f0e9b4cbc36_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_cbfe2f0e9b4cbc36_base (BG.toFFIType x0))
 
 -- | Closes and frees a storage container.
 --
@@ -355,14 +376,15 @@
 foreign import ccall unsafe "hs_bindgen_2696a9ea9d0fe58b"
   hs_bindgen_2696a9ea9d0fe58b_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Storage_Unsafe_SDL_StorageReady@
 hs_bindgen_2696a9ea9d0fe58b
   :: BG.Ptr SDL_Storage
   -> IO BG.CBool
 hs_bindgen_2696a9ea9d0fe58b =
-  BG.fromFFIType hs_bindgen_2696a9ea9d0fe58b_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_2696a9ea9d0fe58b_base (BG.toFFIType x0))
 
 -- | Checks if the storage container is ready to use.
 --
@@ -387,7 +409,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Storage_Unsafe_SDL_GetStorageFileSize@
 hs_bindgen_4355da006df8358e
@@ -396,7 +418,12 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint64
   -> IO BG.CBool
 hs_bindgen_4355da006df8358e =
-  BG.fromFFIType hs_bindgen_4355da006df8358e_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_4355da006df8358e_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Query the size of a file within a storage container.
 --
@@ -429,8 +456,8 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word64
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Storage_Unsafe_SDL_ReadStorageFile@
 hs_bindgen_9bef126210db7928
@@ -440,7 +467,18 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint64
   -> IO BG.CBool
 hs_bindgen_9bef126210db7928 =
-  BG.fromFFIType hs_bindgen_9bef126210db7928_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_9bef126210db7928_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Synchronously read a file from a storage container into a client-provided buffer.
 --
@@ -479,8 +517,8 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word64
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word64
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Storage_Unsafe_SDL_WriteStorageFile@
 hs_bindgen_b7b6d20d57e278de
@@ -490,7 +528,18 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint64
   -> IO BG.CBool
 hs_bindgen_b7b6d20d57e278de =
-  BG.fromFFIType hs_bindgen_b7b6d20d57e278de_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_b7b6d20d57e278de_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Synchronously write a file from client memory into a storage container.
 --
@@ -526,7 +575,7 @@
   hs_bindgen_ca002acf3667a014_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Storage_Unsafe_SDL_CreateStorageDirectory@
 hs_bindgen_ca002acf3667a014
@@ -534,7 +583,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_ca002acf3667a014 =
-  BG.fromFFIType hs_bindgen_ca002acf3667a014_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_ca002acf3667a014_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Create a directory in a writable storage container.
 --
@@ -563,9 +614,9 @@
   hs_bindgen_26712abeb8ac186f_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.FunPtr BG.Void
+    -> HsBindgen.Runtime.Support.FunPtrVoid
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Storage_Unsafe_SDL_EnumerateStorageDirectory@
 hs_bindgen_26712abeb8ac186f
@@ -575,7 +626,18 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_26712abeb8ac186f =
-  BG.fromFFIType hs_bindgen_26712abeb8ac186f_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_26712abeb8ac186f_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Enumerate a directory in a storage container through a callback function.
 --
@@ -618,7 +680,7 @@
   hs_bindgen_76b7043c8ce038fa_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Storage_Unsafe_SDL_RemoveStoragePath@
 hs_bindgen_76b7043c8ce038fa
@@ -626,7 +688,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_76b7043c8ce038fa =
-  BG.fromFFIType hs_bindgen_76b7043c8ce038fa_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_76b7043c8ce038fa_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Remove a file or an empty directory in a writable storage container.
 --
@@ -655,7 +719,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Storage_Unsafe_SDL_RenameStoragePath@
 hs_bindgen_27e9f0759ca9fa2b
@@ -664,7 +728,12 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_27e9f0759ca9fa2b =
-  BG.fromFFIType hs_bindgen_27e9f0759ca9fa2b_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_27e9f0759ca9fa2b_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Rename a file or directory in a writable storage container.
 --
@@ -697,7 +766,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Storage_Unsafe_SDL_CopyStorageFile@
 hs_bindgen_d46668712d52c888
@@ -706,7 +775,12 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_d46668712d52c888 =
-  BG.fromFFIType hs_bindgen_d46668712d52c888_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_d46668712d52c888_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Copy a file in a writable storage container.
 --
@@ -739,7 +813,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Storage_Unsafe_SDL_GetStoragePathInfo@
 hs_bindgen_a307c310a8b1e035
@@ -748,7 +822,12 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Filesystem.SDL_PathInfo
   -> IO BG.CBool
 hs_bindgen_a307c310a8b1e035 =
-  BG.fromFFIType hs_bindgen_a307c310a8b1e035_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_a307c310a8b1e035_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get information about a filesystem path in a storage container.
 --
@@ -779,14 +858,15 @@
 foreign import ccall unsafe "hs_bindgen_0980e8da26f68acf"
   hs_bindgen_0980e8da26f68acf_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word64
+    -> IO HsBindgen.Runtime.LibC.Word64
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Storage_Unsafe_SDL_GetStorageSpaceRemaining@
 hs_bindgen_0980e8da26f68acf
   :: BG.Ptr SDL_Storage
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint64
 hs_bindgen_0980e8da26f68acf =
-  BG.fromFFIType hs_bindgen_0980e8da26f68acf_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_0980e8da26f68acf_base (BG.toFFIType x0))
 
 -- | Queries the remaining space in a storage container.
 --
@@ -812,7 +892,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> IO (BG.Ptr BG.Void)
 
@@ -825,7 +905,20 @@
   -> BG.Ptr BG.CInt
   -> IO (BG.Ptr (BG.Ptr BG.CChar))
 hs_bindgen_c0ca5ffb0ed420ff =
-  BG.fromFFIType hs_bindgen_c0ca5ffb0ed420ff_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_c0ca5ffb0ed420ff_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Enumerate a directory tree, filtered by pattern, and return a list.
 --
diff --git a/src/SDL3/Sys/Bindgen/Surface.hs b/src/SDL3/Sys/Bindgen/Surface.hs
--- a/src/SDL3/Sys/Bindgen/Surface.hs
+++ b/src/SDL3/Sys/Bindgen/Surface.hs
@@ -17,6 +17,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | SDL surfaces are buffers of pixels in system RAM. These are useful for passing around and manipulating images that are not stored in GPU memory.
 --
@@ -53,9 +54,27 @@
 )
 where
 
+import Prelude (
+  Bounded,
+  Enum,
+  Eq,
+  Int,
+  Integral,
+  Num,
+  Ord,
+  Read,
+  Real,
+  Show,
+  pure,
+  (<*>),
+  (>>),
+  type (~),
+ )
+
 import HsBindgen.Runtime.CEnum qualified as CEnum
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.Marshal qualified as Marshal
+import HsBindgen.Runtime.Struct qualified as Struct
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField
 import SDL3.Sys.Bindgen.Pixels qualified
@@ -458,6 +477,11 @@
 
 deriving via Marshal.EquivStorable SDL_Surface instance BG.Storable SDL_Surface
 
+deriving via Struct.IsStructViaReadRaw SDL_Surface instance Struct.IsStruct SDL_Surface
+
+-- | The flags of the surface, read-only
+--
+--     [C declaration]: @flags@, defined at @SDL3\/SDL_surface.h 140:22@
 instance
   (ty ~ SDL_SurfaceFlags)
   => BG.CompatHasField.HasField "flags" SDL_Surface ty
@@ -491,6 +515,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | The format of the surface, read-only
+--
+--     [C declaration]: @format@, defined at @SDL3\/SDL_surface.h 141:21@
 instance
   (ty ~ SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat)
   => BG.CompatHasField.HasField "format" SDL_Surface ty
@@ -524,6 +551,9 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | The width of the surface, read-only.
+--
+--     [C declaration]: @w@, defined at @SDL3\/SDL_surface.h 142:9@
 instance (ty ~ BG.CInt) => BG.CompatHasField.HasField "w" SDL_Surface ty where
   hasField =
     \x0 ->
@@ -552,6 +582,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | The height of the surface, read-only.
+--
+--     [C declaration]: @h@, defined at @SDL3\/SDL_surface.h 143:9@
 instance (ty ~ BG.CInt) => BG.CompatHasField.HasField "h" SDL_Surface ty where
   hasField =
     \x0 ->
@@ -580,6 +613,9 @@
 
   offset# = \_ -> \_ -> 12
 
+-- | The distance in bytes between rows of pixels, read-only
+--
+--     [C declaration]: @pitch@, defined at @SDL3\/SDL_surface.h 144:9@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "pitch" SDL_Surface ty
@@ -611,6 +647,9 @@
 
   offset# = \_ -> \_ -> 16
 
+-- | A pointer to the pixels of the surface, the pixels are writeable if non-NULL
+--
+--     [C declaration]: @pixels@, defined at @SDL3\/SDL_surface.h 145:11@
 instance
   (ty ~ BG.Ptr BG.Void)
   => BG.CompatHasField.HasField "pixels" SDL_Surface ty
@@ -642,6 +681,9 @@
 
   offset# = \_ -> \_ -> 24
 
+-- | Application reference count, used when freeing surface
+--
+--     [C declaration]: @refcount@, defined at @SDL3\/SDL_surface.h 147:9@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "refcount" SDL_Surface ty
@@ -673,6 +715,9 @@
 
   offset# = \_ -> \_ -> 32
 
+-- | Reserved for internal use
+--
+--     [C declaration]: @reserved@, defined at @SDL3\/SDL_surface.h 149:11@
 instance
   (ty ~ BG.Ptr BG.Void)
   => BG.CompatHasField.HasField "reserved" SDL_Surface ty
diff --git a/src/SDL3/Sys/Bindgen/Surface/FunPtr.hs b/src/SDL3/Sys/Bindgen/Surface/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Surface/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Surface/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Surface.FunPtr (
@@ -71,6 +73,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -84,7 +88,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_surface.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_surface.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Surface_get_SDL_CreateSurface */"
          , "__attribute__ ((const))"
          , "SDL_Surface *(*hs_bindgen_b611b0ad74e9df46 (void)) ("
@@ -814,7 +822,7 @@
   :: IO
        (BG.FunPtr (BG.CInt -> BG.CInt -> SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat -> IO (BG.Ptr SDL_Surface)))
 hs_bindgen_b611b0ad74e9df46 =
-  BG.fromFFIType hs_bindgen_b611b0ad74e9df46_base
+  fmap BG.fromFFIType hs_bindgen_b611b0ad74e9df46_base
 
 {-# NOINLINE sDL_CreateSurface #-}
 
@@ -860,7 +868,7 @@
            )
        )
 hs_bindgen_618b221956f449f6 =
-  BG.fromFFIType hs_bindgen_618b221956f449f6_base
+  fmap BG.fromFFIType hs_bindgen_618b221956f449f6_base
 
 {-# NOINLINE sDL_CreateSurfaceFrom #-}
 
@@ -911,7 +919,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_get_SDL_DestroySurface@
 hs_bindgen_3abd108286bfceeb :: IO (BG.FunPtr (BG.Ptr SDL_Surface -> IO ()))
 hs_bindgen_3abd108286bfceeb =
-  BG.fromFFIType hs_bindgen_3abd108286bfceeb_base
+  fmap BG.fromFFIType hs_bindgen_3abd108286bfceeb_base
 
 {-# NOINLINE sDL_DestroySurface #-}
 
@@ -941,7 +949,7 @@
 hs_bindgen_19e46938182deff1
   :: IO (BG.FunPtr (BG.Ptr SDL_Surface -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID))
 hs_bindgen_19e46938182deff1 =
-  BG.fromFFIType hs_bindgen_19e46938182deff1_base
+  fmap BG.fromFFIType hs_bindgen_19e46938182deff1_base
 
 {-# NOINLINE sDL_GetSurfaceProperties #-}
 
@@ -985,7 +993,7 @@
 hs_bindgen_3dcd7404be98273c
   :: IO (BG.FunPtr (BG.Ptr SDL_Surface -> SDL3.Sys.Bindgen.Pixels.SDL_Colorspace -> IO BG.CBool))
 hs_bindgen_3dcd7404be98273c =
-  BG.fromFFIType hs_bindgen_3dcd7404be98273c_base
+  fmap BG.fromFFIType hs_bindgen_3dcd7404be98273c_base
 
 {-# NOINLINE sDL_SetSurfaceColorspace #-}
 
@@ -1020,7 +1028,7 @@
 hs_bindgen_d23645a854452460
   :: IO (BG.FunPtr (BG.Ptr SDL_Surface -> IO SDL3.Sys.Bindgen.Pixels.SDL_Colorspace))
 hs_bindgen_d23645a854452460 =
-  BG.fromFFIType hs_bindgen_d23645a854452460_base
+  fmap BG.fromFFIType hs_bindgen_d23645a854452460_base
 
 {-# NOINLINE sDL_GetSurfaceColorspace #-}
 
@@ -1053,7 +1061,7 @@
 hs_bindgen_7f4f9f996fc5d0fa
   :: IO (BG.FunPtr (BG.Ptr SDL_Surface -> IO (BG.Ptr SDL3.Sys.Bindgen.Pixels.SDL_Palette)))
 hs_bindgen_7f4f9f996fc5d0fa =
-  BG.fromFFIType hs_bindgen_7f4f9f996fc5d0fa_base
+  fmap BG.fromFFIType hs_bindgen_7f4f9f996fc5d0fa_base
 
 {-# NOINLINE sDL_CreateSurfacePalette #-}
 
@@ -1090,7 +1098,7 @@
 hs_bindgen_38fd6f01b7193fdc
   :: IO (BG.FunPtr (BG.Ptr SDL_Surface -> BG.Ptr SDL3.Sys.Bindgen.Pixels.SDL_Palette -> IO BG.CBool))
 hs_bindgen_38fd6f01b7193fdc =
-  BG.fromFFIType hs_bindgen_38fd6f01b7193fdc_base
+  fmap BG.fromFFIType hs_bindgen_38fd6f01b7193fdc_base
 
 {-# NOINLINE sDL_SetSurfacePalette #-}
 
@@ -1127,7 +1135,7 @@
 hs_bindgen_d7d43240b950a72f
   :: IO (BG.FunPtr (BG.Ptr SDL_Surface -> IO (BG.Ptr SDL3.Sys.Bindgen.Pixels.SDL_Palette)))
 hs_bindgen_d7d43240b950a72f =
-  BG.fromFFIType hs_bindgen_d7d43240b950a72f_base
+  fmap BG.fromFFIType hs_bindgen_d7d43240b950a72f_base
 
 {-# NOINLINE sDL_GetSurfacePalette #-}
 
@@ -1158,7 +1166,7 @@
 hs_bindgen_51641021bfbefd52
   :: IO (BG.FunPtr (BG.Ptr SDL_Surface -> BG.Ptr SDL_Surface -> IO BG.CBool))
 hs_bindgen_51641021bfbefd52 =
-  BG.fromFFIType hs_bindgen_51641021bfbefd52_base
+  fmap BG.fromFFIType hs_bindgen_51641021bfbefd52_base
 
 {-# NOINLINE sDL_AddSurfaceAlternateImage #-}
 
@@ -1193,7 +1201,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_get_SDL_SurfaceHasAlternateImages@
 hs_bindgen_246a5adcd0cb59d2 :: IO (BG.FunPtr (BG.Ptr SDL_Surface -> IO BG.CBool))
 hs_bindgen_246a5adcd0cb59d2 =
-  BG.fromFFIType hs_bindgen_246a5adcd0cb59d2_base
+  fmap BG.fromFFIType hs_bindgen_246a5adcd0cb59d2_base
 
 {-# NOINLINE sDL_SurfaceHasAlternateImages #-}
 
@@ -1223,7 +1231,7 @@
 hs_bindgen_facc022f89ae54d4
   :: IO (BG.FunPtr (BG.Ptr SDL_Surface -> BG.Ptr BG.CInt -> IO (BG.Ptr (BG.Ptr SDL_Surface))))
 hs_bindgen_facc022f89ae54d4 =
-  BG.fromFFIType hs_bindgen_facc022f89ae54d4_base
+  fmap BG.fromFFIType hs_bindgen_facc022f89ae54d4_base
 
 {-# NOINLINE sDL_GetSurfaceImages #-}
 
@@ -1259,7 +1267,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_get_SDL_RemoveSurfaceAlternateImages@
 hs_bindgen_3cf1a6833f417511 :: IO (BG.FunPtr (BG.Ptr SDL_Surface -> IO ()))
 hs_bindgen_3cf1a6833f417511 =
-  BG.fromFFIType hs_bindgen_3cf1a6833f417511_base
+  fmap BG.fromFFIType hs_bindgen_3cf1a6833f417511_base
 
 {-# NOINLINE sDL_RemoveSurfaceAlternateImages #-}
 
@@ -1288,7 +1296,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_get_SDL_LockSurface@
 hs_bindgen_d9555284e2bd0bd2 :: IO (BG.FunPtr (BG.Ptr SDL_Surface -> IO BG.CBool))
 hs_bindgen_d9555284e2bd0bd2 =
-  BG.fromFFIType hs_bindgen_d9555284e2bd0bd2_base
+  fmap BG.fromFFIType hs_bindgen_d9555284e2bd0bd2_base
 
 {-# NOINLINE sDL_LockSurface #-}
 
@@ -1321,7 +1329,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_get_SDL_UnlockSurface@
 hs_bindgen_c9cc0ab93d524b01 :: IO (BG.FunPtr (BG.Ptr SDL_Surface -> IO ()))
 hs_bindgen_c9cc0ab93d524b01 =
-  BG.fromFFIType hs_bindgen_c9cc0ab93d524b01_base
+  fmap BG.fromFFIType hs_bindgen_c9cc0ab93d524b01_base
 
 {-# NOINLINE sDL_UnlockSurface #-}
 
@@ -1350,7 +1358,7 @@
   :: IO
        (BG.FunPtr (BG.Ptr SDL3.Sys.Bindgen.Iostream.SDL_IOStream -> BG.CBool -> IO (BG.Ptr SDL_Surface)))
 hs_bindgen_b9f87aa5bdc60ef1 =
-  BG.fromFFIType hs_bindgen_b9f87aa5bdc60ef1_base
+  fmap BG.fromFFIType hs_bindgen_b9f87aa5bdc60ef1_base
 
 {-# NOINLINE sDL_LoadSurface_IO #-}
 
@@ -1385,7 +1393,7 @@
 hs_bindgen_40bbeaa5b1c224ea
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO (BG.Ptr SDL_Surface)))
 hs_bindgen_40bbeaa5b1c224ea =
-  BG.fromFFIType hs_bindgen_40bbeaa5b1c224ea_base
+  fmap BG.fromFFIType hs_bindgen_40bbeaa5b1c224ea_base
 
 {-# NOINLINE sDL_LoadSurface #-}
 
@@ -1418,7 +1426,7 @@
   :: IO
        (BG.FunPtr (BG.Ptr SDL3.Sys.Bindgen.Iostream.SDL_IOStream -> BG.CBool -> IO (BG.Ptr SDL_Surface)))
 hs_bindgen_6755776ca639dbdc =
-  BG.fromFFIType hs_bindgen_6755776ca639dbdc_base
+  fmap BG.fromFFIType hs_bindgen_6755776ca639dbdc_base
 
 {-# NOINLINE sDL_LoadBMP_IO #-}
 
@@ -1453,7 +1461,7 @@
 hs_bindgen_551d0d7143060153
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO (BG.Ptr SDL_Surface)))
 hs_bindgen_551d0d7143060153 =
-  BG.fromFFIType hs_bindgen_551d0d7143060153_base
+  fmap BG.fromFFIType hs_bindgen_551d0d7143060153_base
 
 {-# NOINLINE sDL_LoadBMP #-}
 
@@ -1488,7 +1496,7 @@
            (BG.Ptr SDL_Surface -> BG.Ptr SDL3.Sys.Bindgen.Iostream.SDL_IOStream -> BG.CBool -> IO BG.CBool)
        )
 hs_bindgen_7af781be626489b8 =
-  BG.fromFFIType hs_bindgen_7af781be626489b8_base
+  fmap BG.fromFFIType hs_bindgen_7af781be626489b8_base
 
 {-# NOINLINE sDL_SaveBMP_IO #-}
 
@@ -1526,7 +1534,7 @@
 hs_bindgen_2ca988106cd7ddb5
   :: IO (BG.FunPtr (BG.Ptr SDL_Surface -> PtrConst.PtrConst BG.CChar -> IO BG.CBool))
 hs_bindgen_2ca988106cd7ddb5 =
-  BG.fromFFIType hs_bindgen_2ca988106cd7ddb5_base
+  fmap BG.fromFFIType hs_bindgen_2ca988106cd7ddb5_base
 
 {-# NOINLINE sDL_SaveBMP #-}
 
@@ -1561,7 +1569,7 @@
   :: IO
        (BG.FunPtr (BG.Ptr SDL3.Sys.Bindgen.Iostream.SDL_IOStream -> BG.CBool -> IO (BG.Ptr SDL_Surface)))
 hs_bindgen_1068e5bcdcfeee86 =
-  BG.fromFFIType hs_bindgen_1068e5bcdcfeee86_base
+  fmap BG.fromFFIType hs_bindgen_1068e5bcdcfeee86_base
 
 {-# NOINLINE sDL_LoadPNG_IO #-}
 
@@ -1598,7 +1606,7 @@
 hs_bindgen_b113bfea8941c2b8
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO (BG.Ptr SDL_Surface)))
 hs_bindgen_b113bfea8941c2b8 =
-  BG.fromFFIType hs_bindgen_b113bfea8941c2b8_base
+  fmap BG.fromFFIType hs_bindgen_b113bfea8941c2b8_base
 
 {-# NOINLINE sDL_LoadPNG #-}
 
@@ -1635,7 +1643,7 @@
            (BG.Ptr SDL_Surface -> BG.Ptr SDL3.Sys.Bindgen.Iostream.SDL_IOStream -> BG.CBool -> IO BG.CBool)
        )
 hs_bindgen_784779331549b878 =
-  BG.fromFFIType hs_bindgen_784779331549b878_base
+  fmap BG.fromFFIType hs_bindgen_784779331549b878_base
 
 {-# NOINLINE sDL_SavePNG_IO #-}
 
@@ -1671,7 +1679,7 @@
 hs_bindgen_3039586bfe90e597
   :: IO (BG.FunPtr (BG.Ptr SDL_Surface -> PtrConst.PtrConst BG.CChar -> IO BG.CBool))
 hs_bindgen_3039586bfe90e597 =
-  BG.fromFFIType hs_bindgen_3039586bfe90e597_base
+  fmap BG.fromFFIType hs_bindgen_3039586bfe90e597_base
 
 {-# NOINLINE sDL_SavePNG #-}
 
@@ -1702,7 +1710,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_get_SDL_SetSurfaceRLE@
 hs_bindgen_dd401b9169c44976 :: IO (BG.FunPtr (BG.Ptr SDL_Surface -> BG.CBool -> IO BG.CBool))
 hs_bindgen_dd401b9169c44976 =
-  BG.fromFFIType hs_bindgen_dd401b9169c44976_base
+  fmap BG.fromFFIType hs_bindgen_dd401b9169c44976_base
 
 {-# NOINLINE sDL_SetSurfaceRLE #-}
 
@@ -1735,7 +1743,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_get_SDL_SurfaceHasRLE@
 hs_bindgen_8957a6011d9f44f9 :: IO (BG.FunPtr (BG.Ptr SDL_Surface -> IO BG.CBool))
 hs_bindgen_8957a6011d9f44f9 =
-  BG.fromFFIType hs_bindgen_8957a6011d9f44f9_base
+  fmap BG.fromFFIType hs_bindgen_8957a6011d9f44f9_base
 
 {-# NOINLINE sDL_SurfaceHasRLE #-}
 
@@ -1767,7 +1775,7 @@
 hs_bindgen_bb6a923e2cd243f7
   :: IO (BG.FunPtr (BG.Ptr SDL_Surface -> BG.CBool -> SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO BG.CBool))
 hs_bindgen_bb6a923e2cd243f7 =
-  BG.fromFFIType hs_bindgen_bb6a923e2cd243f7_base
+  fmap BG.fromFFIType hs_bindgen_bb6a923e2cd243f7_base
 
 {-# NOINLINE sDL_SetSurfaceColorKey #-}
 
@@ -1805,7 +1813,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_get_SDL_SurfaceHasColorKey@
 hs_bindgen_9cb1ca0717710e5a :: IO (BG.FunPtr (BG.Ptr SDL_Surface -> IO BG.CBool))
 hs_bindgen_9cb1ca0717710e5a =
-  BG.fromFFIType hs_bindgen_9cb1ca0717710e5a_base
+  fmap BG.fromFFIType hs_bindgen_9cb1ca0717710e5a_base
 
 {-# NOINLINE sDL_SurfaceHasColorKey #-}
 
@@ -1837,7 +1845,7 @@
 hs_bindgen_b8a872d97663bea2
   :: IO (BG.FunPtr (BG.Ptr SDL_Surface -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO BG.CBool))
 hs_bindgen_b8a872d97663bea2 =
-  BG.fromFFIType hs_bindgen_b8a872d97663bea2_base
+  fmap BG.fromFFIType hs_bindgen_b8a872d97663bea2_base
 
 {-# NOINLINE sDL_GetSurfaceColorKey #-}
 
@@ -1882,7 +1890,7 @@
            )
        )
 hs_bindgen_d96bb8008d1b87a6 =
-  BG.fromFFIType hs_bindgen_d96bb8008d1b87a6_base
+  fmap BG.fromFFIType hs_bindgen_d96bb8008d1b87a6_base
 
 {-# NOINLINE sDL_SetSurfaceColorMod #-}
 
@@ -1937,7 +1945,7 @@
            )
        )
 hs_bindgen_bc145b87021a07e6 =
-  BG.fromFFIType hs_bindgen_bc145b87021a07e6_base
+  fmap BG.fromFFIType hs_bindgen_bc145b87021a07e6_base
 
 {-# NOINLINE sDL_GetSurfaceColorMod #-}
 
@@ -1980,7 +1988,7 @@
 hs_bindgen_44bc0c580740a2b4
   :: IO (BG.FunPtr (BG.Ptr SDL_Surface -> SDL3.Sys.Bindgen.Stdinc.Uint8 -> IO BG.CBool))
 hs_bindgen_44bc0c580740a2b4 =
-  BG.fromFFIType hs_bindgen_44bc0c580740a2b4_base
+  fmap BG.fromFFIType hs_bindgen_44bc0c580740a2b4_base
 
 {-# NOINLINE sDL_SetSurfaceAlphaMod #-}
 
@@ -2017,7 +2025,7 @@
 hs_bindgen_2f7b92e198b60348
   :: IO (BG.FunPtr (BG.Ptr SDL_Surface -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8 -> IO BG.CBool))
 hs_bindgen_2f7b92e198b60348 =
-  BG.fromFFIType hs_bindgen_2f7b92e198b60348_base
+  fmap BG.fromFFIType hs_bindgen_2f7b92e198b60348_base
 
 {-# NOINLINE sDL_GetSurfaceAlphaMod #-}
 
@@ -2050,7 +2058,7 @@
 hs_bindgen_1abb9d9640e9f83b
   :: IO (BG.FunPtr (BG.Ptr SDL_Surface -> SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode -> IO BG.CBool))
 hs_bindgen_1abb9d9640e9f83b =
-  BG.fromFFIType hs_bindgen_1abb9d9640e9f83b_base
+  fmap BG.fromFFIType hs_bindgen_1abb9d9640e9f83b_base
 
 {-# NOINLINE sDL_SetSurfaceBlendMode #-}
 
@@ -2086,7 +2094,7 @@
   :: IO
        (BG.FunPtr (BG.Ptr SDL_Surface -> BG.Ptr SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode -> IO BG.CBool))
 hs_bindgen_ddc08ab588ab04b9 =
-  BG.fromFFIType hs_bindgen_ddc08ab588ab04b9_base
+  fmap BG.fromFFIType hs_bindgen_ddc08ab588ab04b9_base
 
 {-# NOINLINE sDL_GetSurfaceBlendMode #-}
 
@@ -2120,7 +2128,7 @@
   :: IO
        (BG.FunPtr (BG.Ptr SDL_Surface -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect -> IO BG.CBool))
 hs_bindgen_ba59ae52e07cd998 =
-  BG.fromFFIType hs_bindgen_ba59ae52e07cd998_base
+  fmap BG.fromFFIType hs_bindgen_ba59ae52e07cd998_base
 
 {-# NOINLINE sDL_SetSurfaceClipRect #-}
 
@@ -2157,7 +2165,7 @@
 hs_bindgen_7d6c81cd63182c7e
   :: IO (BG.FunPtr (BG.Ptr SDL_Surface -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect -> IO BG.CBool))
 hs_bindgen_7d6c81cd63182c7e =
-  BG.fromFFIType hs_bindgen_7d6c81cd63182c7e_base
+  fmap BG.fromFFIType hs_bindgen_7d6c81cd63182c7e_base
 
 {-# NOINLINE sDL_GetSurfaceClipRect #-}
 
@@ -2191,7 +2199,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_get_SDL_FlipSurface@
 hs_bindgen_3f1f98e8e0b7167f :: IO (BG.FunPtr (BG.Ptr SDL_Surface -> SDL_FlipMode -> IO BG.CBool))
 hs_bindgen_3f1f98e8e0b7167f =
-  BG.fromFFIType hs_bindgen_3f1f98e8e0b7167f_base
+  fmap BG.fromFFIType hs_bindgen_3f1f98e8e0b7167f_base
 
 {-# NOINLINE sDL_FlipSurface #-}
 
@@ -2221,7 +2229,7 @@
 hs_bindgen_bc3ef53813125bc9
   :: IO (BG.FunPtr (BG.Ptr SDL_Surface -> BG.CFloat -> IO (BG.Ptr SDL_Surface)))
 hs_bindgen_bc3ef53813125bc9 =
-  BG.fromFFIType hs_bindgen_bc3ef53813125bc9_base
+  fmap BG.fromFFIType hs_bindgen_bc3ef53813125bc9_base
 
 {-# NOINLINE sDL_RotateSurface #-}
 
@@ -2256,7 +2264,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_get_SDL_DuplicateSurface@
 hs_bindgen_d6a7bd90e75ca1f4 :: IO (BG.FunPtr (BG.Ptr SDL_Surface -> IO (BG.Ptr SDL_Surface)))
 hs_bindgen_d6a7bd90e75ca1f4 =
-  BG.fromFFIType hs_bindgen_d6a7bd90e75ca1f4_base
+  fmap BG.fromFFIType hs_bindgen_d6a7bd90e75ca1f4_base
 
 {-# NOINLINE sDL_DuplicateSurface #-}
 
@@ -2291,7 +2299,7 @@
   :: IO
        (BG.FunPtr (BG.Ptr SDL_Surface -> BG.CInt -> BG.CInt -> SDL_ScaleMode -> IO (BG.Ptr SDL_Surface)))
 hs_bindgen_3c8c8f89fa471eaf =
-  BG.fromFFIType hs_bindgen_3c8c8f89fa471eaf_base
+  fmap BG.fromFFIType hs_bindgen_3c8c8f89fa471eaf_base
 
 {-# NOINLINE sDL_ScaleSurface #-}
 
@@ -2331,7 +2339,7 @@
   :: IO
        (BG.FunPtr (BG.Ptr SDL_Surface -> SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat -> IO (BG.Ptr SDL_Surface)))
 hs_bindgen_02efcc9cf840132b =
-  BG.fromFFIType hs_bindgen_02efcc9cf840132b_base
+  fmap BG.fromFFIType hs_bindgen_02efcc9cf840132b_base
 
 {-# NOINLINE sDL_ConvertSurface #-}
 
@@ -2379,7 +2387,7 @@
            )
        )
 hs_bindgen_d71b405fb2c63769 =
-  BG.fromFFIType hs_bindgen_d71b405fb2c63769_base
+  fmap BG.fromFFIType hs_bindgen_d71b405fb2c63769_base
 
 {-# NOINLINE sDL_ConvertSurfaceAndColorspace #-}
 
@@ -2441,7 +2449,7 @@
            )
        )
 hs_bindgen_57fab76de82ac9cf =
-  BG.fromFFIType hs_bindgen_57fab76de82ac9cf_base
+  fmap BG.fromFFIType hs_bindgen_57fab76de82ac9cf_base
 
 {-# NOINLINE sDL_ConvertPixels #-}
 
@@ -2512,7 +2520,7 @@
            )
        )
 hs_bindgen_8ab04e66f663ce08 =
-  BG.fromFFIType hs_bindgen_8ab04e66f663ce08_base
+  fmap BG.fromFFIType hs_bindgen_8ab04e66f663ce08_base
 
 {-# NOINLINE sDL_ConvertPixelsAndColorspace #-}
 
@@ -2592,7 +2600,7 @@
            )
        )
 hs_bindgen_fb56322259d07073 =
-  BG.fromFFIType hs_bindgen_fb56322259d07073_base
+  fmap BG.fromFFIType hs_bindgen_fb56322259d07073_base
 
 {-# NOINLINE sDL_PremultiplyAlpha #-}
 
@@ -2649,7 +2657,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_get_SDL_PremultiplySurfaceAlpha@
 hs_bindgen_6d7894c44ea2dfc7 :: IO (BG.FunPtr (BG.Ptr SDL_Surface -> BG.CBool -> IO BG.CBool))
 hs_bindgen_6d7894c44ea2dfc7 =
-  BG.fromFFIType hs_bindgen_6d7894c44ea2dfc7_base
+  fmap BG.fromFFIType hs_bindgen_6d7894c44ea2dfc7_base
 
 {-# NOINLINE sDL_PremultiplySurfaceAlpha #-}
 
@@ -2682,7 +2690,7 @@
   :: IO
        (BG.FunPtr (BG.Ptr SDL_Surface -> BG.CFloat -> BG.CFloat -> BG.CFloat -> BG.CFloat -> IO BG.CBool))
 hs_bindgen_3eb9b7722a04b8f8 =
-  BG.fromFFIType hs_bindgen_3eb9b7722a04b8f8_base
+  fmap BG.fromFFIType hs_bindgen_3eb9b7722a04b8f8_base
 
 {-# NOINLINE sDL_ClearSurface #-}
 
@@ -2730,7 +2738,7 @@
            )
        )
 hs_bindgen_d466d8dde16f547b =
-  BG.fromFFIType hs_bindgen_d466d8dde16f547b_base
+  fmap BG.fromFFIType hs_bindgen_d466d8dde16f547b_base
 
 {-# NOINLINE sDL_FillSurfaceRect #-}
 
@@ -2782,7 +2790,7 @@
            )
        )
 hs_bindgen_b0bc5bc8b57e73e3 =
-  BG.fromFFIType hs_bindgen_b0bc5bc8b57e73e3_base
+  fmap BG.fromFFIType hs_bindgen_b0bc5bc8b57e73e3_base
 
 {-# NOINLINE sDL_FillSurfaceRects #-}
 
@@ -2837,7 +2845,7 @@
            )
        )
 hs_bindgen_a29859c35fa4ca59 =
-  BG.fromFFIType hs_bindgen_a29859c35fa4ca59_base
+  fmap BG.fromFFIType hs_bindgen_a29859c35fa4ca59_base
 
 {-# NOINLINE sDL_BlitSurface #-}
 
@@ -2934,7 +2942,7 @@
            )
        )
 hs_bindgen_3f540dd5f5c2d037 =
-  BG.fromFFIType hs_bindgen_3f540dd5f5c2d037_base
+  fmap BG.fromFFIType hs_bindgen_3f540dd5f5c2d037_base
 
 {-# NOINLINE sDL_BlitSurfaceUnchecked #-}
 
@@ -2988,7 +2996,7 @@
            )
        )
 hs_bindgen_9a9b4e0ef4c33fb3 =
-  BG.fromFFIType hs_bindgen_9a9b4e0ef4c33fb3_base
+  fmap BG.fromFFIType hs_bindgen_9a9b4e0ef4c33fb3_base
 
 {-# NOINLINE sDL_BlitSurfaceScaled #-}
 
@@ -3043,7 +3051,7 @@
            )
        )
 hs_bindgen_4d0c17a14d7334d5 =
-  BG.fromFFIType hs_bindgen_4d0c17a14d7334d5_base
+  fmap BG.fromFFIType hs_bindgen_4d0c17a14d7334d5_base
 
 {-# NOINLINE sDL_BlitSurfaceUncheckedScaled #-}
 
@@ -3100,7 +3108,7 @@
            )
        )
 hs_bindgen_1a9d00d4cf3623eb =
-  BG.fromFFIType hs_bindgen_1a9d00d4cf3623eb_base
+  fmap BG.fromFFIType hs_bindgen_1a9d00d4cf3623eb_base
 
 {-# NOINLINE sDL_StretchSurface #-}
 
@@ -3154,7 +3162,7 @@
            )
        )
 hs_bindgen_215dfb2882cacc76 =
-  BG.fromFFIType hs_bindgen_215dfb2882cacc76_base
+  fmap BG.fromFFIType hs_bindgen_215dfb2882cacc76_base
 
 {-# NOINLINE sDL_BlitSurfaceTiled #-}
 
@@ -3209,7 +3217,7 @@
            )
        )
 hs_bindgen_c33eb3f53084c8a3 =
-  BG.fromFFIType hs_bindgen_c33eb3f53084c8a3_base
+  fmap BG.fromFFIType hs_bindgen_c33eb3f53084c8a3_base
 
 {-# NOINLINE sDL_BlitSurfaceTiledWithScale #-}
 
@@ -3274,7 +3282,7 @@
            )
        )
 hs_bindgen_34b06f5d5e4b0b97 =
-  BG.fromFFIType hs_bindgen_34b06f5d5e4b0b97_base
+  fmap BG.fromFFIType hs_bindgen_34b06f5d5e4b0b97_base
 
 {-# NOINLINE sDL_BlitSurface9Grid #-}
 
@@ -3345,7 +3353,7 @@
            )
        )
 hs_bindgen_22cd4dcdb87e7f1a =
-  BG.fromFFIType hs_bindgen_22cd4dcdb87e7f1a_base
+  fmap BG.fromFFIType hs_bindgen_22cd4dcdb87e7f1a_base
 
 {-# NOINLINE sDL_MapSurfaceRGB #-}
 
@@ -3405,7 +3413,7 @@
            )
        )
 hs_bindgen_0a9db974db6877bb =
-  BG.fromFFIType hs_bindgen_0a9db974db6877bb_base
+  fmap BG.fromFFIType hs_bindgen_0a9db974db6877bb_base
 
 {-# NOINLINE sDL_MapSurfaceRGBA #-}
 
@@ -3470,7 +3478,7 @@
            )
        )
 hs_bindgen_621010702d3faa18 =
-  BG.fromFFIType hs_bindgen_621010702d3faa18_base
+  fmap BG.fromFFIType hs_bindgen_621010702d3faa18_base
 
 {-# NOINLINE sDL_ReadSurfacePixel #-}
 
@@ -3535,7 +3543,7 @@
            )
        )
 hs_bindgen_8c567029e60d9131 =
-  BG.fromFFIType hs_bindgen_8c567029e60d9131_base
+  fmap BG.fromFFIType hs_bindgen_8c567029e60d9131_base
 
 {-# NOINLINE sDL_ReadSurfacePixelFloat #-}
 
@@ -3598,7 +3606,7 @@
            )
        )
 hs_bindgen_b9a3ff7742c64b4a =
-  BG.fromFFIType hs_bindgen_b9a3ff7742c64b4a_base
+  fmap BG.fromFFIType hs_bindgen_b9a3ff7742c64b4a_base
 
 {-# NOINLINE sDL_WriteSurfacePixel #-}
 
@@ -3663,7 +3671,7 @@
            )
        )
 hs_bindgen_622524c6fb921b4c =
-  BG.fromFFIType hs_bindgen_622524c6fb921b4c_base
+  fmap BG.fromFFIType hs_bindgen_622524c6fb921b4c_base
 
 {-# NOINLINE sDL_WriteSurfacePixelFloat #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Surface/Safe.hs b/src/SDL3/Sys/Bindgen/Surface/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Surface/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Surface/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Surface.Safe (
@@ -71,7 +73,11 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Blendmode qualified
@@ -84,7 +90,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_surface.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_surface.h>"
          , "SDL_Surface *hs_bindgen_f5d9dffb67ed3a02 ("
          , "  signed int arg1,"
          , "  signed int arg2,"
@@ -677,9 +687,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_CreateSurface@
 foreign import ccall safe "hs_bindgen_f5d9dffb67ed3a02"
   hs_bindgen_f5d9dffb67ed3a02_base
-    :: BG.Int32
-    -> BG.Int32
-    -> BG.Word32
+    :: BG.CInt
+    -> BG.CInt
+    -> HsBindgen.Runtime.Support.CUInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_CreateSurface@
@@ -689,7 +699,12 @@
   -> SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
   -> IO (BG.Ptr SDL_Surface)
 hs_bindgen_f5d9dffb67ed3a02 =
-  BG.fromFFIType hs_bindgen_f5d9dffb67ed3a02_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_f5d9dffb67ed3a02_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Allocate a new surface with a specific pixel format.
 --
@@ -723,11 +738,11 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_CreateSurfaceFrom@
 foreign import ccall safe "hs_bindgen_049fe6b29b9f6b0c"
   hs_bindgen_049fe6b29b9f6b0c_base
-    :: BG.Int32
-    -> BG.Int32
-    -> BG.Word32
+    :: BG.CInt
+    -> BG.CInt
+    -> HsBindgen.Runtime.Support.CUInt
     -> BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_CreateSurfaceFrom@
@@ -739,7 +754,20 @@
   -> BG.CInt
   -> IO (BG.Ptr SDL_Surface)
 hs_bindgen_049fe6b29b9f6b0c =
-  BG.fromFFIType hs_bindgen_049fe6b29b9f6b0c_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_049fe6b29b9f6b0c_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Allocate a new surface with a specific pixel format and existing pixel data.
 --
@@ -793,7 +821,8 @@
   :: BG.Ptr SDL_Surface
   -> IO ()
 hs_bindgen_96adc31ed3b85b0e =
-  BG.fromFFIType hs_bindgen_96adc31ed3b85b0e_base
+  \x0 ->
+    hs_bindgen_96adc31ed3b85b0e_base (BG.toFFIType x0)
 
 -- | Free a surface.
 --
@@ -818,14 +847,15 @@
 foreign import ccall safe "hs_bindgen_67ff85788cdc8372"
   hs_bindgen_67ff85788cdc8372_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_GetSurfaceProperties@
 hs_bindgen_67ff85788cdc8372
   :: BG.Ptr SDL_Surface
   -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
 hs_bindgen_67ff85788cdc8372 =
-  BG.fromFFIType hs_bindgen_67ff85788cdc8372_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_67ff85788cdc8372_base (BG.toFFIType x0))
 
 -- | Get the properties associated with a surface.
 --
@@ -864,8 +894,8 @@
 foreign import ccall safe "hs_bindgen_598d48691dcd3ff1"
   hs_bindgen_598d48691dcd3ff1_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.Support.CUInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_SetSurfaceColorspace@
 hs_bindgen_598d48691dcd3ff1
@@ -873,7 +903,9 @@
   -> SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
   -> IO BG.CBool
 hs_bindgen_598d48691dcd3ff1 =
-  BG.fromFFIType hs_bindgen_598d48691dcd3ff1_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_598d48691dcd3ff1_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the colorspace used by a surface.
 --
@@ -905,14 +937,15 @@
 foreign import ccall safe "hs_bindgen_ecbc9fcba66d62a3"
   hs_bindgen_ecbc9fcba66d62a3_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.Support.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_GetSurfaceColorspace@
 hs_bindgen_ecbc9fcba66d62a3
   :: BG.Ptr SDL_Surface
   -> IO SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
 hs_bindgen_ecbc9fcba66d62a3 =
-  BG.fromFFIType hs_bindgen_ecbc9fcba66d62a3_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_ecbc9fcba66d62a3_base (BG.toFFIType x0))
 
 -- | Get the colorspace used by a surface.
 --
@@ -947,7 +980,8 @@
   :: BG.Ptr SDL_Surface
   -> IO (BG.Ptr SDL3.Sys.Bindgen.Pixels.SDL_Palette)
 hs_bindgen_5932b732849a1735 =
-  BG.fromFFIType hs_bindgen_5932b732849a1735_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_5932b732849a1735_base (BG.toFFIType x0))
 
 -- | Create a palette and associate it with a surface.
 --
@@ -980,7 +1014,7 @@
   hs_bindgen_3d3e0724db0ed7ce_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_SetSurfacePalette@
 hs_bindgen_3d3e0724db0ed7ce
@@ -988,7 +1022,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Pixels.SDL_Palette
   -> IO BG.CBool
 hs_bindgen_3d3e0724db0ed7ce =
-  BG.fromFFIType hs_bindgen_3d3e0724db0ed7ce_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_3d3e0724db0ed7ce_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the palette used by a surface.
 --
@@ -1028,7 +1064,8 @@
   :: BG.Ptr SDL_Surface
   -> IO (BG.Ptr SDL3.Sys.Bindgen.Pixels.SDL_Palette)
 hs_bindgen_5876f907103f7e2a =
-  BG.fromFFIType hs_bindgen_5876f907103f7e2a_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_5876f907103f7e2a_base (BG.toFFIType x0))
 
 -- | Get the palette used by a surface.
 --
@@ -1054,7 +1091,7 @@
   hs_bindgen_0b7cea3e32121db6_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_AddSurfaceAlternateImage@
 hs_bindgen_0b7cea3e32121db6
@@ -1062,7 +1099,9 @@
   -> BG.Ptr SDL_Surface
   -> IO BG.CBool
 hs_bindgen_0b7cea3e32121db6 =
-  BG.fromFFIType hs_bindgen_0b7cea3e32121db6_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_0b7cea3e32121db6_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Add an alternate version of a surface.
 --
@@ -1096,14 +1135,15 @@
 foreign import ccall safe "hs_bindgen_bb885b70690a833c"
   hs_bindgen_bb885b70690a833c_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_SurfaceHasAlternateImages@
 hs_bindgen_bb885b70690a833c
   :: BG.Ptr SDL_Surface
   -> IO BG.CBool
 hs_bindgen_bb885b70690a833c =
-  BG.fromFFIType hs_bindgen_bb885b70690a833c_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_bb885b70690a833c_base (BG.toFFIType x0))
 
 -- | Return whether a surface has alternate versions available.
 --
@@ -1138,7 +1178,9 @@
   -> BG.Ptr BG.CInt
   -> IO (BG.Ptr (BG.Ptr SDL_Surface))
 hs_bindgen_a622f58d7ad78b73 =
-  BG.fromFFIType hs_bindgen_a622f58d7ad78b73_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_a622f58d7ad78b73_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get an array including all versions of a surface.
 --
@@ -1178,7 +1220,8 @@
   :: BG.Ptr SDL_Surface
   -> IO ()
 hs_bindgen_9d874c9b10aefa86 =
-  BG.fromFFIType hs_bindgen_9d874c9b10aefa86_base
+  \x0 ->
+    hs_bindgen_9d874c9b10aefa86_base (BG.toFFIType x0)
 
 -- | Remove all alternate versions of a surface.
 --
@@ -1204,14 +1247,15 @@
 foreign import ccall safe "hs_bindgen_db64a610fba08fca"
   hs_bindgen_db64a610fba08fca_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_LockSurface@
 hs_bindgen_db64a610fba08fca
   :: BG.Ptr SDL_Surface
   -> IO BG.CBool
 hs_bindgen_db64a610fba08fca =
-  BG.fromFFIType hs_bindgen_db64a610fba08fca_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_db64a610fba08fca_base (BG.toFFIType x0))
 
 -- | Set up a surface for directly accessing the pixels.
 --
@@ -1247,7 +1291,8 @@
   :: BG.Ptr SDL_Surface
   -> IO ()
 hs_bindgen_8f1af892d2fe009c =
-  BG.fromFFIType hs_bindgen_8f1af892d2fe009c_base
+  \x0 ->
+    hs_bindgen_8f1af892d2fe009c_base (BG.toFFIType x0)
 
 -- | Release a surface after directly accessing the pixels.
 --
@@ -1270,7 +1315,7 @@
 foreign import ccall safe "hs_bindgen_35d3f5b89da7d967"
   hs_bindgen_35d3f5b89da7d967_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
+    -> BG.CBool
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_LoadSurface_IO@
@@ -1279,7 +1324,9 @@
   -> BG.CBool
   -> IO (BG.Ptr SDL_Surface)
 hs_bindgen_35d3f5b89da7d967 =
-  BG.fromFFIType hs_bindgen_35d3f5b89da7d967_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_35d3f5b89da7d967_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Load a BMP or PNG image from a seekable SDL data stream.
 --
@@ -1317,7 +1364,8 @@
   :: PtrConst.PtrConst BG.CChar
   -> IO (BG.Ptr SDL_Surface)
 hs_bindgen_3fecd62d86ccada1 =
-  BG.fromFFIType hs_bindgen_3fecd62d86ccada1_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3fecd62d86ccada1_base (BG.toFFIType x0))
 
 -- | Load a BMP or PNG image from a file.
 --
@@ -1344,7 +1392,7 @@
 foreign import ccall safe "hs_bindgen_8327ab2e34d76ef3"
   hs_bindgen_8327ab2e34d76ef3_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
+    -> BG.CBool
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_LoadBMP_IO@
@@ -1353,7 +1401,9 @@
   -> BG.CBool
   -> IO (BG.Ptr SDL_Surface)
 hs_bindgen_8327ab2e34d76ef3 =
-  BG.fromFFIType hs_bindgen_8327ab2e34d76ef3_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_8327ab2e34d76ef3_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Load a BMP image from a seekable SDL data stream.
 --
@@ -1391,7 +1441,8 @@
   :: PtrConst.PtrConst BG.CChar
   -> IO (BG.Ptr SDL_Surface)
 hs_bindgen_fced4187c12f6580 =
-  BG.fromFFIType hs_bindgen_fced4187c12f6580_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_fced4187c12f6580_base (BG.toFFIType x0))
 
 -- | Load a BMP image from a file.
 --
@@ -1419,8 +1470,8 @@
   hs_bindgen_a8c9380df03494fa_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_SaveBMP_IO@
 hs_bindgen_a8c9380df03494fa
@@ -1429,7 +1480,12 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_a8c9380df03494fa =
-  BG.fromFFIType hs_bindgen_a8c9380df03494fa_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_a8c9380df03494fa_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Save a surface to a seekable SDL data stream in BMP format.
 --
@@ -1465,7 +1521,7 @@
   hs_bindgen_9f5c906fe39b463b_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_SaveBMP@
 hs_bindgen_9f5c906fe39b463b
@@ -1473,7 +1529,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_9f5c906fe39b463b =
-  BG.fromFFIType hs_bindgen_9f5c906fe39b463b_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_9f5c906fe39b463b_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Save a surface to a file in BMP format.
 --
@@ -1504,7 +1562,7 @@
 foreign import ccall safe "hs_bindgen_5438f82ebfd0db2d"
   hs_bindgen_5438f82ebfd0db2d_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
+    -> BG.CBool
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_LoadPNG_IO@
@@ -1513,7 +1571,9 @@
   -> BG.CBool
   -> IO (BG.Ptr SDL_Surface)
 hs_bindgen_5438f82ebfd0db2d =
-  BG.fromFFIType hs_bindgen_5438f82ebfd0db2d_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_5438f82ebfd0db2d_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Load a PNG image from a seekable SDL data stream.
 --
@@ -1553,7 +1613,8 @@
   :: PtrConst.PtrConst BG.CChar
   -> IO (BG.Ptr SDL_Surface)
 hs_bindgen_75a60dd30aa46884 =
-  BG.fromFFIType hs_bindgen_75a60dd30aa46884_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_75a60dd30aa46884_base (BG.toFFIType x0))
 
 -- | Load a PNG image from a file.
 --
@@ -1583,8 +1644,8 @@
   hs_bindgen_9e770fcf56e4fd03_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_SavePNG_IO@
 hs_bindgen_9e770fcf56e4fd03
@@ -1593,7 +1654,12 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_9e770fcf56e4fd03 =
-  BG.fromFFIType hs_bindgen_9e770fcf56e4fd03_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_9e770fcf56e4fd03_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Save a surface to a seekable SDL data stream in PNG format.
 --
@@ -1627,7 +1693,7 @@
   hs_bindgen_6bc28b4b1f4a9d05_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_SavePNG@
 hs_bindgen_6bc28b4b1f4a9d05
@@ -1635,7 +1701,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_6bc28b4b1f4a9d05 =
-  BG.fromFFIType hs_bindgen_6bc28b4b1f4a9d05_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_6bc28b4b1f4a9d05_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Save a surface to a file in PNG format.
 --
@@ -1664,8 +1732,8 @@
 foreign import ccall safe "hs_bindgen_15ba59ca0ef8e4ad"
   hs_bindgen_15ba59ca0ef8e4ad_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_SetSurfaceRLE@
 hs_bindgen_15ba59ca0ef8e4ad
@@ -1673,7 +1741,9 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_15ba59ca0ef8e4ad =
-  BG.fromFFIType hs_bindgen_15ba59ca0ef8e4ad_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_15ba59ca0ef8e4ad_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the RLE acceleration hint for a surface.
 --
@@ -1704,14 +1774,15 @@
 foreign import ccall safe "hs_bindgen_d627111ac7084ad7"
   hs_bindgen_d627111ac7084ad7_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_SurfaceHasRLE@
 hs_bindgen_d627111ac7084ad7
   :: BG.Ptr SDL_Surface
   -> IO BG.CBool
 hs_bindgen_d627111ac7084ad7 =
-  BG.fromFFIType hs_bindgen_d627111ac7084ad7_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d627111ac7084ad7_base (BG.toFFIType x0))
 
 -- | Returns whether the surface is RLE enabled.
 --
@@ -1738,9 +1809,9 @@
 foreign import ccall safe "hs_bindgen_f4def14a31ba1ed7"
   hs_bindgen_f4def14a31ba1ed7_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> BG.Word32
-    -> IO BG.Word8
+    -> BG.CBool
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_SetSurfaceColorKey@
 hs_bindgen_f4def14a31ba1ed7
@@ -1749,7 +1820,12 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_f4def14a31ba1ed7 =
-  BG.fromFFIType hs_bindgen_f4def14a31ba1ed7_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_f4def14a31ba1ed7_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set the color key (transparent pixel) in a surface.
 --
@@ -1786,14 +1862,15 @@
 foreign import ccall safe "hs_bindgen_4d3f9b51f9d999a8"
   hs_bindgen_4d3f9b51f9d999a8_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_SurfaceHasColorKey@
 hs_bindgen_4d3f9b51f9d999a8
   :: BG.Ptr SDL_Surface
   -> IO BG.CBool
 hs_bindgen_4d3f9b51f9d999a8 =
-  BG.fromFFIType hs_bindgen_4d3f9b51f9d999a8_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_4d3f9b51f9d999a8_base (BG.toFFIType x0))
 
 -- | Returns whether the surface has a color key.
 --
@@ -1821,7 +1898,7 @@
   hs_bindgen_a54e363a1e1eaa5a_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_GetSurfaceColorKey@
 hs_bindgen_a54e363a1e1eaa5a
@@ -1829,7 +1906,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_a54e363a1e1eaa5a =
-  BG.fromFFIType hs_bindgen_a54e363a1e1eaa5a_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_a54e363a1e1eaa5a_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the color key (transparent pixel) for a surface.
 --
@@ -1862,10 +1941,10 @@
 foreign import ccall safe "hs_bindgen_8b27208d3c207793"
   hs_bindgen_8b27208d3c207793_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> BG.Word8
-    -> BG.Word8
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_SetSurfaceColorMod@
 hs_bindgen_8b27208d3c207793
@@ -1875,7 +1954,18 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO BG.CBool
 hs_bindgen_8b27208d3c207793 =
-  BG.fromFFIType hs_bindgen_8b27208d3c207793_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_8b27208d3c207793_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Set an additional color value multiplied into blit operations.
 --
@@ -1919,7 +2009,7 @@
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_GetSurfaceColorMod@
 hs_bindgen_34ffb5b1c38e964a
@@ -1929,7 +2019,18 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO BG.CBool
 hs_bindgen_34ffb5b1c38e964a =
-  BG.fromFFIType hs_bindgen_34ffb5b1c38e964a_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_34ffb5b1c38e964a_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Get the additional color value multiplied into blit operations.
 --
@@ -1966,8 +2067,8 @@
 foreign import ccall safe "hs_bindgen_c9f8378e1f43a4b5"
   hs_bindgen_c9f8378e1f43a4b5_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_SetSurfaceAlphaMod@
 hs_bindgen_c9f8378e1f43a4b5
@@ -1975,7 +2076,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO BG.CBool
 hs_bindgen_c9f8378e1f43a4b5 =
-  BG.fromFFIType hs_bindgen_c9f8378e1f43a4b5_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_c9f8378e1f43a4b5_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set an additional alpha value used in blit operations.
 --
@@ -2009,7 +2112,7 @@
   hs_bindgen_c58e7719cc38fbb7_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_GetSurfaceAlphaMod@
 hs_bindgen_c58e7719cc38fbb7
@@ -2017,7 +2120,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO BG.CBool
 hs_bindgen_c58e7719cc38fbb7 =
-  BG.fromFFIType hs_bindgen_c58e7719cc38fbb7_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_c58e7719cc38fbb7_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the additional alpha value used in blit operations.
 --
@@ -2046,8 +2151,8 @@
 foreign import ccall safe "hs_bindgen_8e7ff2b3301fecfa"
   hs_bindgen_8e7ff2b3301fecfa_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_SetSurfaceBlendMode@
 hs_bindgen_8e7ff2b3301fecfa
@@ -2055,7 +2160,9 @@
   -> SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
   -> IO BG.CBool
 hs_bindgen_8e7ff2b3301fecfa =
-  BG.fromFFIType hs_bindgen_8e7ff2b3301fecfa_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_8e7ff2b3301fecfa_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the blend mode used for blit operations.
 --
@@ -2087,7 +2194,7 @@
   hs_bindgen_79a3cd778c72f8e2_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_GetSurfaceBlendMode@
 hs_bindgen_79a3cd778c72f8e2
@@ -2095,7 +2202,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
   -> IO BG.CBool
 hs_bindgen_79a3cd778c72f8e2 =
-  BG.fromFFIType hs_bindgen_79a3cd778c72f8e2_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_79a3cd778c72f8e2_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the blend mode used for blit operations.
 --
@@ -2125,7 +2234,7 @@
   hs_bindgen_2820354795314f60_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_SetSurfaceClipRect@
 hs_bindgen_2820354795314f60
@@ -2133,7 +2242,9 @@
   -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
   -> IO BG.CBool
 hs_bindgen_2820354795314f60 =
-  BG.fromFFIType hs_bindgen_2820354795314f60_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_2820354795314f60_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the clipping rectangle for a surface.
 --
@@ -2167,7 +2278,7 @@
   hs_bindgen_b910b24fe46481d6_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_GetSurfaceClipRect@
 hs_bindgen_b910b24fe46481d6
@@ -2175,7 +2286,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect
   -> IO BG.CBool
 hs_bindgen_b910b24fe46481d6 =
-  BG.fromFFIType hs_bindgen_b910b24fe46481d6_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_b910b24fe46481d6_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the clipping rectangle for a surface.
 --
@@ -2206,8 +2319,8 @@
 foreign import ccall safe "hs_bindgen_c88156522122ee98"
   hs_bindgen_c88156522122ee98_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
+    -> BG.CUInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_FlipSurface@
 hs_bindgen_c88156522122ee98
@@ -2215,7 +2328,9 @@
   -> SDL_FlipMode
   -> IO BG.CBool
 hs_bindgen_c88156522122ee98 =
-  BG.fromFFIType hs_bindgen_c88156522122ee98_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_c88156522122ee98_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Flip a surface vertically or horizontally.
 --
@@ -2242,7 +2357,7 @@
 foreign import ccall safe "hs_bindgen_a1316efcfef047d4"
   hs_bindgen_a1316efcfef047d4_base
     :: BG.Ptr BG.Void
-    -> Float
+    -> BG.CFloat
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_RotateSurface@
@@ -2251,7 +2366,9 @@
   -> BG.CFloat
   -> IO (BG.Ptr SDL_Surface)
 hs_bindgen_a1316efcfef047d4 =
-  BG.fromFFIType hs_bindgen_a1316efcfef047d4_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_a1316efcfef047d4_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Return a copy of a surface rotated clockwise a number of degrees.
 --
@@ -2291,7 +2408,8 @@
   :: BG.Ptr SDL_Surface
   -> IO (BG.Ptr SDL_Surface)
 hs_bindgen_6d95029f36464bfd =
-  BG.fromFFIType hs_bindgen_6d95029f36464bfd_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_6d95029f36464bfd_base (BG.toFFIType x0))
 
 -- | Creates a new surface identical to the existing surface.
 --
@@ -2320,9 +2438,9 @@
 foreign import ccall safe "hs_bindgen_face97baca762cbd"
   hs_bindgen_face97baca762cbd_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> BG.Int32
+    -> BG.CInt
+    -> BG.CInt
+    -> BG.CInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_ScaleSurface@
@@ -2333,7 +2451,18 @@
   -> SDL_ScaleMode
   -> IO (BG.Ptr SDL_Surface)
 hs_bindgen_face97baca762cbd =
-  BG.fromFFIType hs_bindgen_face97baca762cbd_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_face97baca762cbd_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Creates a new surface identical to the existing surface, scaled to the desired size.
 --
@@ -2372,7 +2501,7 @@
 foreign import ccall safe "hs_bindgen_73e1e8c13e580d46"
   hs_bindgen_73e1e8c13e580d46_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.Support.CUInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_ConvertSurface@
@@ -2381,7 +2510,9 @@
   -> SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
   -> IO (BG.Ptr SDL_Surface)
 hs_bindgen_73e1e8c13e580d46 =
-  BG.fromFFIType hs_bindgen_73e1e8c13e580d46_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_73e1e8c13e580d46_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Copy an existing surface to a new surface of the specified format.
 --
@@ -2416,10 +2547,10 @@
 foreign import ccall safe "hs_bindgen_e534837314acf47f"
   hs_bindgen_e534837314acf47f_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.Support.CUInt
     -> BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Word32
+    -> HsBindgen.Runtime.Support.CUInt
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_ConvertSurfaceAndColorspace@
@@ -2431,7 +2562,20 @@
   -> SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
   -> IO (BG.Ptr SDL_Surface)
 hs_bindgen_e534837314acf47f =
-  BG.fromFFIType hs_bindgen_e534837314acf47f_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_e534837314acf47f_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Copy an existing surface to a new surface of the specified format and colorspace.
 --
@@ -2476,15 +2620,15 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_ConvertPixels@
 foreign import ccall safe "hs_bindgen_435765f57837af03"
   hs_bindgen_435765f57837af03_base
-    :: BG.Int32
-    -> BG.Int32
-    -> BG.Word32
+    :: BG.CInt
+    -> BG.CInt
+    -> HsBindgen.Runtime.Support.CUInt
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Word32
+    -> BG.CInt
+    -> HsBindgen.Runtime.Support.CUInt
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_ConvertPixels@
 hs_bindgen_435765f57837af03
@@ -2498,7 +2642,26 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_435765f57837af03 =
-  BG.fromFFIType hs_bindgen_435765f57837af03_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                \x7 ->
+                  fmap
+                    BG.fromFFIType
+                    ( hs_bindgen_435765f57837af03_base
+                        (BG.toFFIType x0)
+                        (BG.toFFIType x1)
+                        (BG.toFFIType x2)
+                        (BG.toFFIType x3)
+                        (BG.toFFIType x4)
+                        (BG.toFFIType x5)
+                        (BG.toFFIType x6)
+                        (BG.toFFIType x7)
+                    )
 
 -- | Copy a block of pixels of one format to another format.
 --
@@ -2550,19 +2713,19 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_ConvertPixelsAndColorspace@
 foreign import ccall safe "hs_bindgen_c1b70c1ec2328788"
   hs_bindgen_c1b70c1ec2328788_base
-    :: BG.Int32
-    -> BG.Int32
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Word32
+    :: BG.CInt
+    -> BG.CInt
+    -> HsBindgen.Runtime.Support.CUInt
+    -> HsBindgen.Runtime.Support.CUInt
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Word32
+    -> BG.CInt
+    -> HsBindgen.Runtime.Support.CUInt
+    -> HsBindgen.Runtime.Support.CUInt
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_ConvertPixelsAndColorspace@
 hs_bindgen_c1b70c1ec2328788
@@ -2580,7 +2743,34 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_c1b70c1ec2328788 =
-  BG.fromFFIType hs_bindgen_c1b70c1ec2328788_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                \x7 ->
+                  \x8 ->
+                    \x9 ->
+                      \x10 ->
+                        \x11 ->
+                          fmap
+                            BG.fromFFIType
+                            ( hs_bindgen_c1b70c1ec2328788_base
+                                (BG.toFFIType x0)
+                                (BG.toFFIType x1)
+                                (BG.toFFIType x2)
+                                (BG.toFFIType x3)
+                                (BG.toFFIType x4)
+                                (BG.toFFIType x5)
+                                (BG.toFFIType x6)
+                                (BG.toFFIType x7)
+                                (BG.toFFIType x8)
+                                (BG.toFFIType x9)
+                                (BG.toFFIType x10)
+                                (BG.toFFIType x11)
+                            )
 
 -- | Copy a block of pixels of one format and colorspace to another format and colorspace.
 --
@@ -2649,16 +2839,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_PremultiplyAlpha@
 foreign import ccall safe "hs_bindgen_8e4daa78971d0cb7"
   hs_bindgen_8e4daa78971d0cb7_base
-    :: BG.Int32
-    -> BG.Int32
-    -> BG.Word32
+    :: BG.CInt
+    -> BG.CInt
+    -> HsBindgen.Runtime.Support.CUInt
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Word32
+    -> BG.CInt
+    -> HsBindgen.Runtime.Support.CUInt
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CInt
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_PremultiplyAlpha@
 hs_bindgen_8e4daa78971d0cb7
@@ -2673,7 +2863,28 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_8e4daa78971d0cb7 =
-  BG.fromFFIType hs_bindgen_8e4daa78971d0cb7_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                \x7 ->
+                  \x8 ->
+                    fmap
+                      BG.fromFFIType
+                      ( hs_bindgen_8e4daa78971d0cb7_base
+                          (BG.toFFIType x0)
+                          (BG.toFFIType x1)
+                          (BG.toFFIType x2)
+                          (BG.toFFIType x3)
+                          (BG.toFFIType x4)
+                          (BG.toFFIType x5)
+                          (BG.toFFIType x6)
+                          (BG.toFFIType x7)
+                          (BG.toFFIType x8)
+                      )
 
 -- | Premultiply the alpha on a block of pixels.
 --
@@ -2730,8 +2941,8 @@
 foreign import ccall safe "hs_bindgen_56aa84cbef3d8f40"
   hs_bindgen_56aa84cbef3d8f40_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_PremultiplySurfaceAlpha@
 hs_bindgen_56aa84cbef3d8f40
@@ -2739,7 +2950,9 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_56aa84cbef3d8f40 =
-  BG.fromFFIType hs_bindgen_56aa84cbef3d8f40_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_56aa84cbef3d8f40_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Premultiply the alpha in a surface.
 --
@@ -2769,11 +2982,11 @@
 foreign import ccall safe "hs_bindgen_e97c19a44df98438"
   hs_bindgen_e97c19a44df98438_base
     :: BG.Ptr BG.Void
-    -> Float
-    -> Float
-    -> Float
-    -> Float
-    -> IO BG.Word8
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.CFloat
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_ClearSurface@
 hs_bindgen_e97c19a44df98438
@@ -2784,7 +2997,20 @@
   -> BG.CFloat
   -> IO BG.CBool
 hs_bindgen_e97c19a44df98438 =
-  BG.fromFFIType hs_bindgen_e97c19a44df98438_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_e97c19a44df98438_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Clear a surface with a specific color, with floating point precision.
 --
@@ -2828,8 +3054,8 @@
   hs_bindgen_5dccf89603882fe7_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_FillSurfaceRect@
 hs_bindgen_5dccf89603882fe7
@@ -2838,7 +3064,12 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_5dccf89603882fe7 =
-  BG.fromFFIType hs_bindgen_5dccf89603882fe7_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_5dccf89603882fe7_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Perform a fast fill of a rectangle with a specific color.
 --
@@ -2876,9 +3107,9 @@
   hs_bindgen_a2b5b19e2436d28a_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Word32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_FillSurfaceRects@
 hs_bindgen_a2b5b19e2436d28a
@@ -2888,7 +3119,18 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_a2b5b19e2436d28a =
-  BG.fromFFIType hs_bindgen_a2b5b19e2436d28a_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_a2b5b19e2436d28a_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Perform a fast fill of a set of rectangles with a specific color.
 --
@@ -2932,7 +3174,7 @@
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_BlitSurface@
 hs_bindgen_b1a30c4f5f8d91a8
@@ -2942,7 +3184,18 @@
   -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
   -> IO BG.CBool
 hs_bindgen_b1a30c4f5f8d91a8 =
-  BG.fromFFIType hs_bindgen_b1a30c4f5f8d91a8_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_b1a30c4f5f8d91a8_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Performs a fast blit from the source surface to the destination surface with clipping.
 --
@@ -3028,7 +3281,7 @@
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_BlitSurfaceUnchecked@
 hs_bindgen_f01f13adea578bc6
@@ -3038,7 +3291,18 @@
   -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
   -> IO BG.CBool
 hs_bindgen_f01f13adea578bc6 =
-  BG.fromFFIType hs_bindgen_f01f13adea578bc6_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_f01f13adea578bc6_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Perform low-level surface blitting only.
 --
@@ -3081,8 +3345,8 @@
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_BlitSurfaceScaled@
 hs_bindgen_ff01194286dad7f2
@@ -3093,7 +3357,20 @@
   -> SDL_ScaleMode
   -> IO BG.CBool
 hs_bindgen_ff01194286dad7f2 =
-  BG.fromFFIType hs_bindgen_ff01194286dad7f2_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_ff01194286dad7f2_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Perform a scaled blit to a destination surface, which may be of a different format.
 --
@@ -3137,8 +3414,8 @@
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_BlitSurfaceUncheckedScaled@
 hs_bindgen_203cef09fdf11016
@@ -3149,7 +3426,20 @@
   -> SDL_ScaleMode
   -> IO BG.CBool
 hs_bindgen_203cef09fdf11016 =
-  BG.fromFFIType hs_bindgen_203cef09fdf11016_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_203cef09fdf11016_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Perform low-level surface scaled blitting only.
 --
@@ -3196,8 +3486,8 @@
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_StretchSurface@
 hs_bindgen_3f0e13150dff4407
@@ -3208,7 +3498,20 @@
   -> SDL_ScaleMode
   -> IO BG.CBool
 hs_bindgen_3f0e13150dff4407 =
-  BG.fromFFIType hs_bindgen_3f0e13150dff4407_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_3f0e13150dff4407_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Perform a stretched pixel copy from one surface to another.
 --
@@ -3252,7 +3555,7 @@
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_BlitSurfaceTiled@
 hs_bindgen_d87d2c7a0fc3e08c
@@ -3262,7 +3565,18 @@
   -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
   -> IO BG.CBool
 hs_bindgen_d87d2c7a0fc3e08c =
-  BG.fromFFIType hs_bindgen_d87d2c7a0fc3e08c_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_d87d2c7a0fc3e08c_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Perform a tiled blit to a destination surface, which may be of a different format.
 --
@@ -3302,11 +3616,11 @@
   hs_bindgen_a0b5a4d660b97157_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> Float
-    -> BG.Int32
+    -> BG.CFloat
+    -> BG.CInt
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_BlitSurfaceTiledWithScale@
 hs_bindgen_a0b5a4d660b97157
@@ -3318,7 +3632,22 @@
   -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
   -> IO BG.CBool
 hs_bindgen_a0b5a4d660b97157 =
-  BG.fromFFIType hs_bindgen_a0b5a4d660b97157_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_a0b5a4d660b97157_base
+                    (BG.toFFIType x0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                    (BG.toFFIType x4)
+                    (BG.toFFIType x5)
+                )
 
 -- | Perform a scaled and tiled blit to a destination surface, which may be of a different format.
 --
@@ -3367,15 +3696,15 @@
   hs_bindgen_c841a6c05cf5fdff_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> BG.Int32
-    -> BG.Int32
-    -> Float
-    -> BG.Int32
+    -> BG.CInt
+    -> BG.CInt
+    -> BG.CInt
+    -> BG.CInt
+    -> BG.CFloat
+    -> BG.CInt
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_BlitSurface9Grid@
 hs_bindgen_c841a6c05cf5fdff
@@ -3391,7 +3720,30 @@
   -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
   -> IO BG.CBool
 hs_bindgen_c841a6c05cf5fdff =
-  BG.fromFFIType hs_bindgen_c841a6c05cf5fdff_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                \x7 ->
+                  \x8 ->
+                    \x9 ->
+                      fmap
+                        BG.fromFFIType
+                        ( hs_bindgen_c841a6c05cf5fdff_base
+                            (BG.toFFIType x0)
+                            (BG.toFFIType x1)
+                            (BG.toFFIType x2)
+                            (BG.toFFIType x3)
+                            (BG.toFFIType x4)
+                            (BG.toFFIType x5)
+                            (BG.toFFIType x6)
+                            (BG.toFFIType x7)
+                            (BG.toFFIType x8)
+                            (BG.toFFIType x9)
+                        )
 
 -- | Perform a scaled blit using the 9-grid algorithm to a destination surface, which may be of a different format.
 --
@@ -3454,10 +3806,10 @@
 foreign import ccall safe "hs_bindgen_c74008884f7b6019"
   hs_bindgen_c74008884f7b6019_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> BG.Word8
-    -> BG.Word8
-    -> IO BG.Word32
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_MapSurfaceRGB@
 hs_bindgen_c74008884f7b6019
@@ -3467,7 +3819,18 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
 hs_bindgen_c74008884f7b6019 =
-  BG.fromFFIType hs_bindgen_c74008884f7b6019_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_c74008884f7b6019_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Map an RGB triple to an opaque pixel value for a surface.
 --
@@ -3512,11 +3875,11 @@
 foreign import ccall safe "hs_bindgen_d299991f35295874"
   hs_bindgen_d299991f35295874_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> BG.Word8
-    -> BG.Word8
-    -> BG.Word8
-    -> IO BG.Word32
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_MapSurfaceRGBA@
 hs_bindgen_d299991f35295874
@@ -3527,7 +3890,20 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
 hs_bindgen_d299991f35295874 =
-  BG.fromFFIType hs_bindgen_d299991f35295874_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_d299991f35295874_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Map an RGBA quadruple to a pixel value for a surface.
 --
@@ -3576,13 +3952,13 @@
 foreign import ccall safe "hs_bindgen_a30b6c841f82ebcc"
   hs_bindgen_a30b6c841f82ebcc_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
+    -> BG.CInt
+    -> BG.CInt
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_ReadSurfacePixel@
 hs_bindgen_a30b6c841f82ebcc
@@ -3595,7 +3971,24 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO BG.CBool
 hs_bindgen_a30b6c841f82ebcc =
-  BG.fromFFIType hs_bindgen_a30b6c841f82ebcc_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                fmap
+                  BG.fromFFIType
+                  ( hs_bindgen_a30b6c841f82ebcc_base
+                      (BG.toFFIType x0)
+                      (BG.toFFIType x1)
+                      (BG.toFFIType x2)
+                      (BG.toFFIType x3)
+                      (BG.toFFIType x4)
+                      (BG.toFFIType x5)
+                      (BG.toFFIType x6)
+                  )
 
 -- | Retrieves a single pixel from a surface.
 --
@@ -3646,13 +4039,13 @@
 foreign import ccall safe "hs_bindgen_1a263d49fd0125f6"
   hs_bindgen_1a263d49fd0125f6_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
+    -> BG.CInt
+    -> BG.CInt
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_ReadSurfacePixelFloat@
 hs_bindgen_1a263d49fd0125f6
@@ -3665,7 +4058,24 @@
   -> BG.Ptr BG.CFloat
   -> IO BG.CBool
 hs_bindgen_1a263d49fd0125f6 =
-  BG.fromFFIType hs_bindgen_1a263d49fd0125f6_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                fmap
+                  BG.fromFFIType
+                  ( hs_bindgen_1a263d49fd0125f6_base
+                      (BG.toFFIType x0)
+                      (BG.toFFIType x1)
+                      (BG.toFFIType x2)
+                      (BG.toFFIType x3)
+                      (BG.toFFIType x4)
+                      (BG.toFFIType x5)
+                      (BG.toFFIType x6)
+                  )
 
 -- | Retrieves a single pixel from a surface.
 --
@@ -3715,13 +4125,13 @@
 foreign import ccall safe "hs_bindgen_51ee7af8b74364b9"
   hs_bindgen_51ee7af8b74364b9_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> BG.Word8
-    -> BG.Word8
-    -> BG.Word8
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CInt
+    -> BG.CInt
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_WriteSurfacePixel@
 hs_bindgen_51ee7af8b74364b9
@@ -3734,7 +4144,24 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO BG.CBool
 hs_bindgen_51ee7af8b74364b9 =
-  BG.fromFFIType hs_bindgen_51ee7af8b74364b9_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                fmap
+                  BG.fromFFIType
+                  ( hs_bindgen_51ee7af8b74364b9_base
+                      (BG.toFFIType x0)
+                      (BG.toFFIType x1)
+                      (BG.toFFIType x2)
+                      (BG.toFFIType x3)
+                      (BG.toFFIType x4)
+                      (BG.toFFIType x5)
+                      (BG.toFFIType x6)
+                  )
 
 -- | Writes a single pixel to a surface.
 --
@@ -3785,13 +4212,13 @@
 foreign import ccall safe "hs_bindgen_0a72c0432b672135"
   hs_bindgen_0a72c0432b672135_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> Float
-    -> Float
-    -> Float
-    -> Float
-    -> IO BG.Word8
+    -> BG.CInt
+    -> BG.CInt
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.CFloat
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Safe_SDL_WriteSurfacePixelFloat@
 hs_bindgen_0a72c0432b672135
@@ -3804,7 +4231,24 @@
   -> BG.CFloat
   -> IO BG.CBool
 hs_bindgen_0a72c0432b672135 =
-  BG.fromFFIType hs_bindgen_0a72c0432b672135_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                fmap
+                  BG.fromFFIType
+                  ( hs_bindgen_0a72c0432b672135_base
+                      (BG.toFFIType x0)
+                      (BG.toFFIType x1)
+                      (BG.toFFIType x2)
+                      (BG.toFFIType x3)
+                      (BG.toFFIType x4)
+                      (BG.toFFIType x5)
+                      (BG.toFFIType x6)
+                  )
 
 -- | Writes a single pixel to a surface.
 --
diff --git a/src/SDL3/Sys/Bindgen/Surface/Unsafe.hs b/src/SDL3/Sys/Bindgen/Surface/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Surface/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Surface/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Surface.Unsafe (
@@ -71,7 +73,11 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Blendmode qualified
@@ -84,7 +90,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_surface.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_surface.h>"
          , "SDL_Surface *hs_bindgen_168e356f6cfde2ca ("
          , "  signed int arg1,"
          , "  signed int arg2,"
@@ -677,9 +687,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_CreateSurface@
 foreign import ccall unsafe "hs_bindgen_168e356f6cfde2ca"
   hs_bindgen_168e356f6cfde2ca_base
-    :: BG.Int32
-    -> BG.Int32
-    -> BG.Word32
+    :: BG.CInt
+    -> BG.CInt
+    -> HsBindgen.Runtime.Support.CUInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_CreateSurface@
@@ -689,7 +699,12 @@
   -> SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
   -> IO (BG.Ptr SDL_Surface)
 hs_bindgen_168e356f6cfde2ca =
-  BG.fromFFIType hs_bindgen_168e356f6cfde2ca_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_168e356f6cfde2ca_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Allocate a new surface with a specific pixel format.
 --
@@ -723,11 +738,11 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_CreateSurfaceFrom@
 foreign import ccall unsafe "hs_bindgen_19204ffb79c10370"
   hs_bindgen_19204ffb79c10370_base
-    :: BG.Int32
-    -> BG.Int32
-    -> BG.Word32
+    :: BG.CInt
+    -> BG.CInt
+    -> HsBindgen.Runtime.Support.CUInt
     -> BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_CreateSurfaceFrom@
@@ -739,7 +754,20 @@
   -> BG.CInt
   -> IO (BG.Ptr SDL_Surface)
 hs_bindgen_19204ffb79c10370 =
-  BG.fromFFIType hs_bindgen_19204ffb79c10370_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_19204ffb79c10370_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Allocate a new surface with a specific pixel format and existing pixel data.
 --
@@ -793,7 +821,8 @@
   :: BG.Ptr SDL_Surface
   -> IO ()
 hs_bindgen_173baf44c4ee5552 =
-  BG.fromFFIType hs_bindgen_173baf44c4ee5552_base
+  \x0 ->
+    hs_bindgen_173baf44c4ee5552_base (BG.toFFIType x0)
 
 -- | Free a surface.
 --
@@ -818,14 +847,15 @@
 foreign import ccall unsafe "hs_bindgen_104a480f6f0ca65f"
   hs_bindgen_104a480f6f0ca65f_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_GetSurfaceProperties@
 hs_bindgen_104a480f6f0ca65f
   :: BG.Ptr SDL_Surface
   -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
 hs_bindgen_104a480f6f0ca65f =
-  BG.fromFFIType hs_bindgen_104a480f6f0ca65f_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_104a480f6f0ca65f_base (BG.toFFIType x0))
 
 -- | Get the properties associated with a surface.
 --
@@ -864,8 +894,8 @@
 foreign import ccall unsafe "hs_bindgen_0511900fd59c0e54"
   hs_bindgen_0511900fd59c0e54_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.Support.CUInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_SetSurfaceColorspace@
 hs_bindgen_0511900fd59c0e54
@@ -873,7 +903,9 @@
   -> SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
   -> IO BG.CBool
 hs_bindgen_0511900fd59c0e54 =
-  BG.fromFFIType hs_bindgen_0511900fd59c0e54_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_0511900fd59c0e54_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the colorspace used by a surface.
 --
@@ -905,14 +937,15 @@
 foreign import ccall unsafe "hs_bindgen_e144267d4a5dc8c1"
   hs_bindgen_e144267d4a5dc8c1_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.Support.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_GetSurfaceColorspace@
 hs_bindgen_e144267d4a5dc8c1
   :: BG.Ptr SDL_Surface
   -> IO SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
 hs_bindgen_e144267d4a5dc8c1 =
-  BG.fromFFIType hs_bindgen_e144267d4a5dc8c1_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_e144267d4a5dc8c1_base (BG.toFFIType x0))
 
 -- | Get the colorspace used by a surface.
 --
@@ -947,7 +980,8 @@
   :: BG.Ptr SDL_Surface
   -> IO (BG.Ptr SDL3.Sys.Bindgen.Pixels.SDL_Palette)
 hs_bindgen_518323a2443a645c =
-  BG.fromFFIType hs_bindgen_518323a2443a645c_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_518323a2443a645c_base (BG.toFFIType x0))
 
 -- | Create a palette and associate it with a surface.
 --
@@ -980,7 +1014,7 @@
   hs_bindgen_6cb3893d72b38425_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_SetSurfacePalette@
 hs_bindgen_6cb3893d72b38425
@@ -988,7 +1022,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Pixels.SDL_Palette
   -> IO BG.CBool
 hs_bindgen_6cb3893d72b38425 =
-  BG.fromFFIType hs_bindgen_6cb3893d72b38425_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_6cb3893d72b38425_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the palette used by a surface.
 --
@@ -1028,7 +1064,8 @@
   :: BG.Ptr SDL_Surface
   -> IO (BG.Ptr SDL3.Sys.Bindgen.Pixels.SDL_Palette)
 hs_bindgen_c36a6adcce04e3d9 =
-  BG.fromFFIType hs_bindgen_c36a6adcce04e3d9_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c36a6adcce04e3d9_base (BG.toFFIType x0))
 
 -- | Get the palette used by a surface.
 --
@@ -1054,7 +1091,7 @@
   hs_bindgen_36366ea481866b40_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_AddSurfaceAlternateImage@
 hs_bindgen_36366ea481866b40
@@ -1062,7 +1099,9 @@
   -> BG.Ptr SDL_Surface
   -> IO BG.CBool
 hs_bindgen_36366ea481866b40 =
-  BG.fromFFIType hs_bindgen_36366ea481866b40_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_36366ea481866b40_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Add an alternate version of a surface.
 --
@@ -1096,14 +1135,15 @@
 foreign import ccall unsafe "hs_bindgen_c8c9d6b2ea4d4292"
   hs_bindgen_c8c9d6b2ea4d4292_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_SurfaceHasAlternateImages@
 hs_bindgen_c8c9d6b2ea4d4292
   :: BG.Ptr SDL_Surface
   -> IO BG.CBool
 hs_bindgen_c8c9d6b2ea4d4292 =
-  BG.fromFFIType hs_bindgen_c8c9d6b2ea4d4292_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c8c9d6b2ea4d4292_base (BG.toFFIType x0))
 
 -- | Return whether a surface has alternate versions available.
 --
@@ -1138,7 +1178,9 @@
   -> BG.Ptr BG.CInt
   -> IO (BG.Ptr (BG.Ptr SDL_Surface))
 hs_bindgen_b3d55dcc42d5db12 =
-  BG.fromFFIType hs_bindgen_b3d55dcc42d5db12_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_b3d55dcc42d5db12_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get an array including all versions of a surface.
 --
@@ -1178,7 +1220,8 @@
   :: BG.Ptr SDL_Surface
   -> IO ()
 hs_bindgen_1adedb2719efa1bf =
-  BG.fromFFIType hs_bindgen_1adedb2719efa1bf_base
+  \x0 ->
+    hs_bindgen_1adedb2719efa1bf_base (BG.toFFIType x0)
 
 -- | Remove all alternate versions of a surface.
 --
@@ -1204,14 +1247,15 @@
 foreign import ccall unsafe "hs_bindgen_8363af1ae03d45b9"
   hs_bindgen_8363af1ae03d45b9_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_LockSurface@
 hs_bindgen_8363af1ae03d45b9
   :: BG.Ptr SDL_Surface
   -> IO BG.CBool
 hs_bindgen_8363af1ae03d45b9 =
-  BG.fromFFIType hs_bindgen_8363af1ae03d45b9_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_8363af1ae03d45b9_base (BG.toFFIType x0))
 
 -- | Set up a surface for directly accessing the pixels.
 --
@@ -1247,7 +1291,8 @@
   :: BG.Ptr SDL_Surface
   -> IO ()
 hs_bindgen_0b94cbec8aca2abc =
-  BG.fromFFIType hs_bindgen_0b94cbec8aca2abc_base
+  \x0 ->
+    hs_bindgen_0b94cbec8aca2abc_base (BG.toFFIType x0)
 
 -- | Release a surface after directly accessing the pixels.
 --
@@ -1270,7 +1315,7 @@
 foreign import ccall unsafe "hs_bindgen_1a1549d61e2d7c6f"
   hs_bindgen_1a1549d61e2d7c6f_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
+    -> BG.CBool
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_LoadSurface_IO@
@@ -1279,7 +1324,9 @@
   -> BG.CBool
   -> IO (BG.Ptr SDL_Surface)
 hs_bindgen_1a1549d61e2d7c6f =
-  BG.fromFFIType hs_bindgen_1a1549d61e2d7c6f_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_1a1549d61e2d7c6f_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Load a BMP or PNG image from a seekable SDL data stream.
 --
@@ -1317,7 +1364,8 @@
   :: PtrConst.PtrConst BG.CChar
   -> IO (BG.Ptr SDL_Surface)
 hs_bindgen_84c82bda97a82d45 =
-  BG.fromFFIType hs_bindgen_84c82bda97a82d45_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_84c82bda97a82d45_base (BG.toFFIType x0))
 
 -- | Load a BMP or PNG image from a file.
 --
@@ -1344,7 +1392,7 @@
 foreign import ccall unsafe "hs_bindgen_04dc7704680e62ca"
   hs_bindgen_04dc7704680e62ca_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
+    -> BG.CBool
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_LoadBMP_IO@
@@ -1353,7 +1401,9 @@
   -> BG.CBool
   -> IO (BG.Ptr SDL_Surface)
 hs_bindgen_04dc7704680e62ca =
-  BG.fromFFIType hs_bindgen_04dc7704680e62ca_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_04dc7704680e62ca_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Load a BMP image from a seekable SDL data stream.
 --
@@ -1391,7 +1441,8 @@
   :: PtrConst.PtrConst BG.CChar
   -> IO (BG.Ptr SDL_Surface)
 hs_bindgen_fade244cdadaaa01 =
-  BG.fromFFIType hs_bindgen_fade244cdadaaa01_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_fade244cdadaaa01_base (BG.toFFIType x0))
 
 -- | Load a BMP image from a file.
 --
@@ -1419,8 +1470,8 @@
   hs_bindgen_9c98f1ae4256924d_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_SaveBMP_IO@
 hs_bindgen_9c98f1ae4256924d
@@ -1429,7 +1480,12 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_9c98f1ae4256924d =
-  BG.fromFFIType hs_bindgen_9c98f1ae4256924d_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_9c98f1ae4256924d_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Save a surface to a seekable SDL data stream in BMP format.
 --
@@ -1465,7 +1521,7 @@
   hs_bindgen_66fb79ef3bca90df_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_SaveBMP@
 hs_bindgen_66fb79ef3bca90df
@@ -1473,7 +1529,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_66fb79ef3bca90df =
-  BG.fromFFIType hs_bindgen_66fb79ef3bca90df_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_66fb79ef3bca90df_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Save a surface to a file in BMP format.
 --
@@ -1504,7 +1562,7 @@
 foreign import ccall unsafe "hs_bindgen_7160fe58e1c51f22"
   hs_bindgen_7160fe58e1c51f22_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
+    -> BG.CBool
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_LoadPNG_IO@
@@ -1513,7 +1571,9 @@
   -> BG.CBool
   -> IO (BG.Ptr SDL_Surface)
 hs_bindgen_7160fe58e1c51f22 =
-  BG.fromFFIType hs_bindgen_7160fe58e1c51f22_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_7160fe58e1c51f22_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Load a PNG image from a seekable SDL data stream.
 --
@@ -1553,7 +1613,8 @@
   :: PtrConst.PtrConst BG.CChar
   -> IO (BG.Ptr SDL_Surface)
 hs_bindgen_bc316d886d9c3957 =
-  BG.fromFFIType hs_bindgen_bc316d886d9c3957_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_bc316d886d9c3957_base (BG.toFFIType x0))
 
 -- | Load a PNG image from a file.
 --
@@ -1583,8 +1644,8 @@
   hs_bindgen_9c8e4c9fc901ee28_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_SavePNG_IO@
 hs_bindgen_9c8e4c9fc901ee28
@@ -1593,7 +1654,12 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_9c8e4c9fc901ee28 =
-  BG.fromFFIType hs_bindgen_9c8e4c9fc901ee28_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_9c8e4c9fc901ee28_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Save a surface to a seekable SDL data stream in PNG format.
 --
@@ -1627,7 +1693,7 @@
   hs_bindgen_759469fef46a8cd4_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_SavePNG@
 hs_bindgen_759469fef46a8cd4
@@ -1635,7 +1701,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_759469fef46a8cd4 =
-  BG.fromFFIType hs_bindgen_759469fef46a8cd4_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_759469fef46a8cd4_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Save a surface to a file in PNG format.
 --
@@ -1664,8 +1732,8 @@
 foreign import ccall unsafe "hs_bindgen_5d1b864a1323d92d"
   hs_bindgen_5d1b864a1323d92d_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_SetSurfaceRLE@
 hs_bindgen_5d1b864a1323d92d
@@ -1673,7 +1741,9 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_5d1b864a1323d92d =
-  BG.fromFFIType hs_bindgen_5d1b864a1323d92d_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_5d1b864a1323d92d_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the RLE acceleration hint for a surface.
 --
@@ -1704,14 +1774,15 @@
 foreign import ccall unsafe "hs_bindgen_b51ce9068c82d3d0"
   hs_bindgen_b51ce9068c82d3d0_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_SurfaceHasRLE@
 hs_bindgen_b51ce9068c82d3d0
   :: BG.Ptr SDL_Surface
   -> IO BG.CBool
 hs_bindgen_b51ce9068c82d3d0 =
-  BG.fromFFIType hs_bindgen_b51ce9068c82d3d0_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_b51ce9068c82d3d0_base (BG.toFFIType x0))
 
 -- | Returns whether the surface is RLE enabled.
 --
@@ -1738,9 +1809,9 @@
 foreign import ccall unsafe "hs_bindgen_13efdbaff73dc30f"
   hs_bindgen_13efdbaff73dc30f_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> BG.Word32
-    -> IO BG.Word8
+    -> BG.CBool
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_SetSurfaceColorKey@
 hs_bindgen_13efdbaff73dc30f
@@ -1749,7 +1820,12 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_13efdbaff73dc30f =
-  BG.fromFFIType hs_bindgen_13efdbaff73dc30f_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_13efdbaff73dc30f_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set the color key (transparent pixel) in a surface.
 --
@@ -1786,14 +1862,15 @@
 foreign import ccall unsafe "hs_bindgen_998ae6f993d45bac"
   hs_bindgen_998ae6f993d45bac_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_SurfaceHasColorKey@
 hs_bindgen_998ae6f993d45bac
   :: BG.Ptr SDL_Surface
   -> IO BG.CBool
 hs_bindgen_998ae6f993d45bac =
-  BG.fromFFIType hs_bindgen_998ae6f993d45bac_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_998ae6f993d45bac_base (BG.toFFIType x0))
 
 -- | Returns whether the surface has a color key.
 --
@@ -1821,7 +1898,7 @@
   hs_bindgen_463737aa98969701_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_GetSurfaceColorKey@
 hs_bindgen_463737aa98969701
@@ -1829,7 +1906,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_463737aa98969701 =
-  BG.fromFFIType hs_bindgen_463737aa98969701_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_463737aa98969701_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the color key (transparent pixel) for a surface.
 --
@@ -1862,10 +1941,10 @@
 foreign import ccall unsafe "hs_bindgen_5802144e4d11fa38"
   hs_bindgen_5802144e4d11fa38_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> BG.Word8
-    -> BG.Word8
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_SetSurfaceColorMod@
 hs_bindgen_5802144e4d11fa38
@@ -1875,7 +1954,18 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO BG.CBool
 hs_bindgen_5802144e4d11fa38 =
-  BG.fromFFIType hs_bindgen_5802144e4d11fa38_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_5802144e4d11fa38_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Set an additional color value multiplied into blit operations.
 --
@@ -1919,7 +2009,7 @@
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_GetSurfaceColorMod@
 hs_bindgen_8f67dce9db98e6f9
@@ -1929,7 +2019,18 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO BG.CBool
 hs_bindgen_8f67dce9db98e6f9 =
-  BG.fromFFIType hs_bindgen_8f67dce9db98e6f9_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_8f67dce9db98e6f9_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Get the additional color value multiplied into blit operations.
 --
@@ -1966,8 +2067,8 @@
 foreign import ccall unsafe "hs_bindgen_2f27871d133fe193"
   hs_bindgen_2f27871d133fe193_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_SetSurfaceAlphaMod@
 hs_bindgen_2f27871d133fe193
@@ -1975,7 +2076,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO BG.CBool
 hs_bindgen_2f27871d133fe193 =
-  BG.fromFFIType hs_bindgen_2f27871d133fe193_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_2f27871d133fe193_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set an additional alpha value used in blit operations.
 --
@@ -2009,7 +2112,7 @@
   hs_bindgen_62e7ffa57cc86c89_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_GetSurfaceAlphaMod@
 hs_bindgen_62e7ffa57cc86c89
@@ -2017,7 +2120,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO BG.CBool
 hs_bindgen_62e7ffa57cc86c89 =
-  BG.fromFFIType hs_bindgen_62e7ffa57cc86c89_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_62e7ffa57cc86c89_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the additional alpha value used in blit operations.
 --
@@ -2046,8 +2151,8 @@
 foreign import ccall unsafe "hs_bindgen_31b5f1226bf51118"
   hs_bindgen_31b5f1226bf51118_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_SetSurfaceBlendMode@
 hs_bindgen_31b5f1226bf51118
@@ -2055,7 +2160,9 @@
   -> SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
   -> IO BG.CBool
 hs_bindgen_31b5f1226bf51118 =
-  BG.fromFFIType hs_bindgen_31b5f1226bf51118_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_31b5f1226bf51118_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the blend mode used for blit operations.
 --
@@ -2087,7 +2194,7 @@
   hs_bindgen_e69bee46110b6faa_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_GetSurfaceBlendMode@
 hs_bindgen_e69bee46110b6faa
@@ -2095,7 +2202,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Blendmode.SDL_BlendMode
   -> IO BG.CBool
 hs_bindgen_e69bee46110b6faa =
-  BG.fromFFIType hs_bindgen_e69bee46110b6faa_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_e69bee46110b6faa_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the blend mode used for blit operations.
 --
@@ -2125,7 +2234,7 @@
   hs_bindgen_d3f690ca2bc82289_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_SetSurfaceClipRect@
 hs_bindgen_d3f690ca2bc82289
@@ -2133,7 +2242,9 @@
   -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
   -> IO BG.CBool
 hs_bindgen_d3f690ca2bc82289 =
-  BG.fromFFIType hs_bindgen_d3f690ca2bc82289_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_d3f690ca2bc82289_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the clipping rectangle for a surface.
 --
@@ -2167,7 +2278,7 @@
   hs_bindgen_510cbf12ad718ad5_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_GetSurfaceClipRect@
 hs_bindgen_510cbf12ad718ad5
@@ -2175,7 +2286,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect
   -> IO BG.CBool
 hs_bindgen_510cbf12ad718ad5 =
-  BG.fromFFIType hs_bindgen_510cbf12ad718ad5_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_510cbf12ad718ad5_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the clipping rectangle for a surface.
 --
@@ -2206,8 +2319,8 @@
 foreign import ccall unsafe "hs_bindgen_c9050e1a6dbcc389"
   hs_bindgen_c9050e1a6dbcc389_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
+    -> BG.CUInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_FlipSurface@
 hs_bindgen_c9050e1a6dbcc389
@@ -2215,7 +2328,9 @@
   -> SDL_FlipMode
   -> IO BG.CBool
 hs_bindgen_c9050e1a6dbcc389 =
-  BG.fromFFIType hs_bindgen_c9050e1a6dbcc389_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_c9050e1a6dbcc389_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Flip a surface vertically or horizontally.
 --
@@ -2242,7 +2357,7 @@
 foreign import ccall unsafe "hs_bindgen_b68c60a70d17f528"
   hs_bindgen_b68c60a70d17f528_base
     :: BG.Ptr BG.Void
-    -> Float
+    -> BG.CFloat
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_RotateSurface@
@@ -2251,7 +2366,9 @@
   -> BG.CFloat
   -> IO (BG.Ptr SDL_Surface)
 hs_bindgen_b68c60a70d17f528 =
-  BG.fromFFIType hs_bindgen_b68c60a70d17f528_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_b68c60a70d17f528_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Return a copy of a surface rotated clockwise a number of degrees.
 --
@@ -2291,7 +2408,8 @@
   :: BG.Ptr SDL_Surface
   -> IO (BG.Ptr SDL_Surface)
 hs_bindgen_fb5b3c5560c73662 =
-  BG.fromFFIType hs_bindgen_fb5b3c5560c73662_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_fb5b3c5560c73662_base (BG.toFFIType x0))
 
 -- | Creates a new surface identical to the existing surface.
 --
@@ -2320,9 +2438,9 @@
 foreign import ccall unsafe "hs_bindgen_302fe5f6d166cef5"
   hs_bindgen_302fe5f6d166cef5_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> BG.Int32
+    -> BG.CInt
+    -> BG.CInt
+    -> BG.CInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_ScaleSurface@
@@ -2333,7 +2451,18 @@
   -> SDL_ScaleMode
   -> IO (BG.Ptr SDL_Surface)
 hs_bindgen_302fe5f6d166cef5 =
-  BG.fromFFIType hs_bindgen_302fe5f6d166cef5_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_302fe5f6d166cef5_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Creates a new surface identical to the existing surface, scaled to the desired size.
 --
@@ -2372,7 +2501,7 @@
 foreign import ccall unsafe "hs_bindgen_2d38a11d9ed40ec3"
   hs_bindgen_2d38a11d9ed40ec3_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.Support.CUInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_ConvertSurface@
@@ -2381,7 +2510,9 @@
   -> SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
   -> IO (BG.Ptr SDL_Surface)
 hs_bindgen_2d38a11d9ed40ec3 =
-  BG.fromFFIType hs_bindgen_2d38a11d9ed40ec3_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_2d38a11d9ed40ec3_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Copy an existing surface to a new surface of the specified format.
 --
@@ -2416,10 +2547,10 @@
 foreign import ccall unsafe "hs_bindgen_589af8fb0fd3b451"
   hs_bindgen_589af8fb0fd3b451_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.Support.CUInt
     -> BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Word32
+    -> HsBindgen.Runtime.Support.CUInt
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_ConvertSurfaceAndColorspace@
@@ -2431,7 +2562,20 @@
   -> SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
   -> IO (BG.Ptr SDL_Surface)
 hs_bindgen_589af8fb0fd3b451 =
-  BG.fromFFIType hs_bindgen_589af8fb0fd3b451_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_589af8fb0fd3b451_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Copy an existing surface to a new surface of the specified format and colorspace.
 --
@@ -2476,15 +2620,15 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_ConvertPixels@
 foreign import ccall unsafe "hs_bindgen_c4ac87b53bb7fbaa"
   hs_bindgen_c4ac87b53bb7fbaa_base
-    :: BG.Int32
-    -> BG.Int32
-    -> BG.Word32
+    :: BG.CInt
+    -> BG.CInt
+    -> HsBindgen.Runtime.Support.CUInt
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Word32
+    -> BG.CInt
+    -> HsBindgen.Runtime.Support.CUInt
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_ConvertPixels@
 hs_bindgen_c4ac87b53bb7fbaa
@@ -2498,7 +2642,26 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_c4ac87b53bb7fbaa =
-  BG.fromFFIType hs_bindgen_c4ac87b53bb7fbaa_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                \x7 ->
+                  fmap
+                    BG.fromFFIType
+                    ( hs_bindgen_c4ac87b53bb7fbaa_base
+                        (BG.toFFIType x0)
+                        (BG.toFFIType x1)
+                        (BG.toFFIType x2)
+                        (BG.toFFIType x3)
+                        (BG.toFFIType x4)
+                        (BG.toFFIType x5)
+                        (BG.toFFIType x6)
+                        (BG.toFFIType x7)
+                    )
 
 -- | Copy a block of pixels of one format to another format.
 --
@@ -2550,19 +2713,19 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_ConvertPixelsAndColorspace@
 foreign import ccall unsafe "hs_bindgen_384b325525f7f1f3"
   hs_bindgen_384b325525f7f1f3_base
-    :: BG.Int32
-    -> BG.Int32
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Word32
+    :: BG.CInt
+    -> BG.CInt
+    -> HsBindgen.Runtime.Support.CUInt
+    -> HsBindgen.Runtime.Support.CUInt
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Word32
-    -> BG.Word32
-    -> BG.Word32
+    -> BG.CInt
+    -> HsBindgen.Runtime.Support.CUInt
+    -> HsBindgen.Runtime.Support.CUInt
+    -> HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_ConvertPixelsAndColorspace@
 hs_bindgen_384b325525f7f1f3
@@ -2580,7 +2743,34 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_384b325525f7f1f3 =
-  BG.fromFFIType hs_bindgen_384b325525f7f1f3_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                \x7 ->
+                  \x8 ->
+                    \x9 ->
+                      \x10 ->
+                        \x11 ->
+                          fmap
+                            BG.fromFFIType
+                            ( hs_bindgen_384b325525f7f1f3_base
+                                (BG.toFFIType x0)
+                                (BG.toFFIType x1)
+                                (BG.toFFIType x2)
+                                (BG.toFFIType x3)
+                                (BG.toFFIType x4)
+                                (BG.toFFIType x5)
+                                (BG.toFFIType x6)
+                                (BG.toFFIType x7)
+                                (BG.toFFIType x8)
+                                (BG.toFFIType x9)
+                                (BG.toFFIType x10)
+                                (BG.toFFIType x11)
+                            )
 
 -- | Copy a block of pixels of one format and colorspace to another format and colorspace.
 --
@@ -2649,16 +2839,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_PremultiplyAlpha@
 foreign import ccall unsafe "hs_bindgen_9a5c070f0253ae0a"
   hs_bindgen_9a5c070f0253ae0a_base
-    :: BG.Int32
-    -> BG.Int32
-    -> BG.Word32
+    :: BG.CInt
+    -> BG.CInt
+    -> HsBindgen.Runtime.Support.CUInt
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Word32
+    -> BG.CInt
+    -> HsBindgen.Runtime.Support.CUInt
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CInt
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_PremultiplyAlpha@
 hs_bindgen_9a5c070f0253ae0a
@@ -2673,7 +2863,28 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_9a5c070f0253ae0a =
-  BG.fromFFIType hs_bindgen_9a5c070f0253ae0a_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                \x7 ->
+                  \x8 ->
+                    fmap
+                      BG.fromFFIType
+                      ( hs_bindgen_9a5c070f0253ae0a_base
+                          (BG.toFFIType x0)
+                          (BG.toFFIType x1)
+                          (BG.toFFIType x2)
+                          (BG.toFFIType x3)
+                          (BG.toFFIType x4)
+                          (BG.toFFIType x5)
+                          (BG.toFFIType x6)
+                          (BG.toFFIType x7)
+                          (BG.toFFIType x8)
+                      )
 
 -- | Premultiply the alpha on a block of pixels.
 --
@@ -2730,8 +2941,8 @@
 foreign import ccall unsafe "hs_bindgen_7065a7a3bd7041c8"
   hs_bindgen_7065a7a3bd7041c8_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_PremultiplySurfaceAlpha@
 hs_bindgen_7065a7a3bd7041c8
@@ -2739,7 +2950,9 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_7065a7a3bd7041c8 =
-  BG.fromFFIType hs_bindgen_7065a7a3bd7041c8_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_7065a7a3bd7041c8_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Premultiply the alpha in a surface.
 --
@@ -2769,11 +2982,11 @@
 foreign import ccall unsafe "hs_bindgen_de44f8d6106c7e71"
   hs_bindgen_de44f8d6106c7e71_base
     :: BG.Ptr BG.Void
-    -> Float
-    -> Float
-    -> Float
-    -> Float
-    -> IO BG.Word8
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.CFloat
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_ClearSurface@
 hs_bindgen_de44f8d6106c7e71
@@ -2784,7 +2997,20 @@
   -> BG.CFloat
   -> IO BG.CBool
 hs_bindgen_de44f8d6106c7e71 =
-  BG.fromFFIType hs_bindgen_de44f8d6106c7e71_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_de44f8d6106c7e71_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Clear a surface with a specific color, with floating point precision.
 --
@@ -2828,8 +3054,8 @@
   hs_bindgen_8e254769393349cc_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_FillSurfaceRect@
 hs_bindgen_8e254769393349cc
@@ -2838,7 +3064,12 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_8e254769393349cc =
-  BG.fromFFIType hs_bindgen_8e254769393349cc_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_8e254769393349cc_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Perform a fast fill of a rectangle with a specific color.
 --
@@ -2876,9 +3107,9 @@
   hs_bindgen_4eb2bdf51787fb5f_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Word32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_FillSurfaceRects@
 hs_bindgen_4eb2bdf51787fb5f
@@ -2888,7 +3119,18 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_4eb2bdf51787fb5f =
-  BG.fromFFIType hs_bindgen_4eb2bdf51787fb5f_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_4eb2bdf51787fb5f_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Perform a fast fill of a set of rectangles with a specific color.
 --
@@ -2932,7 +3174,7 @@
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_BlitSurface@
 hs_bindgen_dd9a2fd8000655e0
@@ -2942,7 +3184,18 @@
   -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
   -> IO BG.CBool
 hs_bindgen_dd9a2fd8000655e0 =
-  BG.fromFFIType hs_bindgen_dd9a2fd8000655e0_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_dd9a2fd8000655e0_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Performs a fast blit from the source surface to the destination surface with clipping.
 --
@@ -3028,7 +3281,7 @@
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_BlitSurfaceUnchecked@
 hs_bindgen_f1d3fd72bc95a376
@@ -3038,7 +3291,18 @@
   -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
   -> IO BG.CBool
 hs_bindgen_f1d3fd72bc95a376 =
-  BG.fromFFIType hs_bindgen_f1d3fd72bc95a376_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_f1d3fd72bc95a376_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Perform low-level surface blitting only.
 --
@@ -3081,8 +3345,8 @@
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_BlitSurfaceScaled@
 hs_bindgen_ca439260becd97fa
@@ -3093,7 +3357,20 @@
   -> SDL_ScaleMode
   -> IO BG.CBool
 hs_bindgen_ca439260becd97fa =
-  BG.fromFFIType hs_bindgen_ca439260becd97fa_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_ca439260becd97fa_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Perform a scaled blit to a destination surface, which may be of a different format.
 --
@@ -3137,8 +3414,8 @@
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_BlitSurfaceUncheckedScaled@
 hs_bindgen_273462ee987888b2
@@ -3149,7 +3426,20 @@
   -> SDL_ScaleMode
   -> IO BG.CBool
 hs_bindgen_273462ee987888b2 =
-  BG.fromFFIType hs_bindgen_273462ee987888b2_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_273462ee987888b2_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Perform low-level surface scaled blitting only.
 --
@@ -3196,8 +3486,8 @@
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_StretchSurface@
 hs_bindgen_cbba042ce7137c9a
@@ -3208,7 +3498,20 @@
   -> SDL_ScaleMode
   -> IO BG.CBool
 hs_bindgen_cbba042ce7137c9a =
-  BG.fromFFIType hs_bindgen_cbba042ce7137c9a_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_cbba042ce7137c9a_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Perform a stretched pixel copy from one surface to another.
 --
@@ -3252,7 +3555,7 @@
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_BlitSurfaceTiled@
 hs_bindgen_cc06339086116f6d
@@ -3262,7 +3565,18 @@
   -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
   -> IO BG.CBool
 hs_bindgen_cc06339086116f6d =
-  BG.fromFFIType hs_bindgen_cc06339086116f6d_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_cc06339086116f6d_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Perform a tiled blit to a destination surface, which may be of a different format.
 --
@@ -3302,11 +3616,11 @@
   hs_bindgen_50d8214074d2e91b_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> Float
-    -> BG.Int32
+    -> BG.CFloat
+    -> BG.CInt
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_BlitSurfaceTiledWithScale@
 hs_bindgen_50d8214074d2e91b
@@ -3318,7 +3632,22 @@
   -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
   -> IO BG.CBool
 hs_bindgen_50d8214074d2e91b =
-  BG.fromFFIType hs_bindgen_50d8214074d2e91b_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_50d8214074d2e91b_base
+                    (BG.toFFIType x0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                    (BG.toFFIType x4)
+                    (BG.toFFIType x5)
+                )
 
 -- | Perform a scaled and tiled blit to a destination surface, which may be of a different format.
 --
@@ -3367,15 +3696,15 @@
   hs_bindgen_84940b463dd6473c_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> BG.Int32
-    -> BG.Int32
-    -> Float
-    -> BG.Int32
+    -> BG.CInt
+    -> BG.CInt
+    -> BG.CInt
+    -> BG.CInt
+    -> BG.CFloat
+    -> BG.CInt
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_BlitSurface9Grid@
 hs_bindgen_84940b463dd6473c
@@ -3391,7 +3720,30 @@
   -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
   -> IO BG.CBool
 hs_bindgen_84940b463dd6473c =
-  BG.fromFFIType hs_bindgen_84940b463dd6473c_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                \x7 ->
+                  \x8 ->
+                    \x9 ->
+                      fmap
+                        BG.fromFFIType
+                        ( hs_bindgen_84940b463dd6473c_base
+                            (BG.toFFIType x0)
+                            (BG.toFFIType x1)
+                            (BG.toFFIType x2)
+                            (BG.toFFIType x3)
+                            (BG.toFFIType x4)
+                            (BG.toFFIType x5)
+                            (BG.toFFIType x6)
+                            (BG.toFFIType x7)
+                            (BG.toFFIType x8)
+                            (BG.toFFIType x9)
+                        )
 
 -- | Perform a scaled blit using the 9-grid algorithm to a destination surface, which may be of a different format.
 --
@@ -3454,10 +3806,10 @@
 foreign import ccall unsafe "hs_bindgen_5dfeeef5d5aa83da"
   hs_bindgen_5dfeeef5d5aa83da_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> BG.Word8
-    -> BG.Word8
-    -> IO BG.Word32
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_MapSurfaceRGB@
 hs_bindgen_5dfeeef5d5aa83da
@@ -3467,7 +3819,18 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
 hs_bindgen_5dfeeef5d5aa83da =
-  BG.fromFFIType hs_bindgen_5dfeeef5d5aa83da_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_5dfeeef5d5aa83da_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Map an RGB triple to an opaque pixel value for a surface.
 --
@@ -3512,11 +3875,11 @@
 foreign import ccall unsafe "hs_bindgen_456d7e009be906d0"
   hs_bindgen_456d7e009be906d0_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> BG.Word8
-    -> BG.Word8
-    -> BG.Word8
-    -> IO BG.Word32
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_MapSurfaceRGBA@
 hs_bindgen_456d7e009be906d0
@@ -3527,7 +3890,20 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
 hs_bindgen_456d7e009be906d0 =
-  BG.fromFFIType hs_bindgen_456d7e009be906d0_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_456d7e009be906d0_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Map an RGBA quadruple to a pixel value for a surface.
 --
@@ -3576,13 +3952,13 @@
 foreign import ccall unsafe "hs_bindgen_76b097df3deb39a7"
   hs_bindgen_76b097df3deb39a7_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
+    -> BG.CInt
+    -> BG.CInt
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_ReadSurfacePixel@
 hs_bindgen_76b097df3deb39a7
@@ -3595,7 +3971,24 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO BG.CBool
 hs_bindgen_76b097df3deb39a7 =
-  BG.fromFFIType hs_bindgen_76b097df3deb39a7_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                fmap
+                  BG.fromFFIType
+                  ( hs_bindgen_76b097df3deb39a7_base
+                      (BG.toFFIType x0)
+                      (BG.toFFIType x1)
+                      (BG.toFFIType x2)
+                      (BG.toFFIType x3)
+                      (BG.toFFIType x4)
+                      (BG.toFFIType x5)
+                      (BG.toFFIType x6)
+                  )
 
 -- | Retrieves a single pixel from a surface.
 --
@@ -3646,13 +4039,13 @@
 foreign import ccall unsafe "hs_bindgen_1dba774402b79156"
   hs_bindgen_1dba774402b79156_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
+    -> BG.CInt
+    -> BG.CInt
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_ReadSurfacePixelFloat@
 hs_bindgen_1dba774402b79156
@@ -3665,7 +4058,24 @@
   -> BG.Ptr BG.CFloat
   -> IO BG.CBool
 hs_bindgen_1dba774402b79156 =
-  BG.fromFFIType hs_bindgen_1dba774402b79156_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                fmap
+                  BG.fromFFIType
+                  ( hs_bindgen_1dba774402b79156_base
+                      (BG.toFFIType x0)
+                      (BG.toFFIType x1)
+                      (BG.toFFIType x2)
+                      (BG.toFFIType x3)
+                      (BG.toFFIType x4)
+                      (BG.toFFIType x5)
+                      (BG.toFFIType x6)
+                  )
 
 -- | Retrieves a single pixel from a surface.
 --
@@ -3715,13 +4125,13 @@
 foreign import ccall unsafe "hs_bindgen_66bf3500cd5641bd"
   hs_bindgen_66bf3500cd5641bd_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> BG.Word8
-    -> BG.Word8
-    -> BG.Word8
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CInt
+    -> BG.CInt
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> HsBindgen.Runtime.LibC.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_WriteSurfacePixel@
 hs_bindgen_66bf3500cd5641bd
@@ -3734,7 +4144,24 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint8
   -> IO BG.CBool
 hs_bindgen_66bf3500cd5641bd =
-  BG.fromFFIType hs_bindgen_66bf3500cd5641bd_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                fmap
+                  BG.fromFFIType
+                  ( hs_bindgen_66bf3500cd5641bd_base
+                      (BG.toFFIType x0)
+                      (BG.toFFIType x1)
+                      (BG.toFFIType x2)
+                      (BG.toFFIType x3)
+                      (BG.toFFIType x4)
+                      (BG.toFFIType x5)
+                      (BG.toFFIType x6)
+                  )
 
 -- | Writes a single pixel to a surface.
 --
@@ -3785,13 +4212,13 @@
 foreign import ccall unsafe "hs_bindgen_91babb583602ef71"
   hs_bindgen_91babb583602ef71_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> Float
-    -> Float
-    -> Float
-    -> Float
-    -> IO BG.Word8
+    -> BG.CInt
+    -> BG.CInt
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.CFloat
+    -> BG.CFloat
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Surface_Unsafe_SDL_WriteSurfacePixelFloat@
 hs_bindgen_91babb583602ef71
@@ -3804,7 +4231,24 @@
   -> BG.CFloat
   -> IO BG.CBool
 hs_bindgen_91babb583602ef71 =
-  BG.fromFFIType hs_bindgen_91babb583602ef71_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              \x6 ->
+                fmap
+                  BG.fromFFIType
+                  ( hs_bindgen_91babb583602ef71_base
+                      (BG.toFFIType x0)
+                      (BG.toFFIType x1)
+                      (BG.toFFIType x2)
+                      (BG.toFFIType x3)
+                      (BG.toFFIType x4)
+                      (BG.toFFIType x5)
+                      (BG.toFFIType x6)
+                  )
 
 -- | Writes a single pixel to a surface.
 --
diff --git a/src/SDL3/Sys/Bindgen/SurfaceShims/FunPtr.hs b/src/SDL3/Sys/Bindgen/SurfaceShims/FunPtr.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/SurfaceShims/FunPtr.hs
@@ -0,0 +1,65 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.SurfaceShims.FunPtr (
+  SDL3.Sys.Bindgen.SurfaceShims.FunPtr.lithon_SDL_MUSTLOCK,
+)
+where
+
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+import SDL3.Sys.Bindgen.Surface qualified
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <sdl3-bindgen-sys/SDL_surface_shims.h>"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.SurfaceShims_get_lithon_SDL_MUSTLOCK */"
+         , "__attribute__ ((const))"
+         , "_Bool (*hs_bindgen_14ee8daa42148a86 (void)) ("
+         , "  SDL_Surface *arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_MUSTLOCK;"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.SurfaceShims_get_lithon_SDL_MUSTLOCK@
+foreign import ccall unsafe "hs_bindgen_14ee8daa42148a86"
+  hs_bindgen_14ee8daa42148a86_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.SurfaceShims_get_lithon_SDL_MUSTLOCK@
+hs_bindgen_14ee8daa42148a86
+  :: IO (BG.FunPtr (BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface -> IO BG.CBool))
+hs_bindgen_14ee8daa42148a86 =
+  fmap BG.fromFFIType hs_bindgen_14ee8daa42148a86_base
+
+{-# NOINLINE lithon_SDL_MUSTLOCK #-}
+
+-- | Determine whether a surface needs to be locked before its pixels are accessed.
+--
+--     The SDL_MUSTLOCK macro as a function.
+--
+--     [@surface@]: the SDL_Surface to check.
+--
+--     [Returns]: true if the surface must be locked with SDL_LockSurface before its pixels are read or written, false otherwise.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_LockSurface, SDL_UnlockSurface
+--
+--     [C declaration]: @lithon_SDL_MUSTLOCK@, defined at @sdl3-bindgen-sys\/SDL_surface_shims.h 39:24@
+lithon_SDL_MUSTLOCK :: BG.FunPtr (BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface -> IO BG.CBool)
+lithon_SDL_MUSTLOCK =
+  BG.unsafePerformIO hs_bindgen_14ee8daa42148a86
diff --git a/src/SDL3/Sys/Bindgen/SurfaceShims/Safe.hs b/src/SDL3/Sys/Bindgen/SurfaceShims/Safe.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/SurfaceShims/Safe.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.SurfaceShims.Safe (
+  SDL3.Sys.Bindgen.SurfaceShims.Safe.lithon_SDL_MUSTLOCK,
+)
+where
+
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+import SDL3.Sys.Bindgen.Surface qualified
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <sdl3-bindgen-sys/SDL_surface_shims.h>"
+         , "_Bool hs_bindgen_6956b0b35f4810d3 ("
+         , "  SDL_Surface *arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_MUSTLOCK)(arg1);"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.SurfaceShims_Safe_lithon_SDL_MUSTLOCK@
+foreign import ccall safe "hs_bindgen_6956b0b35f4810d3"
+  hs_bindgen_6956b0b35f4810d3_base
+    :: BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.SurfaceShims_Safe_lithon_SDL_MUSTLOCK@
+hs_bindgen_6956b0b35f4810d3
+  :: BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface
+  -> IO BG.CBool
+hs_bindgen_6956b0b35f4810d3 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_6956b0b35f4810d3_base (BG.toFFIType x0))
+
+-- | Determine whether a surface needs to be locked before its pixels are accessed.
+--
+--     The SDL_MUSTLOCK macro as a function.
+--
+--     [Returns]: true if the surface must be locked with SDL_LockSurface before its pixels are read or written, false otherwise.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_LockSurface, SDL_UnlockSurface
+--
+--     [C declaration]: @lithon_SDL_MUSTLOCK@, defined at @sdl3-bindgen-sys\/SDL_surface_shims.h 39:24@
+lithon_SDL_MUSTLOCK
+  :: BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface
+  -- ^
+  --
+  --           [@surface@]: the SDL_Surface to check.
+  -> IO BG.CBool
+lithon_SDL_MUSTLOCK = hs_bindgen_6956b0b35f4810d3
diff --git a/src/SDL3/Sys/Bindgen/SurfaceShims/Unsafe.hs b/src/SDL3/Sys/Bindgen/SurfaceShims/Unsafe.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/SurfaceShims/Unsafe.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.SurfaceShims.Unsafe (
+  SDL3.Sys.Bindgen.SurfaceShims.Unsafe.lithon_SDL_MUSTLOCK,
+)
+where
+
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+import SDL3.Sys.Bindgen.Surface qualified
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <sdl3-bindgen-sys/SDL_surface_shims.h>"
+         , "_Bool hs_bindgen_6f4ecedfb53f9a9e ("
+         , "  SDL_Surface *arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_MUSTLOCK)(arg1);"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.SurfaceShims_Unsafe_lithon_SDL_MUSTLOCK@
+foreign import ccall unsafe "hs_bindgen_6f4ecedfb53f9a9e"
+  hs_bindgen_6f4ecedfb53f9a9e_base
+    :: BG.Ptr BG.Void
+    -> IO BG.CBool
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.SurfaceShims_Unsafe_lithon_SDL_MUSTLOCK@
+hs_bindgen_6f4ecedfb53f9a9e
+  :: BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface
+  -> IO BG.CBool
+hs_bindgen_6f4ecedfb53f9a9e =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_6f4ecedfb53f9a9e_base (BG.toFFIType x0))
+
+-- | Determine whether a surface needs to be locked before its pixels are accessed.
+--
+--     The SDL_MUSTLOCK macro as a function.
+--
+--     [Returns]: true if the surface must be locked with SDL_LockSurface before its pixels are read or written, false otherwise.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_LockSurface, SDL_UnlockSurface
+--
+--     [C declaration]: @lithon_SDL_MUSTLOCK@, defined at @sdl3-bindgen-sys\/SDL_surface_shims.h 39:24@
+lithon_SDL_MUSTLOCK
+  :: BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface
+  -- ^
+  --
+  --           [@surface@]: the SDL_Surface to check.
+  -> IO BG.CBool
+lithon_SDL_MUSTLOCK = hs_bindgen_6f4ecedfb53f9a9e
diff --git a/src/SDL3/Sys/Bindgen/System.hs b/src/SDL3/Sys/Bindgen/System.hs
--- a/src/SDL3/Sys/Bindgen/System.hs
+++ b/src/SDL3/Sys/Bindgen/System.hs
@@ -6,6 +6,7 @@
 {-# LANGUAGE EmptyDataDecls #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE MagicHash #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
@@ -17,6 +18,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 module SDL3.Sys.Bindgen.System (
   SDL3.Sys.Bindgen.System.XEvent,
@@ -31,6 +33,8 @@
 )
 where
 
+import Prelude (Eq, IO, Int, Ord, Read, Show, fmap, pure, (<*>), type (~))
+
 import HsBindgen.Runtime.CEnum qualified as CEnum
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.Marshal qualified as Marshal
@@ -47,13 +51,12 @@
   { unwrap :: BG.Ptr BG.Void -> BG.Ptr XEvent -> IO BG.CBool
   }
   deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
 
 -- __unique:__ @toSDL_X11EventHook_Aux@
 foreign import ccall safe "wrapper"
   hs_bindgen_74aa64577de95c6c_base
-    :: (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.Word8)
-    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.Word8))
+    :: (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.CBool)
+    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.CBool))
 
 -- __unique:__ @toSDL_X11EventHook_Aux@
 hs_bindgen_74aa64577de95c6c
@@ -61,15 +64,22 @@
   -> IO (BG.FunPtr SDL_X11EventHook_Aux)
 hs_bindgen_74aa64577de95c6c =
   \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_74aa64577de95c6c_base (BG.toFFIType fun0))
+    fmap
+      BG.castFunPtr
+      ( hs_bindgen_74aa64577de95c6c_base
+          ( \x1 ->
+              \x2 ->
+                fmap BG.toFFIType (BG.getField @"unwrap" fun0 (BG.fromFFIType x1) (BG.fromFFIType x2))
+          )
+      )
 
 -- __unique:__ @fromSDL_X11EventHook_Aux@
 foreign import ccall safe "dynamic"
   hs_bindgen_cc5ab09f101f43e5_base
-    :: BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.Word8)
+    :: BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.CBool)
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @fromSDL_X11EventHook_Aux@
 hs_bindgen_cc5ab09f101f43e5
@@ -77,7 +87,13 @@
   -> SDL_X11EventHook_Aux
 hs_bindgen_cc5ab09f101f43e5 =
   \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_cc5ab09f101f43e5_base (BG.castFunPtrToFFIType funPtr0))
+    SDL_X11EventHook_Aux
+      ( \x1 ->
+          \x2 ->
+            fmap
+              BG.fromFFIType
+              (hs_bindgen_cc5ab09f101f43e5_base (BG.castFunPtr funPtr0) (BG.toFFIType x1) (BG.toFFIType x2))
+      )
 
 instance BG.ToFunPtr SDL_X11EventHook_Aux where
   toFunPtr = hs_bindgen_74aa64577de95c6c
diff --git a/src/SDL3/Sys/Bindgen/System/FunPtr.hs b/src/SDL3/Sys/Bindgen/System/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/System/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/System/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.System.FunPtr (
@@ -18,6 +20,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Stdinc qualified
@@ -25,7 +29,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_system.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_system.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.System_get_SDL_SetX11EventHook */"
          , "__attribute__ ((const))"
          , "void (*hs_bindgen_c8461cbd9f660faf (void)) ("
@@ -128,7 +136,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_get_SDL_SetX11EventHook@
 hs_bindgen_c8461cbd9f660faf :: IO (BG.FunPtr (SDL_X11EventHook -> BG.Ptr BG.Void -> IO ()))
 hs_bindgen_c8461cbd9f660faf =
-  BG.fromFFIType hs_bindgen_c8461cbd9f660faf_base
+  fmap BG.fromFFIType hs_bindgen_c8461cbd9f660faf_base
 
 {-# NOINLINE sDL_SetX11EventHook #-}
 
@@ -158,7 +166,7 @@
 hs_bindgen_1f8bde1858fb4a87
   :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Sint64 -> BG.CInt -> IO BG.CBool))
 hs_bindgen_1f8bde1858fb4a87 =
-  BG.fromFFIType hs_bindgen_1f8bde1858fb4a87_base
+  fmap BG.fromFFIType hs_bindgen_1f8bde1858fb4a87_base
 
 {-# NOINLINE sDL_SetLinuxThreadPriority #-}
 
@@ -176,7 +184,7 @@
 hs_bindgen_cfce4d2d582fd59d
   :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Sint64 -> BG.CInt -> BG.CInt -> IO BG.CBool))
 hs_bindgen_cfce4d2d582fd59d =
-  BG.fromFFIType hs_bindgen_cfce4d2d582fd59d_base
+  fmap BG.fromFFIType hs_bindgen_cfce4d2d582fd59d_base
 
 {-# NOINLINE sDL_SetLinuxThreadPriorityAndPolicy #-}
 
@@ -194,7 +202,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_get_SDL_IsTablet@
 hs_bindgen_9f492756c66f0817 :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_9f492756c66f0817 =
-  BG.fromFFIType hs_bindgen_9f492756c66f0817_base
+  fmap BG.fromFFIType hs_bindgen_9f492756c66f0817_base
 
 {-# NOINLINE sDL_IsTablet #-}
 
@@ -221,7 +229,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_get_SDL_IsTV@
 hs_bindgen_cf95d51f81b9ae05 :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_cf95d51f81b9ae05 =
-  BG.fromFFIType hs_bindgen_cf95d51f81b9ae05_base
+  fmap BG.fromFFIType hs_bindgen_cf95d51f81b9ae05_base
 
 {-# NOINLINE sDL_IsTV #-}
 
@@ -248,7 +256,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_get_SDL_GetSandbox@
 hs_bindgen_ec479faeb61e5dcc :: IO (BG.FunPtr (IO SDL_Sandbox))
 hs_bindgen_ec479faeb61e5dcc =
-  BG.fromFFIType hs_bindgen_ec479faeb61e5dcc_base
+  fmap BG.fromFFIType hs_bindgen_ec479faeb61e5dcc_base
 
 {-# NOINLINE sDL_GetSandbox #-}
 
@@ -271,7 +279,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_get_SDL_OnApplicationWillTerminate@
 hs_bindgen_d4425ea7b77d90a5 :: IO (BG.FunPtr (IO ()))
 hs_bindgen_d4425ea7b77d90a5 =
-  BG.fromFFIType hs_bindgen_d4425ea7b77d90a5_base
+  fmap BG.fromFFIType hs_bindgen_d4425ea7b77d90a5_base
 
 {-# NOINLINE sDL_OnApplicationWillTerminate #-}
 
@@ -296,7 +304,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_get_SDL_OnApplicationDidReceiveMemoryWarning@
 hs_bindgen_48da35892737056a :: IO (BG.FunPtr (IO ()))
 hs_bindgen_48da35892737056a =
-  BG.fromFFIType hs_bindgen_48da35892737056a_base
+  fmap BG.fromFFIType hs_bindgen_48da35892737056a_base
 
 {-# NOINLINE sDL_OnApplicationDidReceiveMemoryWarning #-}
 
@@ -321,7 +329,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_get_SDL_OnApplicationWillEnterBackground@
 hs_bindgen_b39763efba45615f :: IO (BG.FunPtr (IO ()))
 hs_bindgen_b39763efba45615f =
-  BG.fromFFIType hs_bindgen_b39763efba45615f_base
+  fmap BG.fromFFIType hs_bindgen_b39763efba45615f_base
 
 {-# NOINLINE sDL_OnApplicationWillEnterBackground #-}
 
@@ -346,7 +354,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_get_SDL_OnApplicationDidEnterBackground@
 hs_bindgen_4930cfe88ee2ea33 :: IO (BG.FunPtr (IO ()))
 hs_bindgen_4930cfe88ee2ea33 =
-  BG.fromFFIType hs_bindgen_4930cfe88ee2ea33_base
+  fmap BG.fromFFIType hs_bindgen_4930cfe88ee2ea33_base
 
 {-# NOINLINE sDL_OnApplicationDidEnterBackground #-}
 
@@ -371,7 +379,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_get_SDL_OnApplicationWillEnterForeground@
 hs_bindgen_e6a127de1e095a24 :: IO (BG.FunPtr (IO ()))
 hs_bindgen_e6a127de1e095a24 =
-  BG.fromFFIType hs_bindgen_e6a127de1e095a24_base
+  fmap BG.fromFFIType hs_bindgen_e6a127de1e095a24_base
 
 {-# NOINLINE sDL_OnApplicationWillEnterForeground #-}
 
@@ -396,7 +404,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_get_SDL_OnApplicationDidEnterForeground@
 hs_bindgen_6ee69ef9852cabc3 :: IO (BG.FunPtr (IO ()))
 hs_bindgen_6ee69ef9852cabc3 =
-  BG.fromFFIType hs_bindgen_6ee69ef9852cabc3_base
+  fmap BG.fromFFIType hs_bindgen_6ee69ef9852cabc3_base
 
 {-# NOINLINE sDL_OnApplicationDidEnterForeground #-}
 
diff --git a/src/SDL3/Sys/Bindgen/System/Safe.hs b/src/SDL3/Sys/Bindgen/System/Safe.hs
--- a/src/SDL3/Sys/Bindgen/System/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/System/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.System.Safe (
@@ -18,6 +20,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Stdinc qualified
@@ -25,7 +30,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_system.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_system.h>"
          , "void hs_bindgen_ead2e2ea2677d0f8 ("
          , "  SDL_X11EventHook arg1,"
          , "  void *arg2"
@@ -109,7 +118,9 @@
   -> BG.Ptr BG.Void
   -> IO ()
 hs_bindgen_ead2e2ea2677d0f8 =
-  BG.fromFFIType hs_bindgen_ead2e2ea2677d0f8_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_ead2e2ea2677d0f8_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Set a callback for every X11 event.
 --
@@ -135,9 +146,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_Safe_SDL_SetLinuxThreadPriority@
 foreign import ccall safe "hs_bindgen_9110686f4456a2f3"
   hs_bindgen_9110686f4456a2f3_base
-    :: BG.Int64
-    -> BG.Int32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Int64
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_Safe_SDL_SetLinuxThreadPriority@
 hs_bindgen_9110686f4456a2f3
@@ -145,7 +156,9 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_9110686f4456a2f3 =
-  BG.fromFFIType hs_bindgen_9110686f4456a2f3_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_9110686f4456a2f3_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | [C declaration]: @SDL_SetLinuxThreadPriority@, defined at @SDL3\/SDL_system.h 197:34@
 sDL_SetLinuxThreadPriority
@@ -160,10 +173,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_Safe_SDL_SetLinuxThreadPriorityAndPolicy@
 foreign import ccall safe "hs_bindgen_0383bd6da68658c0"
   hs_bindgen_0383bd6da68658c0_base
-    :: BG.Int64
-    -> BG.Int32
-    -> BG.Int32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Int64
+    -> BG.CInt
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_Safe_SDL_SetLinuxThreadPriorityAndPolicy@
 hs_bindgen_0383bd6da68658c0
@@ -172,7 +185,12 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_0383bd6da68658c0 =
-  BG.fromFFIType hs_bindgen_0383bd6da68658c0_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_0383bd6da68658c0_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | [C declaration]: @SDL_SetLinuxThreadPriorityAndPolicy@, defined at @SDL3\/SDL_system.h 215:34@
 sDL_SetLinuxThreadPriorityAndPolicy
@@ -189,12 +207,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_Safe_SDL_IsTablet@
 foreign import ccall safe "hs_bindgen_c9f4754632fd8d42"
   hs_bindgen_c9f4754632fd8d42_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_Safe_SDL_IsTablet@
 hs_bindgen_c9f4754632fd8d42 :: IO BG.CBool
 hs_bindgen_c9f4754632fd8d42 =
-  BG.fromFFIType hs_bindgen_c9f4754632fd8d42_base
+  fmap BG.fromFFIType hs_bindgen_c9f4754632fd8d42_base
 
 -- | Query if the current device is a tablet.
 --
@@ -213,12 +231,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_Safe_SDL_IsTV@
 foreign import ccall safe "hs_bindgen_0cd31739327b6cd7"
   hs_bindgen_0cd31739327b6cd7_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_Safe_SDL_IsTV@
 hs_bindgen_0cd31739327b6cd7 :: IO BG.CBool
 hs_bindgen_0cd31739327b6cd7 =
-  BG.fromFFIType hs_bindgen_0cd31739327b6cd7_base
+  fmap BG.fromFFIType hs_bindgen_0cd31739327b6cd7_base
 
 -- | Query if the current device is a TV.
 --
@@ -237,12 +255,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_Safe_SDL_GetSandbox@
 foreign import ccall safe "hs_bindgen_e5a169479304c118"
   hs_bindgen_e5a169479304c118_base
-    :: IO BG.Word32
+    :: IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_Safe_SDL_GetSandbox@
 hs_bindgen_e5a169479304c118 :: IO SDL_Sandbox
 hs_bindgen_e5a169479304c118 =
-  BG.fromFFIType hs_bindgen_e5a169479304c118_base
+  fmap BG.fromFFIType hs_bindgen_e5a169479304c118_base
 
 -- | Get the application sandbox environment, if any.
 --
@@ -262,7 +280,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_Safe_SDL_OnApplicationWillTerminate@
 hs_bindgen_6de90d6f8ee04ad6 :: IO ()
 hs_bindgen_6de90d6f8ee04ad6 =
-  BG.fromFFIType hs_bindgen_6de90d6f8ee04ad6_base
+  hs_bindgen_6de90d6f8ee04ad6_base
 
 -- | Let iOS apps with external event handling report onApplicationWillTerminate.
 --
@@ -285,7 +303,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_Safe_SDL_OnApplicationDidReceiveMemoryWarning@
 hs_bindgen_36ae92858c8204df :: IO ()
 hs_bindgen_36ae92858c8204df =
-  BG.fromFFIType hs_bindgen_36ae92858c8204df_base
+  hs_bindgen_36ae92858c8204df_base
 
 -- | Let iOS apps with external event handling report onApplicationDidReceiveMemoryWarning.
 --
@@ -308,7 +326,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_Safe_SDL_OnApplicationWillEnterBackground@
 hs_bindgen_62c6019205cd45c2 :: IO ()
 hs_bindgen_62c6019205cd45c2 =
-  BG.fromFFIType hs_bindgen_62c6019205cd45c2_base
+  hs_bindgen_62c6019205cd45c2_base
 
 -- | Let iOS apps with external event handling report onApplicationWillResignActive.
 --
@@ -331,7 +349,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_Safe_SDL_OnApplicationDidEnterBackground@
 hs_bindgen_73b2cba299dd5591 :: IO ()
 hs_bindgen_73b2cba299dd5591 =
-  BG.fromFFIType hs_bindgen_73b2cba299dd5591_base
+  hs_bindgen_73b2cba299dd5591_base
 
 -- | Let iOS apps with external event handling report onApplicationDidEnterBackground.
 --
@@ -354,7 +372,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_Safe_SDL_OnApplicationWillEnterForeground@
 hs_bindgen_2b70d675ad267009 :: IO ()
 hs_bindgen_2b70d675ad267009 =
-  BG.fromFFIType hs_bindgen_2b70d675ad267009_base
+  hs_bindgen_2b70d675ad267009_base
 
 -- | Let iOS apps with external event handling report onApplicationWillEnterForeground.
 --
@@ -377,7 +395,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_Safe_SDL_OnApplicationDidEnterForeground@
 hs_bindgen_cfd36268e651eb47 :: IO ()
 hs_bindgen_cfd36268e651eb47 =
-  BG.fromFFIType hs_bindgen_cfd36268e651eb47_base
+  hs_bindgen_cfd36268e651eb47_base
 
 -- | Let iOS apps with external event handling report onApplicationDidBecomeActive.
 --
diff --git a/src/SDL3/Sys/Bindgen/System/Unsafe.hs b/src/SDL3/Sys/Bindgen/System/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/System/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/System/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.System.Unsafe (
@@ -18,6 +20,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Stdinc qualified
@@ -25,7 +30,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_system.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_system.h>"
          , "void hs_bindgen_6578867fea03cacb ("
          , "  SDL_X11EventHook arg1,"
          , "  void *arg2"
@@ -109,7 +118,9 @@
   -> BG.Ptr BG.Void
   -> IO ()
 hs_bindgen_6578867fea03cacb =
-  BG.fromFFIType hs_bindgen_6578867fea03cacb_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_6578867fea03cacb_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Set a callback for every X11 event.
 --
@@ -135,9 +146,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_Unsafe_SDL_SetLinuxThreadPriority@
 foreign import ccall unsafe "hs_bindgen_2e342f8192ce7216"
   hs_bindgen_2e342f8192ce7216_base
-    :: BG.Int64
-    -> BG.Int32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Int64
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_Unsafe_SDL_SetLinuxThreadPriority@
 hs_bindgen_2e342f8192ce7216
@@ -145,7 +156,9 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_2e342f8192ce7216 =
-  BG.fromFFIType hs_bindgen_2e342f8192ce7216_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_2e342f8192ce7216_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | [C declaration]: @SDL_SetLinuxThreadPriority@, defined at @SDL3\/SDL_system.h 197:34@
 sDL_SetLinuxThreadPriority
@@ -160,10 +173,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_Unsafe_SDL_SetLinuxThreadPriorityAndPolicy@
 foreign import ccall unsafe "hs_bindgen_5590fa8686376477"
   hs_bindgen_5590fa8686376477_base
-    :: BG.Int64
-    -> BG.Int32
-    -> BG.Int32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Int64
+    -> BG.CInt
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_Unsafe_SDL_SetLinuxThreadPriorityAndPolicy@
 hs_bindgen_5590fa8686376477
@@ -172,7 +185,12 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_5590fa8686376477 =
-  BG.fromFFIType hs_bindgen_5590fa8686376477_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_5590fa8686376477_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | [C declaration]: @SDL_SetLinuxThreadPriorityAndPolicy@, defined at @SDL3\/SDL_system.h 215:34@
 sDL_SetLinuxThreadPriorityAndPolicy
@@ -189,12 +207,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_Unsafe_SDL_IsTablet@
 foreign import ccall unsafe "hs_bindgen_3681fc863886c2d2"
   hs_bindgen_3681fc863886c2d2_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_Unsafe_SDL_IsTablet@
 hs_bindgen_3681fc863886c2d2 :: IO BG.CBool
 hs_bindgen_3681fc863886c2d2 =
-  BG.fromFFIType hs_bindgen_3681fc863886c2d2_base
+  fmap BG.fromFFIType hs_bindgen_3681fc863886c2d2_base
 
 -- | Query if the current device is a tablet.
 --
@@ -213,12 +231,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_Unsafe_SDL_IsTV@
 foreign import ccall unsafe "hs_bindgen_0bab6eb88d9a9496"
   hs_bindgen_0bab6eb88d9a9496_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_Unsafe_SDL_IsTV@
 hs_bindgen_0bab6eb88d9a9496 :: IO BG.CBool
 hs_bindgen_0bab6eb88d9a9496 =
-  BG.fromFFIType hs_bindgen_0bab6eb88d9a9496_base
+  fmap BG.fromFFIType hs_bindgen_0bab6eb88d9a9496_base
 
 -- | Query if the current device is a TV.
 --
@@ -237,12 +255,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_Unsafe_SDL_GetSandbox@
 foreign import ccall unsafe "hs_bindgen_090a9001bc04ef5b"
   hs_bindgen_090a9001bc04ef5b_base
-    :: IO BG.Word32
+    :: IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_Unsafe_SDL_GetSandbox@
 hs_bindgen_090a9001bc04ef5b :: IO SDL_Sandbox
 hs_bindgen_090a9001bc04ef5b =
-  BG.fromFFIType hs_bindgen_090a9001bc04ef5b_base
+  fmap BG.fromFFIType hs_bindgen_090a9001bc04ef5b_base
 
 -- | Get the application sandbox environment, if any.
 --
@@ -262,7 +280,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_Unsafe_SDL_OnApplicationWillTerminate@
 hs_bindgen_b7f727ac4163d9e9 :: IO ()
 hs_bindgen_b7f727ac4163d9e9 =
-  BG.fromFFIType hs_bindgen_b7f727ac4163d9e9_base
+  hs_bindgen_b7f727ac4163d9e9_base
 
 -- | Let iOS apps with external event handling report onApplicationWillTerminate.
 --
@@ -285,7 +303,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_Unsafe_SDL_OnApplicationDidReceiveMemoryWarning@
 hs_bindgen_9064fb92743d3c76 :: IO ()
 hs_bindgen_9064fb92743d3c76 =
-  BG.fromFFIType hs_bindgen_9064fb92743d3c76_base
+  hs_bindgen_9064fb92743d3c76_base
 
 -- | Let iOS apps with external event handling report onApplicationDidReceiveMemoryWarning.
 --
@@ -308,7 +326,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_Unsafe_SDL_OnApplicationWillEnterBackground@
 hs_bindgen_874965c3cc9cd908 :: IO ()
 hs_bindgen_874965c3cc9cd908 =
-  BG.fromFFIType hs_bindgen_874965c3cc9cd908_base
+  hs_bindgen_874965c3cc9cd908_base
 
 -- | Let iOS apps with external event handling report onApplicationWillResignActive.
 --
@@ -331,7 +349,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_Unsafe_SDL_OnApplicationDidEnterBackground@
 hs_bindgen_092a71f4734666c3 :: IO ()
 hs_bindgen_092a71f4734666c3 =
-  BG.fromFFIType hs_bindgen_092a71f4734666c3_base
+  hs_bindgen_092a71f4734666c3_base
 
 -- | Let iOS apps with external event handling report onApplicationDidEnterBackground.
 --
@@ -354,7 +372,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_Unsafe_SDL_OnApplicationWillEnterForeground@
 hs_bindgen_bf629409e4677855 :: IO ()
 hs_bindgen_bf629409e4677855 =
-  BG.fromFFIType hs_bindgen_bf629409e4677855_base
+  hs_bindgen_bf629409e4677855_base
 
 -- | Let iOS apps with external event handling report onApplicationWillEnterForeground.
 --
@@ -377,7 +395,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.System_Unsafe_SDL_OnApplicationDidEnterForeground@
 hs_bindgen_36db0306e16f75d9 :: IO ()
 hs_bindgen_36db0306e16f75d9 =
-  BG.fromFFIType hs_bindgen_36db0306e16f75d9_base
+  hs_bindgen_36db0306e16f75d9_base
 
 -- | Let iOS apps with external event handling report onApplicationDidBecomeActive.
 --
diff --git a/src/SDL3/Sys/Bindgen/Thread.hs b/src/SDL3/Sys/Bindgen/Thread.hs
--- a/src/SDL3/Sys/Bindgen/Thread.hs
+++ b/src/SDL3/Sys/Bindgen/Thread.hs
@@ -7,6 +7,7 @@
 {-# LANGUAGE ExplicitForAll #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE MagicHash #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
@@ -18,6 +19,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | SDL offers cross-platform thread management functions. These are mostly concerned with starting threads, setting their priority, and dealing with their termination.
 --
@@ -57,6 +59,24 @@
 )
 where
 
+import Prelude (
+  Bounded,
+  Enum,
+  Eq,
+  IO,
+  Int,
+  Integral,
+  Num,
+  Ord,
+  Read,
+  Real,
+  Show,
+  fmap,
+  pure,
+  (<*>),
+  type (~),
+ )
+
 import HsBindgen.Runtime.CEnum qualified as CEnum
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.Marshal qualified as Marshal
@@ -416,13 +436,12 @@
   { unwrap :: BG.Ptr BG.Void -> IO BG.CInt
   }
   deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
 
 -- __unique:__ @toSDL_ThreadFunction_Aux@
 foreign import ccall safe "wrapper"
   hs_bindgen_d53137dca60d82b1_base
-    :: (BG.Ptr BG.Void -> IO BG.Int32)
-    -> IO (BG.FunPtr (BG.Ptr BG.Void -> IO BG.Int32))
+    :: (BG.Ptr BG.Void -> IO BG.CInt)
+    -> IO (BG.FunPtr (BG.Ptr BG.Void -> IO BG.CInt))
 
 -- __unique:__ @toSDL_ThreadFunction_Aux@
 hs_bindgen_d53137dca60d82b1
@@ -430,14 +449,20 @@
   -> IO (BG.FunPtr SDL_ThreadFunction_Aux)
 hs_bindgen_d53137dca60d82b1 =
   \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_d53137dca60d82b1_base (BG.toFFIType fun0))
+    fmap
+      BG.castFunPtr
+      ( hs_bindgen_d53137dca60d82b1_base
+          ( \x1 ->
+              fmap BG.toFFIType (BG.getField @"unwrap" fun0 (BG.fromFFIType x1))
+          )
+      )
 
 -- __unique:__ @fromSDL_ThreadFunction_Aux@
 foreign import ccall safe "dynamic"
   hs_bindgen_67f38a19566426bd_base
-    :: BG.FunPtr (BG.Ptr BG.Void -> IO BG.Int32)
+    :: BG.FunPtr (BG.Ptr BG.Void -> IO BG.CInt)
     -> BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @fromSDL_ThreadFunction_Aux@
 hs_bindgen_67f38a19566426bd
@@ -445,7 +470,10 @@
   -> SDL_ThreadFunction_Aux
 hs_bindgen_67f38a19566426bd =
   \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_67f38a19566426bd_base (BG.castFunPtrToFFIType funPtr0))
+    SDL_ThreadFunction_Aux
+      ( \x1 ->
+          fmap BG.fromFFIType (hs_bindgen_67f38a19566426bd_base (BG.castFunPtr funPtr0) (BG.toFFIType x1))
+      )
 
 instance BG.ToFunPtr SDL_ThreadFunction_Aux where
   toFunPtr = hs_bindgen_d53137dca60d82b1
@@ -660,7 +688,6 @@
   { unwrap :: BG.Ptr BG.Void -> IO ()
   }
   deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
 
 -- __unique:__ @toSDL_TLSDestructorCallback_Aux@
 foreign import ccall safe "wrapper"
@@ -674,7 +701,13 @@
   -> IO (BG.FunPtr SDL_TLSDestructorCallback_Aux)
 hs_bindgen_7c0725308cb75f6c =
   \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_7c0725308cb75f6c_base (BG.toFFIType fun0))
+    fmap
+      BG.castFunPtr
+      ( hs_bindgen_7c0725308cb75f6c_base
+          ( \x1 ->
+              BG.getField @"unwrap" fun0 (BG.fromFFIType x1)
+          )
+      )
 
 -- __unique:__ @fromSDL_TLSDestructorCallback_Aux@
 foreign import ccall safe "dynamic"
@@ -689,7 +722,10 @@
   -> SDL_TLSDestructorCallback_Aux
 hs_bindgen_bbd67b4f21094dd4 =
   \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_bbd67b4f21094dd4_base (BG.castFunPtrToFFIType funPtr0))
+    SDL_TLSDestructorCallback_Aux
+      ( \x1 ->
+          hs_bindgen_bbd67b4f21094dd4_base (BG.castFunPtr funPtr0) (BG.toFFIType x1)
+      )
 
 instance BG.ToFunPtr SDL_TLSDestructorCallback_Aux where
   toFunPtr = hs_bindgen_7c0725308cb75f6c
diff --git a/src/SDL3/Sys/Bindgen/Thread/FunPtr.hs b/src/SDL3/Sys/Bindgen/Thread/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Thread/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Thread/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Thread.FunPtr (
@@ -18,6 +20,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -27,7 +31,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_thread.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_thread.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Thread_get_SDL_CreateThreadRuntime */"
          , "__attribute__ ((const))"
          , "SDL_Thread *(*hs_bindgen_079d67764828e8ca (void)) ("
@@ -151,7 +159,7 @@
            )
        )
 hs_bindgen_079d67764828e8ca =
-  BG.fromFFIType hs_bindgen_079d67764828e8ca_base
+  fmap BG.fromFFIType hs_bindgen_079d67764828e8ca_base
 
 {-# NOINLINE sDL_CreateThreadRuntime #-}
 
@@ -202,7 +210,7 @@
            )
        )
 hs_bindgen_fbbbbe860e54a81b =
-  BG.fromFFIType hs_bindgen_fbbbbe860e54a81b_base
+  fmap BG.fromFFIType hs_bindgen_fbbbbe860e54a81b_base
 
 {-# NOINLINE sDL_CreateThreadWithPropertiesRuntime #-}
 
@@ -239,7 +247,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Thread_get_SDL_GetThreadName@
 hs_bindgen_e563c48c050c310f :: IO (BG.FunPtr (BG.Ptr SDL_Thread -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_e563c48c050c310f =
-  BG.fromFFIType hs_bindgen_e563c48c050c310f_base
+  fmap BG.fromFFIType hs_bindgen_e563c48c050c310f_base
 
 {-# NOINLINE sDL_GetThreadName #-}
 
@@ -266,7 +274,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Thread_get_SDL_GetCurrentThreadID@
 hs_bindgen_effa8645fe390420 :: IO (BG.FunPtr (IO SDL_ThreadID))
 hs_bindgen_effa8645fe390420 =
-  BG.fromFFIType hs_bindgen_effa8645fe390420_base
+  fmap BG.fromFFIType hs_bindgen_effa8645fe390420_base
 
 {-# NOINLINE sDL_GetCurrentThreadID #-}
 
@@ -297,7 +305,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Thread_get_SDL_GetThreadID@
 hs_bindgen_c6b2baacca9ccf65 :: IO (BG.FunPtr (BG.Ptr SDL_Thread -> IO SDL_ThreadID))
 hs_bindgen_c6b2baacca9ccf65 =
-  BG.fromFFIType hs_bindgen_c6b2baacca9ccf65_base
+  fmap BG.fromFFIType hs_bindgen_c6b2baacca9ccf65_base
 
 {-# NOINLINE sDL_GetThreadID #-}
 
@@ -328,7 +336,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Thread_get_SDL_SetCurrentThreadPriority@
 hs_bindgen_a168059a22478eba :: IO (BG.FunPtr (SDL_ThreadPriority -> IO BG.CBool))
 hs_bindgen_a168059a22478eba =
-  BG.fromFFIType hs_bindgen_a168059a22478eba_base
+  fmap BG.fromFFIType hs_bindgen_a168059a22478eba_base
 
 {-# NOINLINE sDL_SetCurrentThreadPriority #-}
 
@@ -357,7 +365,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Thread_get_SDL_WaitThread@
 hs_bindgen_cfb548a191eb099e :: IO (BG.FunPtr (BG.Ptr SDL_Thread -> BG.Ptr BG.CInt -> IO ()))
 hs_bindgen_cfb548a191eb099e =
-  BG.fromFFIType hs_bindgen_cfb548a191eb099e_base
+  fmap BG.fromFFIType hs_bindgen_cfb548a191eb099e_base
 
 {-# NOINLINE sDL_WaitThread #-}
 
@@ -398,7 +406,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Thread_get_SDL_GetThreadState@
 hs_bindgen_f7f587323d3bdf2a :: IO (BG.FunPtr (BG.Ptr SDL_Thread -> IO SDL_ThreadState))
 hs_bindgen_f7f587323d3bdf2a =
-  BG.fromFFIType hs_bindgen_f7f587323d3bdf2a_base
+  fmap BG.fromFFIType hs_bindgen_f7f587323d3bdf2a_base
 
 {-# NOINLINE sDL_GetThreadState #-}
 
@@ -427,7 +435,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Thread_get_SDL_DetachThread@
 hs_bindgen_aaa3526a91b1159b :: IO (BG.FunPtr (BG.Ptr SDL_Thread -> IO ()))
 hs_bindgen_aaa3526a91b1159b =
-  BG.fromFFIType hs_bindgen_aaa3526a91b1159b_base
+  fmap BG.fromFFIType hs_bindgen_aaa3526a91b1159b_base
 
 {-# NOINLINE sDL_DetachThread #-}
 
@@ -466,7 +474,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Thread_get_SDL_GetTLS@
 hs_bindgen_306c7e1462be621b :: IO (BG.FunPtr (BG.Ptr SDL_TLSID -> IO (BG.Ptr BG.Void)))
 hs_bindgen_306c7e1462be621b =
-  BG.fromFFIType hs_bindgen_306c7e1462be621b_base
+  fmap BG.fromFFIType hs_bindgen_306c7e1462be621b_base
 
 {-# NOINLINE sDL_GetTLS #-}
 
@@ -499,7 +507,7 @@
            (BG.Ptr SDL_TLSID -> PtrConst.PtrConst BG.Void -> SDL_TLSDestructorCallback -> IO BG.CBool)
        )
 hs_bindgen_aeaff0a42fc0a797 =
-  BG.fromFFIType hs_bindgen_aeaff0a42fc0a797_base
+  fmap BG.fromFFIType hs_bindgen_aeaff0a42fc0a797_base
 
 {-# NOINLINE sDL_SetTLS #-}
 
@@ -540,7 +548,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Thread_get_SDL_CleanupTLS@
 hs_bindgen_624951e26d725434 :: IO (BG.FunPtr (IO ()))
 hs_bindgen_624951e26d725434 =
-  BG.fromFFIType hs_bindgen_624951e26d725434_base
+  fmap BG.fromFFIType hs_bindgen_624951e26d725434_base
 
 {-# NOINLINE sDL_CleanupTLS #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Thread/Safe.hs b/src/SDL3/Sys/Bindgen/Thread/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Thread/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Thread/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Thread.Safe (
@@ -18,7 +20,11 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Properties qualified
@@ -27,7 +33,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_thread.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_thread.h>"
          , "SDL_Thread *hs_bindgen_7a5bb8de9530cf97 ("
          , "  SDL_ThreadFunction arg1,"
          , "  char const *arg2,"
@@ -115,8 +125,8 @@
     :: BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.FunPtr BG.Void
-    -> BG.FunPtr BG.Void
+    -> HsBindgen.Runtime.Support.FunPtrVoid
+    -> HsBindgen.Runtime.Support.FunPtrVoid
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Thread_Safe_SDL_CreateThreadRuntime@
@@ -128,7 +138,20 @@
   -> SDL3.Sys.Bindgen.Stdinc.SDL_FunctionPointer
   -> IO (BG.Ptr SDL_Thread)
 hs_bindgen_7a5bb8de9530cf97 =
-  BG.fromFFIType hs_bindgen_7a5bb8de9530cf97_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_7a5bb8de9530cf97_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | The actual entry point for SDL_CreateThread.
 --
@@ -166,9 +189,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Thread_Safe_SDL_CreateThreadWithPropertiesRuntime@
 foreign import ccall safe "hs_bindgen_f6b34f6b1ed3e652"
   hs_bindgen_f6b34f6b1ed3e652_base
-    :: BG.Word32
-    -> BG.FunPtr BG.Void
-    -> BG.FunPtr BG.Void
+    :: HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.Support.FunPtrVoid
+    -> HsBindgen.Runtime.Support.FunPtrVoid
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Thread_Safe_SDL_CreateThreadWithPropertiesRuntime@
@@ -178,7 +201,12 @@
   -> SDL3.Sys.Bindgen.Stdinc.SDL_FunctionPointer
   -> IO (BG.Ptr SDL_Thread)
 hs_bindgen_f6b34f6b1ed3e652 =
-  BG.fromFFIType hs_bindgen_f6b34f6b1ed3e652_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_f6b34f6b1ed3e652_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | The actual entry point for SDL_CreateThreadWithProperties.
 --
@@ -217,7 +245,8 @@
   :: BG.Ptr SDL_Thread
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_97b2a318eb18256b =
-  BG.fromFFIType hs_bindgen_97b2a318eb18256b_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_97b2a318eb18256b_base (BG.toFFIType x0))
 
 -- | Get the thread name as it was specified in @SDL_CreateThread()@.
 --
@@ -239,12 +268,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Thread_Safe_SDL_GetCurrentThreadID@
 foreign import ccall safe "hs_bindgen_5d7f41ef47a61ad6"
   hs_bindgen_5d7f41ef47a61ad6_base
-    :: IO BG.Word64
+    :: IO HsBindgen.Runtime.LibC.Word64
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Thread_Safe_SDL_GetCurrentThreadID@
 hs_bindgen_5d7f41ef47a61ad6 :: IO SDL_ThreadID
 hs_bindgen_5d7f41ef47a61ad6 =
-  BG.fromFFIType hs_bindgen_5d7f41ef47a61ad6_base
+  fmap BG.fromFFIType hs_bindgen_5d7f41ef47a61ad6_base
 
 -- | Get the thread identifier for the current thread.
 --
@@ -268,14 +297,15 @@
 foreign import ccall safe "hs_bindgen_d5ff55252314f9e2"
   hs_bindgen_d5ff55252314f9e2_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word64
+    -> IO HsBindgen.Runtime.LibC.Word64
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Thread_Safe_SDL_GetThreadID@
 hs_bindgen_d5ff55252314f9e2
   :: BG.Ptr SDL_Thread
   -> IO SDL_ThreadID
 hs_bindgen_d5ff55252314f9e2 =
-  BG.fromFFIType hs_bindgen_d5ff55252314f9e2_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d5ff55252314f9e2_base (BG.toFFIType x0))
 
 -- | Get the thread identifier for the specified thread.
 --
@@ -301,15 +331,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Thread_Safe_SDL_SetCurrentThreadPriority@
 foreign import ccall safe "hs_bindgen_bba3006936da2399"
   hs_bindgen_bba3006936da2399_base
-    :: BG.Word32
-    -> IO BG.Word8
+    :: BG.CUInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Thread_Safe_SDL_SetCurrentThreadPriority@
 hs_bindgen_bba3006936da2399
   :: SDL_ThreadPriority
   -> IO BG.CBool
 hs_bindgen_bba3006936da2399 =
-  BG.fromFFIType hs_bindgen_bba3006936da2399_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_bba3006936da2399_base (BG.toFFIType x0))
 
 -- | Set the priority for the current thread.
 --
@@ -344,7 +375,9 @@
   -> BG.Ptr BG.CInt
   -> IO ()
 hs_bindgen_3cc86150a4e3dbed =
-  BG.fromFFIType hs_bindgen_3cc86150a4e3dbed_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_3cc86150a4e3dbed_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Wait for a thread to finish.
 --
@@ -383,14 +416,15 @@
 foreign import ccall safe "hs_bindgen_dfbf2083fecd641f"
   hs_bindgen_dfbf2083fecd641f_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Thread_Safe_SDL_GetThreadState@
 hs_bindgen_dfbf2083fecd641f
   :: BG.Ptr SDL_Thread
   -> IO SDL_ThreadState
 hs_bindgen_dfbf2083fecd641f =
-  BG.fromFFIType hs_bindgen_dfbf2083fecd641f_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_dfbf2083fecd641f_base (BG.toFFIType x0))
 
 -- | Get the current state of a thread.
 --
@@ -422,7 +456,8 @@
   :: BG.Ptr SDL_Thread
   -> IO ()
 hs_bindgen_bf6e3b719a8a289b =
-  BG.fromFFIType hs_bindgen_bf6e3b719a8a289b_base
+  \x0 ->
+    hs_bindgen_bf6e3b719a8a289b_base (BG.toFFIType x0)
 
 -- | Let a thread clean up on exit without intervention.
 --
@@ -464,7 +499,8 @@
   :: BG.Ptr SDL_TLSID
   -> IO (BG.Ptr BG.Void)
 hs_bindgen_a7ebc89f9b77863c =
-  BG.fromFFIType hs_bindgen_a7ebc89f9b77863c_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a7ebc89f9b77863c_base (BG.toFFIType x0))
 
 -- | Get the current thread\'s value associated with a thread local storage ID.
 --
@@ -491,7 +527,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.FunPtr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Thread_Safe_SDL_SetTLS@
 hs_bindgen_09d0ca8da839649c
@@ -500,7 +536,12 @@
   -> SDL_TLSDestructorCallback
   -> IO BG.CBool
 hs_bindgen_09d0ca8da839649c =
-  BG.fromFFIType hs_bindgen_09d0ca8da839649c_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_09d0ca8da839649c_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set the current thread\'s value associated with a thread local storage ID.
 --
@@ -543,7 +584,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Thread_Safe_SDL_CleanupTLS@
 hs_bindgen_ff0e7a5728335d6e :: IO ()
 hs_bindgen_ff0e7a5728335d6e =
-  BG.fromFFIType hs_bindgen_ff0e7a5728335d6e_base
+  hs_bindgen_ff0e7a5728335d6e_base
 
 -- | Cleanup all TLS data for this thread.
 --
diff --git a/src/SDL3/Sys/Bindgen/Thread/Unsafe.hs b/src/SDL3/Sys/Bindgen/Thread/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Thread/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Thread/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Thread.Unsafe (
@@ -18,7 +20,11 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Properties qualified
@@ -27,7 +33,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_thread.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_thread.h>"
          , "SDL_Thread *hs_bindgen_0b01e232776d1771 ("
          , "  SDL_ThreadFunction arg1,"
          , "  char const *arg2,"
@@ -115,8 +125,8 @@
     :: BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.FunPtr BG.Void
-    -> BG.FunPtr BG.Void
+    -> HsBindgen.Runtime.Support.FunPtrVoid
+    -> HsBindgen.Runtime.Support.FunPtrVoid
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Thread_Unsafe_SDL_CreateThreadRuntime@
@@ -128,7 +138,20 @@
   -> SDL3.Sys.Bindgen.Stdinc.SDL_FunctionPointer
   -> IO (BG.Ptr SDL_Thread)
 hs_bindgen_0b01e232776d1771 =
-  BG.fromFFIType hs_bindgen_0b01e232776d1771_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_0b01e232776d1771_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | The actual entry point for SDL_CreateThread.
 --
@@ -166,9 +189,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Thread_Unsafe_SDL_CreateThreadWithPropertiesRuntime@
 foreign import ccall unsafe "hs_bindgen_1c8412acc4b761ed"
   hs_bindgen_1c8412acc4b761ed_base
-    :: BG.Word32
-    -> BG.FunPtr BG.Void
-    -> BG.FunPtr BG.Void
+    :: HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.Support.FunPtrVoid
+    -> HsBindgen.Runtime.Support.FunPtrVoid
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Thread_Unsafe_SDL_CreateThreadWithPropertiesRuntime@
@@ -178,7 +201,12 @@
   -> SDL3.Sys.Bindgen.Stdinc.SDL_FunctionPointer
   -> IO (BG.Ptr SDL_Thread)
 hs_bindgen_1c8412acc4b761ed =
-  BG.fromFFIType hs_bindgen_1c8412acc4b761ed_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_1c8412acc4b761ed_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | The actual entry point for SDL_CreateThreadWithProperties.
 --
@@ -217,7 +245,8 @@
   :: BG.Ptr SDL_Thread
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_98e2f1286c996b7c =
-  BG.fromFFIType hs_bindgen_98e2f1286c996b7c_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_98e2f1286c996b7c_base (BG.toFFIType x0))
 
 -- | Get the thread name as it was specified in @SDL_CreateThread()@.
 --
@@ -239,12 +268,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Thread_Unsafe_SDL_GetCurrentThreadID@
 foreign import ccall unsafe "hs_bindgen_cdc0bfea9267653a"
   hs_bindgen_cdc0bfea9267653a_base
-    :: IO BG.Word64
+    :: IO HsBindgen.Runtime.LibC.Word64
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Thread_Unsafe_SDL_GetCurrentThreadID@
 hs_bindgen_cdc0bfea9267653a :: IO SDL_ThreadID
 hs_bindgen_cdc0bfea9267653a =
-  BG.fromFFIType hs_bindgen_cdc0bfea9267653a_base
+  fmap BG.fromFFIType hs_bindgen_cdc0bfea9267653a_base
 
 -- | Get the thread identifier for the current thread.
 --
@@ -268,14 +297,15 @@
 foreign import ccall unsafe "hs_bindgen_0bcf1cae64c8f7f6"
   hs_bindgen_0bcf1cae64c8f7f6_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word64
+    -> IO HsBindgen.Runtime.LibC.Word64
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Thread_Unsafe_SDL_GetThreadID@
 hs_bindgen_0bcf1cae64c8f7f6
   :: BG.Ptr SDL_Thread
   -> IO SDL_ThreadID
 hs_bindgen_0bcf1cae64c8f7f6 =
-  BG.fromFFIType hs_bindgen_0bcf1cae64c8f7f6_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_0bcf1cae64c8f7f6_base (BG.toFFIType x0))
 
 -- | Get the thread identifier for the specified thread.
 --
@@ -301,15 +331,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Thread_Unsafe_SDL_SetCurrentThreadPriority@
 foreign import ccall unsafe "hs_bindgen_3d388217e2964b35"
   hs_bindgen_3d388217e2964b35_base
-    :: BG.Word32
-    -> IO BG.Word8
+    :: BG.CUInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Thread_Unsafe_SDL_SetCurrentThreadPriority@
 hs_bindgen_3d388217e2964b35
   :: SDL_ThreadPriority
   -> IO BG.CBool
 hs_bindgen_3d388217e2964b35 =
-  BG.fromFFIType hs_bindgen_3d388217e2964b35_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3d388217e2964b35_base (BG.toFFIType x0))
 
 -- | Set the priority for the current thread.
 --
@@ -344,7 +375,9 @@
   -> BG.Ptr BG.CInt
   -> IO ()
 hs_bindgen_fe4fa21954b69cf9 =
-  BG.fromFFIType hs_bindgen_fe4fa21954b69cf9_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_fe4fa21954b69cf9_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Wait for a thread to finish.
 --
@@ -383,14 +416,15 @@
 foreign import ccall unsafe "hs_bindgen_44514a39d4434fbe"
   hs_bindgen_44514a39d4434fbe_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Thread_Unsafe_SDL_GetThreadState@
 hs_bindgen_44514a39d4434fbe
   :: BG.Ptr SDL_Thread
   -> IO SDL_ThreadState
 hs_bindgen_44514a39d4434fbe =
-  BG.fromFFIType hs_bindgen_44514a39d4434fbe_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_44514a39d4434fbe_base (BG.toFFIType x0))
 
 -- | Get the current state of a thread.
 --
@@ -422,7 +456,8 @@
   :: BG.Ptr SDL_Thread
   -> IO ()
 hs_bindgen_4de0f0719eae79d5 =
-  BG.fromFFIType hs_bindgen_4de0f0719eae79d5_base
+  \x0 ->
+    hs_bindgen_4de0f0719eae79d5_base (BG.toFFIType x0)
 
 -- | Let a thread clean up on exit without intervention.
 --
@@ -464,7 +499,8 @@
   :: BG.Ptr SDL_TLSID
   -> IO (BG.Ptr BG.Void)
 hs_bindgen_43b0e02438c01176 =
-  BG.fromFFIType hs_bindgen_43b0e02438c01176_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_43b0e02438c01176_base (BG.toFFIType x0))
 
 -- | Get the current thread\'s value associated with a thread local storage ID.
 --
@@ -491,7 +527,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.FunPtr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Thread_Unsafe_SDL_SetTLS@
 hs_bindgen_ff93284cbd8231ff
@@ -500,7 +536,12 @@
   -> SDL_TLSDestructorCallback
   -> IO BG.CBool
 hs_bindgen_ff93284cbd8231ff =
-  BG.fromFFIType hs_bindgen_ff93284cbd8231ff_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_ff93284cbd8231ff_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set the current thread\'s value associated with a thread local storage ID.
 --
@@ -543,7 +584,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Thread_Unsafe_SDL_CleanupTLS@
 hs_bindgen_b394a7e70a8b089a :: IO ()
 hs_bindgen_b394a7e70a8b089a =
-  BG.fromFFIType hs_bindgen_b394a7e70a8b089a_base
+  hs_bindgen_b394a7e70a8b089a_base
 
 -- | Cleanup all TLS data for this thread.
 --
diff --git a/src/SDL3/Sys/Bindgen/ThreadShims/FunPtr.hs b/src/SDL3/Sys/Bindgen/ThreadShims/FunPtr.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/ThreadShims/FunPtr.hs
@@ -0,0 +1,152 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.ThreadShims.FunPtr (
+  SDL3.Sys.Bindgen.ThreadShims.FunPtr.lithon_SDL_CreateThread,
+  SDL3.Sys.Bindgen.ThreadShims.FunPtr.lithon_SDL_CreateThreadWithProperties,
+)
+where
+
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+import SDL3.Sys.Bindgen.Properties qualified
+import SDL3.Sys.Bindgen.Thread qualified
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <sdl3-bindgen-sys/SDL_thread_shims.h>"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.ThreadShims_get_lithon_SDL_CreateThread */"
+         , "__attribute__ ((const))"
+         , "SDL_Thread *(*hs_bindgen_4e6a4fa76c67ad02 (void)) ("
+         , "  SDL_ThreadFunction arg1,"
+         , "  char const *arg2,"
+         , "  void *arg3"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_CreateThread;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.ThreadShims_get_lithon_SDL_CreateThreadWithProperties */"
+         , "__attribute__ ((const))"
+         , "SDL_Thread *(*hs_bindgen_e399b5c4c93e2e27 (void)) ("
+         , "  SDL_PropertiesID arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_CreateThreadWithProperties;"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.ThreadShims_get_lithon_SDL_CreateThread@
+foreign import ccall unsafe "hs_bindgen_4e6a4fa76c67ad02"
+  hs_bindgen_4e6a4fa76c67ad02_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.ThreadShims_get_lithon_SDL_CreateThread@
+hs_bindgen_4e6a4fa76c67ad02
+  :: IO
+       ( BG.FunPtr
+           ( SDL3.Sys.Bindgen.Thread.SDL_ThreadFunction
+             -> PtrConst.PtrConst BG.CChar
+             -> BG.Ptr BG.Void
+             -> IO (BG.Ptr SDL3.Sys.Bindgen.Thread.SDL_Thread)
+           )
+       )
+hs_bindgen_4e6a4fa76c67ad02 =
+  fmap BG.fromFFIType hs_bindgen_4e6a4fa76c67ad02_base
+
+{-# NOINLINE lithon_SDL_CreateThread #-}
+
+-- | Create a new thread with a default stack size.
+--
+--     The SDL_CreateThread macro as a function. Like the macro, it calls SDL_CreateThreadRuntime with the C runtime\'s thread entry and exit functions for the platform it is compiled on (@_beginthreadex@ and @_endthreadex@ on Windows, NULL elsewhere), so prefer it to calling SDL_CreateThreadRuntime directly.
+--
+--     This is equivalent to calling SDL_CreateThreadWithProperties with the following properties set:
+--
+--     * @SDL_PROP_THREAD_CREATE_ENTRY_FUNCTION_POINTER@: @fn@
+--
+--     * @SDL_PROP_THREAD_CREATE_NAME_STRING@: @name@
+--
+--     * @SDL_PROP_THREAD_CREATE_USERDATA_POINTER@: @data@
+--
+--     [@fn@]: the SDL_ThreadFunction function to call in the new thread.
+--
+--     [@name@]: the name of the thread.
+--
+--     [@data@]: a pointer that is passed to @fn@.
+--
+--     [Returns]: an opaque pointer to the new thread object on success, NULL if the new thread could not be created; call SDL_GetError() for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_CreateThreadWithProperties, SDL_WaitThread
+--
+--     [C declaration]: @lithon_SDL_CreateThread@, defined at @sdl3-bindgen-sys\/SDL_thread_shims.h 54:31@
+lithon_SDL_CreateThread
+  :: BG.FunPtr
+       ( SDL3.Sys.Bindgen.Thread.SDL_ThreadFunction
+         -> PtrConst.PtrConst BG.CChar
+         -> BG.Ptr BG.Void
+         -> IO (BG.Ptr SDL3.Sys.Bindgen.Thread.SDL_Thread)
+       )
+lithon_SDL_CreateThread =
+  BG.unsafePerformIO hs_bindgen_4e6a4fa76c67ad02
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.ThreadShims_get_lithon_SDL_CreateThreadWithProperties@
+foreign import ccall unsafe "hs_bindgen_e399b5c4c93e2e27"
+  hs_bindgen_e399b5c4c93e2e27_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.ThreadShims_get_lithon_SDL_CreateThreadWithProperties@
+hs_bindgen_e399b5c4c93e2e27
+  :: IO
+       ( BG.FunPtr
+           (SDL3.Sys.Bindgen.Properties.SDL_PropertiesID -> IO (BG.Ptr SDL3.Sys.Bindgen.Thread.SDL_Thread))
+       )
+hs_bindgen_e399b5c4c93e2e27 =
+  fmap BG.fromFFIType hs_bindgen_e399b5c4c93e2e27_base
+
+{-# NOINLINE lithon_SDL_CreateThreadWithProperties #-}
+
+-- | Create a new thread with the specified properties.
+--
+--     The SDL_CreateThreadWithProperties macro as a function, passing the C runtime\'s thread entry and exit functions like SDL_CreateThread does.
+--
+--     These are the supported properties:
+--
+--     * @SDL_PROP_THREAD_CREATE_ENTRY_FUNCTION_POINTER@: an SDL_ThreadFunction value that will be called at the start of the new thread\'s life. Required.
+--
+--     * @SDL_PROP_THREAD_CREATE_NAME_STRING@: the name of the new thread, which might be available to debuggers. Optional, defaults to NULL.
+--
+--     * @SDL_PROP_THREAD_CREATE_USERDATA_POINTER@: an arbitrary app-defined pointer, which is passed to the entry function on the new thread, as its only parameter. Optional, defaults to NULL.
+--
+--     * @SDL_PROP_THREAD_CREATE_STACKSIZE_NUMBER@: the size, in bytes, of the new thread\'s stack. Optional, defaults to 0 (system-defined default).
+--
+--     [@props@]: the properties to use.
+--
+--     [Returns]: an opaque pointer to the new thread object on success, NULL if the new thread could not be created; call SDL_GetError() for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_CreateThread, SDL_WaitThread
+--
+--     [C declaration]: @lithon_SDL_CreateThreadWithProperties@, defined at @sdl3-bindgen-sys\/SDL_thread_shims.h 90:31@
+lithon_SDL_CreateThreadWithProperties
+  :: BG.FunPtr
+       (SDL3.Sys.Bindgen.Properties.SDL_PropertiesID -> IO (BG.Ptr SDL3.Sys.Bindgen.Thread.SDL_Thread))
+lithon_SDL_CreateThreadWithProperties =
+  BG.unsafePerformIO hs_bindgen_e399b5c4c93e2e27
diff --git a/src/SDL3/Sys/Bindgen/ThreadShims/Safe.hs b/src/SDL3/Sys/Bindgen/ThreadShims/Safe.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/ThreadShims/Safe.hs
@@ -0,0 +1,151 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.ThreadShims.Safe (
+  SDL3.Sys.Bindgen.ThreadShims.Safe.lithon_SDL_CreateThread,
+  SDL3.Sys.Bindgen.ThreadShims.Safe.lithon_SDL_CreateThreadWithProperties,
+)
+where
+
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
+import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+import SDL3.Sys.Bindgen.Properties qualified
+import SDL3.Sys.Bindgen.Thread qualified
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <sdl3-bindgen-sys/SDL_thread_shims.h>"
+         , "SDL_Thread *hs_bindgen_e84ec697d5dd22d2 ("
+         , "  SDL_ThreadFunction arg1,"
+         , "  char const *arg2,"
+         , "  void *arg3"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_CreateThread)(arg1, arg2, arg3);"
+         , "}"
+         , "SDL_Thread *hs_bindgen_860c725a5e87fb2b ("
+         , "  SDL_PropertiesID arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_CreateThreadWithProperties)(arg1);"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.ThreadShims_Safe_lithon_SDL_CreateThread@
+foreign import ccall safe "hs_bindgen_e84ec697d5dd22d2"
+  hs_bindgen_e84ec697d5dd22d2_base
+    :: HsBindgen.Runtime.Support.FunPtrVoid
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.ThreadShims_Safe_lithon_SDL_CreateThread@
+hs_bindgen_e84ec697d5dd22d2
+  :: SDL3.Sys.Bindgen.Thread.SDL_ThreadFunction
+  -> PtrConst.PtrConst BG.CChar
+  -> BG.Ptr BG.Void
+  -> IO (BG.Ptr SDL3.Sys.Bindgen.Thread.SDL_Thread)
+hs_bindgen_e84ec697d5dd22d2 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_e84ec697d5dd22d2_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Create a new thread with a default stack size.
+--
+--     The SDL_CreateThread macro as a function. Like the macro, it calls SDL_CreateThreadRuntime with the C runtime\'s thread entry and exit functions for the platform it is compiled on (@_beginthreadex@ and @_endthreadex@ on Windows, NULL elsewhere), so prefer it to calling SDL_CreateThreadRuntime directly.
+--
+--     This is equivalent to calling SDL_CreateThreadWithProperties with the following properties set:
+--
+--     * @SDL_PROP_THREAD_CREATE_ENTRY_FUNCTION_POINTER@: @fn@
+--
+--     * @SDL_PROP_THREAD_CREATE_NAME_STRING@: @name@
+--
+--     * @SDL_PROP_THREAD_CREATE_USERDATA_POINTER@: @data@
+--
+--     [Returns]: an opaque pointer to the new thread object on success, NULL if the new thread could not be created; call SDL_GetError() for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_CreateThreadWithProperties, SDL_WaitThread
+--
+--     [C declaration]: @lithon_SDL_CreateThread@, defined at @sdl3-bindgen-sys\/SDL_thread_shims.h 54:31@
+lithon_SDL_CreateThread
+  :: SDL3.Sys.Bindgen.Thread.SDL_ThreadFunction
+  -- ^
+  --
+  --           [@fn@]: the SDL_ThreadFunction function to call in the new thread.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@name@]: the name of the thread.
+  -> BG.Ptr BG.Void
+  -- ^
+  --
+  --           [@data@]: a pointer that is passed to @fn@.
+  -> IO (BG.Ptr SDL3.Sys.Bindgen.Thread.SDL_Thread)
+lithon_SDL_CreateThread = hs_bindgen_e84ec697d5dd22d2
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.ThreadShims_Safe_lithon_SDL_CreateThreadWithProperties@
+foreign import ccall safe "hs_bindgen_860c725a5e87fb2b"
+  hs_bindgen_860c725a5e87fb2b_base
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.ThreadShims_Safe_lithon_SDL_CreateThreadWithProperties@
+hs_bindgen_860c725a5e87fb2b
+  :: SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
+  -> IO (BG.Ptr SDL3.Sys.Bindgen.Thread.SDL_Thread)
+hs_bindgen_860c725a5e87fb2b =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_860c725a5e87fb2b_base (BG.toFFIType x0))
+
+-- | Create a new thread with the specified properties.
+--
+--     The SDL_CreateThreadWithProperties macro as a function, passing the C runtime\'s thread entry and exit functions like SDL_CreateThread does.
+--
+--     These are the supported properties:
+--
+--     * @SDL_PROP_THREAD_CREATE_ENTRY_FUNCTION_POINTER@: an SDL_ThreadFunction value that will be called at the start of the new thread\'s life. Required.
+--
+--     * @SDL_PROP_THREAD_CREATE_NAME_STRING@: the name of the new thread, which might be available to debuggers. Optional, defaults to NULL.
+--
+--     * @SDL_PROP_THREAD_CREATE_USERDATA_POINTER@: an arbitrary app-defined pointer, which is passed to the entry function on the new thread, as its only parameter. Optional, defaults to NULL.
+--
+--     * @SDL_PROP_THREAD_CREATE_STACKSIZE_NUMBER@: the size, in bytes, of the new thread\'s stack. Optional, defaults to 0 (system-defined default).
+--
+--     [Returns]: an opaque pointer to the new thread object on success, NULL if the new thread could not be created; call SDL_GetError() for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_CreateThread, SDL_WaitThread
+--
+--     [C declaration]: @lithon_SDL_CreateThreadWithProperties@, defined at @sdl3-bindgen-sys\/SDL_thread_shims.h 90:31@
+lithon_SDL_CreateThreadWithProperties
+  :: SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
+  -- ^
+  --
+  --           [@props@]: the properties to use.
+  -> IO (BG.Ptr SDL3.Sys.Bindgen.Thread.SDL_Thread)
+lithon_SDL_CreateThreadWithProperties =
+  hs_bindgen_860c725a5e87fb2b
diff --git a/src/SDL3/Sys/Bindgen/ThreadShims/Unsafe.hs b/src/SDL3/Sys/Bindgen/ThreadShims/Unsafe.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/ThreadShims/Unsafe.hs
@@ -0,0 +1,151 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.ThreadShims.Unsafe (
+  SDL3.Sys.Bindgen.ThreadShims.Unsafe.lithon_SDL_CreateThread,
+  SDL3.Sys.Bindgen.ThreadShims.Unsafe.lithon_SDL_CreateThreadWithProperties,
+)
+where
+
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
+import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+import SDL3.Sys.Bindgen.Properties qualified
+import SDL3.Sys.Bindgen.Thread qualified
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <sdl3-bindgen-sys/SDL_thread_shims.h>"
+         , "SDL_Thread *hs_bindgen_7a2ac8d260d17d80 ("
+         , "  SDL_ThreadFunction arg1,"
+         , "  char const *arg2,"
+         , "  void *arg3"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_CreateThread)(arg1, arg2, arg3);"
+         , "}"
+         , "SDL_Thread *hs_bindgen_bd3e96fd9f0fd969 ("
+         , "  SDL_PropertiesID arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_CreateThreadWithProperties)(arg1);"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.ThreadShims_Unsafe_lithon_SDL_CreateThread@
+foreign import ccall unsafe "hs_bindgen_7a2ac8d260d17d80"
+  hs_bindgen_7a2ac8d260d17d80_base
+    :: HsBindgen.Runtime.Support.FunPtrVoid
+    -> BG.Ptr BG.Void
+    -> BG.Ptr BG.Void
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.ThreadShims_Unsafe_lithon_SDL_CreateThread@
+hs_bindgen_7a2ac8d260d17d80
+  :: SDL3.Sys.Bindgen.Thread.SDL_ThreadFunction
+  -> PtrConst.PtrConst BG.CChar
+  -> BG.Ptr BG.Void
+  -> IO (BG.Ptr SDL3.Sys.Bindgen.Thread.SDL_Thread)
+hs_bindgen_7a2ac8d260d17d80 =
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_7a2ac8d260d17d80_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
+
+-- | Create a new thread with a default stack size.
+--
+--     The SDL_CreateThread macro as a function. Like the macro, it calls SDL_CreateThreadRuntime with the C runtime\'s thread entry and exit functions for the platform it is compiled on (@_beginthreadex@ and @_endthreadex@ on Windows, NULL elsewhere), so prefer it to calling SDL_CreateThreadRuntime directly.
+--
+--     This is equivalent to calling SDL_CreateThreadWithProperties with the following properties set:
+--
+--     * @SDL_PROP_THREAD_CREATE_ENTRY_FUNCTION_POINTER@: @fn@
+--
+--     * @SDL_PROP_THREAD_CREATE_NAME_STRING@: @name@
+--
+--     * @SDL_PROP_THREAD_CREATE_USERDATA_POINTER@: @data@
+--
+--     [Returns]: an opaque pointer to the new thread object on success, NULL if the new thread could not be created; call SDL_GetError() for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_CreateThreadWithProperties, SDL_WaitThread
+--
+--     [C declaration]: @lithon_SDL_CreateThread@, defined at @sdl3-bindgen-sys\/SDL_thread_shims.h 54:31@
+lithon_SDL_CreateThread
+  :: SDL3.Sys.Bindgen.Thread.SDL_ThreadFunction
+  -- ^
+  --
+  --           [@fn@]: the SDL_ThreadFunction function to call in the new thread.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@name@]: the name of the thread.
+  -> BG.Ptr BG.Void
+  -- ^
+  --
+  --           [@data@]: a pointer that is passed to @fn@.
+  -> IO (BG.Ptr SDL3.Sys.Bindgen.Thread.SDL_Thread)
+lithon_SDL_CreateThread = hs_bindgen_7a2ac8d260d17d80
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.ThreadShims_Unsafe_lithon_SDL_CreateThreadWithProperties@
+foreign import ccall unsafe "hs_bindgen_bd3e96fd9f0fd969"
+  hs_bindgen_bd3e96fd9f0fd969_base
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO (BG.Ptr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.ThreadShims_Unsafe_lithon_SDL_CreateThreadWithProperties@
+hs_bindgen_bd3e96fd9f0fd969
+  :: SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
+  -> IO (BG.Ptr SDL3.Sys.Bindgen.Thread.SDL_Thread)
+hs_bindgen_bd3e96fd9f0fd969 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_bd3e96fd9f0fd969_base (BG.toFFIType x0))
+
+-- | Create a new thread with the specified properties.
+--
+--     The SDL_CreateThreadWithProperties macro as a function, passing the C runtime\'s thread entry and exit functions like SDL_CreateThread does.
+--
+--     These are the supported properties:
+--
+--     * @SDL_PROP_THREAD_CREATE_ENTRY_FUNCTION_POINTER@: an SDL_ThreadFunction value that will be called at the start of the new thread\'s life. Required.
+--
+--     * @SDL_PROP_THREAD_CREATE_NAME_STRING@: the name of the new thread, which might be available to debuggers. Optional, defaults to NULL.
+--
+--     * @SDL_PROP_THREAD_CREATE_USERDATA_POINTER@: an arbitrary app-defined pointer, which is passed to the entry function on the new thread, as its only parameter. Optional, defaults to NULL.
+--
+--     * @SDL_PROP_THREAD_CREATE_STACKSIZE_NUMBER@: the size, in bytes, of the new thread\'s stack. Optional, defaults to 0 (system-defined default).
+--
+--     [Returns]: an opaque pointer to the new thread object on success, NULL if the new thread could not be created; call SDL_GetError() for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: SDL_CreateThread, SDL_WaitThread
+--
+--     [C declaration]: @lithon_SDL_CreateThreadWithProperties@, defined at @sdl3-bindgen-sys\/SDL_thread_shims.h 90:31@
+lithon_SDL_CreateThreadWithProperties
+  :: SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
+  -- ^
+  --
+  --           [@props@]: the properties to use.
+  -> IO (BG.Ptr SDL3.Sys.Bindgen.Thread.SDL_Thread)
+lithon_SDL_CreateThreadWithProperties =
+  hs_bindgen_bd3e96fd9f0fd969
diff --git a/src/SDL3/Sys/Bindgen/Time.hs b/src/SDL3/Sys/Bindgen/Time.hs
--- a/src/SDL3/Sys/Bindgen/Time.hs
+++ b/src/SDL3/Sys/Bindgen/Time.hs
@@ -16,6 +16,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | SDL realtime clock and date\/time routines.
 --
@@ -36,9 +37,12 @@
 )
 where
 
+import Prelude (Eq, Int, Ord, Read, Show, pure, (<*>), (>>), type (~))
+
 import HsBindgen.Runtime.CEnum qualified as CEnum
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.Marshal qualified as Marshal
+import HsBindgen.Runtime.Struct qualified as Struct
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField
 
@@ -129,6 +133,11 @@
 
 deriving via Marshal.EquivStorable SDL_DateTime instance BG.Storable SDL_DateTime
 
+deriving via Struct.IsStructViaReadRaw SDL_DateTime instance Struct.IsStruct SDL_DateTime
+
+-- | Year
+--
+--     [C declaration]: @year@, defined at @SDL3\/SDL_time.h 56:9@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "year" SDL_DateTime ty
@@ -161,6 +170,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | Month [01-12]
+--
+--     [C declaration]: @month@, defined at @SDL3\/SDL_time.h 57:9@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "month" SDL_DateTime ty
@@ -193,6 +205,9 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | Day of the month [01-31]
+--
+--     [C declaration]: @day@, defined at @SDL3\/SDL_time.h 58:9@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "day" SDL_DateTime ty
@@ -225,6 +240,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | Hour [0-23]
+--
+--     [C declaration]: @hour@, defined at @SDL3\/SDL_time.h 59:9@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "hour" SDL_DateTime ty
@@ -257,6 +275,9 @@
 
   offset# = \_ -> \_ -> 12
 
+-- | Minute [0-59]
+--
+--     [C declaration]: @minute@, defined at @SDL3\/SDL_time.h 60:9@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "minute" SDL_DateTime ty
@@ -289,6 +310,9 @@
 
   offset# = \_ -> \_ -> 16
 
+-- | Seconds [0-60]
+--
+--     [C declaration]: @second@, defined at @SDL3\/SDL_time.h 61:9@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "second" SDL_DateTime ty
@@ -321,6 +345,9 @@
 
   offset# = \_ -> \_ -> 20
 
+-- | Nanoseconds [0-999999999]
+--
+--     [C declaration]: @nanosecond@, defined at @SDL3\/SDL_time.h 62:9@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "nanosecond" SDL_DateTime ty
@@ -353,6 +380,9 @@
 
   offset# = \_ -> \_ -> 24
 
+-- | Day of the week [0-6] (0 being Sunday)
+--
+--     [C declaration]: @day_of_week@, defined at @SDL3\/SDL_time.h 63:9@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "day_of_week" SDL_DateTime ty
@@ -386,6 +416,9 @@
 
   offset# = \_ -> \_ -> 28
 
+-- | Seconds east of UTC
+--
+--     [C declaration]: @utc_offset@, defined at @SDL3\/SDL_time.h 64:9@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "utc_offset" SDL_DateTime ty
diff --git a/src/SDL3/Sys/Bindgen/Time/FunPtr.hs b/src/SDL3/Sys/Bindgen/Time/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Time/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Time/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Time.FunPtr (
@@ -15,6 +17,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -23,7 +27,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_time.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_time.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Time_get_SDL_GetDateTimeLocalePreferences */"
          , "__attribute__ ((const))"
          , "_Bool (*hs_bindgen_652b921a3c9bf987 (void)) ("
@@ -121,7 +129,7 @@
 hs_bindgen_652b921a3c9bf987
   :: IO (BG.FunPtr (BG.Ptr SDL_DateFormat -> BG.Ptr SDL_TimeFormat -> IO BG.CBool))
 hs_bindgen_652b921a3c9bf987 =
-  BG.fromFFIType hs_bindgen_652b921a3c9bf987_base
+  fmap BG.fromFFIType hs_bindgen_652b921a3c9bf987_base
 
 {-# NOINLINE sDL_GetDateTimeLocalePreferences #-}
 
@@ -154,7 +162,7 @@
 hs_bindgen_2e0928febd227948
   :: IO (BG.FunPtr (BG.Ptr SDL3.Sys.Bindgen.Stdinc.SDL_Time -> IO BG.CBool))
 hs_bindgen_2e0928febd227948 =
-  BG.fromFFIType hs_bindgen_2e0928febd227948_base
+  fmap BG.fromFFIType hs_bindgen_2e0928febd227948_base
 
 {-# NOINLINE sDL_GetCurrentTime #-}
 
@@ -182,7 +190,7 @@
 hs_bindgen_ccc14802da98ebc1
   :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.SDL_Time -> BG.Ptr SDL_DateTime -> BG.CBool -> IO BG.CBool))
 hs_bindgen_ccc14802da98ebc1 =
-  BG.fromFFIType hs_bindgen_ccc14802da98ebc1_base
+  fmap BG.fromFFIType hs_bindgen_ccc14802da98ebc1_base
 
 {-# NOINLINE sDL_TimeToDateTime #-}
 
@@ -216,7 +224,7 @@
   :: IO
        (BG.FunPtr (PtrConst.PtrConst SDL_DateTime -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.SDL_Time -> IO BG.CBool))
 hs_bindgen_6a3b281635772606 =
-  BG.fromFFIType hs_bindgen_6a3b281635772606_base
+  fmap BG.fromFFIType hs_bindgen_6a3b281635772606_base
 
 {-# NOINLINE sDL_DateTimeToTime #-}
 
@@ -256,7 +264,7 @@
            )
        )
 hs_bindgen_06ec16aebabe56e2 =
-  BG.fromFFIType hs_bindgen_06ec16aebabe56e2_base
+  fmap BG.fromFFIType hs_bindgen_06ec16aebabe56e2_base
 
 {-# NOINLINE sDL_TimeToWindows #-}
 
@@ -300,7 +308,7 @@
            )
        )
 hs_bindgen_c98ae78917a45694 =
-  BG.fromFFIType hs_bindgen_c98ae78917a45694_base
+  fmap BG.fromFFIType hs_bindgen_c98ae78917a45694_base
 
 {-# NOINLINE sDL_TimeFromWindows #-}
 
@@ -336,7 +344,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Time_get_SDL_GetDaysInMonth@
 hs_bindgen_53993d062e70ae21 :: IO (BG.FunPtr (BG.CInt -> BG.CInt -> IO BG.CInt))
 hs_bindgen_53993d062e70ae21 =
-  BG.fromFFIType hs_bindgen_53993d062e70ae21_base
+  fmap BG.fromFFIType hs_bindgen_53993d062e70ae21_base
 
 {-# NOINLINE sDL_GetDaysInMonth #-}
 
@@ -365,7 +373,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Time_get_SDL_GetDayOfYear@
 hs_bindgen_040f71197ea113df :: IO (BG.FunPtr (BG.CInt -> BG.CInt -> BG.CInt -> IO BG.CInt))
 hs_bindgen_040f71197ea113df =
-  BG.fromFFIType hs_bindgen_040f71197ea113df_base
+  fmap BG.fromFFIType hs_bindgen_040f71197ea113df_base
 
 {-# NOINLINE sDL_GetDayOfYear #-}
 
@@ -396,7 +404,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Time_get_SDL_GetDayOfWeek@
 hs_bindgen_6d1532a314d875ae :: IO (BG.FunPtr (BG.CInt -> BG.CInt -> BG.CInt -> IO BG.CInt))
 hs_bindgen_6d1532a314d875ae =
-  BG.fromFFIType hs_bindgen_6d1532a314d875ae_base
+  fmap BG.fromFFIType hs_bindgen_6d1532a314d875ae_base
 
 {-# NOINLINE sDL_GetDayOfWeek #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Time/Safe.hs b/src/SDL3/Sys/Bindgen/Time/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Time/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Time/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Time.Safe (
@@ -15,6 +17,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -23,7 +28,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_time.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_time.h>"
          , "_Bool hs_bindgen_35c19e2819b62184 ("
          , "  SDL_DateFormat *arg1,"
          , "  SDL_TimeFormat *arg2"
@@ -99,7 +108,7 @@
   hs_bindgen_35c19e2819b62184_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Time_Safe_SDL_GetDateTimeLocalePreferences@
 hs_bindgen_35c19e2819b62184
@@ -107,7 +116,9 @@
   -> BG.Ptr SDL_TimeFormat
   -> IO BG.CBool
 hs_bindgen_35c19e2819b62184 =
-  BG.fromFFIType hs_bindgen_35c19e2819b62184_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_35c19e2819b62184_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Gets the current preferred date and time format for the system locale.
 --
@@ -137,14 +148,15 @@
 foreign import ccall safe "hs_bindgen_6fb3c3e03b775a52"
   hs_bindgen_6fb3c3e03b775a52_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Time_Safe_SDL_GetCurrentTime@
 hs_bindgen_6fb3c3e03b775a52
   :: BG.Ptr SDL3.Sys.Bindgen.Stdinc.SDL_Time
   -> IO BG.CBool
 hs_bindgen_6fb3c3e03b775a52 =
-  BG.fromFFIType hs_bindgen_6fb3c3e03b775a52_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_6fb3c3e03b775a52_base (BG.toFFIType x0))
 
 -- | Gets the current value of the system realtime clock in nanoseconds since Jan 1, 1970 in Universal Coordinated Time (UTC).
 --
@@ -166,10 +178,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Time_Safe_SDL_TimeToDateTime@
 foreign import ccall safe "hs_bindgen_89e36f4522d6cda0"
   hs_bindgen_89e36f4522d6cda0_base
-    :: BG.Int64
+    :: HsBindgen.Runtime.LibC.Int64
     -> BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Time_Safe_SDL_TimeToDateTime@
 hs_bindgen_89e36f4522d6cda0
@@ -178,7 +190,12 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_89e36f4522d6cda0 =
-  BG.fromFFIType hs_bindgen_89e36f4522d6cda0_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_89e36f4522d6cda0_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Converts an SDL_Time in nanoseconds since the epoch to a calendar time in the 'SDL_DateTime' format.
 --
@@ -210,7 +227,7 @@
   hs_bindgen_caee0a375b8a5ff2_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Time_Safe_SDL_DateTimeToTime@
 hs_bindgen_caee0a375b8a5ff2
@@ -218,7 +235,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.SDL_Time
   -> IO BG.CBool
 hs_bindgen_caee0a375b8a5ff2 =
-  BG.fromFFIType hs_bindgen_caee0a375b8a5ff2_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_caee0a375b8a5ff2_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Converts a calendar time to an SDL_Time in nanoseconds since the epoch.
 --
@@ -246,7 +265,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Time_Safe_SDL_TimeToWindows@
 foreign import ccall safe "hs_bindgen_5de74c256e5d982b"
   hs_bindgen_5de74c256e5d982b_base
-    :: BG.Int64
+    :: HsBindgen.Runtime.LibC.Int64
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> IO ()
@@ -258,7 +277,10 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_5de74c256e5d982b =
-  BG.fromFFIType hs_bindgen_5de74c256e5d982b_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        hs_bindgen_5de74c256e5d982b_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2)
 
 -- | Converts an SDL time into a Windows FILETIME (100-nanosecond intervals since January 1, 1601).
 --
@@ -288,9 +310,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Time_Safe_SDL_TimeFromWindows@
 foreign import ccall safe "hs_bindgen_4499efff303d7db9"
   hs_bindgen_4499efff303d7db9_base
-    :: BG.Word32
-    -> BG.Word32
-    -> IO BG.Int64
+    :: HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO HsBindgen.Runtime.LibC.Int64
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Time_Safe_SDL_TimeFromWindows@
 hs_bindgen_4499efff303d7db9
@@ -298,7 +320,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO SDL3.Sys.Bindgen.Stdinc.SDL_Time
 hs_bindgen_4499efff303d7db9 =
-  BG.fromFFIType hs_bindgen_4499efff303d7db9_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_4499efff303d7db9_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Converts a Windows FILETIME (100-nanosecond intervals since January 1, 1601) to an SDL time.
 --
@@ -326,9 +350,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Time_Safe_SDL_GetDaysInMonth@
 foreign import ccall safe "hs_bindgen_730455fde72d5545"
   hs_bindgen_730455fde72d5545_base
-    :: BG.Int32
-    -> BG.Int32
-    -> IO BG.Int32
+    :: BG.CInt
+    -> BG.CInt
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Time_Safe_SDL_GetDaysInMonth@
 hs_bindgen_730455fde72d5545
@@ -336,7 +360,9 @@
   -> BG.CInt
   -> IO BG.CInt
 hs_bindgen_730455fde72d5545 =
-  BG.fromFFIType hs_bindgen_730455fde72d5545_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_730455fde72d5545_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the number of days in a month for a given year.
 --
@@ -362,10 +388,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Time_Safe_SDL_GetDayOfYear@
 foreign import ccall safe "hs_bindgen_9a9db640e42ae3ab"
   hs_bindgen_9a9db640e42ae3ab_base
-    :: BG.Int32
-    -> BG.Int32
-    -> BG.Int32
-    -> IO BG.Int32
+    :: BG.CInt
+    -> BG.CInt
+    -> BG.CInt
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Time_Safe_SDL_GetDayOfYear@
 hs_bindgen_9a9db640e42ae3ab
@@ -374,7 +400,12 @@
   -> BG.CInt
   -> IO BG.CInt
 hs_bindgen_9a9db640e42ae3ab =
-  BG.fromFFIType hs_bindgen_9a9db640e42ae3ab_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_9a9db640e42ae3ab_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get the day of year for a calendar date.
 --
@@ -404,10 +435,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Time_Safe_SDL_GetDayOfWeek@
 foreign import ccall safe "hs_bindgen_edb5a4338549d6b2"
   hs_bindgen_edb5a4338549d6b2_base
-    :: BG.Int32
-    -> BG.Int32
-    -> BG.Int32
-    -> IO BG.Int32
+    :: BG.CInt
+    -> BG.CInt
+    -> BG.CInt
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Time_Safe_SDL_GetDayOfWeek@
 hs_bindgen_edb5a4338549d6b2
@@ -416,7 +447,12 @@
   -> BG.CInt
   -> IO BG.CInt
 hs_bindgen_edb5a4338549d6b2 =
-  BG.fromFFIType hs_bindgen_edb5a4338549d6b2_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_edb5a4338549d6b2_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get the day of week for a calendar date.
 --
diff --git a/src/SDL3/Sys/Bindgen/Time/Unsafe.hs b/src/SDL3/Sys/Bindgen/Time/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Time/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Time/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Time.Unsafe (
@@ -15,6 +17,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -23,7 +28,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_time.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_time.h>"
          , "_Bool hs_bindgen_3432fa094bde3d31 ("
          , "  SDL_DateFormat *arg1,"
          , "  SDL_TimeFormat *arg2"
@@ -99,7 +108,7 @@
   hs_bindgen_3432fa094bde3d31_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Time_Unsafe_SDL_GetDateTimeLocalePreferences@
 hs_bindgen_3432fa094bde3d31
@@ -107,7 +116,9 @@
   -> BG.Ptr SDL_TimeFormat
   -> IO BG.CBool
 hs_bindgen_3432fa094bde3d31 =
-  BG.fromFFIType hs_bindgen_3432fa094bde3d31_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_3432fa094bde3d31_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Gets the current preferred date and time format for the system locale.
 --
@@ -137,14 +148,15 @@
 foreign import ccall unsafe "hs_bindgen_8783e8faf159e5f6"
   hs_bindgen_8783e8faf159e5f6_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Time_Unsafe_SDL_GetCurrentTime@
 hs_bindgen_8783e8faf159e5f6
   :: BG.Ptr SDL3.Sys.Bindgen.Stdinc.SDL_Time
   -> IO BG.CBool
 hs_bindgen_8783e8faf159e5f6 =
-  BG.fromFFIType hs_bindgen_8783e8faf159e5f6_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_8783e8faf159e5f6_base (BG.toFFIType x0))
 
 -- | Gets the current value of the system realtime clock in nanoseconds since Jan 1, 1970 in Universal Coordinated Time (UTC).
 --
@@ -166,10 +178,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Time_Unsafe_SDL_TimeToDateTime@
 foreign import ccall unsafe "hs_bindgen_fd32d59b7aff0779"
   hs_bindgen_fd32d59b7aff0779_base
-    :: BG.Int64
+    :: HsBindgen.Runtime.LibC.Int64
     -> BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Time_Unsafe_SDL_TimeToDateTime@
 hs_bindgen_fd32d59b7aff0779
@@ -178,7 +190,12 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_fd32d59b7aff0779 =
-  BG.fromFFIType hs_bindgen_fd32d59b7aff0779_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_fd32d59b7aff0779_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Converts an SDL_Time in nanoseconds since the epoch to a calendar time in the 'SDL_DateTime' format.
 --
@@ -210,7 +227,7 @@
   hs_bindgen_f67b5047c1f40868_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Time_Unsafe_SDL_DateTimeToTime@
 hs_bindgen_f67b5047c1f40868
@@ -218,7 +235,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.SDL_Time
   -> IO BG.CBool
 hs_bindgen_f67b5047c1f40868 =
-  BG.fromFFIType hs_bindgen_f67b5047c1f40868_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_f67b5047c1f40868_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Converts a calendar time to an SDL_Time in nanoseconds since the epoch.
 --
@@ -246,7 +265,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Time_Unsafe_SDL_TimeToWindows@
 foreign import ccall unsafe "hs_bindgen_073c7d3a9fd7c54d"
   hs_bindgen_073c7d3a9fd7c54d_base
-    :: BG.Int64
+    :: HsBindgen.Runtime.LibC.Int64
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> IO ()
@@ -258,7 +277,10 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_073c7d3a9fd7c54d =
-  BG.fromFFIType hs_bindgen_073c7d3a9fd7c54d_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        hs_bindgen_073c7d3a9fd7c54d_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2)
 
 -- | Converts an SDL time into a Windows FILETIME (100-nanosecond intervals since January 1, 1601).
 --
@@ -288,9 +310,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Time_Unsafe_SDL_TimeFromWindows@
 foreign import ccall unsafe "hs_bindgen_450903725dfdb0ee"
   hs_bindgen_450903725dfdb0ee_base
-    :: BG.Word32
-    -> BG.Word32
-    -> IO BG.Int64
+    :: HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO HsBindgen.Runtime.LibC.Int64
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Time_Unsafe_SDL_TimeFromWindows@
 hs_bindgen_450903725dfdb0ee
@@ -298,7 +320,9 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO SDL3.Sys.Bindgen.Stdinc.SDL_Time
 hs_bindgen_450903725dfdb0ee =
-  BG.fromFFIType hs_bindgen_450903725dfdb0ee_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_450903725dfdb0ee_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Converts a Windows FILETIME (100-nanosecond intervals since January 1, 1601) to an SDL time.
 --
@@ -326,9 +350,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Time_Unsafe_SDL_GetDaysInMonth@
 foreign import ccall unsafe "hs_bindgen_81cc8f2d17acfd75"
   hs_bindgen_81cc8f2d17acfd75_base
-    :: BG.Int32
-    -> BG.Int32
-    -> IO BG.Int32
+    :: BG.CInt
+    -> BG.CInt
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Time_Unsafe_SDL_GetDaysInMonth@
 hs_bindgen_81cc8f2d17acfd75
@@ -336,7 +360,9 @@
   -> BG.CInt
   -> IO BG.CInt
 hs_bindgen_81cc8f2d17acfd75 =
-  BG.fromFFIType hs_bindgen_81cc8f2d17acfd75_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_81cc8f2d17acfd75_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the number of days in a month for a given year.
 --
@@ -362,10 +388,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Time_Unsafe_SDL_GetDayOfYear@
 foreign import ccall unsafe "hs_bindgen_02c2e878757c0925"
   hs_bindgen_02c2e878757c0925_base
-    :: BG.Int32
-    -> BG.Int32
-    -> BG.Int32
-    -> IO BG.Int32
+    :: BG.CInt
+    -> BG.CInt
+    -> BG.CInt
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Time_Unsafe_SDL_GetDayOfYear@
 hs_bindgen_02c2e878757c0925
@@ -374,7 +400,12 @@
   -> BG.CInt
   -> IO BG.CInt
 hs_bindgen_02c2e878757c0925 =
-  BG.fromFFIType hs_bindgen_02c2e878757c0925_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_02c2e878757c0925_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get the day of year for a calendar date.
 --
@@ -404,10 +435,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Time_Unsafe_SDL_GetDayOfWeek@
 foreign import ccall unsafe "hs_bindgen_9583fd9571c78f9c"
   hs_bindgen_9583fd9571c78f9c_base
-    :: BG.Int32
-    -> BG.Int32
-    -> BG.Int32
-    -> IO BG.Int32
+    :: BG.CInt
+    -> BG.CInt
+    -> BG.CInt
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Time_Unsafe_SDL_GetDayOfWeek@
 hs_bindgen_9583fd9571c78f9c
@@ -416,7 +447,12 @@
   -> BG.CInt
   -> IO BG.CInt
 hs_bindgen_9583fd9571c78f9c =
-  BG.fromFFIType hs_bindgen_9583fd9571c78f9c_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_9583fd9571c78f9c_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get the day of week for a calendar date.
 --
diff --git a/src/SDL3/Sys/Bindgen/Timer.hs b/src/SDL3/Sys/Bindgen/Timer.hs
--- a/src/SDL3/Sys/Bindgen/Timer.hs
+++ b/src/SDL3/Sys/Bindgen/Timer.hs
@@ -5,6 +5,7 @@
 {-# LANGUAGE ExplicitForAll #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE MagicHash #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
@@ -14,6 +15,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | SDL provides time management functionality. It is useful for dealing with (usually) small durations of time.
 --
@@ -43,8 +45,11 @@
 )
 where
 
+import Prelude (Bounded, Enum, Eq, IO, Integral, Num, Ord, Read, Real, Show, fmap, type (~))
+
 import C.Expr.HostPlatform qualified
 import HsBindgen.Runtime.HasCField qualified as HasCField
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.Marshal qualified as Marshal
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField
@@ -207,13 +212,23 @@
       :: BG.Ptr BG.Void -> SDL_TimerID -> SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
   }
   deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
 
 -- __unique:__ @toSDL_TimerCallback_Aux@
 foreign import ccall safe "wrapper"
   hs_bindgen_a49c51828ca7c2b2_base
-    :: (BG.Ptr BG.Void -> BG.Word32 -> BG.Word32 -> IO BG.Word32)
-    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.Word32 -> BG.Word32 -> IO BG.Word32))
+    :: ( BG.Ptr BG.Void
+         -> HsBindgen.Runtime.LibC.Word32
+         -> HsBindgen.Runtime.LibC.Word32
+         -> IO HsBindgen.Runtime.LibC.Word32
+       )
+    -> IO
+         ( BG.FunPtr
+             ( BG.Ptr BG.Void
+               -> HsBindgen.Runtime.LibC.Word32
+               -> HsBindgen.Runtime.LibC.Word32
+               -> IO HsBindgen.Runtime.LibC.Word32
+             )
+         )
 
 -- __unique:__ @toSDL_TimerCallback_Aux@
 hs_bindgen_a49c51828ca7c2b2
@@ -221,16 +236,31 @@
   -> IO (BG.FunPtr SDL_TimerCallback_Aux)
 hs_bindgen_a49c51828ca7c2b2 =
   \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_a49c51828ca7c2b2_base (BG.toFFIType fun0))
+    fmap
+      BG.castFunPtr
+      ( hs_bindgen_a49c51828ca7c2b2_base
+          ( \x1 ->
+              \x2 ->
+                \x3 ->
+                  fmap
+                    BG.toFFIType
+                    (BG.getField @"unwrap" fun0 (BG.fromFFIType x1) (BG.fromFFIType x2) (BG.fromFFIType x3))
+          )
+      )
 
 -- __unique:__ @fromSDL_TimerCallback_Aux@
 foreign import ccall safe "dynamic"
   hs_bindgen_fecf80520b47dfb6_base
-    :: BG.FunPtr (BG.Ptr BG.Void -> BG.Word32 -> BG.Word32 -> IO BG.Word32)
+    :: BG.FunPtr
+         ( BG.Ptr BG.Void
+           -> HsBindgen.Runtime.LibC.Word32
+           -> HsBindgen.Runtime.LibC.Word32
+           -> IO HsBindgen.Runtime.LibC.Word32
+         )
     -> BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Word32
-    -> IO BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @fromSDL_TimerCallback_Aux@
 hs_bindgen_fecf80520b47dfb6
@@ -238,7 +268,19 @@
   -> SDL_TimerCallback_Aux
 hs_bindgen_fecf80520b47dfb6 =
   \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_fecf80520b47dfb6_base (BG.castFunPtrToFFIType funPtr0))
+    SDL_TimerCallback_Aux
+      ( \x1 ->
+          \x2 ->
+            \x3 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_fecf80520b47dfb6_base
+                    (BG.castFunPtr funPtr0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                )
+      )
 
 instance BG.ToFunPtr SDL_TimerCallback_Aux where
   toFunPtr = hs_bindgen_a49c51828ca7c2b2
@@ -337,13 +379,23 @@
       :: BG.Ptr BG.Void -> SDL_TimerID -> SDL3.Sys.Bindgen.Stdinc.Uint64 -> IO SDL3.Sys.Bindgen.Stdinc.Uint64
   }
   deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
 
 -- __unique:__ @toSDL_NSTimerCallback_Aux@
 foreign import ccall safe "wrapper"
   hs_bindgen_31fbeb64177dcacb_base
-    :: (BG.Ptr BG.Void -> BG.Word32 -> BG.Word64 -> IO BG.Word64)
-    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.Word32 -> BG.Word64 -> IO BG.Word64))
+    :: ( BG.Ptr BG.Void
+         -> HsBindgen.Runtime.LibC.Word32
+         -> HsBindgen.Runtime.LibC.Word64
+         -> IO HsBindgen.Runtime.LibC.Word64
+       )
+    -> IO
+         ( BG.FunPtr
+             ( BG.Ptr BG.Void
+               -> HsBindgen.Runtime.LibC.Word32
+               -> HsBindgen.Runtime.LibC.Word64
+               -> IO HsBindgen.Runtime.LibC.Word64
+             )
+         )
 
 -- __unique:__ @toSDL_NSTimerCallback_Aux@
 hs_bindgen_31fbeb64177dcacb
@@ -351,16 +403,31 @@
   -> IO (BG.FunPtr SDL_NSTimerCallback_Aux)
 hs_bindgen_31fbeb64177dcacb =
   \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_31fbeb64177dcacb_base (BG.toFFIType fun0))
+    fmap
+      BG.castFunPtr
+      ( hs_bindgen_31fbeb64177dcacb_base
+          ( \x1 ->
+              \x2 ->
+                \x3 ->
+                  fmap
+                    BG.toFFIType
+                    (BG.getField @"unwrap" fun0 (BG.fromFFIType x1) (BG.fromFFIType x2) (BG.fromFFIType x3))
+          )
+      )
 
 -- __unique:__ @fromSDL_NSTimerCallback_Aux@
 foreign import ccall safe "dynamic"
   hs_bindgen_389ed0c3b28b1730_base
-    :: BG.FunPtr (BG.Ptr BG.Void -> BG.Word32 -> BG.Word64 -> IO BG.Word64)
+    :: BG.FunPtr
+         ( BG.Ptr BG.Void
+           -> HsBindgen.Runtime.LibC.Word32
+           -> HsBindgen.Runtime.LibC.Word64
+           -> IO HsBindgen.Runtime.LibC.Word64
+         )
     -> BG.Ptr BG.Void
-    -> BG.Word32
-    -> BG.Word64
-    -> IO BG.Word64
+    -> HsBindgen.Runtime.LibC.Word32
+    -> HsBindgen.Runtime.LibC.Word64
+    -> IO HsBindgen.Runtime.LibC.Word64
 
 -- __unique:__ @fromSDL_NSTimerCallback_Aux@
 hs_bindgen_389ed0c3b28b1730
@@ -368,7 +435,19 @@
   -> SDL_NSTimerCallback_Aux
 hs_bindgen_389ed0c3b28b1730 =
   \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_389ed0c3b28b1730_base (BG.castFunPtrToFFIType funPtr0))
+    SDL_NSTimerCallback_Aux
+      ( \x1 ->
+          \x2 ->
+            \x3 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_389ed0c3b28b1730_base
+                    (BG.castFunPtr funPtr0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                )
+      )
 
 instance BG.ToFunPtr SDL_NSTimerCallback_Aux where
   toFunPtr = hs_bindgen_31fbeb64177dcacb
diff --git a/src/SDL3/Sys/Bindgen/Timer/FunPtr.hs b/src/SDL3/Sys/Bindgen/Timer/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Timer/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Timer/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Timer.FunPtr (
@@ -16,6 +18,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Stdinc qualified
@@ -23,7 +27,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_timer.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_timer.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Timer_get_SDL_GetTicks */"
          , "__attribute__ ((const))"
          , "Uint64 (*hs_bindgen_b002c533def7d6e4 (void)) (void)"
@@ -112,7 +120,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_get_SDL_GetTicks@
 hs_bindgen_b002c533def7d6e4 :: IO (BG.FunPtr (IO SDL3.Sys.Bindgen.Stdinc.Uint64))
 hs_bindgen_b002c533def7d6e4 =
-  BG.fromFFIType hs_bindgen_b002c533def7d6e4_base
+  fmap BG.fromFFIType hs_bindgen_b002c533def7d6e4_base
 
 {-# NOINLINE sDL_GetTicks #-}
 
@@ -139,7 +147,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_get_SDL_GetTicksNS@
 hs_bindgen_b11474f76c0aba2f :: IO (BG.FunPtr (IO SDL3.Sys.Bindgen.Stdinc.Uint64))
 hs_bindgen_b11474f76c0aba2f =
-  BG.fromFFIType hs_bindgen_b11474f76c0aba2f_base
+  fmap BG.fromFFIType hs_bindgen_b11474f76c0aba2f_base
 
 {-# NOINLINE sDL_GetTicksNS #-}
 
@@ -164,7 +172,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_get_SDL_GetPerformanceCounter@
 hs_bindgen_2b2a93de1b59846d :: IO (BG.FunPtr (IO SDL3.Sys.Bindgen.Stdinc.Uint64))
 hs_bindgen_2b2a93de1b59846d =
-  BG.fromFFIType hs_bindgen_2b2a93de1b59846d_base
+  fmap BG.fromFFIType hs_bindgen_2b2a93de1b59846d_base
 
 {-# NOINLINE sDL_GetPerformanceCounter #-}
 
@@ -195,7 +203,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_get_SDL_GetPerformanceFrequency@
 hs_bindgen_4255230676734c7d :: IO (BG.FunPtr (IO SDL3.Sys.Bindgen.Stdinc.Uint64))
 hs_bindgen_4255230676734c7d =
-  BG.fromFFIType hs_bindgen_4255230676734c7d_base
+  fmap BG.fromFFIType hs_bindgen_4255230676734c7d_base
 
 {-# NOINLINE sDL_GetPerformanceFrequency #-}
 
@@ -222,7 +230,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_get_SDL_Delay@
 hs_bindgen_84b99149e32b080f :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO ()))
 hs_bindgen_84b99149e32b080f =
-  BG.fromFFIType hs_bindgen_84b99149e32b080f_base
+  fmap BG.fromFFIType hs_bindgen_84b99149e32b080f_base
 
 {-# NOINLINE sDL_Delay #-}
 
@@ -251,7 +259,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_get_SDL_DelayNS@
 hs_bindgen_1a329c57b5bdd945 :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint64 -> IO ()))
 hs_bindgen_1a329c57b5bdd945 =
-  BG.fromFFIType hs_bindgen_1a329c57b5bdd945_base
+  fmap BG.fromFFIType hs_bindgen_1a329c57b5bdd945_base
 
 {-# NOINLINE sDL_DelayNS #-}
 
@@ -280,7 +288,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_get_SDL_DelayPrecise@
 hs_bindgen_f88afdd785f29344 :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint64 -> IO ()))
 hs_bindgen_f88afdd785f29344 =
-  BG.fromFFIType hs_bindgen_f88afdd785f29344_base
+  fmap BG.fromFFIType hs_bindgen_f88afdd785f29344_base
 
 {-# NOINLINE sDL_DelayPrecise #-}
 
@@ -311,7 +319,7 @@
   :: IO
        (BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint32 -> SDL_TimerCallback -> BG.Ptr BG.Void -> IO SDL_TimerID))
 hs_bindgen_fd3519e258872841 =
-  BG.fromFFIType hs_bindgen_fd3519e258872841_base
+  fmap BG.fromFFIType hs_bindgen_fd3519e258872841_base
 
 {-# NOINLINE sDL_AddTimer #-}
 
@@ -357,7 +365,7 @@
            (SDL3.Sys.Bindgen.Stdinc.Uint64 -> SDL_NSTimerCallback -> BG.Ptr BG.Void -> IO SDL_TimerID)
        )
 hs_bindgen_de4009388b75ebae =
-  BG.fromFFIType hs_bindgen_de4009388b75ebae_base
+  fmap BG.fromFFIType hs_bindgen_de4009388b75ebae_base
 
 {-# NOINLINE sDL_AddTimerNS #-}
 
@@ -400,7 +408,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_get_SDL_RemoveTimer@
 hs_bindgen_837b4956d1a9314e :: IO (BG.FunPtr (SDL_TimerID -> IO BG.CBool))
 hs_bindgen_837b4956d1a9314e =
-  BG.fromFFIType hs_bindgen_837b4956d1a9314e_base
+  fmap BG.fromFFIType hs_bindgen_837b4956d1a9314e_base
 
 {-# NOINLINE sDL_RemoveTimer #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Timer/Safe.hs b/src/SDL3/Sys/Bindgen/Timer/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Timer/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Timer/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Timer.Safe (
@@ -16,6 +18,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Stdinc qualified
@@ -23,7 +28,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_timer.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_timer.h>"
          , "Uint64 hs_bindgen_c6153618a018e856 (void)"
          , "{"
          , "  return (SDL_GetTicks)();"
@@ -87,12 +96,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Safe_SDL_GetTicks@
 foreign import ccall safe "hs_bindgen_c6153618a018e856"
   hs_bindgen_c6153618a018e856_base
-    :: IO BG.Word64
+    :: IO HsBindgen.Runtime.LibC.Word64
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Safe_SDL_GetTicks@
 hs_bindgen_c6153618a018e856 :: IO SDL3.Sys.Bindgen.Stdinc.Uint64
 hs_bindgen_c6153618a018e856 =
-  BG.fromFFIType hs_bindgen_c6153618a018e856_base
+  fmap BG.fromFFIType hs_bindgen_c6153618a018e856_base
 
 -- | Get the number of milliseconds that have elapsed since the SDL library initialization.
 --
@@ -111,12 +120,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Safe_SDL_GetTicksNS@
 foreign import ccall safe "hs_bindgen_47e2e360ac6e112d"
   hs_bindgen_47e2e360ac6e112d_base
-    :: IO BG.Word64
+    :: IO HsBindgen.Runtime.LibC.Word64
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Safe_SDL_GetTicksNS@
 hs_bindgen_47e2e360ac6e112d :: IO SDL3.Sys.Bindgen.Stdinc.Uint64
 hs_bindgen_47e2e360ac6e112d =
-  BG.fromFFIType hs_bindgen_47e2e360ac6e112d_base
+  fmap BG.fromFFIType hs_bindgen_47e2e360ac6e112d_base
 
 -- | Get the number of nanoseconds since SDL library initialization.
 --
@@ -133,12 +142,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Safe_SDL_GetPerformanceCounter@
 foreign import ccall safe "hs_bindgen_e58f7e74d5dfd2f6"
   hs_bindgen_e58f7e74d5dfd2f6_base
-    :: IO BG.Word64
+    :: IO HsBindgen.Runtime.LibC.Word64
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Safe_SDL_GetPerformanceCounter@
 hs_bindgen_e58f7e74d5dfd2f6 :: IO SDL3.Sys.Bindgen.Stdinc.Uint64
 hs_bindgen_e58f7e74d5dfd2f6 =
-  BG.fromFFIType hs_bindgen_e58f7e74d5dfd2f6_base
+  fmap BG.fromFFIType hs_bindgen_e58f7e74d5dfd2f6_base
 
 -- | Get the current value of the high resolution counter.
 --
@@ -162,12 +171,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Safe_SDL_GetPerformanceFrequency@
 foreign import ccall safe "hs_bindgen_3a4825ac03082c11"
   hs_bindgen_3a4825ac03082c11_base
-    :: IO BG.Word64
+    :: IO HsBindgen.Runtime.LibC.Word64
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Safe_SDL_GetPerformanceFrequency@
 hs_bindgen_3a4825ac03082c11 :: IO SDL3.Sys.Bindgen.Stdinc.Uint64
 hs_bindgen_3a4825ac03082c11 =
-  BG.fromFFIType hs_bindgen_3a4825ac03082c11_base
+  fmap BG.fromFFIType hs_bindgen_3a4825ac03082c11_base
 
 -- | Get the count per second of the high resolution counter.
 --
@@ -187,7 +196,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Safe_SDL_Delay@
 foreign import ccall safe "hs_bindgen_8754cd6d3f04ccff"
   hs_bindgen_8754cd6d3f04ccff_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Safe_SDL_Delay@
@@ -195,7 +204,8 @@
   :: SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_8754cd6d3f04ccff =
-  BG.fromFFIType hs_bindgen_8754cd6d3f04ccff_base
+  \x0 ->
+    hs_bindgen_8754cd6d3f04ccff_base (BG.toFFIType x0)
 
 -- | Wait a specified number of milliseconds before returning.
 --
@@ -219,7 +229,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Safe_SDL_DelayNS@
 foreign import ccall safe "hs_bindgen_4581488a34fdd3e7"
   hs_bindgen_4581488a34fdd3e7_base
-    :: BG.Word64
+    :: HsBindgen.Runtime.LibC.Word64
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Safe_SDL_DelayNS@
@@ -227,7 +237,8 @@
   :: SDL3.Sys.Bindgen.Stdinc.Uint64
   -> IO ()
 hs_bindgen_4581488a34fdd3e7 =
-  BG.fromFFIType hs_bindgen_4581488a34fdd3e7_base
+  \x0 ->
+    hs_bindgen_4581488a34fdd3e7_base (BG.toFFIType x0)
 
 -- | Wait a specified number of nanoseconds before returning.
 --
@@ -251,7 +262,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Safe_SDL_DelayPrecise@
 foreign import ccall safe "hs_bindgen_19457ba0f1d978a7"
   hs_bindgen_19457ba0f1d978a7_base
-    :: BG.Word64
+    :: HsBindgen.Runtime.LibC.Word64
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Safe_SDL_DelayPrecise@
@@ -259,7 +270,8 @@
   :: SDL3.Sys.Bindgen.Stdinc.Uint64
   -> IO ()
 hs_bindgen_19457ba0f1d978a7 =
-  BG.fromFFIType hs_bindgen_19457ba0f1d978a7_base
+  \x0 ->
+    hs_bindgen_19457ba0f1d978a7_base (BG.toFFIType x0)
 
 -- | Wait a specified number of nanoseconds before returning.
 --
@@ -283,10 +295,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Safe_SDL_AddTimer@
 foreign import ccall safe "hs_bindgen_1eb4863b9e459f9b"
   hs_bindgen_1eb4863b9e459f9b_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Safe_SDL_AddTimer@
 hs_bindgen_1eb4863b9e459f9b
@@ -295,7 +307,12 @@
   -> BG.Ptr BG.Void
   -> IO SDL_TimerID
 hs_bindgen_1eb4863b9e459f9b =
-  BG.fromFFIType hs_bindgen_1eb4863b9e459f9b_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_1eb4863b9e459f9b_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Call a callback function at a future time.
 --
@@ -335,10 +352,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Safe_SDL_AddTimerNS@
 foreign import ccall safe "hs_bindgen_04843533c2eea6bf"
   hs_bindgen_04843533c2eea6bf_base
-    :: BG.Word64
+    :: HsBindgen.Runtime.LibC.Word64
     -> BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Safe_SDL_AddTimerNS@
 hs_bindgen_04843533c2eea6bf
@@ -347,7 +364,12 @@
   -> BG.Ptr BG.Void
   -> IO SDL_TimerID
 hs_bindgen_04843533c2eea6bf =
-  BG.fromFFIType hs_bindgen_04843533c2eea6bf_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_04843533c2eea6bf_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Call a callback function at a future time.
 --
@@ -387,15 +409,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Safe_SDL_RemoveTimer@
 foreign import ccall safe "hs_bindgen_3794f4416b9527ed"
   hs_bindgen_3794f4416b9527ed_base
-    :: BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Safe_SDL_RemoveTimer@
 hs_bindgen_3794f4416b9527ed
   :: SDL_TimerID
   -> IO BG.CBool
 hs_bindgen_3794f4416b9527ed =
-  BG.fromFFIType hs_bindgen_3794f4416b9527ed_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3794f4416b9527ed_base (BG.toFFIType x0))
 
 -- | Remove a timer created with @SDL_AddTimer()@.
 --
diff --git a/src/SDL3/Sys/Bindgen/Timer/Unsafe.hs b/src/SDL3/Sys/Bindgen/Timer/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Timer/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Timer/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Timer.Unsafe (
@@ -16,6 +18,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Stdinc qualified
@@ -23,7 +28,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_timer.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_timer.h>"
          , "Uint64 hs_bindgen_048639750b48f695 (void)"
          , "{"
          , "  return (SDL_GetTicks)();"
@@ -87,12 +96,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Unsafe_SDL_GetTicks@
 foreign import ccall unsafe "hs_bindgen_048639750b48f695"
   hs_bindgen_048639750b48f695_base
-    :: IO BG.Word64
+    :: IO HsBindgen.Runtime.LibC.Word64
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Unsafe_SDL_GetTicks@
 hs_bindgen_048639750b48f695 :: IO SDL3.Sys.Bindgen.Stdinc.Uint64
 hs_bindgen_048639750b48f695 =
-  BG.fromFFIType hs_bindgen_048639750b48f695_base
+  fmap BG.fromFFIType hs_bindgen_048639750b48f695_base
 
 -- | Get the number of milliseconds that have elapsed since the SDL library initialization.
 --
@@ -111,12 +120,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Unsafe_SDL_GetTicksNS@
 foreign import ccall unsafe "hs_bindgen_5bd68dc01ceb08e8"
   hs_bindgen_5bd68dc01ceb08e8_base
-    :: IO BG.Word64
+    :: IO HsBindgen.Runtime.LibC.Word64
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Unsafe_SDL_GetTicksNS@
 hs_bindgen_5bd68dc01ceb08e8 :: IO SDL3.Sys.Bindgen.Stdinc.Uint64
 hs_bindgen_5bd68dc01ceb08e8 =
-  BG.fromFFIType hs_bindgen_5bd68dc01ceb08e8_base
+  fmap BG.fromFFIType hs_bindgen_5bd68dc01ceb08e8_base
 
 -- | Get the number of nanoseconds since SDL library initialization.
 --
@@ -133,12 +142,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Unsafe_SDL_GetPerformanceCounter@
 foreign import ccall unsafe "hs_bindgen_8d8e0f9377cfcf7d"
   hs_bindgen_8d8e0f9377cfcf7d_base
-    :: IO BG.Word64
+    :: IO HsBindgen.Runtime.LibC.Word64
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Unsafe_SDL_GetPerformanceCounter@
 hs_bindgen_8d8e0f9377cfcf7d :: IO SDL3.Sys.Bindgen.Stdinc.Uint64
 hs_bindgen_8d8e0f9377cfcf7d =
-  BG.fromFFIType hs_bindgen_8d8e0f9377cfcf7d_base
+  fmap BG.fromFFIType hs_bindgen_8d8e0f9377cfcf7d_base
 
 -- | Get the current value of the high resolution counter.
 --
@@ -162,12 +171,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Unsafe_SDL_GetPerformanceFrequency@
 foreign import ccall unsafe "hs_bindgen_6775fe97a579d8be"
   hs_bindgen_6775fe97a579d8be_base
-    :: IO BG.Word64
+    :: IO HsBindgen.Runtime.LibC.Word64
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Unsafe_SDL_GetPerformanceFrequency@
 hs_bindgen_6775fe97a579d8be :: IO SDL3.Sys.Bindgen.Stdinc.Uint64
 hs_bindgen_6775fe97a579d8be =
-  BG.fromFFIType hs_bindgen_6775fe97a579d8be_base
+  fmap BG.fromFFIType hs_bindgen_6775fe97a579d8be_base
 
 -- | Get the count per second of the high resolution counter.
 --
@@ -187,7 +196,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Unsafe_SDL_Delay@
 foreign import ccall unsafe "hs_bindgen_1b1b86e10ec2a52a"
   hs_bindgen_1b1b86e10ec2a52a_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Unsafe_SDL_Delay@
@@ -195,7 +204,8 @@
   :: SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO ()
 hs_bindgen_1b1b86e10ec2a52a =
-  BG.fromFFIType hs_bindgen_1b1b86e10ec2a52a_base
+  \x0 ->
+    hs_bindgen_1b1b86e10ec2a52a_base (BG.toFFIType x0)
 
 -- | Wait a specified number of milliseconds before returning.
 --
@@ -219,7 +229,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Unsafe_SDL_DelayNS@
 foreign import ccall unsafe "hs_bindgen_8bb71f8de5a6570c"
   hs_bindgen_8bb71f8de5a6570c_base
-    :: BG.Word64
+    :: HsBindgen.Runtime.LibC.Word64
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Unsafe_SDL_DelayNS@
@@ -227,7 +237,8 @@
   :: SDL3.Sys.Bindgen.Stdinc.Uint64
   -> IO ()
 hs_bindgen_8bb71f8de5a6570c =
-  BG.fromFFIType hs_bindgen_8bb71f8de5a6570c_base
+  \x0 ->
+    hs_bindgen_8bb71f8de5a6570c_base (BG.toFFIType x0)
 
 -- | Wait a specified number of nanoseconds before returning.
 --
@@ -251,7 +262,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Unsafe_SDL_DelayPrecise@
 foreign import ccall unsafe "hs_bindgen_ec69e98c6a717d75"
   hs_bindgen_ec69e98c6a717d75_base
-    :: BG.Word64
+    :: HsBindgen.Runtime.LibC.Word64
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Unsafe_SDL_DelayPrecise@
@@ -259,7 +270,8 @@
   :: SDL3.Sys.Bindgen.Stdinc.Uint64
   -> IO ()
 hs_bindgen_ec69e98c6a717d75 =
-  BG.fromFFIType hs_bindgen_ec69e98c6a717d75_base
+  \x0 ->
+    hs_bindgen_ec69e98c6a717d75_base (BG.toFFIType x0)
 
 -- | Wait a specified number of nanoseconds before returning.
 --
@@ -283,10 +295,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Unsafe_SDL_AddTimer@
 foreign import ccall unsafe "hs_bindgen_14f66e216435c762"
   hs_bindgen_14f66e216435c762_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Unsafe_SDL_AddTimer@
 hs_bindgen_14f66e216435c762
@@ -295,7 +307,12 @@
   -> BG.Ptr BG.Void
   -> IO SDL_TimerID
 hs_bindgen_14f66e216435c762 =
-  BG.fromFFIType hs_bindgen_14f66e216435c762_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_14f66e216435c762_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Call a callback function at a future time.
 --
@@ -335,10 +352,10 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Unsafe_SDL_AddTimerNS@
 foreign import ccall unsafe "hs_bindgen_a0b2068e0ed2278f"
   hs_bindgen_a0b2068e0ed2278f_base
-    :: BG.Word64
+    :: HsBindgen.Runtime.LibC.Word64
     -> BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Unsafe_SDL_AddTimerNS@
 hs_bindgen_a0b2068e0ed2278f
@@ -347,7 +364,12 @@
   -> BG.Ptr BG.Void
   -> IO SDL_TimerID
 hs_bindgen_a0b2068e0ed2278f =
-  BG.fromFFIType hs_bindgen_a0b2068e0ed2278f_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_a0b2068e0ed2278f_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Call a callback function at a future time.
 --
@@ -387,15 +409,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Unsafe_SDL_RemoveTimer@
 foreign import ccall unsafe "hs_bindgen_55aee2089fbaec7e"
   hs_bindgen_55aee2089fbaec7e_base
-    :: BG.Word32
-    -> IO BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Timer_Unsafe_SDL_RemoveTimer@
 hs_bindgen_55aee2089fbaec7e
   :: SDL_TimerID
   -> IO BG.CBool
 hs_bindgen_55aee2089fbaec7e =
-  BG.fromFFIType hs_bindgen_55aee2089fbaec7e_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_55aee2089fbaec7e_base (BG.toFFIType x0))
 
 -- | Remove a timer created with @SDL_AddTimer()@.
 --
diff --git a/src/SDL3/Sys/Bindgen/TimerShims/FunPtr.hs b/src/SDL3/Sys/Bindgen/TimerShims/FunPtr.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/TimerShims/FunPtr.hs
@@ -0,0 +1,146 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.TimerShims.FunPtr (
+  SDL3.Sys.Bindgen.TimerShims.FunPtr.lithon_SDL_SECONDS_TO_NS,
+  SDL3.Sys.Bindgen.TimerShims.FunPtr.lithon_SDL_MS_TO_NS,
+  SDL3.Sys.Bindgen.TimerShims.FunPtr.lithon_SDL_US_TO_NS,
+)
+where
+
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+import SDL3.Sys.Bindgen.Stdinc qualified
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <sdl3-bindgen-sys/SDL_timer_shims.h>"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.TimerShims_get_lithon_SDL_SECONDS_TO_NS */"
+         , "__attribute__ ((const))"
+         , "Uint64 (*hs_bindgen_bb4a7cef88282955 (void)) ("
+         , "  Uint64 arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_SECONDS_TO_NS;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.TimerShims_get_lithon_SDL_MS_TO_NS */"
+         , "__attribute__ ((const))"
+         , "Uint64 (*hs_bindgen_e0cb179de29f3904 (void)) ("
+         , "  Uint64 arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_MS_TO_NS;"
+         , "}"
+         , "/* sdl3bindgensys_SDL3.Sys.Bindgen.TimerShims_get_lithon_SDL_US_TO_NS */"
+         , "__attribute__ ((const))"
+         , "Uint64 (*hs_bindgen_258f5234969dea47 (void)) ("
+         , "  Uint64 arg1"
+         , ")"
+         , "{"
+         , "  return &lithon_SDL_US_TO_NS;"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.TimerShims_get_lithon_SDL_SECONDS_TO_NS@
+foreign import ccall unsafe "hs_bindgen_bb4a7cef88282955"
+  hs_bindgen_bb4a7cef88282955_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.TimerShims_get_lithon_SDL_SECONDS_TO_NS@
+hs_bindgen_bb4a7cef88282955
+  :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint64 -> IO SDL3.Sys.Bindgen.Stdinc.Uint64))
+hs_bindgen_bb4a7cef88282955 =
+  fmap BG.fromFFIType hs_bindgen_bb4a7cef88282955_base
+
+{-# NOINLINE lithon_SDL_SECONDS_TO_NS #-}
+
+-- | Convert seconds to nanoseconds.
+--
+--     The SDL_SECONDS_TO_NS macro as a function. This only converts whole numbers, not fractional seconds.
+--
+--     [@s@]: the number of seconds to convert.
+--
+--     [Returns]: @s@, expressed in nanoseconds.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_SECONDS_TO_NS@, defined at @sdl3-bindgen-sys\/SDL_timer_shims.h 37:26@
+lithon_SDL_SECONDS_TO_NS
+  :: BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint64 -> IO SDL3.Sys.Bindgen.Stdinc.Uint64)
+lithon_SDL_SECONDS_TO_NS =
+  BG.unsafePerformIO hs_bindgen_bb4a7cef88282955
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.TimerShims_get_lithon_SDL_MS_TO_NS@
+foreign import ccall unsafe "hs_bindgen_e0cb179de29f3904"
+  hs_bindgen_e0cb179de29f3904_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.TimerShims_get_lithon_SDL_MS_TO_NS@
+hs_bindgen_e0cb179de29f3904
+  :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint64 -> IO SDL3.Sys.Bindgen.Stdinc.Uint64))
+hs_bindgen_e0cb179de29f3904 =
+  fmap BG.fromFFIType hs_bindgen_e0cb179de29f3904_base
+
+{-# NOINLINE lithon_SDL_MS_TO_NS #-}
+
+-- | Convert milliseconds to nanoseconds.
+--
+--     The SDL_MS_TO_NS macro as a function. This only converts whole numbers, not fractional milliseconds.
+--
+--     [@ms@]: the number of milliseconds to convert.
+--
+--     [Returns]: @ms@, expressed in nanoseconds.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_MS_TO_NS@, defined at @sdl3-bindgen-sys\/SDL_timer_shims.h 55:26@
+lithon_SDL_MS_TO_NS
+  :: BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint64 -> IO SDL3.Sys.Bindgen.Stdinc.Uint64)
+lithon_SDL_MS_TO_NS =
+  BG.unsafePerformIO hs_bindgen_e0cb179de29f3904
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.TimerShims_get_lithon_SDL_US_TO_NS@
+foreign import ccall unsafe "hs_bindgen_258f5234969dea47"
+  hs_bindgen_258f5234969dea47_base
+    :: IO (BG.FunPtr BG.Void)
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.TimerShims_get_lithon_SDL_US_TO_NS@
+hs_bindgen_258f5234969dea47
+  :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint64 -> IO SDL3.Sys.Bindgen.Stdinc.Uint64))
+hs_bindgen_258f5234969dea47 =
+  fmap BG.fromFFIType hs_bindgen_258f5234969dea47_base
+
+{-# NOINLINE lithon_SDL_US_TO_NS #-}
+
+-- | Convert microseconds to nanoseconds.
+--
+--     The SDL_US_TO_NS macro as a function. This only converts whole numbers, not fractional microseconds.
+--
+--     [@us@]: the number of microseconds to convert.
+--
+--     [Returns]: @us@, expressed in nanoseconds.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_US_TO_NS@, defined at @sdl3-bindgen-sys\/SDL_timer_shims.h 73:26@
+lithon_SDL_US_TO_NS
+  :: BG.FunPtr (SDL3.Sys.Bindgen.Stdinc.Uint64 -> IO SDL3.Sys.Bindgen.Stdinc.Uint64)
+lithon_SDL_US_TO_NS =
+  BG.unsafePerformIO hs_bindgen_258f5234969dea47
diff --git a/src/SDL3/Sys/Bindgen/TimerShims/Safe.hs b/src/SDL3/Sys/Bindgen/TimerShims/Safe.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/TimerShims/Safe.hs
@@ -0,0 +1,148 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.TimerShims.Safe (
+  SDL3.Sys.Bindgen.TimerShims.Safe.lithon_SDL_SECONDS_TO_NS,
+  SDL3.Sys.Bindgen.TimerShims.Safe.lithon_SDL_MS_TO_NS,
+  SDL3.Sys.Bindgen.TimerShims.Safe.lithon_SDL_US_TO_NS,
+)
+where
+
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+import SDL3.Sys.Bindgen.Stdinc qualified
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <sdl3-bindgen-sys/SDL_timer_shims.h>"
+         , "Uint64 hs_bindgen_50109c3230bdd074 ("
+         , "  Uint64 arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_SECONDS_TO_NS)(arg1);"
+         , "}"
+         , "Uint64 hs_bindgen_d8988511c30941de ("
+         , "  Uint64 arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_MS_TO_NS)(arg1);"
+         , "}"
+         , "Uint64 hs_bindgen_7ebf8cc80dec18d5 ("
+         , "  Uint64 arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_US_TO_NS)(arg1);"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.TimerShims_Safe_lithon_SDL_SECONDS_TO_NS@
+foreign import ccall safe "hs_bindgen_50109c3230bdd074"
+  hs_bindgen_50109c3230bdd074_base
+    :: HsBindgen.Runtime.LibC.Word64
+    -> IO HsBindgen.Runtime.LibC.Word64
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.TimerShims_Safe_lithon_SDL_SECONDS_TO_NS@
+hs_bindgen_50109c3230bdd074
+  :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint64
+hs_bindgen_50109c3230bdd074 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_50109c3230bdd074_base (BG.toFFIType x0))
+
+-- | Convert seconds to nanoseconds.
+--
+--     The SDL_SECONDS_TO_NS macro as a function. This only converts whole numbers, not fractional seconds.
+--
+--     [Returns]: @s@, expressed in nanoseconds.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_SECONDS_TO_NS@, defined at @sdl3-bindgen-sys\/SDL_timer_shims.h 37:26@
+lithon_SDL_SECONDS_TO_NS
+  :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^
+  --
+  --           [@s@]: the number of seconds to convert.
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint64
+lithon_SDL_SECONDS_TO_NS =
+  hs_bindgen_50109c3230bdd074
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.TimerShims_Safe_lithon_SDL_MS_TO_NS@
+foreign import ccall safe "hs_bindgen_d8988511c30941de"
+  hs_bindgen_d8988511c30941de_base
+    :: HsBindgen.Runtime.LibC.Word64
+    -> IO HsBindgen.Runtime.LibC.Word64
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.TimerShims_Safe_lithon_SDL_MS_TO_NS@
+hs_bindgen_d8988511c30941de
+  :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint64
+hs_bindgen_d8988511c30941de =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d8988511c30941de_base (BG.toFFIType x0))
+
+-- | Convert milliseconds to nanoseconds.
+--
+--     The SDL_MS_TO_NS macro as a function. This only converts whole numbers, not fractional milliseconds.
+--
+--     [Returns]: @ms@, expressed in nanoseconds.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_MS_TO_NS@, defined at @sdl3-bindgen-sys\/SDL_timer_shims.h 55:26@
+lithon_SDL_MS_TO_NS
+  :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^
+  --
+  --           [@ms@]: the number of milliseconds to convert.
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint64
+lithon_SDL_MS_TO_NS = hs_bindgen_d8988511c30941de
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.TimerShims_Safe_lithon_SDL_US_TO_NS@
+foreign import ccall safe "hs_bindgen_7ebf8cc80dec18d5"
+  hs_bindgen_7ebf8cc80dec18d5_base
+    :: HsBindgen.Runtime.LibC.Word64
+    -> IO HsBindgen.Runtime.LibC.Word64
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.TimerShims_Safe_lithon_SDL_US_TO_NS@
+hs_bindgen_7ebf8cc80dec18d5
+  :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint64
+hs_bindgen_7ebf8cc80dec18d5 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_7ebf8cc80dec18d5_base (BG.toFFIType x0))
+
+-- | Convert microseconds to nanoseconds.
+--
+--     The SDL_US_TO_NS macro as a function. This only converts whole numbers, not fractional microseconds.
+--
+--     [Returns]: @us@, expressed in nanoseconds.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_US_TO_NS@, defined at @sdl3-bindgen-sys\/SDL_timer_shims.h 73:26@
+lithon_SDL_US_TO_NS
+  :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^
+  --
+  --           [@us@]: the number of microseconds to convert.
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint64
+lithon_SDL_US_TO_NS = hs_bindgen_7ebf8cc80dec18d5
diff --git a/src/SDL3/Sys/Bindgen/TimerShims/Unsafe.hs b/src/SDL3/Sys/Bindgen/TimerShims/Unsafe.hs
new file mode 100644
--- /dev/null
+++ b/src/SDL3/Sys/Bindgen/TimerShims/Unsafe.hs
@@ -0,0 +1,148 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK prune #-}
+
+module SDL3.Sys.Bindgen.TimerShims.Unsafe (
+  SDL3.Sys.Bindgen.TimerShims.Unsafe.lithon_SDL_SECONDS_TO_NS,
+  SDL3.Sys.Bindgen.TimerShims.Unsafe.lithon_SDL_MS_TO_NS,
+  SDL3.Sys.Bindgen.TimerShims.Unsafe.lithon_SDL_US_TO_NS,
+)
+where
+
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
+import HsBindgen.Runtime.Support qualified as BG
+import HsBindgen.Runtime.Support.CAPI qualified
+import SDL3.Sys.Bindgen.Stdinc qualified
+
+$( HsBindgen.Runtime.Support.CAPI.addCSource
+     ( HsBindgen.Runtime.Support.CAPI.unlines
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <sdl3-bindgen-sys/SDL_timer_shims.h>"
+         , "Uint64 hs_bindgen_0447cf08139ac18b ("
+         , "  Uint64 arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_SECONDS_TO_NS)(arg1);"
+         , "}"
+         , "Uint64 hs_bindgen_5f508296550393f9 ("
+         , "  Uint64 arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_MS_TO_NS)(arg1);"
+         , "}"
+         , "Uint64 hs_bindgen_70ba6a3967e18243 ("
+         , "  Uint64 arg1"
+         , ")"
+         , "{"
+         , "  return (lithon_SDL_US_TO_NS)(arg1);"
+         , "}"
+         ]
+     )
+ )
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.TimerShims_Unsafe_lithon_SDL_SECONDS_TO_NS@
+foreign import ccall unsafe "hs_bindgen_0447cf08139ac18b"
+  hs_bindgen_0447cf08139ac18b_base
+    :: HsBindgen.Runtime.LibC.Word64
+    -> IO HsBindgen.Runtime.LibC.Word64
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.TimerShims_Unsafe_lithon_SDL_SECONDS_TO_NS@
+hs_bindgen_0447cf08139ac18b
+  :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint64
+hs_bindgen_0447cf08139ac18b =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_0447cf08139ac18b_base (BG.toFFIType x0))
+
+-- | Convert seconds to nanoseconds.
+--
+--     The SDL_SECONDS_TO_NS macro as a function. This only converts whole numbers, not fractional seconds.
+--
+--     [Returns]: @s@, expressed in nanoseconds.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_SECONDS_TO_NS@, defined at @sdl3-bindgen-sys\/SDL_timer_shims.h 37:26@
+lithon_SDL_SECONDS_TO_NS
+  :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^
+  --
+  --           [@s@]: the number of seconds to convert.
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint64
+lithon_SDL_SECONDS_TO_NS =
+  hs_bindgen_0447cf08139ac18b
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.TimerShims_Unsafe_lithon_SDL_MS_TO_NS@
+foreign import ccall unsafe "hs_bindgen_5f508296550393f9"
+  hs_bindgen_5f508296550393f9_base
+    :: HsBindgen.Runtime.LibC.Word64
+    -> IO HsBindgen.Runtime.LibC.Word64
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.TimerShims_Unsafe_lithon_SDL_MS_TO_NS@
+hs_bindgen_5f508296550393f9
+  :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint64
+hs_bindgen_5f508296550393f9 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_5f508296550393f9_base (BG.toFFIType x0))
+
+-- | Convert milliseconds to nanoseconds.
+--
+--     The SDL_MS_TO_NS macro as a function. This only converts whole numbers, not fractional milliseconds.
+--
+--     [Returns]: @ms@, expressed in nanoseconds.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_MS_TO_NS@, defined at @sdl3-bindgen-sys\/SDL_timer_shims.h 55:26@
+lithon_SDL_MS_TO_NS
+  :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^
+  --
+  --           [@ms@]: the number of milliseconds to convert.
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint64
+lithon_SDL_MS_TO_NS = hs_bindgen_5f508296550393f9
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.TimerShims_Unsafe_lithon_SDL_US_TO_NS@
+foreign import ccall unsafe "hs_bindgen_70ba6a3967e18243"
+  hs_bindgen_70ba6a3967e18243_base
+    :: HsBindgen.Runtime.LibC.Word64
+    -> IO HsBindgen.Runtime.LibC.Word64
+
+-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.TimerShims_Unsafe_lithon_SDL_US_TO_NS@
+hs_bindgen_70ba6a3967e18243
+  :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint64
+hs_bindgen_70ba6a3967e18243 =
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_70ba6a3967e18243_base (BG.toFFIType x0))
+
+-- | Convert microseconds to nanoseconds.
+--
+--     The SDL_US_TO_NS macro as a function. This only converts whole numbers, not fractional microseconds.
+--
+--     [Returns]: @us@, expressed in nanoseconds.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [C declaration]: @lithon_SDL_US_TO_NS@, defined at @sdl3-bindgen-sys\/SDL_timer_shims.h 73:26@
+lithon_SDL_US_TO_NS
+  :: SDL3.Sys.Bindgen.Stdinc.Uint64
+  -- ^
+  --
+  --           [@us@]: the number of microseconds to convert.
+  -> IO SDL3.Sys.Bindgen.Stdinc.Uint64
+lithon_SDL_US_TO_NS = hs_bindgen_70ba6a3967e18243
diff --git a/src/SDL3/Sys/Bindgen/Touch.hs b/src/SDL3/Sys/Bindgen/Touch.hs
--- a/src/SDL3/Sys/Bindgen/Touch.hs
+++ b/src/SDL3/Sys/Bindgen/Touch.hs
@@ -16,6 +16,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | SDL offers touch input, on platforms that support it. It can manage multiple touch devices and track multiple fingers on those devices.
 --
@@ -40,9 +41,27 @@
 )
 where
 
+import Prelude (
+  Bounded,
+  Enum,
+  Eq,
+  Int,
+  Integral,
+  Num,
+  Ord,
+  Read,
+  Real,
+  Show,
+  pure,
+  (<*>),
+  (>>),
+  type (~),
+ )
+
 import HsBindgen.Runtime.CEnum qualified as CEnum
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.Marshal qualified as Marshal
+import HsBindgen.Runtime.Struct qualified as Struct
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField
 import SDL3.Sys.Bindgen.Stdinc qualified
@@ -326,6 +345,11 @@
 
 deriving via Marshal.EquivStorable SDL_Finger instance BG.Storable SDL_Finger
 
+deriving via Struct.IsStructViaReadRaw SDL_Finger instance Struct.IsStruct SDL_Finger
+
+-- | the finger ID
+--
+--     [C declaration]: @id@, defined at @SDL3\/SDL_touch.h 104:18@
 instance
   (ty ~ SDL_FingerID)
   => BG.CompatHasField.HasField "id" SDL_Finger ty
@@ -353,6 +377,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | the x-axis location of the touch event, normalized (0...1)
+--
+--     [C declaration]: @x@, defined at @SDL3\/SDL_touch.h 105:11@
 instance (ty ~ BG.CFloat) => BG.CompatHasField.HasField "x" SDL_Finger ty where
   hasField =
     \x0 ->
@@ -377,6 +404,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | the y-axis location of the touch event, normalized (0...1)
+--
+--     [C declaration]: @y@, defined at @SDL3\/SDL_touch.h 106:11@
 instance (ty ~ BG.CFloat) => BG.CompatHasField.HasField "y" SDL_Finger ty where
   hasField =
     \x0 ->
@@ -401,6 +431,9 @@
 
   offset# = \_ -> \_ -> 12
 
+-- | the quantity of pressure applied, normalized (0...1)
+--
+--     [C declaration]: @pressure@, defined at @SDL3\/SDL_touch.h 107:11@
 instance
   (ty ~ BG.CFloat)
   => BG.CompatHasField.HasField "pressure" SDL_Finger ty
diff --git a/src/SDL3/Sys/Bindgen/Touch/FunPtr.hs b/src/SDL3/Sys/Bindgen/Touch/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Touch/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Touch/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Touch.FunPtr (
@@ -10,6 +12,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -17,7 +21,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_touch.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_touch.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Touch_get_SDL_GetTouchDevices */"
          , "__attribute__ ((const))"
          , "SDL_TouchID *(*hs_bindgen_d990cfdd3ce3b935 (void)) ("
@@ -63,7 +71,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Touch_get_SDL_GetTouchDevices@
 hs_bindgen_d990cfdd3ce3b935 :: IO (BG.FunPtr (BG.Ptr BG.CInt -> IO (BG.Ptr SDL_TouchID)))
 hs_bindgen_d990cfdd3ce3b935 =
-  BG.fromFFIType hs_bindgen_d990cfdd3ce3b935_base
+  fmap BG.fromFFIType hs_bindgen_d990cfdd3ce3b935_base
 
 {-# NOINLINE sDL_GetTouchDevices #-}
 
@@ -90,7 +98,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Touch_get_SDL_GetTouchDeviceName@
 hs_bindgen_a221ea688dfb8835 :: IO (BG.FunPtr (SDL_TouchID -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_a221ea688dfb8835 =
-  BG.fromFFIType hs_bindgen_a221ea688dfb8835_base
+  fmap BG.fromFFIType hs_bindgen_a221ea688dfb8835_base
 
 {-# NOINLINE sDL_GetTouchDeviceName #-}
 
@@ -115,7 +123,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Touch_get_SDL_GetTouchDeviceType@
 hs_bindgen_41907e6474c07d6d :: IO (BG.FunPtr (SDL_TouchID -> IO SDL_TouchDeviceType))
 hs_bindgen_41907e6474c07d6d =
-  BG.fromFFIType hs_bindgen_41907e6474c07d6d_base
+  fmap BG.fromFFIType hs_bindgen_41907e6474c07d6d_base
 
 {-# NOINLINE sDL_GetTouchDeviceType #-}
 
@@ -141,7 +149,7 @@
 hs_bindgen_7edabe47405f9352
   :: IO (BG.FunPtr (SDL_TouchID -> BG.Ptr BG.CInt -> IO (BG.Ptr (BG.Ptr SDL_Finger))))
 hs_bindgen_7edabe47405f9352 =
-  BG.fromFFIType hs_bindgen_7edabe47405f9352_base
+  fmap BG.fromFFIType hs_bindgen_7edabe47405f9352_base
 
 {-# NOINLINE sDL_GetTouchFingers #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Touch/Safe.hs b/src/SDL3/Sys/Bindgen/Touch/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Touch/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Touch/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Touch.Safe (
@@ -10,6 +12,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -17,7 +22,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_touch.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_touch.h>"
          , "SDL_TouchID *hs_bindgen_5bb90a8e6a2a7744 ("
          , "  signed int *arg1"
          , ")"
@@ -58,7 +67,8 @@
   :: BG.Ptr BG.CInt
   -> IO (BG.Ptr SDL_TouchID)
 hs_bindgen_5bb90a8e6a2a7744 =
-  BG.fromFFIType hs_bindgen_5bb90a8e6a2a7744_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_5bb90a8e6a2a7744_base (BG.toFFIType x0))
 
 -- | Get a list of registered touch devices.
 --
@@ -80,7 +90,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Touch_Safe_SDL_GetTouchDeviceName@
 foreign import ccall safe "hs_bindgen_8215300124d28f2f"
   hs_bindgen_8215300124d28f2f_base
-    :: BG.Word64
+    :: HsBindgen.Runtime.LibC.Word64
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Touch_Safe_SDL_GetTouchDeviceName@
@@ -88,7 +98,8 @@
   :: SDL_TouchID
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_8215300124d28f2f =
-  BG.fromFFIType hs_bindgen_8215300124d28f2f_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_8215300124d28f2f_base (BG.toFFIType x0))
 
 -- | Get the touch device name as reported from the driver.
 --
@@ -108,15 +119,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Touch_Safe_SDL_GetTouchDeviceType@
 foreign import ccall safe "hs_bindgen_a494e81cbe4e8c2f"
   hs_bindgen_a494e81cbe4e8c2f_base
-    :: BG.Word64
-    -> IO BG.Int32
+    :: HsBindgen.Runtime.LibC.Word64
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Touch_Safe_SDL_GetTouchDeviceType@
 hs_bindgen_a494e81cbe4e8c2f
   :: SDL_TouchID
   -> IO SDL_TouchDeviceType
 hs_bindgen_a494e81cbe4e8c2f =
-  BG.fromFFIType hs_bindgen_a494e81cbe4e8c2f_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a494e81cbe4e8c2f_base (BG.toFFIType x0))
 
 -- | Get the type of the given touch device.
 --
@@ -136,7 +148,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Touch_Safe_SDL_GetTouchFingers@
 foreign import ccall safe "hs_bindgen_ea3a929a9ac35739"
   hs_bindgen_ea3a929a9ac35739_base
-    :: BG.Word64
+    :: HsBindgen.Runtime.LibC.Word64
     -> BG.Ptr BG.Void
     -> IO (BG.Ptr BG.Void)
 
@@ -146,7 +158,9 @@
   -> BG.Ptr BG.CInt
   -> IO (BG.Ptr (BG.Ptr SDL_Finger))
 hs_bindgen_ea3a929a9ac35739 =
-  BG.fromFFIType hs_bindgen_ea3a929a9ac35739_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_ea3a929a9ac35739_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get a list of active fingers for a given touch device.
 --
diff --git a/src/SDL3/Sys/Bindgen/Touch/Unsafe.hs b/src/SDL3/Sys/Bindgen/Touch/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Touch/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Touch/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Touch.Unsafe (
@@ -10,6 +12,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -17,7 +22,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_touch.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_touch.h>"
          , "SDL_TouchID *hs_bindgen_adf35ae251419f33 ("
          , "  signed int *arg1"
          , ")"
@@ -58,7 +67,8 @@
   :: BG.Ptr BG.CInt
   -> IO (BG.Ptr SDL_TouchID)
 hs_bindgen_adf35ae251419f33 =
-  BG.fromFFIType hs_bindgen_adf35ae251419f33_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_adf35ae251419f33_base (BG.toFFIType x0))
 
 -- | Get a list of registered touch devices.
 --
@@ -80,7 +90,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Touch_Unsafe_SDL_GetTouchDeviceName@
 foreign import ccall unsafe "hs_bindgen_abb682109ef47145"
   hs_bindgen_abb682109ef47145_base
-    :: BG.Word64
+    :: HsBindgen.Runtime.LibC.Word64
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Touch_Unsafe_SDL_GetTouchDeviceName@
@@ -88,7 +98,8 @@
   :: SDL_TouchID
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_abb682109ef47145 =
-  BG.fromFFIType hs_bindgen_abb682109ef47145_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_abb682109ef47145_base (BG.toFFIType x0))
 
 -- | Get the touch device name as reported from the driver.
 --
@@ -108,15 +119,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Touch_Unsafe_SDL_GetTouchDeviceType@
 foreign import ccall unsafe "hs_bindgen_bba2e3647e7dd111"
   hs_bindgen_bba2e3647e7dd111_base
-    :: BG.Word64
-    -> IO BG.Int32
+    :: HsBindgen.Runtime.LibC.Word64
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Touch_Unsafe_SDL_GetTouchDeviceType@
 hs_bindgen_bba2e3647e7dd111
   :: SDL_TouchID
   -> IO SDL_TouchDeviceType
 hs_bindgen_bba2e3647e7dd111 =
-  BG.fromFFIType hs_bindgen_bba2e3647e7dd111_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_bba2e3647e7dd111_base (BG.toFFIType x0))
 
 -- | Get the type of the given touch device.
 --
@@ -136,7 +148,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Touch_Unsafe_SDL_GetTouchFingers@
 foreign import ccall unsafe "hs_bindgen_645cd3b208b9edce"
   hs_bindgen_645cd3b208b9edce_base
-    :: BG.Word64
+    :: HsBindgen.Runtime.LibC.Word64
     -> BG.Ptr BG.Void
     -> IO (BG.Ptr BG.Void)
 
@@ -146,7 +158,9 @@
   -> BG.Ptr BG.CInt
   -> IO (BG.Ptr (BG.Ptr SDL_Finger))
 hs_bindgen_645cd3b208b9edce =
-  BG.fromFFIType hs_bindgen_645cd3b208b9edce_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_645cd3b208b9edce_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get a list of active fingers for a given touch device.
 --
diff --git a/src/SDL3/Sys/Bindgen/Tray.hs b/src/SDL3/Sys/Bindgen/Tray.hs
--- a/src/SDL3/Sys/Bindgen/Tray.hs
+++ b/src/SDL3/Sys/Bindgen/Tray.hs
@@ -6,6 +6,7 @@
 {-# LANGUAGE ExplicitForAll #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE MagicHash #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
@@ -15,6 +16,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | SDL offers a way to add items to the \"system tray\" (more correctly called the \"notification area\" on Windows). On platforms that offer this concept, an SDL app can add a tray icon, submenus, checkboxes, and clickable entries, and register a callback that is fired when the user clicks on these pieces. An opaque handle representing a toplevel system tray object.
 --
@@ -34,6 +36,8 @@
 )
 where
 
+import Prelude (Bounded, Enum, Eq, IO, Integral, Num, Ord, Read, Real, Show, fmap, type (~))
+
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.Marshal qualified as Marshal
 import HsBindgen.Runtime.Support qualified as BG
@@ -149,7 +153,6 @@
   { unwrap :: BG.Ptr BG.Void -> BG.Ptr SDL_TrayEntry -> IO ()
   }
   deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
 
 -- __unique:__ @toSDL_TrayCallback_Aux@
 foreign import ccall safe "wrapper"
@@ -163,7 +166,14 @@
   -> IO (BG.FunPtr SDL_TrayCallback_Aux)
 hs_bindgen_6a8b13b7097ccaf5 =
   \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_6a8b13b7097ccaf5_base (BG.toFFIType fun0))
+    fmap
+      BG.castFunPtr
+      ( hs_bindgen_6a8b13b7097ccaf5_base
+          ( \x1 ->
+              \x2 ->
+                BG.getField @"unwrap" fun0 (BG.fromFFIType x1) (BG.fromFFIType x2)
+          )
+      )
 
 -- __unique:__ @fromSDL_TrayCallback_Aux@
 foreign import ccall safe "dynamic"
@@ -179,7 +189,11 @@
   -> SDL_TrayCallback_Aux
 hs_bindgen_0aa010ee3dd2ffa9 =
   \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_0aa010ee3dd2ffa9_base (BG.castFunPtrToFFIType funPtr0))
+    SDL_TrayCallback_Aux
+      ( \x1 ->
+          \x2 ->
+            hs_bindgen_0aa010ee3dd2ffa9_base (BG.castFunPtr funPtr0) (BG.toFFIType x1) (BG.toFFIType x2)
+      )
 
 instance BG.ToFunPtr SDL_TrayCallback_Aux where
   toFunPtr = hs_bindgen_6a8b13b7097ccaf5
diff --git a/src/SDL3/Sys/Bindgen/Tray/FunPtr.hs b/src/SDL3/Sys/Bindgen/Tray/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Tray/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Tray/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Tray.FunPtr (
@@ -29,6 +31,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -37,7 +41,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_tray.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_tray.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Tray_get_SDL_CreateTray */"
          , "__attribute__ ((const))"
          , "SDL_Tray *(*hs_bindgen_e0b641cea81dd78b (void)) ("
@@ -248,7 +256,7 @@
            (BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface -> PtrConst.PtrConst BG.CChar -> IO (BG.Ptr SDL_Tray))
        )
 hs_bindgen_e0b641cea81dd78b =
-  BG.fromFFIType hs_bindgen_e0b641cea81dd78b_base
+  fmap BG.fromFFIType hs_bindgen_e0b641cea81dd78b_base
 
 {-# NOINLINE sDL_CreateTray #-}
 
@@ -286,7 +294,7 @@
 hs_bindgen_4c9964d8c06580ec
   :: IO (BG.FunPtr (BG.Ptr SDL_Tray -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface -> IO ()))
 hs_bindgen_4c9964d8c06580ec =
-  BG.fromFFIType hs_bindgen_4c9964d8c06580ec_base
+  fmap BG.fromFFIType hs_bindgen_4c9964d8c06580ec_base
 
 {-# NOINLINE sDL_SetTrayIcon #-}
 
@@ -317,7 +325,7 @@
 hs_bindgen_783d3d9ca84c197c
   :: IO (BG.FunPtr (BG.Ptr SDL_Tray -> PtrConst.PtrConst BG.CChar -> IO ()))
 hs_bindgen_783d3d9ca84c197c =
-  BG.fromFFIType hs_bindgen_783d3d9ca84c197c_base
+  fmap BG.fromFFIType hs_bindgen_783d3d9ca84c197c_base
 
 {-# NOINLINE sDL_SetTrayTooltip #-}
 
@@ -346,7 +354,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Tray_get_SDL_CreateTrayMenu@
 hs_bindgen_e6418e186102af71 :: IO (BG.FunPtr (BG.Ptr SDL_Tray -> IO (BG.Ptr SDL_TrayMenu)))
 hs_bindgen_e6418e186102af71 =
-  BG.fromFFIType hs_bindgen_e6418e186102af71_base
+  fmap BG.fromFFIType hs_bindgen_e6418e186102af71_base
 
 {-# NOINLINE sDL_CreateTrayMenu #-}
 
@@ -381,7 +389,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Tray_get_SDL_CreateTraySubmenu@
 hs_bindgen_7979c3b75512dd28 :: IO (BG.FunPtr (BG.Ptr SDL_TrayEntry -> IO (BG.Ptr SDL_TrayMenu)))
 hs_bindgen_7979c3b75512dd28 =
-  BG.fromFFIType hs_bindgen_7979c3b75512dd28_base
+  fmap BG.fromFFIType hs_bindgen_7979c3b75512dd28_base
 
 {-# NOINLINE sDL_CreateTraySubmenu #-}
 
@@ -416,7 +424,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Tray_get_SDL_GetTrayMenu@
 hs_bindgen_487b4a68acb6ce70 :: IO (BG.FunPtr (BG.Ptr SDL_Tray -> IO (BG.Ptr SDL_TrayMenu)))
 hs_bindgen_487b4a68acb6ce70 =
-  BG.fromFFIType hs_bindgen_487b4a68acb6ce70_base
+  fmap BG.fromFFIType hs_bindgen_487b4a68acb6ce70_base
 
 {-# NOINLINE sDL_GetTrayMenu #-}
 
@@ -451,7 +459,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Tray_get_SDL_GetTraySubmenu@
 hs_bindgen_fa3f90a24097169c :: IO (BG.FunPtr (BG.Ptr SDL_TrayEntry -> IO (BG.Ptr SDL_TrayMenu)))
 hs_bindgen_fa3f90a24097169c =
-  BG.fromFFIType hs_bindgen_fa3f90a24097169c_base
+  fmap BG.fromFFIType hs_bindgen_fa3f90a24097169c_base
 
 {-# NOINLINE sDL_GetTraySubmenu #-}
 
@@ -488,7 +496,7 @@
   :: IO
        (BG.FunPtr (BG.Ptr SDL_TrayMenu -> BG.Ptr BG.CInt -> IO (BG.Ptr (PtrConst.PtrConst SDL_TrayEntry))))
 hs_bindgen_924f686f0f9c486a =
-  BG.fromFFIType hs_bindgen_924f686f0f9c486a_base
+  fmap BG.fromFFIType hs_bindgen_924f686f0f9c486a_base
 
 {-# NOINLINE sDL_GetTrayEntries #-}
 
@@ -520,7 +528,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Tray_get_SDL_RemoveTrayEntry@
 hs_bindgen_207a05e5b588636c :: IO (BG.FunPtr (BG.Ptr SDL_TrayEntry -> IO ()))
 hs_bindgen_207a05e5b588636c =
-  BG.fromFFIType hs_bindgen_207a05e5b588636c_base
+  fmap BG.fromFFIType hs_bindgen_207a05e5b588636c_base
 
 {-# NOINLINE sDL_RemoveTrayEntry #-}
 
@@ -556,7 +564,7 @@
            )
        )
 hs_bindgen_4f1eb15eda9eecc5 =
-  BG.fromFFIType hs_bindgen_4f1eb15eda9eecc5_base
+  fmap BG.fromFFIType hs_bindgen_4f1eb15eda9eecc5_base
 
 {-# NOINLINE sDL_InsertTrayEntryAt #-}
 
@@ -603,7 +611,7 @@
 hs_bindgen_db2f3045cf28b5d5
   :: IO (BG.FunPtr (BG.Ptr SDL_TrayEntry -> PtrConst.PtrConst BG.CChar -> IO ()))
 hs_bindgen_db2f3045cf28b5d5 =
-  BG.fromFFIType hs_bindgen_db2f3045cf28b5d5_base
+  fmap BG.fromFFIType hs_bindgen_db2f3045cf28b5d5_base
 
 {-# NOINLINE sDL_SetTrayEntryLabel #-}
 
@@ -635,7 +643,7 @@
 hs_bindgen_f9b74cb4f55c043f
   :: IO (BG.FunPtr (BG.Ptr SDL_TrayEntry -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_f9b74cb4f55c043f =
-  BG.fromFFIType hs_bindgen_f9b74cb4f55c043f_base
+  fmap BG.fromFFIType hs_bindgen_f9b74cb4f55c043f_base
 
 {-# NOINLINE sDL_GetTrayEntryLabel #-}
 
@@ -666,7 +674,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Tray_get_SDL_SetTrayEntryChecked@
 hs_bindgen_815ad50438649e5d :: IO (BG.FunPtr (BG.Ptr SDL_TrayEntry -> BG.CBool -> IO ()))
 hs_bindgen_815ad50438649e5d =
-  BG.fromFFIType hs_bindgen_815ad50438649e5d_base
+  fmap BG.fromFFIType hs_bindgen_815ad50438649e5d_base
 
 {-# NOINLINE sDL_SetTrayEntryChecked #-}
 
@@ -697,7 +705,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Tray_get_SDL_GetTrayEntryChecked@
 hs_bindgen_89a7fa670bbdd4aa :: IO (BG.FunPtr (BG.Ptr SDL_TrayEntry -> IO BG.CBool))
 hs_bindgen_89a7fa670bbdd4aa =
-  BG.fromFFIType hs_bindgen_89a7fa670bbdd4aa_base
+  fmap BG.fromFFIType hs_bindgen_89a7fa670bbdd4aa_base
 
 {-# NOINLINE sDL_GetTrayEntryChecked #-}
 
@@ -728,7 +736,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Tray_get_SDL_SetTrayEntryEnabled@
 hs_bindgen_d2ae14ecd73c137a :: IO (BG.FunPtr (BG.Ptr SDL_TrayEntry -> BG.CBool -> IO ()))
 hs_bindgen_d2ae14ecd73c137a =
-  BG.fromFFIType hs_bindgen_d2ae14ecd73c137a_base
+  fmap BG.fromFFIType hs_bindgen_d2ae14ecd73c137a_base
 
 {-# NOINLINE sDL_SetTrayEntryEnabled #-}
 
@@ -757,7 +765,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Tray_get_SDL_GetTrayEntryEnabled@
 hs_bindgen_aacde4500657f4c0 :: IO (BG.FunPtr (BG.Ptr SDL_TrayEntry -> IO BG.CBool))
 hs_bindgen_aacde4500657f4c0 =
-  BG.fromFFIType hs_bindgen_aacde4500657f4c0_base
+  fmap BG.fromFFIType hs_bindgen_aacde4500657f4c0_base
 
 {-# NOINLINE sDL_GetTrayEntryEnabled #-}
 
@@ -787,7 +795,7 @@
 hs_bindgen_624772d3d1eca5e3
   :: IO (BG.FunPtr (BG.Ptr SDL_TrayEntry -> SDL_TrayCallback -> BG.Ptr BG.Void -> IO ()))
 hs_bindgen_624772d3d1eca5e3 =
-  BG.fromFFIType hs_bindgen_624772d3d1eca5e3_base
+  fmap BG.fromFFIType hs_bindgen_624772d3d1eca5e3_base
 
 {-# NOINLINE sDL_SetTrayEntryCallback #-}
 
@@ -819,7 +827,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Tray_get_SDL_ClickTrayEntry@
 hs_bindgen_7aff8a582dc1af42 :: IO (BG.FunPtr (BG.Ptr SDL_TrayEntry -> IO ()))
 hs_bindgen_7aff8a582dc1af42 =
-  BG.fromFFIType hs_bindgen_7aff8a582dc1af42_base
+  fmap BG.fromFFIType hs_bindgen_7aff8a582dc1af42_base
 
 {-# NOINLINE sDL_ClickTrayEntry #-}
 
@@ -844,7 +852,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Tray_get_SDL_DestroyTray@
 hs_bindgen_ac5647a4ad9aa76d :: IO (BG.FunPtr (BG.Ptr SDL_Tray -> IO ()))
 hs_bindgen_ac5647a4ad9aa76d =
-  BG.fromFFIType hs_bindgen_ac5647a4ad9aa76d_base
+  fmap BG.fromFFIType hs_bindgen_ac5647a4ad9aa76d_base
 
 {-# NOINLINE sDL_DestroyTray #-}
 
@@ -873,7 +881,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Tray_get_SDL_GetTrayEntryParent@
 hs_bindgen_14c614d00cef77fa :: IO (BG.FunPtr (BG.Ptr SDL_TrayEntry -> IO (BG.Ptr SDL_TrayMenu)))
 hs_bindgen_14c614d00cef77fa =
-  BG.fromFFIType hs_bindgen_14c614d00cef77fa_base
+  fmap BG.fromFFIType hs_bindgen_14c614d00cef77fa_base
 
 {-# NOINLINE sDL_GetTrayEntryParent #-}
 
@@ -902,7 +910,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Tray_get_SDL_GetTrayMenuParentEntry@
 hs_bindgen_5521b8512f50cc76 :: IO (BG.FunPtr (BG.Ptr SDL_TrayMenu -> IO (BG.Ptr SDL_TrayEntry)))
 hs_bindgen_5521b8512f50cc76 =
-  BG.fromFFIType hs_bindgen_5521b8512f50cc76_base
+  fmap BG.fromFFIType hs_bindgen_5521b8512f50cc76_base
 
 {-# NOINLINE sDL_GetTrayMenuParentEntry #-}
 
@@ -933,7 +941,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Tray_get_SDL_GetTrayMenuParentTray@
 hs_bindgen_43523d65356b241b :: IO (BG.FunPtr (BG.Ptr SDL_TrayMenu -> IO (BG.Ptr SDL_Tray)))
 hs_bindgen_43523d65356b241b =
-  BG.fromFFIType hs_bindgen_43523d65356b241b_base
+  fmap BG.fromFFIType hs_bindgen_43523d65356b241b_base
 
 {-# NOINLINE sDL_GetTrayMenuParentTray #-}
 
@@ -964,7 +972,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Tray_get_SDL_UpdateTrays@
 hs_bindgen_108816203a48fe42 :: IO (BG.FunPtr (IO ()))
 hs_bindgen_108816203a48fe42 =
-  BG.fromFFIType hs_bindgen_108816203a48fe42_base
+  fmap BG.fromFFIType hs_bindgen_108816203a48fe42_base
 
 {-# NOINLINE sDL_UpdateTrays #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Tray/Safe.hs b/src/SDL3/Sys/Bindgen/Tray/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Tray/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Tray/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Tray.Safe (
@@ -29,6 +31,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -37,7 +42,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_tray.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_tray.h>"
          , "SDL_Tray *hs_bindgen_883df5f31028a1a4 ("
          , "  SDL_Surface *arg1,"
          , "  char const *arg2"
@@ -203,7 +212,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO (BG.Ptr SDL_Tray)
 hs_bindgen_883df5f31028a1a4 =
-  BG.fromFFIType hs_bindgen_883df5f31028a1a4_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_883df5f31028a1a4_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Create an icon to be placed in the operating system\'s tray, or equivalent.
 --
@@ -245,7 +256,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface
   -> IO ()
 hs_bindgen_e4467c5dfb0eefec =
-  BG.fromFFIType hs_bindgen_e4467c5dfb0eefec_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_e4467c5dfb0eefec_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Updates the system tray icon\'s icon.
 --
@@ -281,7 +294,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO ()
 hs_bindgen_f0fbabccc349ab12 =
-  BG.fromFFIType hs_bindgen_f0fbabccc349ab12_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_f0fbabccc349ab12_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Updates the system tray icon\'s tooltip.
 --
@@ -315,7 +330,8 @@
   :: BG.Ptr SDL_Tray
   -> IO (BG.Ptr SDL_TrayMenu)
 hs_bindgen_591a284511251aa4 =
-  BG.fromFFIType hs_bindgen_591a284511251aa4_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_591a284511251aa4_base (BG.toFFIType x0))
 
 -- | Create a menu for a system tray.
 --
@@ -353,7 +369,8 @@
   :: BG.Ptr SDL_TrayEntry
   -> IO (BG.Ptr SDL_TrayMenu)
 hs_bindgen_519964613c2d0dd2 =
-  BG.fromFFIType hs_bindgen_519964613c2d0dd2_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_519964613c2d0dd2_base (BG.toFFIType x0))
 
 -- | Create a submenu for a system tray entry.
 --
@@ -391,7 +408,8 @@
   :: BG.Ptr SDL_Tray
   -> IO (BG.Ptr SDL_TrayMenu)
 hs_bindgen_d00b06b7312eb4e3 =
-  BG.fromFFIType hs_bindgen_d00b06b7312eb4e3_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d00b06b7312eb4e3_base (BG.toFFIType x0))
 
 -- | Gets a previously created tray menu.
 --
@@ -429,7 +447,8 @@
   :: BG.Ptr SDL_TrayEntry
   -> IO (BG.Ptr SDL_TrayMenu)
 hs_bindgen_ac4f72f06dc56c8f =
-  BG.fromFFIType hs_bindgen_ac4f72f06dc56c8f_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_ac4f72f06dc56c8f_base (BG.toFFIType x0))
 
 -- | Gets a previously created tray entry submenu.
 --
@@ -469,7 +488,9 @@
   -> BG.Ptr BG.CInt
   -> IO (BG.Ptr (PtrConst.PtrConst SDL_TrayEntry))
 hs_bindgen_db28f928b77b3b21 =
-  BG.fromFFIType hs_bindgen_db28f928b77b3b21_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_db28f928b77b3b21_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Returns a list of entries in the menu, in order.
 --
@@ -505,7 +526,8 @@
   :: BG.Ptr SDL_TrayEntry
   -> IO ()
 hs_bindgen_760690f62725f41d =
-  BG.fromFFIType hs_bindgen_760690f62725f41d_base
+  \x0 ->
+    hs_bindgen_760690f62725f41d_base (BG.toFFIType x0)
 
 -- | Removes a tray entry.
 --
@@ -528,9 +550,9 @@
 foreign import ccall safe "hs_bindgen_97f828a3ddf4bda6"
   hs_bindgen_97f828a3ddf4bda6_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Tray_Safe_SDL_InsertTrayEntryAt@
@@ -541,7 +563,18 @@
   -> SDL_TrayEntryFlags
   -> IO (BG.Ptr SDL_TrayEntry)
 hs_bindgen_97f828a3ddf4bda6 =
-  BG.fromFFIType hs_bindgen_97f828a3ddf4bda6_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_97f828a3ddf4bda6_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Insert a tray entry at a given position.
 --
@@ -591,7 +624,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO ()
 hs_bindgen_d259c08f8b2fea97 =
-  BG.fromFFIType hs_bindgen_d259c08f8b2fea97_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_d259c08f8b2fea97_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Sets the label of an entry.
 --
@@ -627,7 +662,8 @@
   :: BG.Ptr SDL_TrayEntry
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_f42afcfe13e00a9d =
-  BG.fromFFIType hs_bindgen_f42afcfe13e00a9d_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_f42afcfe13e00a9d_base (BG.toFFIType x0))
 
 -- | Gets the label of an entry.
 --
@@ -654,7 +690,7 @@
 foreign import ccall safe "hs_bindgen_c732ae30d80c2bac"
   hs_bindgen_c732ae30d80c2bac_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
+    -> BG.CBool
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Tray_Safe_SDL_SetTrayEntryChecked@
@@ -663,7 +699,9 @@
   -> BG.CBool
   -> IO ()
 hs_bindgen_c732ae30d80c2bac =
-  BG.fromFFIType hs_bindgen_c732ae30d80c2bac_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_c732ae30d80c2bac_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Sets whether or not an entry is checked.
 --
@@ -692,14 +730,15 @@
 foreign import ccall safe "hs_bindgen_9ab5ede401963c0b"
   hs_bindgen_9ab5ede401963c0b_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Tray_Safe_SDL_GetTrayEntryChecked@
 hs_bindgen_9ab5ede401963c0b
   :: BG.Ptr SDL_TrayEntry
   -> IO BG.CBool
 hs_bindgen_9ab5ede401963c0b =
-  BG.fromFFIType hs_bindgen_9ab5ede401963c0b_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_9ab5ede401963c0b_base (BG.toFFIType x0))
 
 -- | Gets whether or not an entry is checked.
 --
@@ -726,7 +765,7 @@
 foreign import ccall safe "hs_bindgen_a82f265fc5763bf3"
   hs_bindgen_a82f265fc5763bf3_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
+    -> BG.CBool
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Tray_Safe_SDL_SetTrayEntryEnabled@
@@ -735,7 +774,9 @@
   -> BG.CBool
   -> IO ()
 hs_bindgen_a82f265fc5763bf3 =
-  BG.fromFFIType hs_bindgen_a82f265fc5763bf3_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_a82f265fc5763bf3_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Sets whether or not an entry is enabled.
 --
@@ -762,14 +803,15 @@
 foreign import ccall safe "hs_bindgen_102ba65c8464342f"
   hs_bindgen_102ba65c8464342f_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Tray_Safe_SDL_GetTrayEntryEnabled@
 hs_bindgen_102ba65c8464342f
   :: BG.Ptr SDL_TrayEntry
   -> IO BG.CBool
 hs_bindgen_102ba65c8464342f =
-  BG.fromFFIType hs_bindgen_102ba65c8464342f_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_102ba65c8464342f_base (BG.toFFIType x0))
 
 -- | Gets whether or not an entry is enabled.
 --
@@ -805,7 +847,10 @@
   -> BG.Ptr BG.Void
   -> IO ()
 hs_bindgen_94ff69ef9d4fdfe8 =
-  BG.fromFFIType hs_bindgen_94ff69ef9d4fdfe8_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        hs_bindgen_94ff69ef9d4fdfe8_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2)
 
 -- | Sets a callback to be invoked when the entry is selected.
 --
@@ -844,7 +889,8 @@
   :: BG.Ptr SDL_TrayEntry
   -> IO ()
 hs_bindgen_0157d583c118c3cc =
-  BG.fromFFIType hs_bindgen_0157d583c118c3cc_base
+  \x0 ->
+    hs_bindgen_0157d583c118c3cc_base (BG.toFFIType x0)
 
 -- | Simulate a click on a tray entry.
 --
@@ -872,7 +918,8 @@
   :: BG.Ptr SDL_Tray
   -> IO ()
 hs_bindgen_8b1a746817e6df61 =
-  BG.fromFFIType hs_bindgen_8b1a746817e6df61_base
+  \x0 ->
+    hs_bindgen_8b1a746817e6df61_base (BG.toFFIType x0)
 
 -- | Destroys a tray object.
 --
@@ -904,7 +951,8 @@
   :: BG.Ptr SDL_TrayEntry
   -> IO (BG.Ptr SDL_TrayMenu)
 hs_bindgen_7ca22a5fb9c165d8 =
-  BG.fromFFIType hs_bindgen_7ca22a5fb9c165d8_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_7ca22a5fb9c165d8_base (BG.toFFIType x0))
 
 -- | Gets the menu containing a certain tray entry.
 --
@@ -936,7 +984,8 @@
   :: BG.Ptr SDL_TrayMenu
   -> IO (BG.Ptr SDL_TrayEntry)
 hs_bindgen_6e7d37f626feacc8 =
-  BG.fromFFIType hs_bindgen_6e7d37f626feacc8_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_6e7d37f626feacc8_base (BG.toFFIType x0))
 
 -- | Gets the entry for which the menu is a submenu, if the current menu is a submenu.
 --
@@ -971,7 +1020,8 @@
   :: BG.Ptr SDL_TrayMenu
   -> IO (BG.Ptr SDL_Tray)
 hs_bindgen_9e7d7b320d4c4ce1 =
-  BG.fromFFIType hs_bindgen_9e7d7b320d4c4ce1_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_9e7d7b320d4c4ce1_base (BG.toFFIType x0))
 
 -- | Gets the tray for which this menu is the first-level menu, if the current menu isn\'t a submenu.
 --
@@ -1003,7 +1053,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Tray_Safe_SDL_UpdateTrays@
 hs_bindgen_92bb76cd94576ed5 :: IO ()
 hs_bindgen_92bb76cd94576ed5 =
-  BG.fromFFIType hs_bindgen_92bb76cd94576ed5_base
+  hs_bindgen_92bb76cd94576ed5_base
 
 -- | Update the trays.
 --
diff --git a/src/SDL3/Sys/Bindgen/Tray/Unsafe.hs b/src/SDL3/Sys/Bindgen/Tray/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Tray/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Tray/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Tray.Unsafe (
@@ -29,6 +31,9 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -37,7 +42,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_tray.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_tray.h>"
          , "SDL_Tray *hs_bindgen_e85818417f6c25aa ("
          , "  SDL_Surface *arg1,"
          , "  char const *arg2"
@@ -203,7 +212,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO (BG.Ptr SDL_Tray)
 hs_bindgen_e85818417f6c25aa =
-  BG.fromFFIType hs_bindgen_e85818417f6c25aa_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_e85818417f6c25aa_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Create an icon to be placed in the operating system\'s tray, or equivalent.
 --
@@ -245,7 +256,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface
   -> IO ()
 hs_bindgen_9aff16c03b0f79a4 =
-  BG.fromFFIType hs_bindgen_9aff16c03b0f79a4_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_9aff16c03b0f79a4_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Updates the system tray icon\'s icon.
 --
@@ -281,7 +294,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO ()
 hs_bindgen_3a0f6abbabc3be43 =
-  BG.fromFFIType hs_bindgen_3a0f6abbabc3be43_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_3a0f6abbabc3be43_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Updates the system tray icon\'s tooltip.
 --
@@ -315,7 +330,8 @@
   :: BG.Ptr SDL_Tray
   -> IO (BG.Ptr SDL_TrayMenu)
 hs_bindgen_bd35a68090435dd7 =
-  BG.fromFFIType hs_bindgen_bd35a68090435dd7_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_bd35a68090435dd7_base (BG.toFFIType x0))
 
 -- | Create a menu for a system tray.
 --
@@ -353,7 +369,8 @@
   :: BG.Ptr SDL_TrayEntry
   -> IO (BG.Ptr SDL_TrayMenu)
 hs_bindgen_c024bcab15166d09 =
-  BG.fromFFIType hs_bindgen_c024bcab15166d09_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c024bcab15166d09_base (BG.toFFIType x0))
 
 -- | Create a submenu for a system tray entry.
 --
@@ -391,7 +408,8 @@
   :: BG.Ptr SDL_Tray
   -> IO (BG.Ptr SDL_TrayMenu)
 hs_bindgen_a75b79185593c812 =
-  BG.fromFFIType hs_bindgen_a75b79185593c812_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a75b79185593c812_base (BG.toFFIType x0))
 
 -- | Gets a previously created tray menu.
 --
@@ -429,7 +447,8 @@
   :: BG.Ptr SDL_TrayEntry
   -> IO (BG.Ptr SDL_TrayMenu)
 hs_bindgen_a4e00099ee20fd23 =
-  BG.fromFFIType hs_bindgen_a4e00099ee20fd23_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a4e00099ee20fd23_base (BG.toFFIType x0))
 
 -- | Gets a previously created tray entry submenu.
 --
@@ -469,7 +488,9 @@
   -> BG.Ptr BG.CInt
   -> IO (BG.Ptr (PtrConst.PtrConst SDL_TrayEntry))
 hs_bindgen_210fd2f6b416750d =
-  BG.fromFFIType hs_bindgen_210fd2f6b416750d_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_210fd2f6b416750d_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Returns a list of entries in the menu, in order.
 --
@@ -505,7 +526,8 @@
   :: BG.Ptr SDL_TrayEntry
   -> IO ()
 hs_bindgen_6b3503beb8dd3ba3 =
-  BG.fromFFIType hs_bindgen_6b3503beb8dd3ba3_base
+  \x0 ->
+    hs_bindgen_6b3503beb8dd3ba3_base (BG.toFFIType x0)
 
 -- | Removes a tray entry.
 --
@@ -528,9 +550,9 @@
 foreign import ccall unsafe "hs_bindgen_cc14c44dbb0c78cb"
   hs_bindgen_cc14c44dbb0c78cb_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
+    -> BG.CInt
     -> BG.Ptr BG.Void
-    -> BG.Word32
+    -> HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Tray_Unsafe_SDL_InsertTrayEntryAt@
@@ -541,7 +563,18 @@
   -> SDL_TrayEntryFlags
   -> IO (BG.Ptr SDL_TrayEntry)
 hs_bindgen_cc14c44dbb0c78cb =
-  BG.fromFFIType hs_bindgen_cc14c44dbb0c78cb_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_cc14c44dbb0c78cb_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Insert a tray entry at a given position.
 --
@@ -591,7 +624,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO ()
 hs_bindgen_504886286a699c39 =
-  BG.fromFFIType hs_bindgen_504886286a699c39_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_504886286a699c39_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Sets the label of an entry.
 --
@@ -627,7 +662,8 @@
   :: BG.Ptr SDL_TrayEntry
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_9759e7e644805c7d =
-  BG.fromFFIType hs_bindgen_9759e7e644805c7d_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_9759e7e644805c7d_base (BG.toFFIType x0))
 
 -- | Gets the label of an entry.
 --
@@ -654,7 +690,7 @@
 foreign import ccall unsafe "hs_bindgen_74cb41035d525059"
   hs_bindgen_74cb41035d525059_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
+    -> BG.CBool
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Tray_Unsafe_SDL_SetTrayEntryChecked@
@@ -663,7 +699,9 @@
   -> BG.CBool
   -> IO ()
 hs_bindgen_74cb41035d525059 =
-  BG.fromFFIType hs_bindgen_74cb41035d525059_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_74cb41035d525059_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Sets whether or not an entry is checked.
 --
@@ -692,14 +730,15 @@
 foreign import ccall unsafe "hs_bindgen_fe94492d1c67a601"
   hs_bindgen_fe94492d1c67a601_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Tray_Unsafe_SDL_GetTrayEntryChecked@
 hs_bindgen_fe94492d1c67a601
   :: BG.Ptr SDL_TrayEntry
   -> IO BG.CBool
 hs_bindgen_fe94492d1c67a601 =
-  BG.fromFFIType hs_bindgen_fe94492d1c67a601_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_fe94492d1c67a601_base (BG.toFFIType x0))
 
 -- | Gets whether or not an entry is checked.
 --
@@ -726,7 +765,7 @@
 foreign import ccall unsafe "hs_bindgen_5263a949bd152767"
   hs_bindgen_5263a949bd152767_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
+    -> BG.CBool
     -> IO ()
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Tray_Unsafe_SDL_SetTrayEntryEnabled@
@@ -735,7 +774,9 @@
   -> BG.CBool
   -> IO ()
 hs_bindgen_5263a949bd152767 =
-  BG.fromFFIType hs_bindgen_5263a949bd152767_base
+  \x0 ->
+    \x1 ->
+      hs_bindgen_5263a949bd152767_base (BG.toFFIType x0) (BG.toFFIType x1)
 
 -- | Sets whether or not an entry is enabled.
 --
@@ -762,14 +803,15 @@
 foreign import ccall unsafe "hs_bindgen_76a35c1dee9b4197"
   hs_bindgen_76a35c1dee9b4197_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Tray_Unsafe_SDL_GetTrayEntryEnabled@
 hs_bindgen_76a35c1dee9b4197
   :: BG.Ptr SDL_TrayEntry
   -> IO BG.CBool
 hs_bindgen_76a35c1dee9b4197 =
-  BG.fromFFIType hs_bindgen_76a35c1dee9b4197_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_76a35c1dee9b4197_base (BG.toFFIType x0))
 
 -- | Gets whether or not an entry is enabled.
 --
@@ -805,7 +847,10 @@
   -> BG.Ptr BG.Void
   -> IO ()
 hs_bindgen_3a82abfce11b4c94 =
-  BG.fromFFIType hs_bindgen_3a82abfce11b4c94_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        hs_bindgen_3a82abfce11b4c94_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2)
 
 -- | Sets a callback to be invoked when the entry is selected.
 --
@@ -844,7 +889,8 @@
   :: BG.Ptr SDL_TrayEntry
   -> IO ()
 hs_bindgen_a8a4d1df90923df2 =
-  BG.fromFFIType hs_bindgen_a8a4d1df90923df2_base
+  \x0 ->
+    hs_bindgen_a8a4d1df90923df2_base (BG.toFFIType x0)
 
 -- | Simulate a click on a tray entry.
 --
@@ -872,7 +918,8 @@
   :: BG.Ptr SDL_Tray
   -> IO ()
 hs_bindgen_fe47cafa5c754a5a =
-  BG.fromFFIType hs_bindgen_fe47cafa5c754a5a_base
+  \x0 ->
+    hs_bindgen_fe47cafa5c754a5a_base (BG.toFFIType x0)
 
 -- | Destroys a tray object.
 --
@@ -904,7 +951,8 @@
   :: BG.Ptr SDL_TrayEntry
   -> IO (BG.Ptr SDL_TrayMenu)
 hs_bindgen_3e7aeb66ff2f2f10 =
-  BG.fromFFIType hs_bindgen_3e7aeb66ff2f2f10_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3e7aeb66ff2f2f10_base (BG.toFFIType x0))
 
 -- | Gets the menu containing a certain tray entry.
 --
@@ -936,7 +984,8 @@
   :: BG.Ptr SDL_TrayMenu
   -> IO (BG.Ptr SDL_TrayEntry)
 hs_bindgen_89d0a7d911ebcebd =
-  BG.fromFFIType hs_bindgen_89d0a7d911ebcebd_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_89d0a7d911ebcebd_base (BG.toFFIType x0))
 
 -- | Gets the entry for which the menu is a submenu, if the current menu is a submenu.
 --
@@ -971,7 +1020,8 @@
   :: BG.Ptr SDL_TrayMenu
   -> IO (BG.Ptr SDL_Tray)
 hs_bindgen_48fcf0bd7a472bcb =
-  BG.fromFFIType hs_bindgen_48fcf0bd7a472bcb_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_48fcf0bd7a472bcb_base (BG.toFFIType x0))
 
 -- | Gets the tray for which this menu is the first-level menu, if the current menu isn\'t a submenu.
 --
@@ -1003,7 +1053,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Tray_Unsafe_SDL_UpdateTrays@
 hs_bindgen_03e94a19f107d107 :: IO ()
 hs_bindgen_03e94a19f107d107 =
-  BG.fromFFIType hs_bindgen_03e94a19f107d107_base
+  hs_bindgen_03e94a19f107d107_base
 
 -- | Update the trays.
 --
diff --git a/src/SDL3/Sys/Bindgen/Version.hs b/src/SDL3/Sys/Bindgen/Version.hs
--- a/src/SDL3/Sys/Bindgen/Version.hs
+++ b/src/SDL3/Sys/Bindgen/Version.hs
@@ -1,6 +1,7 @@
 {-# LANGUAGE ExplicitForAll #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | Functionality to query the current SDL version, both as headers the app was compiled against, and a library the app is linked to. The current major version of SDL headers.
 --
@@ -45,7 +46,7 @@
 --
 --     [C declaration]: @macro SDL_MICRO_VERSION@, defined at @SDL3\/SDL_version.h 65:9@
 sDL_MICRO_VERSION :: BG.CInt
-sDL_MICRO_VERSION = (16 :: BG.CInt)
+sDL_MICRO_VERSION = (18 :: BG.CInt)
 
 -- | This macro turns the version numbers into a numeric value.
 --
diff --git a/src/SDL3/Sys/Bindgen/Version/FunPtr.hs b/src/SDL3/Sys/Bindgen/Version/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Version/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Version/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Version.FunPtr (
@@ -8,13 +10,19 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_version.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_version.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Version_get_SDL_GetVersion */"
          , "__attribute__ ((const))"
          , "signed int (*hs_bindgen_44ed10f40287cec8 (void)) (void)"
@@ -39,7 +47,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Version_get_SDL_GetVersion@
 hs_bindgen_44ed10f40287cec8 :: IO (BG.FunPtr (IO BG.CInt))
 hs_bindgen_44ed10f40287cec8 =
-  BG.fromFFIType hs_bindgen_44ed10f40287cec8_base
+  fmap BG.fromFFIType hs_bindgen_44ed10f40287cec8_base
 
 {-# NOINLINE sDL_GetVersion #-}
 
@@ -70,7 +78,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Version_get_SDL_GetRevision@
 hs_bindgen_e9f711a7185d859a :: IO (BG.FunPtr (IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_e9f711a7185d859a =
-  BG.fromFFIType hs_bindgen_e9f711a7185d859a_base
+  fmap BG.fromFFIType hs_bindgen_e9f711a7185d859a_base
 
 {-# NOINLINE sDL_GetRevision #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Version/Safe.hs b/src/SDL3/Sys/Bindgen/Version/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Version/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Version/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Version.Safe (
@@ -8,13 +10,19 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_version.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_version.h>"
          , "signed int hs_bindgen_773c658657d9ec27 (void)"
          , "{"
          , "  return (SDL_GetVersion)();"
@@ -30,12 +38,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Version_Safe_SDL_GetVersion@
 foreign import ccall safe "hs_bindgen_773c658657d9ec27"
   hs_bindgen_773c658657d9ec27_base
-    :: IO BG.Int32
+    :: IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Version_Safe_SDL_GetVersion@
 hs_bindgen_773c658657d9ec27 :: IO BG.CInt
 hs_bindgen_773c658657d9ec27 =
-  BG.fromFFIType hs_bindgen_773c658657d9ec27_base
+  fmap BG.fromFFIType hs_bindgen_773c658657d9ec27_base
 
 -- | Get the version of SDL that is linked against your program.
 --
@@ -63,7 +71,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Version_Safe_SDL_GetRevision@
 hs_bindgen_56f1110e8f8cc4a0 :: IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_56f1110e8f8cc4a0 =
-  BG.fromFFIType hs_bindgen_56f1110e8f8cc4a0_base
+  fmap BG.fromFFIType hs_bindgen_56f1110e8f8cc4a0_base
 
 -- | Get the code revision of the SDL library that is linked against your program.
 --
diff --git a/src/SDL3/Sys/Bindgen/Version/Unsafe.hs b/src/SDL3/Sys/Bindgen/Version/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Version/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Version/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Version.Unsafe (
@@ -8,13 +10,19 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_version.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_version.h>"
          , "signed int hs_bindgen_0ffc70e00585797e (void)"
          , "{"
          , "  return (SDL_GetVersion)();"
@@ -30,12 +38,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Version_Unsafe_SDL_GetVersion@
 foreign import ccall unsafe "hs_bindgen_0ffc70e00585797e"
   hs_bindgen_0ffc70e00585797e_base
-    :: IO BG.Int32
+    :: IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Version_Unsafe_SDL_GetVersion@
 hs_bindgen_0ffc70e00585797e :: IO BG.CInt
 hs_bindgen_0ffc70e00585797e =
-  BG.fromFFIType hs_bindgen_0ffc70e00585797e_base
+  fmap BG.fromFFIType hs_bindgen_0ffc70e00585797e_base
 
 -- | Get the version of SDL that is linked against your program.
 --
@@ -63,7 +71,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Version_Unsafe_SDL_GetRevision@
 hs_bindgen_204f064542493b41 :: IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_204f064542493b41 =
-  BG.fromFFIType hs_bindgen_204f064542493b41_base
+  fmap BG.fromFFIType hs_bindgen_204f064542493b41_base
 
 -- | Get the code revision of the SDL library that is linked against your program.
 --
diff --git a/src/SDL3/Sys/Bindgen/Video.hs b/src/SDL3/Sys/Bindgen/Video.hs
--- a/src/SDL3/Sys/Bindgen/Video.hs
+++ b/src/SDL3/Sys/Bindgen/Video.hs
@@ -7,6 +7,7 @@
 {-# LANGUAGE ExplicitForAll #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE MagicHash #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
@@ -18,6 +19,7 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | SDL\'s video subsystem is largely interested in abstracting window management from the underlying operating system. You can create windows, manage them in various ways, set them fullscreen, and get events when interesting things happen with them, such as the mouse or keyboard interacting with a window.
 --
@@ -219,12 +221,32 @@
 )
 where
 
+import Prelude (
+  Bounded,
+  Enum,
+  Eq,
+  IO,
+  Int,
+  Integral,
+  Num,
+  Ord,
+  Read,
+  Real,
+  Show,
+  fmap,
+  pure,
+  (<*>),
+  (>>),
+  type (~),
+ )
+
 import C.Expr.HostPlatform qualified
 import HsBindgen.Runtime.CEnum qualified as CEnum
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.Marshal qualified as Marshal
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Struct qualified as Struct
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField
 import SDL3.Sys.Bindgen.Pixels qualified
@@ -589,6 +611,11 @@
 
 deriving via Marshal.EquivStorable SDL_DisplayMode instance BG.Storable SDL_DisplayMode
 
+deriving via Struct.IsStructViaReadRaw SDL_DisplayMode instance Struct.IsStruct SDL_DisplayMode
+
+-- | the display this mode is associated with
+--
+--     [C declaration]: @displayID@, defined at @SDL3\/SDL_video.h 141:19@
 instance
   (ty ~ SDL_DisplayID)
   => BG.CompatHasField.HasField "displayID" SDL_DisplayMode ty
@@ -623,6 +650,9 @@
 
   offset# = \_ -> \_ -> 0
 
+-- | pixel format
+--
+--     [C declaration]: @format@, defined at @SDL3\/SDL_video.h 142:21@
 instance
   (ty ~ SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat)
   => BG.CompatHasField.HasField "format" SDL_DisplayMode ty
@@ -657,6 +687,9 @@
 
   offset# = \_ -> \_ -> 4
 
+-- | width
+--
+--     [C declaration]: @w@, defined at @SDL3\/SDL_video.h 143:9@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "w" SDL_DisplayMode ty
@@ -689,6 +722,9 @@
 
   offset# = \_ -> \_ -> 8
 
+-- | height
+--
+--     [C declaration]: @h@, defined at @SDL3\/SDL_video.h 144:9@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "h" SDL_DisplayMode ty
@@ -721,6 +757,9 @@
 
   offset# = \_ -> \_ -> 12
 
+-- | scale converting size to pixels (e.g. a 1920x1080 mode with 2.0 scale would have 3840x2160 pixels)
+--
+--     [C declaration]: @pixel_density@, defined at @SDL3\/SDL_video.h 145:11@
 instance
   (ty ~ BG.CFloat)
   => BG.CompatHasField.HasField "pixel_density" SDL_DisplayMode ty
@@ -756,6 +795,9 @@
 
   offset# = \_ -> \_ -> 16
 
+-- | refresh rate (or 0.0f for unspecified)
+--
+--     [C declaration]: @refresh_rate@, defined at @SDL3\/SDL_video.h 146:11@
 instance
   (ty ~ BG.CFloat)
   => BG.CompatHasField.HasField "refresh_rate" SDL_DisplayMode ty
@@ -791,6 +833,9 @@
 
   offset# = \_ -> \_ -> 20
 
+-- | precise refresh rate numerator (or 0 for unspecified)
+--
+--     [C declaration]: @refresh_rate_numerator@, defined at @SDL3\/SDL_video.h 147:9@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "refresh_rate_numerator" SDL_DisplayMode ty
@@ -826,6 +871,9 @@
 
   offset# = \_ -> \_ -> 24
 
+-- | precise refresh rate denominator
+--
+--     [C declaration]: @refresh_rate_denominator@, defined at @SDL3\/SDL_video.h 148:9@
 instance
   (ty ~ BG.CInt)
   => BG.CompatHasField.HasField "refresh_rate_denominator" SDL_DisplayMode ty
@@ -861,6 +909,9 @@
 
   offset# = \_ -> \_ -> 28
 
+-- | Private
+--
+--     [C declaration]: @internal@, defined at @SDL3\/SDL_video.h 150:26@
 instance
   (ty ~ BG.Ptr SDL_DisplayModeData)
   => BG.CompatHasField.HasField "internal" SDL_DisplayMode ty
@@ -1746,7 +1797,6 @@
   { unwrap :: BG.Ptr BG.Void -> IO (BG.Ptr SDL_EGLAttrib)
   }
   deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
 
 -- __unique:__ @toSDL_EGLAttribArrayCallback_Aux@
 foreign import ccall safe "wrapper"
@@ -1760,7 +1810,13 @@
   -> IO (BG.FunPtr SDL_EGLAttribArrayCallback_Aux)
 hs_bindgen_11c111f1d1328021 =
   \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_11c111f1d1328021_base (BG.toFFIType fun0))
+    fmap
+      BG.castFunPtr
+      ( hs_bindgen_11c111f1d1328021_base
+          ( \x1 ->
+              fmap BG.toFFIType (BG.getField @"unwrap" fun0 (BG.fromFFIType x1))
+          )
+      )
 
 -- __unique:__ @fromSDL_EGLAttribArrayCallback_Aux@
 foreign import ccall safe "dynamic"
@@ -1775,7 +1831,10 @@
   -> SDL_EGLAttribArrayCallback_Aux
 hs_bindgen_30601c44a183aaaa =
   \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_30601c44a183aaaa_base (BG.castFunPtrToFFIType funPtr0))
+    SDL_EGLAttribArrayCallback_Aux
+      ( \x1 ->
+          fmap BG.fromFFIType (hs_bindgen_30601c44a183aaaa_base (BG.castFunPtr funPtr0) (BG.toFFIType x1))
+      )
 
 instance BG.ToFunPtr SDL_EGLAttribArrayCallback_Aux where
   toFunPtr = hs_bindgen_11c111f1d1328021
@@ -1868,7 +1927,6 @@
   { unwrap :: BG.Ptr BG.Void -> SDL_EGLDisplay -> SDL_EGLConfig -> IO (BG.Ptr SDL_EGLint)
   }
   deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
 
 -- __unique:__ @toSDL_EGLIntArrayCallback_Aux@
 foreign import ccall safe "wrapper"
@@ -1882,7 +1940,17 @@
   -> IO (BG.FunPtr SDL_EGLIntArrayCallback_Aux)
 hs_bindgen_6f9a11d91e338196 =
   \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_6f9a11d91e338196_base (BG.toFFIType fun0))
+    fmap
+      BG.castFunPtr
+      ( hs_bindgen_6f9a11d91e338196_base
+          ( \x1 ->
+              \x2 ->
+                \x3 ->
+                  fmap
+                    BG.toFFIType
+                    (BG.getField @"unwrap" fun0 (BG.fromFFIType x1) (BG.fromFFIType x2) (BG.fromFFIType x3))
+          )
+      )
 
 -- __unique:__ @fromSDL_EGLIntArrayCallback_Aux@
 foreign import ccall safe "dynamic"
@@ -1899,7 +1967,19 @@
   -> SDL_EGLIntArrayCallback_Aux
 hs_bindgen_19e73e54259a2a81 =
   \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_19e73e54259a2a81_base (BG.castFunPtrToFFIType funPtr0))
+    SDL_EGLIntArrayCallback_Aux
+      ( \x1 ->
+          \x2 ->
+            \x3 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_19e73e54259a2a81_base
+                    (BG.castFunPtr funPtr0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                )
+      )
 
 instance BG.ToFunPtr SDL_EGLIntArrayCallback_Aux where
   toFunPtr = hs_bindgen_6f9a11d91e338196
@@ -5419,13 +5499,12 @@
       -> IO SDL_HitTestResult
   }
   deriving stock (BG.Generic)
-  deriving newtype (BG.HasFFIType)
 
 -- __unique:__ @toSDL_HitTest_Aux@
 foreign import ccall safe "wrapper"
   hs_bindgen_22e8e872c7c7261b_base
-    :: (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.Word32)
-    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.Word32))
+    :: (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.CUInt)
+    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.CUInt))
 
 -- __unique:__ @toSDL_HitTest_Aux@
 hs_bindgen_22e8e872c7c7261b
@@ -5433,16 +5512,26 @@
   -> IO (BG.FunPtr SDL_HitTest_Aux)
 hs_bindgen_22e8e872c7c7261b =
   \fun0 ->
-    fmap BG.castFunPtrFromFFIType (hs_bindgen_22e8e872c7c7261b_base (BG.toFFIType fun0))
+    fmap
+      BG.castFunPtr
+      ( hs_bindgen_22e8e872c7c7261b_base
+          ( \x1 ->
+              \x2 ->
+                \x3 ->
+                  fmap
+                    BG.toFFIType
+                    (BG.getField @"unwrap" fun0 (BG.fromFFIType x1) (BG.fromFFIType x2) (BG.fromFFIType x3))
+          )
+      )
 
 -- __unique:__ @fromSDL_HitTest_Aux@
 foreign import ccall safe "dynamic"
   hs_bindgen_33151ef072f28e0c_base
-    :: BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.Word32)
+    :: BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.CUInt)
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @fromSDL_HitTest_Aux@
 hs_bindgen_33151ef072f28e0c
@@ -5450,7 +5539,19 @@
   -> SDL_HitTest_Aux
 hs_bindgen_33151ef072f28e0c =
   \funPtr0 ->
-    BG.fromFFIType (hs_bindgen_33151ef072f28e0c_base (BG.castFunPtrToFFIType funPtr0))
+    SDL_HitTest_Aux
+      ( \x1 ->
+          \x2 ->
+            \x3 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_33151ef072f28e0c_base
+                    (BG.castFunPtr funPtr0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                )
+      )
 
 instance BG.ToFunPtr SDL_HitTest_Aux where
   toFunPtr = hs_bindgen_22e8e872c7c7261b
diff --git a/src/SDL3/Sys/Bindgen/Video/FunPtr.hs b/src/SDL3/Sys/Bindgen/Video/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Video/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Video/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Video.FunPtr (
@@ -120,6 +122,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
@@ -133,7 +137,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_video.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_video.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GetNumVideoDrivers */"
          , "__attribute__ ((const))"
          , "signed int (*hs_bindgen_cd62c011cded1808 (void)) (void)"
@@ -1145,7 +1153,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GetNumVideoDrivers@
 hs_bindgen_cd62c011cded1808 :: IO (BG.FunPtr (IO BG.CInt))
 hs_bindgen_cd62c011cded1808 =
-  BG.fromFFIType hs_bindgen_cd62c011cded1808_base
+  fmap BG.fromFFIType hs_bindgen_cd62c011cded1808_base
 
 {-# NOINLINE sDL_GetNumVideoDrivers #-}
 
@@ -1172,7 +1180,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GetVideoDriver@
 hs_bindgen_046d70207bafe47f :: IO (BG.FunPtr (BG.CInt -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_046d70207bafe47f =
-  BG.fromFFIType hs_bindgen_046d70207bafe47f_base
+  fmap BG.fromFFIType hs_bindgen_046d70207bafe47f_base
 
 {-# NOINLINE sDL_GetVideoDriver #-}
 
@@ -1205,7 +1213,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GetCurrentVideoDriver@
 hs_bindgen_fb283d39e283ed14 :: IO (BG.FunPtr (IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_fb283d39e283ed14 =
-  BG.fromFFIType hs_bindgen_fb283d39e283ed14_base
+  fmap BG.fromFFIType hs_bindgen_fb283d39e283ed14_base
 
 {-# NOINLINE sDL_GetCurrentVideoDriver #-}
 
@@ -1234,7 +1242,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GetSystemTheme@
 hs_bindgen_7bbdbd7274c0b5b5 :: IO (BG.FunPtr (IO SDL_SystemTheme))
 hs_bindgen_7bbdbd7274c0b5b5 =
-  BG.fromFFIType hs_bindgen_7bbdbd7274c0b5b5_base
+  fmap BG.fromFFIType hs_bindgen_7bbdbd7274c0b5b5_base
 
 {-# NOINLINE sDL_GetSystemTheme #-}
 
@@ -1259,7 +1267,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GetDisplays@
 hs_bindgen_70f7cf654509b2c3 :: IO (BG.FunPtr (BG.Ptr BG.CInt -> IO (BG.Ptr SDL_DisplayID)))
 hs_bindgen_70f7cf654509b2c3 =
-  BG.fromFFIType hs_bindgen_70f7cf654509b2c3_base
+  fmap BG.fromFFIType hs_bindgen_70f7cf654509b2c3_base
 
 {-# NOINLINE sDL_GetDisplays #-}
 
@@ -1286,7 +1294,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GetPrimaryDisplay@
 hs_bindgen_b790a4a3043628fa :: IO (BG.FunPtr (IO SDL_DisplayID))
 hs_bindgen_b790a4a3043628fa =
-  BG.fromFFIType hs_bindgen_b790a4a3043628fa_base
+  fmap BG.fromFFIType hs_bindgen_b790a4a3043628fa_base
 
 {-# NOINLINE sDL_GetPrimaryDisplay #-}
 
@@ -1314,7 +1322,7 @@
 hs_bindgen_c3f8ffe6ded9cfd6
   :: IO (BG.FunPtr (SDL_DisplayID -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID))
 hs_bindgen_c3f8ffe6ded9cfd6 =
-  BG.fromFFIType hs_bindgen_c3f8ffe6ded9cfd6_base
+  fmap BG.fromFFIType hs_bindgen_c3f8ffe6ded9cfd6_base
 
 {-# NOINLINE sDL_GetDisplayProperties #-}
 
@@ -1358,7 +1366,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GetDisplayName@
 hs_bindgen_d5ad6e555b5cb237 :: IO (BG.FunPtr (SDL_DisplayID -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_d5ad6e555b5cb237 =
-  BG.fromFFIType hs_bindgen_d5ad6e555b5cb237_base
+  fmap BG.fromFFIType hs_bindgen_d5ad6e555b5cb237_base
 
 {-# NOINLINE sDL_GetDisplayName #-}
 
@@ -1388,7 +1396,7 @@
 hs_bindgen_6d5f9eee448719f4
   :: IO (BG.FunPtr (SDL_DisplayID -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect -> IO BG.CBool))
 hs_bindgen_6d5f9eee448719f4 =
-  BG.fromFFIType hs_bindgen_6d5f9eee448719f4_base
+  fmap BG.fromFFIType hs_bindgen_6d5f9eee448719f4_base
 
 {-# NOINLINE sDL_GetDisplayBounds #-}
 
@@ -1423,7 +1431,7 @@
 hs_bindgen_65535f32592754c4
   :: IO (BG.FunPtr (SDL_DisplayID -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect -> IO BG.CBool))
 hs_bindgen_65535f32592754c4 =
-  BG.fromFFIType hs_bindgen_65535f32592754c4_base
+  fmap BG.fromFFIType hs_bindgen_65535f32592754c4_base
 
 {-# NOINLINE sDL_GetDisplayUsableBounds #-}
 
@@ -1459,7 +1467,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GetNaturalDisplayOrientation@
 hs_bindgen_66971f9bdcb4b971 :: IO (BG.FunPtr (SDL_DisplayID -> IO SDL_DisplayOrientation))
 hs_bindgen_66971f9bdcb4b971 =
-  BG.fromFFIType hs_bindgen_66971f9bdcb4b971_base
+  fmap BG.fromFFIType hs_bindgen_66971f9bdcb4b971_base
 
 {-# NOINLINE sDL_GetNaturalDisplayOrientation #-}
 
@@ -1488,7 +1496,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GetCurrentDisplayOrientation@
 hs_bindgen_a24aa5e4df6d8aa0 :: IO (BG.FunPtr (SDL_DisplayID -> IO SDL_DisplayOrientation))
 hs_bindgen_a24aa5e4df6d8aa0 =
-  BG.fromFFIType hs_bindgen_a24aa5e4df6d8aa0_base
+  fmap BG.fromFFIType hs_bindgen_a24aa5e4df6d8aa0_base
 
 {-# NOINLINE sDL_GetCurrentDisplayOrientation #-}
 
@@ -1517,7 +1525,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GetDisplayContentScale@
 hs_bindgen_eab36ce421e54b3e :: IO (BG.FunPtr (SDL_DisplayID -> IO BG.CFloat))
 hs_bindgen_eab36ce421e54b3e =
-  BG.fromFFIType hs_bindgen_eab36ce421e54b3e_base
+  fmap BG.fromFFIType hs_bindgen_eab36ce421e54b3e_base
 
 {-# NOINLINE sDL_GetDisplayContentScale #-}
 
@@ -1551,7 +1559,7 @@
 hs_bindgen_bd010935798ea365
   :: IO (BG.FunPtr (SDL_DisplayID -> BG.Ptr BG.CInt -> IO (BG.Ptr (BG.Ptr SDL_DisplayMode))))
 hs_bindgen_bd010935798ea365 =
-  BG.fromFFIType hs_bindgen_bd010935798ea365_base
+  fmap BG.fromFFIType hs_bindgen_bd010935798ea365_base
 
 {-# NOINLINE sDL_GetFullscreenDisplayModes #-}
 
@@ -1608,7 +1616,7 @@
            )
        )
 hs_bindgen_d0e64a6f43b88a5e =
-  BG.fromFFIType hs_bindgen_d0e64a6f43b88a5e_base
+  fmap BG.fromFFIType hs_bindgen_d0e64a6f43b88a5e_base
 
 {-# NOINLINE sDL_GetClosestFullscreenDisplayMode #-}
 
@@ -1659,7 +1667,7 @@
 hs_bindgen_72b78488001b241a
   :: IO (BG.FunPtr (SDL_DisplayID -> IO (PtrConst.PtrConst SDL_DisplayMode)))
 hs_bindgen_72b78488001b241a =
-  BG.fromFFIType hs_bindgen_72b78488001b241a_base
+  fmap BG.fromFFIType hs_bindgen_72b78488001b241a_base
 
 {-# NOINLINE sDL_GetDesktopDisplayMode #-}
 
@@ -1691,7 +1699,7 @@
 hs_bindgen_4ea9690ee956f077
   :: IO (BG.FunPtr (SDL_DisplayID -> IO (PtrConst.PtrConst SDL_DisplayMode)))
 hs_bindgen_4ea9690ee956f077 =
-  BG.fromFFIType hs_bindgen_4ea9690ee956f077_base
+  fmap BG.fromFFIType hs_bindgen_4ea9690ee956f077_base
 
 {-# NOINLINE sDL_GetCurrentDisplayMode #-}
 
@@ -1723,7 +1731,7 @@
 hs_bindgen_de146763764fd52f
   :: IO (BG.FunPtr (PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Point -> IO SDL_DisplayID))
 hs_bindgen_de146763764fd52f =
-  BG.fromFFIType hs_bindgen_de146763764fd52f_base
+  fmap BG.fromFFIType hs_bindgen_de146763764fd52f_base
 
 {-# NOINLINE sDL_GetDisplayForPoint #-}
 
@@ -1754,7 +1762,7 @@
 hs_bindgen_710a7746f071d499
   :: IO (BG.FunPtr (PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect -> IO SDL_DisplayID))
 hs_bindgen_710a7746f071d499 =
-  BG.fromFFIType hs_bindgen_710a7746f071d499_base
+  fmap BG.fromFFIType hs_bindgen_710a7746f071d499_base
 
 {-# NOINLINE sDL_GetDisplayForRect #-}
 
@@ -1784,7 +1792,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GetDisplayForWindow@
 hs_bindgen_ab0b114093b84662 :: IO (BG.FunPtr (BG.Ptr SDL_Window -> IO SDL_DisplayID))
 hs_bindgen_ab0b114093b84662 =
-  BG.fromFFIType hs_bindgen_ab0b114093b84662_base
+  fmap BG.fromFFIType hs_bindgen_ab0b114093b84662_base
 
 {-# NOINLINE sDL_GetDisplayForWindow #-}
 
@@ -1813,7 +1821,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GetWindowPixelDensity@
 hs_bindgen_dc1af7f260c7365f :: IO (BG.FunPtr (BG.Ptr SDL_Window -> IO BG.CFloat))
 hs_bindgen_dc1af7f260c7365f =
-  BG.fromFFIType hs_bindgen_dc1af7f260c7365f_base
+  fmap BG.fromFFIType hs_bindgen_dc1af7f260c7365f_base
 
 {-# NOINLINE sDL_GetWindowPixelDensity #-}
 
@@ -1844,7 +1852,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GetWindowDisplayScale@
 hs_bindgen_95da25536b3703d7 :: IO (BG.FunPtr (BG.Ptr SDL_Window -> IO BG.CFloat))
 hs_bindgen_95da25536b3703d7 =
-  BG.fromFFIType hs_bindgen_95da25536b3703d7_base
+  fmap BG.fromFFIType hs_bindgen_95da25536b3703d7_base
 
 {-# NOINLINE sDL_GetWindowDisplayScale #-}
 
@@ -1876,7 +1884,7 @@
 hs_bindgen_f0a6d02b7642ed3e
   :: IO (BG.FunPtr (BG.Ptr SDL_Window -> PtrConst.PtrConst SDL_DisplayMode -> IO BG.CBool))
 hs_bindgen_f0a6d02b7642ed3e =
-  BG.fromFFIType hs_bindgen_f0a6d02b7642ed3e_base
+  fmap BG.fromFFIType hs_bindgen_f0a6d02b7642ed3e_base
 
 {-# NOINLINE sDL_SetWindowFullscreenMode #-}
 
@@ -1915,7 +1923,7 @@
 hs_bindgen_16bce449fb30d23a
   :: IO (BG.FunPtr (BG.Ptr SDL_Window -> IO (PtrConst.PtrConst SDL_DisplayMode)))
 hs_bindgen_16bce449fb30d23a =
-  BG.fromFFIType hs_bindgen_16bce449fb30d23a_base
+  fmap BG.fromFFIType hs_bindgen_16bce449fb30d23a_base
 
 {-# NOINLINE sDL_GetWindowFullscreenMode #-}
 
@@ -1946,7 +1954,7 @@
 hs_bindgen_5c1cf7c698aa08ce
   :: IO (BG.FunPtr (BG.Ptr SDL_Window -> BG.Ptr HsBindgen.Runtime.LibC.CSize -> IO (BG.Ptr BG.Void)))
 hs_bindgen_5c1cf7c698aa08ce =
-  BG.fromFFIType hs_bindgen_5c1cf7c698aa08ce_base
+  fmap BG.fromFFIType hs_bindgen_5c1cf7c698aa08ce_base
 
 {-# NOINLINE sDL_GetWindowICCProfile #-}
 
@@ -1977,7 +1985,7 @@
 hs_bindgen_b8027cb465e5a5a2
   :: IO (BG.FunPtr (BG.Ptr SDL_Window -> IO SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat))
 hs_bindgen_b8027cb465e5a5a2 =
-  BG.fromFFIType hs_bindgen_b8027cb465e5a5a2_base
+  fmap BG.fromFFIType hs_bindgen_b8027cb465e5a5a2_base
 
 {-# NOINLINE sDL_GetWindowPixelFormat #-}
 
@@ -2005,7 +2013,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GetWindows@
 hs_bindgen_b2965b9f9dd9971d :: IO (BG.FunPtr (BG.Ptr BG.CInt -> IO (BG.Ptr (BG.Ptr SDL_Window))))
 hs_bindgen_b2965b9f9dd9971d =
-  BG.fromFFIType hs_bindgen_b2965b9f9dd9971d_base
+  fmap BG.fromFFIType hs_bindgen_b2965b9f9dd9971d_base
 
 {-# NOINLINE sDL_GetWindows #-}
 
@@ -2036,7 +2044,7 @@
            (PtrConst.PtrConst BG.CChar -> BG.CInt -> BG.CInt -> SDL_WindowFlags -> IO (BG.Ptr SDL_Window))
        )
 hs_bindgen_c12016fdc0d7966b =
-  BG.fromFFIType hs_bindgen_c12016fdc0d7966b_base
+  fmap BG.fromFFIType hs_bindgen_c12016fdc0d7966b_base
 
 {-# NOINLINE sDL_CreateWindow #-}
 
@@ -2150,7 +2158,7 @@
            )
        )
 hs_bindgen_684a9951d98feb17 =
-  BG.fromFFIType hs_bindgen_684a9951d98feb17_base
+  fmap BG.fromFFIType hs_bindgen_684a9951d98feb17_base
 
 {-# NOINLINE sDL_CreatePopupWindow #-}
 
@@ -2235,7 +2243,7 @@
 hs_bindgen_2143bdc9c78e0e7e
   :: IO (BG.FunPtr (SDL3.Sys.Bindgen.Properties.SDL_PropertiesID -> IO (BG.Ptr SDL_Window)))
 hs_bindgen_2143bdc9c78e0e7e =
-  BG.fromFFIType hs_bindgen_2143bdc9c78e0e7e_base
+  fmap BG.fromFFIType hs_bindgen_2143bdc9c78e0e7e_base
 
 {-# NOINLINE sDL_CreateWindowWithProperties #-}
 
@@ -2371,7 +2379,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GetWindowID@
 hs_bindgen_271b950c2d28e361 :: IO (BG.FunPtr (BG.Ptr SDL_Window -> IO SDL_WindowID))
 hs_bindgen_271b950c2d28e361 =
-  BG.fromFFIType hs_bindgen_271b950c2d28e361_base
+  fmap BG.fromFFIType hs_bindgen_271b950c2d28e361_base
 
 {-# NOINLINE sDL_GetWindowID #-}
 
@@ -2402,7 +2410,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GetWindowFromID@
 hs_bindgen_4b427f44c79ceb27 :: IO (BG.FunPtr (SDL_WindowID -> IO (BG.Ptr SDL_Window)))
 hs_bindgen_4b427f44c79ceb27 =
-  BG.fromFFIType hs_bindgen_4b427f44c79ceb27_base
+  fmap BG.fromFFIType hs_bindgen_4b427f44c79ceb27_base
 
 {-# NOINLINE sDL_GetWindowFromID #-}
 
@@ -2433,7 +2441,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GetWindowParent@
 hs_bindgen_3f127843661c07d5 :: IO (BG.FunPtr (BG.Ptr SDL_Window -> IO (BG.Ptr SDL_Window)))
 hs_bindgen_3f127843661c07d5 =
-  BG.fromFFIType hs_bindgen_3f127843661c07d5_base
+  fmap BG.fromFFIType hs_bindgen_3f127843661c07d5_base
 
 {-# NOINLINE sDL_GetWindowParent #-}
 
@@ -2463,7 +2471,7 @@
 hs_bindgen_985031bf6e083168
   :: IO (BG.FunPtr (BG.Ptr SDL_Window -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID))
 hs_bindgen_985031bf6e083168 =
-  BG.fromFFIType hs_bindgen_985031bf6e083168_base
+  fmap BG.fromFFIType hs_bindgen_985031bf6e083168_base
 
 {-# NOINLINE sDL_GetWindowProperties #-}
 
@@ -2589,7 +2597,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GetWindowFlags@
 hs_bindgen_b1430580544057d6 :: IO (BG.FunPtr (BG.Ptr SDL_Window -> IO SDL_WindowFlags))
 hs_bindgen_b1430580544057d6 =
-  BG.fromFFIType hs_bindgen_b1430580544057d6_base
+  fmap BG.fromFFIType hs_bindgen_b1430580544057d6_base
 
 {-# NOINLINE sDL_GetWindowFlags #-}
 
@@ -2619,7 +2627,7 @@
 hs_bindgen_02e6f654a8740cb6
   :: IO (BG.FunPtr (BG.Ptr SDL_Window -> PtrConst.PtrConst BG.CChar -> IO BG.CBool))
 hs_bindgen_02e6f654a8740cb6 =
-  BG.fromFFIType hs_bindgen_02e6f654a8740cb6_base
+  fmap BG.fromFFIType hs_bindgen_02e6f654a8740cb6_base
 
 {-# NOINLINE sDL_SetWindowTitle #-}
 
@@ -2652,7 +2660,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GetWindowTitle@
 hs_bindgen_461782ed3ae5273a :: IO (BG.FunPtr (BG.Ptr SDL_Window -> IO (PtrConst.PtrConst BG.CChar)))
 hs_bindgen_461782ed3ae5273a =
-  BG.fromFFIType hs_bindgen_461782ed3ae5273a_base
+  fmap BG.fromFFIType hs_bindgen_461782ed3ae5273a_base
 
 {-# NOINLINE sDL_GetWindowTitle #-}
 
@@ -2682,7 +2690,7 @@
 hs_bindgen_c87ab967152ab788
   :: IO (BG.FunPtr (BG.Ptr SDL_Window -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface -> IO BG.CBool))
 hs_bindgen_c87ab967152ab788 =
-  BG.fromFFIType hs_bindgen_c87ab967152ab788_base
+  fmap BG.fromFFIType hs_bindgen_c87ab967152ab788_base
 
 {-# NOINLINE sDL_SetWindowIcon #-}
 
@@ -2717,7 +2725,7 @@
 hs_bindgen_196834c01e56d982
   :: IO (BG.FunPtr (BG.Ptr SDL_Window -> BG.CInt -> BG.CInt -> IO BG.CBool))
 hs_bindgen_196834c01e56d982 =
-  BG.fromFFIType hs_bindgen_196834c01e56d982_base
+  fmap BG.fromFFIType hs_bindgen_196834c01e56d982_base
 
 {-# NOINLINE sDL_SetWindowPosition #-}
 
@@ -2759,7 +2767,7 @@
 hs_bindgen_f2881c8d992e0f1f
   :: IO (BG.FunPtr (BG.Ptr SDL_Window -> BG.Ptr BG.CInt -> BG.Ptr BG.CInt -> IO BG.CBool))
 hs_bindgen_f2881c8d992e0f1f =
-  BG.fromFFIType hs_bindgen_f2881c8d992e0f1f_base
+  fmap BG.fromFFIType hs_bindgen_f2881c8d992e0f1f_base
 
 {-# NOINLINE sDL_GetWindowPosition #-}
 
@@ -2798,7 +2806,7 @@
 hs_bindgen_c18dc3d08bf90f70
   :: IO (BG.FunPtr (BG.Ptr SDL_Window -> BG.CInt -> BG.CInt -> IO BG.CBool))
 hs_bindgen_c18dc3d08bf90f70 =
-  BG.fromFFIType hs_bindgen_c18dc3d08bf90f70_base
+  fmap BG.fromFFIType hs_bindgen_c18dc3d08bf90f70_base
 
 {-# NOINLINE sDL_SetWindowSize #-}
 
@@ -2840,7 +2848,7 @@
 hs_bindgen_df749a5a4c237fc6
   :: IO (BG.FunPtr (BG.Ptr SDL_Window -> BG.Ptr BG.CInt -> BG.Ptr BG.CInt -> IO BG.CBool))
 hs_bindgen_df749a5a4c237fc6 =
-  BG.fromFFIType hs_bindgen_df749a5a4c237fc6_base
+  fmap BG.fromFFIType hs_bindgen_df749a5a4c237fc6_base
 
 {-# NOINLINE sDL_GetWindowSize #-}
 
@@ -2877,7 +2885,7 @@
 hs_bindgen_8d8deb6f3e406cac
   :: IO (BG.FunPtr (BG.Ptr SDL_Window -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect -> IO BG.CBool))
 hs_bindgen_8d8deb6f3e406cac =
-  BG.fromFFIType hs_bindgen_8d8deb6f3e406cac_base
+  fmap BG.fromFFIType hs_bindgen_8d8deb6f3e406cac_base
 
 {-# NOINLINE sDL_GetWindowSafeArea #-}
 
@@ -2910,7 +2918,7 @@
 hs_bindgen_25a8a6e0ad2d08d8
   :: IO (BG.FunPtr (BG.Ptr SDL_Window -> BG.CFloat -> BG.CFloat -> IO BG.CBool))
 hs_bindgen_25a8a6e0ad2d08d8 =
-  BG.fromFFIType hs_bindgen_25a8a6e0ad2d08d8_base
+  fmap BG.fromFFIType hs_bindgen_25a8a6e0ad2d08d8_base
 
 {-# NOINLINE sDL_SetWindowAspectRatio #-}
 
@@ -2952,7 +2960,7 @@
 hs_bindgen_d18b72c056e3e796
   :: IO (BG.FunPtr (BG.Ptr SDL_Window -> BG.Ptr BG.CFloat -> BG.Ptr BG.CFloat -> IO BG.CBool))
 hs_bindgen_d18b72c056e3e796 =
-  BG.fromFFIType hs_bindgen_d18b72c056e3e796_base
+  fmap BG.fromFFIType hs_bindgen_d18b72c056e3e796_base
 
 {-# NOINLINE sDL_GetWindowAspectRatio #-}
 
@@ -2996,7 +3004,7 @@
            )
        )
 hs_bindgen_72cf6e7cf38f6a60 =
-  BG.fromFFIType hs_bindgen_72cf6e7cf38f6a60_base
+  fmap BG.fromFFIType hs_bindgen_72cf6e7cf38f6a60_base
 
 {-# NOINLINE sDL_GetWindowBordersSize #-}
 
@@ -3048,7 +3056,7 @@
 hs_bindgen_6affb1847f677537
   :: IO (BG.FunPtr (BG.Ptr SDL_Window -> BG.Ptr BG.CInt -> BG.Ptr BG.CInt -> IO BG.CBool))
 hs_bindgen_6affb1847f677537 =
-  BG.fromFFIType hs_bindgen_6affb1847f677537_base
+  fmap BG.fromFFIType hs_bindgen_6affb1847f677537_base
 
 {-# NOINLINE sDL_GetWindowSizeInPixels #-}
 
@@ -3083,7 +3091,7 @@
 hs_bindgen_6edf78b362442bfc
   :: IO (BG.FunPtr (BG.Ptr SDL_Window -> BG.CInt -> BG.CInt -> IO BG.CBool))
 hs_bindgen_6edf78b362442bfc =
-  BG.fromFFIType hs_bindgen_6edf78b362442bfc_base
+  fmap BG.fromFFIType hs_bindgen_6edf78b362442bfc_base
 
 {-# NOINLINE sDL_SetWindowMinimumSize #-}
 
@@ -3117,7 +3125,7 @@
 hs_bindgen_95a71d8cbb92dc9e
   :: IO (BG.FunPtr (BG.Ptr SDL_Window -> BG.Ptr BG.CInt -> BG.Ptr BG.CInt -> IO BG.CBool))
 hs_bindgen_95a71d8cbb92dc9e =
-  BG.fromFFIType hs_bindgen_95a71d8cbb92dc9e_base
+  fmap BG.fromFFIType hs_bindgen_95a71d8cbb92dc9e_base
 
 {-# NOINLINE sDL_GetWindowMinimumSize #-}
 
@@ -3152,7 +3160,7 @@
 hs_bindgen_291022ee01415afe
   :: IO (BG.FunPtr (BG.Ptr SDL_Window -> BG.CInt -> BG.CInt -> IO BG.CBool))
 hs_bindgen_291022ee01415afe =
-  BG.fromFFIType hs_bindgen_291022ee01415afe_base
+  fmap BG.fromFFIType hs_bindgen_291022ee01415afe_base
 
 {-# NOINLINE sDL_SetWindowMaximumSize #-}
 
@@ -3186,7 +3194,7 @@
 hs_bindgen_dc1d465b3b604dcd
   :: IO (BG.FunPtr (BG.Ptr SDL_Window -> BG.Ptr BG.CInt -> BG.Ptr BG.CInt -> IO BG.CBool))
 hs_bindgen_dc1d465b3b604dcd =
-  BG.fromFFIType hs_bindgen_dc1d465b3b604dcd_base
+  fmap BG.fromFFIType hs_bindgen_dc1d465b3b604dcd_base
 
 {-# NOINLINE sDL_GetWindowMaximumSize #-}
 
@@ -3220,7 +3228,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_SetWindowBordered@
 hs_bindgen_88f2360be3e7e300 :: IO (BG.FunPtr (BG.Ptr SDL_Window -> BG.CBool -> IO BG.CBool))
 hs_bindgen_88f2360be3e7e300 =
-  BG.fromFFIType hs_bindgen_88f2360be3e7e300_base
+  fmap BG.fromFFIType hs_bindgen_88f2360be3e7e300_base
 
 {-# NOINLINE sDL_SetWindowBordered #-}
 
@@ -3255,7 +3263,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_SetWindowResizable@
 hs_bindgen_5100302cfda497dd :: IO (BG.FunPtr (BG.Ptr SDL_Window -> BG.CBool -> IO BG.CBool))
 hs_bindgen_5100302cfda497dd =
-  BG.fromFFIType hs_bindgen_5100302cfda497dd_base
+  fmap BG.fromFFIType hs_bindgen_5100302cfda497dd_base
 
 {-# NOINLINE sDL_SetWindowResizable #-}
 
@@ -3290,7 +3298,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_SetWindowAlwaysOnTop@
 hs_bindgen_608fd57fdcd4f95b :: IO (BG.FunPtr (BG.Ptr SDL_Window -> BG.CBool -> IO BG.CBool))
 hs_bindgen_608fd57fdcd4f95b =
-  BG.fromFFIType hs_bindgen_608fd57fdcd4f95b_base
+  fmap BG.fromFFIType hs_bindgen_608fd57fdcd4f95b_base
 
 {-# NOINLINE sDL_SetWindowAlwaysOnTop #-}
 
@@ -3323,7 +3331,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_SetWindowFillDocument@
 hs_bindgen_68dc00f60262f0f8 :: IO (BG.FunPtr (BG.Ptr SDL_Window -> BG.CBool -> IO BG.CBool))
 hs_bindgen_68dc00f60262f0f8 =
-  BG.fromFFIType hs_bindgen_68dc00f60262f0f8_base
+  fmap BG.fromFFIType hs_bindgen_68dc00f60262f0f8_base
 
 {-# NOINLINE sDL_SetWindowFillDocument #-}
 
@@ -3362,7 +3370,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_ShowWindow@
 hs_bindgen_64fdfc7ce17dc625 :: IO (BG.FunPtr (BG.Ptr SDL_Window -> IO BG.CBool))
 hs_bindgen_64fdfc7ce17dc625 =
-  BG.fromFFIType hs_bindgen_64fdfc7ce17dc625_base
+  fmap BG.fromFFIType hs_bindgen_64fdfc7ce17dc625_base
 
 {-# NOINLINE sDL_ShowWindow #-}
 
@@ -3391,7 +3399,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_HideWindow@
 hs_bindgen_c2ab0cd6e971a55f :: IO (BG.FunPtr (BG.Ptr SDL_Window -> IO BG.CBool))
 hs_bindgen_c2ab0cd6e971a55f =
-  BG.fromFFIType hs_bindgen_c2ab0cd6e971a55f_base
+  fmap BG.fromFFIType hs_bindgen_c2ab0cd6e971a55f_base
 
 {-# NOINLINE sDL_HideWindow #-}
 
@@ -3420,7 +3428,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_RaiseWindow@
 hs_bindgen_e3e1a65c603c3d63 :: IO (BG.FunPtr (BG.Ptr SDL_Window -> IO BG.CBool))
 hs_bindgen_e3e1a65c603c3d63 =
-  BG.fromFFIType hs_bindgen_e3e1a65c603c3d63_base
+  fmap BG.fromFFIType hs_bindgen_e3e1a65c603c3d63_base
 
 {-# NOINLINE sDL_RaiseWindow #-}
 
@@ -3449,7 +3457,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_MaximizeWindow@
 hs_bindgen_fe10be381d9d51e0 :: IO (BG.FunPtr (BG.Ptr SDL_Window -> IO BG.CBool))
 hs_bindgen_fe10be381d9d51e0 =
-  BG.fromFFIType hs_bindgen_fe10be381d9d51e0_base
+  fmap BG.fromFFIType hs_bindgen_fe10be381d9d51e0_base
 
 {-# NOINLINE sDL_MaximizeWindow #-}
 
@@ -3486,7 +3494,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_MinimizeWindow@
 hs_bindgen_d04014fe275b362c :: IO (BG.FunPtr (BG.Ptr SDL_Window -> IO BG.CBool))
 hs_bindgen_d04014fe275b362c =
-  BG.fromFFIType hs_bindgen_d04014fe275b362c_base
+  fmap BG.fromFFIType hs_bindgen_d04014fe275b362c_base
 
 {-# NOINLINE sDL_MinimizeWindow #-}
 
@@ -3521,7 +3529,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_RestoreWindow@
 hs_bindgen_7fb2f1337e1419c4 :: IO (BG.FunPtr (BG.Ptr SDL_Window -> IO BG.CBool))
 hs_bindgen_7fb2f1337e1419c4 =
-  BG.fromFFIType hs_bindgen_7fb2f1337e1419c4_base
+  fmap BG.fromFFIType hs_bindgen_7fb2f1337e1419c4_base
 
 {-# NOINLINE sDL_RestoreWindow #-}
 
@@ -3556,7 +3564,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_SetWindowFullscreen@
 hs_bindgen_7997a9fb73c8d257 :: IO (BG.FunPtr (BG.Ptr SDL_Window -> BG.CBool -> IO BG.CBool))
 hs_bindgen_7997a9fb73c8d257 =
-  BG.fromFFIType hs_bindgen_7997a9fb73c8d257_base
+  fmap BG.fromFFIType hs_bindgen_7997a9fb73c8d257_base
 
 {-# NOINLINE sDL_SetWindowFullscreen #-}
 
@@ -3593,7 +3601,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_SyncWindow@
 hs_bindgen_99cfe89c3d1870d2 :: IO (BG.FunPtr (BG.Ptr SDL_Window -> IO BG.CBool))
 hs_bindgen_99cfe89c3d1870d2 =
-  BG.fromFFIType hs_bindgen_99cfe89c3d1870d2_base
+  fmap BG.fromFFIType hs_bindgen_99cfe89c3d1870d2_base
 
 {-# NOINLINE sDL_SyncWindow #-}
 
@@ -3626,7 +3634,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_WindowHasSurface@
 hs_bindgen_492c4aeae7928033 :: IO (BG.FunPtr (BG.Ptr SDL_Window -> IO BG.CBool))
 hs_bindgen_492c4aeae7928033 =
-  BG.fromFFIType hs_bindgen_492c4aeae7928033_base
+  fmap BG.fromFFIType hs_bindgen_492c4aeae7928033_base
 
 {-# NOINLINE sDL_WindowHasSurface #-}
 
@@ -3656,7 +3664,7 @@
 hs_bindgen_2f8a00e3685394ac
   :: IO (BG.FunPtr (BG.Ptr SDL_Window -> IO (BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface)))
 hs_bindgen_2f8a00e3685394ac =
-  BG.fromFFIType hs_bindgen_2f8a00e3685394ac_base
+  fmap BG.fromFFIType hs_bindgen_2f8a00e3685394ac_base
 
 {-# NOINLINE sDL_GetWindowSurface #-}
 
@@ -3694,7 +3702,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_SetWindowSurfaceVSync@
 hs_bindgen_8e03aa1985376fed :: IO (BG.FunPtr (BG.Ptr SDL_Window -> BG.CInt -> IO BG.CBool))
 hs_bindgen_8e03aa1985376fed =
-  BG.fromFFIType hs_bindgen_8e03aa1985376fed_base
+  fmap BG.fromFFIType hs_bindgen_8e03aa1985376fed_base
 
 {-# NOINLINE sDL_SetWindowSurfaceVSync #-}
 
@@ -3729,7 +3737,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GetWindowSurfaceVSync@
 hs_bindgen_d0cf4eceaaa0e08e :: IO (BG.FunPtr (BG.Ptr SDL_Window -> BG.Ptr BG.CInt -> IO BG.CBool))
 hs_bindgen_d0cf4eceaaa0e08e =
-  BG.fromFFIType hs_bindgen_d0cf4eceaaa0e08e_base
+  fmap BG.fromFFIType hs_bindgen_d0cf4eceaaa0e08e_base
 
 {-# NOINLINE sDL_GetWindowSurfaceVSync #-}
 
@@ -3760,7 +3768,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_UpdateWindowSurface@
 hs_bindgen_ed4a6fb4d50f6be0 :: IO (BG.FunPtr (BG.Ptr SDL_Window -> IO BG.CBool))
 hs_bindgen_ed4a6fb4d50f6be0 =
-  BG.fromFFIType hs_bindgen_ed4a6fb4d50f6be0_base
+  fmap BG.fromFFIType hs_bindgen_ed4a6fb4d50f6be0_base
 
 {-# NOINLINE sDL_UpdateWindowSurface #-}
 
@@ -3797,7 +3805,7 @@
            (BG.Ptr SDL_Window -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect -> BG.CInt -> IO BG.CBool)
        )
 hs_bindgen_02e706becc194495 =
-  BG.fromFFIType hs_bindgen_02e706becc194495_base
+  fmap BG.fromFFIType hs_bindgen_02e706becc194495_base
 
 {-# NOINLINE sDL_UpdateWindowSurfaceRects #-}
 
@@ -3838,7 +3846,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_DestroyWindowSurface@
 hs_bindgen_3f86b6de52c490a8 :: IO (BG.FunPtr (BG.Ptr SDL_Window -> IO BG.CBool))
 hs_bindgen_3f86b6de52c490a8 =
-  BG.fromFFIType hs_bindgen_3f86b6de52c490a8_base
+  fmap BG.fromFFIType hs_bindgen_3f86b6de52c490a8_base
 
 {-# NOINLINE sDL_DestroyWindowSurface #-}
 
@@ -3867,7 +3875,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_SetWindowKeyboardGrab@
 hs_bindgen_1a10593b47408de7 :: IO (BG.FunPtr (BG.Ptr SDL_Window -> BG.CBool -> IO BG.CBool))
 hs_bindgen_1a10593b47408de7 =
-  BG.fromFFIType hs_bindgen_1a10593b47408de7_base
+  fmap BG.fromFFIType hs_bindgen_1a10593b47408de7_base
 
 {-# NOINLINE sDL_SetWindowKeyboardGrab #-}
 
@@ -3906,7 +3914,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_SetWindowMouseGrab@
 hs_bindgen_1c52b8e1bc921458 :: IO (BG.FunPtr (BG.Ptr SDL_Window -> BG.CBool -> IO BG.CBool))
 hs_bindgen_1c52b8e1bc921458 =
-  BG.fromFFIType hs_bindgen_1c52b8e1bc921458_base
+  fmap BG.fromFFIType hs_bindgen_1c52b8e1bc921458_base
 
 {-# NOINLINE sDL_SetWindowMouseGrab #-}
 
@@ -3939,7 +3947,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GetWindowKeyboardGrab@
 hs_bindgen_bd31081b6b534f49 :: IO (BG.FunPtr (BG.Ptr SDL_Window -> IO BG.CBool))
 hs_bindgen_bd31081b6b534f49 =
-  BG.fromFFIType hs_bindgen_bd31081b6b534f49_base
+  fmap BG.fromFFIType hs_bindgen_bd31081b6b534f49_base
 
 {-# NOINLINE sDL_GetWindowKeyboardGrab #-}
 
@@ -3968,7 +3976,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GetWindowMouseGrab@
 hs_bindgen_40af0f6caff933b4 :: IO (BG.FunPtr (BG.Ptr SDL_Window -> IO BG.CBool))
 hs_bindgen_40af0f6caff933b4 =
-  BG.fromFFIType hs_bindgen_40af0f6caff933b4_base
+  fmap BG.fromFFIType hs_bindgen_40af0f6caff933b4_base
 
 {-# NOINLINE sDL_GetWindowMouseGrab #-}
 
@@ -3997,7 +4005,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GetGrabbedWindow@
 hs_bindgen_072d8bccac218ad2 :: IO (BG.FunPtr (IO (BG.Ptr SDL_Window)))
 hs_bindgen_072d8bccac218ad2 =
-  BG.fromFFIType hs_bindgen_072d8bccac218ad2_base
+  fmap BG.fromFFIType hs_bindgen_072d8bccac218ad2_base
 
 {-# NOINLINE sDL_GetGrabbedWindow #-}
 
@@ -4026,7 +4034,7 @@
   :: IO
        (BG.FunPtr (BG.Ptr SDL_Window -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect -> IO BG.CBool))
 hs_bindgen_95863c8d80115819 =
-  BG.fromFFIType hs_bindgen_95863c8d80115819_base
+  fmap BG.fromFFIType hs_bindgen_95863c8d80115819_base
 
 {-# NOINLINE sDL_SetWindowMouseRect #-}
 
@@ -4061,7 +4069,7 @@
 hs_bindgen_049b065f15b35ce9
   :: IO (BG.FunPtr (BG.Ptr SDL_Window -> IO (PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect)))
 hs_bindgen_049b065f15b35ce9 =
-  BG.fromFFIType hs_bindgen_049b065f15b35ce9_base
+  fmap BG.fromFFIType hs_bindgen_049b065f15b35ce9_base
 
 {-# NOINLINE sDL_GetWindowMouseRect #-}
 
@@ -4091,7 +4099,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_SetWindowOpacity@
 hs_bindgen_0e865d00ef5cb4eb :: IO (BG.FunPtr (BG.Ptr SDL_Window -> BG.CFloat -> IO BG.CBool))
 hs_bindgen_0e865d00ef5cb4eb =
-  BG.fromFFIType hs_bindgen_0e865d00ef5cb4eb_base
+  fmap BG.fromFFIType hs_bindgen_0e865d00ef5cb4eb_base
 
 {-# NOINLINE sDL_SetWindowOpacity #-}
 
@@ -4126,7 +4134,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GetWindowOpacity@
 hs_bindgen_fd15ea94ae6c8654 :: IO (BG.FunPtr (BG.Ptr SDL_Window -> IO BG.CFloat))
 hs_bindgen_fd15ea94ae6c8654 =
-  BG.fromFFIType hs_bindgen_fd15ea94ae6c8654_base
+  fmap BG.fromFFIType hs_bindgen_fd15ea94ae6c8654_base
 
 {-# NOINLINE sDL_GetWindowOpacity #-}
 
@@ -4158,7 +4166,7 @@
 hs_bindgen_da11824c9c49e3e7
   :: IO (BG.FunPtr (BG.Ptr SDL_Window -> BG.Ptr SDL_Window -> IO BG.CBool))
 hs_bindgen_da11824c9c49e3e7 =
-  BG.fromFFIType hs_bindgen_da11824c9c49e3e7_base
+  fmap BG.fromFFIType hs_bindgen_da11824c9c49e3e7_base
 
 {-# NOINLINE sDL_SetWindowParent #-}
 
@@ -4199,7 +4207,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_SetWindowModal@
 hs_bindgen_9c2f4466a2e12383 :: IO (BG.FunPtr (BG.Ptr SDL_Window -> BG.CBool -> IO BG.CBool))
 hs_bindgen_9c2f4466a2e12383 =
-  BG.fromFFIType hs_bindgen_9c2f4466a2e12383_base
+  fmap BG.fromFFIType hs_bindgen_9c2f4466a2e12383_base
 
 {-# NOINLINE sDL_SetWindowModal #-}
 
@@ -4232,7 +4240,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_SetWindowFocusable@
 hs_bindgen_61fa950af6d7c2e1 :: IO (BG.FunPtr (BG.Ptr SDL_Window -> BG.CBool -> IO BG.CBool))
 hs_bindgen_61fa950af6d7c2e1 =
-  BG.fromFFIType hs_bindgen_61fa950af6d7c2e1_base
+  fmap BG.fromFFIType hs_bindgen_61fa950af6d7c2e1_base
 
 {-# NOINLINE sDL_SetWindowFocusable #-}
 
@@ -4262,7 +4270,7 @@
 hs_bindgen_cd482a252a1dea04
   :: IO (BG.FunPtr (BG.Ptr SDL_Window -> BG.CInt -> BG.CInt -> IO BG.CBool))
 hs_bindgen_cd482a252a1dea04 =
-  BG.fromFFIType hs_bindgen_cd482a252a1dea04_base
+  fmap BG.fromFFIType hs_bindgen_cd482a252a1dea04_base
 
 {-# NOINLINE sDL_ShowWindowSystemMenu #-}
 
@@ -4298,7 +4306,7 @@
 hs_bindgen_d2a7a11a0da70b01
   :: IO (BG.FunPtr (BG.Ptr SDL_Window -> SDL_HitTest -> BG.Ptr BG.Void -> IO BG.CBool))
 hs_bindgen_d2a7a11a0da70b01 =
-  BG.fromFFIType hs_bindgen_d2a7a11a0da70b01_base
+  fmap BG.fromFFIType hs_bindgen_d2a7a11a0da70b01_base
 
 {-# NOINLINE sDL_SetWindowHitTest #-}
 
@@ -4343,7 +4351,7 @@
 hs_bindgen_3067f5f277541798
   :: IO (BG.FunPtr (BG.Ptr SDL_Window -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface -> IO BG.CBool))
 hs_bindgen_3067f5f277541798 =
-  BG.fromFFIType hs_bindgen_3067f5f277541798_base
+  fmap BG.fromFFIType hs_bindgen_3067f5f277541798_base
 
 {-# NOINLINE sDL_SetWindowShape #-}
 
@@ -4380,7 +4388,7 @@
 hs_bindgen_7accb263b1f5da86
   :: IO (BG.FunPtr (BG.Ptr SDL_Window -> SDL_FlashOperation -> IO BG.CBool))
 hs_bindgen_7accb263b1f5da86 =
-  BG.fromFFIType hs_bindgen_7accb263b1f5da86_base
+  fmap BG.fromFFIType hs_bindgen_7accb263b1f5da86_base
 
 {-# NOINLINE sDL_FlashWindow #-}
 
@@ -4410,7 +4418,7 @@
 hs_bindgen_9c2c63ad5f7e2b4b
   :: IO (BG.FunPtr (BG.Ptr SDL_Window -> SDL_ProgressState -> IO BG.CBool))
 hs_bindgen_9c2c63ad5f7e2b4b =
-  BG.fromFFIType hs_bindgen_9c2c63ad5f7e2b4b_base
+  fmap BG.fromFFIType hs_bindgen_9c2c63ad5f7e2b4b_base
 
 {-# NOINLINE sDL_SetWindowProgressState #-}
 
@@ -4439,7 +4447,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GetWindowProgressState@
 hs_bindgen_3c97888e379fc33c :: IO (BG.FunPtr (BG.Ptr SDL_Window -> IO SDL_ProgressState))
 hs_bindgen_3c97888e379fc33c =
-  BG.fromFFIType hs_bindgen_3c97888e379fc33c_base
+  fmap BG.fromFFIType hs_bindgen_3c97888e379fc33c_base
 
 {-# NOINLINE sDL_GetWindowProgressState #-}
 
@@ -4466,7 +4474,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_SetWindowProgressValue@
 hs_bindgen_df10903c71d955ff :: IO (BG.FunPtr (BG.Ptr SDL_Window -> BG.CFloat -> IO BG.CBool))
 hs_bindgen_df10903c71d955ff =
-  BG.fromFFIType hs_bindgen_df10903c71d955ff_base
+  fmap BG.fromFFIType hs_bindgen_df10903c71d955ff_base
 
 {-# NOINLINE sDL_SetWindowProgressValue #-}
 
@@ -4495,7 +4503,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GetWindowProgressValue@
 hs_bindgen_1e0d101b30846cb1 :: IO (BG.FunPtr (BG.Ptr SDL_Window -> IO BG.CFloat))
 hs_bindgen_1e0d101b30846cb1 =
-  BG.fromFFIType hs_bindgen_1e0d101b30846cb1_base
+  fmap BG.fromFFIType hs_bindgen_1e0d101b30846cb1_base
 
 {-# NOINLINE sDL_GetWindowProgressValue #-}
 
@@ -4522,7 +4530,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_DestroyWindow@
 hs_bindgen_3af09b929d2d36ab :: IO (BG.FunPtr (BG.Ptr SDL_Window -> IO ()))
 hs_bindgen_3af09b929d2d36ab =
-  BG.fromFFIType hs_bindgen_3af09b929d2d36ab_base
+  fmap BG.fromFFIType hs_bindgen_3af09b929d2d36ab_base
 
 {-# NOINLINE sDL_DestroyWindow #-}
 
@@ -4553,7 +4561,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_ScreenSaverEnabled@
 hs_bindgen_91298d9810095c05 :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_91298d9810095c05 =
-  BG.fromFFIType hs_bindgen_91298d9810095c05_base
+  fmap BG.fromFFIType hs_bindgen_91298d9810095c05_base
 
 {-# NOINLINE sDL_ScreenSaverEnabled #-}
 
@@ -4584,7 +4592,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_EnableScreenSaver@
 hs_bindgen_a142225724865b93 :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_a142225724865b93 =
-  BG.fromFFIType hs_bindgen_a142225724865b93_base
+  fmap BG.fromFFIType hs_bindgen_a142225724865b93_base
 
 {-# NOINLINE sDL_EnableScreenSaver #-}
 
@@ -4611,7 +4619,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_DisableScreenSaver@
 hs_bindgen_96e0130db8c924c0 :: IO (BG.FunPtr (IO BG.CBool))
 hs_bindgen_96e0130db8c924c0 =
-  BG.fromFFIType hs_bindgen_96e0130db8c924c0_base
+  fmap BG.fromFFIType hs_bindgen_96e0130db8c924c0_base
 
 {-# NOINLINE sDL_DisableScreenSaver #-}
 
@@ -4642,7 +4650,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GL_LoadLibrary@
 hs_bindgen_eab5183eb86cd104 :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO BG.CBool))
 hs_bindgen_eab5183eb86cd104 =
-  BG.fromFFIType hs_bindgen_eab5183eb86cd104_base
+  fmap BG.fromFFIType hs_bindgen_eab5183eb86cd104_base
 
 {-# NOINLINE sDL_GL_LoadLibrary #-}
 
@@ -4676,7 +4684,7 @@
 hs_bindgen_34476455b181778b
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO SDL3.Sys.Bindgen.Stdinc.SDL_FunctionPointer))
 hs_bindgen_34476455b181778b =
-  BG.fromFFIType hs_bindgen_34476455b181778b_base
+  fmap BG.fromFFIType hs_bindgen_34476455b181778b_base
 
 {-# NOINLINE sDL_GL_GetProcAddress #-}
 
@@ -4721,7 +4729,7 @@
 hs_bindgen_b7365d91417dcc00
   :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO SDL3.Sys.Bindgen.Stdinc.SDL_FunctionPointer))
 hs_bindgen_b7365d91417dcc00 =
-  BG.fromFFIType hs_bindgen_b7365d91417dcc00_base
+  fmap BG.fromFFIType hs_bindgen_b7365d91417dcc00_base
 
 {-# NOINLINE sDL_EGL_GetProcAddress #-}
 
@@ -4753,7 +4761,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GL_UnloadLibrary@
 hs_bindgen_626ee6f51d853cc4 :: IO (BG.FunPtr (IO ()))
 hs_bindgen_626ee6f51d853cc4 =
-  BG.fromFFIType hs_bindgen_626ee6f51d853cc4_base
+  fmap BG.fromFFIType hs_bindgen_626ee6f51d853cc4_base
 
 {-# NOINLINE sDL_GL_UnloadLibrary #-}
 
@@ -4778,7 +4786,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GL_ExtensionSupported@
 hs_bindgen_4b6ac25f9c74898b :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO BG.CBool))
 hs_bindgen_4b6ac25f9c74898b =
-  BG.fromFFIType hs_bindgen_4b6ac25f9c74898b_base
+  fmap BG.fromFFIType hs_bindgen_4b6ac25f9c74898b_base
 
 {-# NOINLINE sDL_GL_ExtensionSupported #-}
 
@@ -4809,7 +4817,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GL_ResetAttributes@
 hs_bindgen_8d3172eec8730621 :: IO (BG.FunPtr (IO ()))
 hs_bindgen_8d3172eec8730621 =
-  BG.fromFFIType hs_bindgen_8d3172eec8730621_base
+  fmap BG.fromFFIType hs_bindgen_8d3172eec8730621_base
 
 {-# NOINLINE sDL_GL_ResetAttributes #-}
 
@@ -4834,7 +4842,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GL_SetAttribute@
 hs_bindgen_2c780ec7126f44cf :: IO (BG.FunPtr (SDL_GLAttr -> BG.CInt -> IO BG.CBool))
 hs_bindgen_2c780ec7126f44cf =
-  BG.fromFFIType hs_bindgen_2c780ec7126f44cf_base
+  fmap BG.fromFFIType hs_bindgen_2c780ec7126f44cf_base
 
 {-# NOINLINE sDL_GL_SetAttribute #-}
 
@@ -4867,7 +4875,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GL_GetAttribute@
 hs_bindgen_f2be9d4ead0d65a2 :: IO (BG.FunPtr (SDL_GLAttr -> BG.Ptr BG.CInt -> IO BG.CBool))
 hs_bindgen_f2be9d4ead0d65a2 =
-  BG.fromFFIType hs_bindgen_f2be9d4ead0d65a2_base
+  fmap BG.fromFFIType hs_bindgen_f2be9d4ead0d65a2_base
 
 {-# NOINLINE sDL_GL_GetAttribute #-}
 
@@ -4898,7 +4906,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GL_CreateContext@
 hs_bindgen_9f1f69477c4acb50 :: IO (BG.FunPtr (BG.Ptr SDL_Window -> IO SDL_GLContext))
 hs_bindgen_9f1f69477c4acb50 =
-  BG.fromFFIType hs_bindgen_9f1f69477c4acb50_base
+  fmap BG.fromFFIType hs_bindgen_9f1f69477c4acb50_base
 
 {-# NOINLINE sDL_GL_CreateContext #-}
 
@@ -4935,7 +4943,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GL_MakeCurrent@
 hs_bindgen_2336de6c69b02847 :: IO (BG.FunPtr (BG.Ptr SDL_Window -> SDL_GLContext -> IO BG.CBool))
 hs_bindgen_2336de6c69b02847 =
-  BG.fromFFIType hs_bindgen_2336de6c69b02847_base
+  fmap BG.fromFFIType hs_bindgen_2336de6c69b02847_base
 
 {-# NOINLINE sDL_GL_MakeCurrent #-}
 
@@ -4968,7 +4976,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GL_GetCurrentWindow@
 hs_bindgen_1d77b3c33533bc52 :: IO (BG.FunPtr (IO (BG.Ptr SDL_Window)))
 hs_bindgen_1d77b3c33533bc52 =
-  BG.fromFFIType hs_bindgen_1d77b3c33533bc52_base
+  fmap BG.fromFFIType hs_bindgen_1d77b3c33533bc52_base
 
 {-# NOINLINE sDL_GL_GetCurrentWindow #-}
 
@@ -4993,7 +5001,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GL_GetCurrentContext@
 hs_bindgen_70929e076db9af7f :: IO (BG.FunPtr (IO SDL_GLContext))
 hs_bindgen_70929e076db9af7f =
-  BG.fromFFIType hs_bindgen_70929e076db9af7f_base
+  fmap BG.fromFFIType hs_bindgen_70929e076db9af7f_base
 
 {-# NOINLINE sDL_GL_GetCurrentContext #-}
 
@@ -5020,7 +5028,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_EGL_GetCurrentDisplay@
 hs_bindgen_ad8ff3579d19bf4c :: IO (BG.FunPtr (IO SDL_EGLDisplay))
 hs_bindgen_ad8ff3579d19bf4c =
-  BG.fromFFIType hs_bindgen_ad8ff3579d19bf4c_base
+  fmap BG.fromFFIType hs_bindgen_ad8ff3579d19bf4c_base
 
 {-# NOINLINE sDL_EGL_GetCurrentDisplay #-}
 
@@ -5045,7 +5053,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_EGL_GetCurrentConfig@
 hs_bindgen_52c08e8d53d84085 :: IO (BG.FunPtr (IO SDL_EGLConfig))
 hs_bindgen_52c08e8d53d84085 =
-  BG.fromFFIType hs_bindgen_52c08e8d53d84085_base
+  fmap BG.fromFFIType hs_bindgen_52c08e8d53d84085_base
 
 {-# NOINLINE sDL_EGL_GetCurrentConfig #-}
 
@@ -5070,7 +5078,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_EGL_GetWindowSurface@
 hs_bindgen_4d9d3145651703ea :: IO (BG.FunPtr (BG.Ptr SDL_Window -> IO SDL_EGLSurface))
 hs_bindgen_4d9d3145651703ea =
-  BG.fromFFIType hs_bindgen_4d9d3145651703ea_base
+  fmap BG.fromFFIType hs_bindgen_4d9d3145651703ea_base
 
 {-# NOINLINE sDL_EGL_GetWindowSurface #-}
 
@@ -5106,7 +5114,7 @@
            )
        )
 hs_bindgen_2d4a4b5954adbdda =
-  BG.fromFFIType hs_bindgen_2d4a4b5954adbdda_base
+  fmap BG.fromFFIType hs_bindgen_2d4a4b5954adbdda_base
 
 {-# NOINLINE sDL_EGL_SetAttributeCallbacks #-}
 
@@ -5148,7 +5156,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GL_SetSwapInterval@
 hs_bindgen_61901cbd29279d80 :: IO (BG.FunPtr (BG.CInt -> IO BG.CBool))
 hs_bindgen_61901cbd29279d80 =
-  BG.fromFFIType hs_bindgen_61901cbd29279d80_base
+  fmap BG.fromFFIType hs_bindgen_61901cbd29279d80_base
 
 {-# NOINLINE sDL_GL_SetSwapInterval #-}
 
@@ -5183,7 +5191,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GL_GetSwapInterval@
 hs_bindgen_2ead7bd70a2b5362 :: IO (BG.FunPtr (BG.Ptr BG.CInt -> IO BG.CBool))
 hs_bindgen_2ead7bd70a2b5362 =
-  BG.fromFFIType hs_bindgen_2ead7bd70a2b5362_base
+  fmap BG.fromFFIType hs_bindgen_2ead7bd70a2b5362_base
 
 {-# NOINLINE sDL_GL_GetSwapInterval #-}
 
@@ -5214,7 +5222,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GL_SwapWindow@
 hs_bindgen_21d656c344c13469 :: IO (BG.FunPtr (BG.Ptr SDL_Window -> IO BG.CBool))
 hs_bindgen_21d656c344c13469 =
-  BG.fromFFIType hs_bindgen_21d656c344c13469_base
+  fmap BG.fromFFIType hs_bindgen_21d656c344c13469_base
 
 {-# NOINLINE sDL_GL_SwapWindow #-}
 
@@ -5245,7 +5253,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_get_SDL_GL_DestroyContext@
 hs_bindgen_c03de6ace9ca6264 :: IO (BG.FunPtr (SDL_GLContext -> IO BG.CBool))
 hs_bindgen_c03de6ace9ca6264 =
-  BG.fromFFIType hs_bindgen_c03de6ace9ca6264_base
+  fmap BG.fromFFIType hs_bindgen_c03de6ace9ca6264_base
 
 {-# NOINLINE sDL_GL_DestroyContext #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Video/Safe.hs b/src/SDL3/Sys/Bindgen/Video/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Video/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Video/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Video.Safe (
@@ -120,8 +122,11 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Pixels qualified
@@ -133,7 +138,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_video.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_video.h>"
          , "signed int hs_bindgen_d211f6b04304439b (void)"
          , "{"
          , "  return (SDL_GetNumVideoDrivers)();"
@@ -912,12 +921,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetNumVideoDrivers@
 foreign import ccall safe "hs_bindgen_d211f6b04304439b"
   hs_bindgen_d211f6b04304439b_base
-    :: IO BG.Int32
+    :: IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetNumVideoDrivers@
 hs_bindgen_d211f6b04304439b :: IO BG.CInt
 hs_bindgen_d211f6b04304439b =
-  BG.fromFFIType hs_bindgen_d211f6b04304439b_base
+  fmap BG.fromFFIType hs_bindgen_d211f6b04304439b_base
 
 -- | Get the number of video drivers compiled into SDL.
 --
@@ -936,7 +945,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetVideoDriver@
 foreign import ccall safe "hs_bindgen_307dbfd833225e2d"
   hs_bindgen_307dbfd833225e2d_base
-    :: BG.Int32
+    :: BG.CInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetVideoDriver@
@@ -944,7 +953,8 @@
   :: BG.CInt
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_307dbfd833225e2d =
-  BG.fromFFIType hs_bindgen_307dbfd833225e2d_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_307dbfd833225e2d_base (BG.toFFIType x0))
 
 -- | Get the name of a built in video driver.
 --
@@ -977,7 +987,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetCurrentVideoDriver@
 hs_bindgen_efdaa516c2ee9810 :: IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_efdaa516c2ee9810 =
-  BG.fromFFIType hs_bindgen_efdaa516c2ee9810_base
+  fmap BG.fromFFIType hs_bindgen_efdaa516c2ee9810_base
 
 -- | Get the name of the currently initialized video driver.
 --
@@ -999,12 +1009,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetSystemTheme@
 foreign import ccall safe "hs_bindgen_d4ea00696b1a71bf"
   hs_bindgen_d4ea00696b1a71bf_base
-    :: IO BG.Word32
+    :: IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetSystemTheme@
 hs_bindgen_d4ea00696b1a71bf :: IO SDL_SystemTheme
 hs_bindgen_d4ea00696b1a71bf =
-  BG.fromFFIType hs_bindgen_d4ea00696b1a71bf_base
+  fmap BG.fromFFIType hs_bindgen_d4ea00696b1a71bf_base
 
 -- | Get the current system theme.
 --
@@ -1029,7 +1039,8 @@
   :: BG.Ptr BG.CInt
   -> IO (BG.Ptr SDL_DisplayID)
 hs_bindgen_d92afc43a12fbe95 =
-  BG.fromFFIType hs_bindgen_d92afc43a12fbe95_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d92afc43a12fbe95_base (BG.toFFIType x0))
 
 -- | Get a list of currently connected displays.
 --
@@ -1051,12 +1062,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetPrimaryDisplay@
 foreign import ccall safe "hs_bindgen_b8bacdf537be3b8f"
   hs_bindgen_b8bacdf537be3b8f_base
-    :: IO BG.Word32
+    :: IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetPrimaryDisplay@
 hs_bindgen_b8bacdf537be3b8f :: IO SDL_DisplayID
 hs_bindgen_b8bacdf537be3b8f =
-  BG.fromFFIType hs_bindgen_b8bacdf537be3b8f_base
+  fmap BG.fromFFIType hs_bindgen_b8bacdf537be3b8f_base
 
 -- | Return the primary display.
 --
@@ -1075,15 +1086,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetDisplayProperties@
 foreign import ccall safe "hs_bindgen_d5cb0d5646844e17"
   hs_bindgen_d5cb0d5646844e17_base
-    :: BG.Word32
-    -> IO BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetDisplayProperties@
 hs_bindgen_d5cb0d5646844e17
   :: SDL_DisplayID
   -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
 hs_bindgen_d5cb0d5646844e17 =
-  BG.fromFFIType hs_bindgen_d5cb0d5646844e17_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d5cb0d5646844e17_base (BG.toFFIType x0))
 
 -- | Get the properties associated with a display.
 --
@@ -1122,7 +1134,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetDisplayName@
 foreign import ccall safe "hs_bindgen_e9e9e841de7ccf5b"
   hs_bindgen_e9e9e841de7ccf5b_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetDisplayName@
@@ -1130,7 +1142,8 @@
   :: SDL_DisplayID
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_e9e9e841de7ccf5b =
-  BG.fromFFIType hs_bindgen_e9e9e841de7ccf5b_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_e9e9e841de7ccf5b_base (BG.toFFIType x0))
 
 -- | Get the name of a display in UTF-8 encoding.
 --
@@ -1154,9 +1167,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetDisplayBounds@
 foreign import ccall safe "hs_bindgen_2de4b5a02136502b"
   hs_bindgen_2de4b5a02136502b_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetDisplayBounds@
 hs_bindgen_2de4b5a02136502b
@@ -1164,7 +1177,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect
   -> IO BG.CBool
 hs_bindgen_2de4b5a02136502b =
-  BG.fromFFIType hs_bindgen_2de4b5a02136502b_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_2de4b5a02136502b_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the desktop area represented by a display.
 --
@@ -1194,9 +1209,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetDisplayUsableBounds@
 foreign import ccall safe "hs_bindgen_ff1aeb910a17f8ef"
   hs_bindgen_ff1aeb910a17f8ef_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetDisplayUsableBounds@
 hs_bindgen_ff1aeb910a17f8ef
@@ -1204,7 +1219,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect
   -> IO BG.CBool
 hs_bindgen_ff1aeb910a17f8ef =
-  BG.fromFFIType hs_bindgen_ff1aeb910a17f8ef_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_ff1aeb910a17f8ef_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the usable desktop area represented by a display, in screen coordinates.
 --
@@ -1237,15 +1254,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetNaturalDisplayOrientation@
 foreign import ccall safe "hs_bindgen_a526ef31b456159e"
   hs_bindgen_a526ef31b456159e_base
-    :: BG.Word32
-    -> IO BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetNaturalDisplayOrientation@
 hs_bindgen_a526ef31b456159e
   :: SDL_DisplayID
   -> IO SDL_DisplayOrientation
 hs_bindgen_a526ef31b456159e =
-  BG.fromFFIType hs_bindgen_a526ef31b456159e_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a526ef31b456159e_base (BG.toFFIType x0))
 
 -- | Get the orientation of a display when it is unrotated.
 --
@@ -1270,15 +1288,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetCurrentDisplayOrientation@
 foreign import ccall safe "hs_bindgen_51800c9c70250d96"
   hs_bindgen_51800c9c70250d96_base
-    :: BG.Word32
-    -> IO BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetCurrentDisplayOrientation@
 hs_bindgen_51800c9c70250d96
   :: SDL_DisplayID
   -> IO SDL_DisplayOrientation
 hs_bindgen_51800c9c70250d96 =
-  BG.fromFFIType hs_bindgen_51800c9c70250d96_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_51800c9c70250d96_base (BG.toFFIType x0))
 
 -- | Get the orientation of a display.
 --
@@ -1303,15 +1322,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetDisplayContentScale@
 foreign import ccall safe "hs_bindgen_bf2419cb99d8f412"
   hs_bindgen_bf2419cb99d8f412_base
-    :: BG.Word32
-    -> IO Float
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CFloat
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetDisplayContentScale@
 hs_bindgen_bf2419cb99d8f412
   :: SDL_DisplayID
   -> IO BG.CFloat
 hs_bindgen_bf2419cb99d8f412 =
-  BG.fromFFIType hs_bindgen_bf2419cb99d8f412_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_bf2419cb99d8f412_base (BG.toFFIType x0))
 
 -- | Get the content scale of a display.
 --
@@ -1340,7 +1360,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetFullscreenDisplayModes@
 foreign import ccall safe "hs_bindgen_4662ea5b5904a3f7"
   hs_bindgen_4662ea5b5904a3f7_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> IO (BG.Ptr BG.Void)
 
@@ -1350,7 +1370,9 @@
   -> BG.Ptr BG.CInt
   -> IO (BG.Ptr (BG.Ptr SDL_DisplayMode))
 hs_bindgen_4662ea5b5904a3f7 =
-  BG.fromFFIType hs_bindgen_4662ea5b5904a3f7_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_4662ea5b5904a3f7_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get a list of fullscreen display modes available on a display.
 --
@@ -1393,13 +1415,13 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetClosestFullscreenDisplayMode@
 foreign import ccall safe "hs_bindgen_5d464dea0236acd5"
   hs_bindgen_5d464dea0236acd5_base
-    :: BG.Word32
-    -> BG.Int32
-    -> BG.Int32
-    -> Float
-    -> BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> BG.CInt
+    -> BG.CInt
+    -> BG.CFloat
+    -> BG.CBool
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetClosestFullscreenDisplayMode@
 hs_bindgen_5d464dea0236acd5
@@ -1411,7 +1433,22 @@
   -> BG.Ptr SDL_DisplayMode
   -> IO BG.CBool
 hs_bindgen_5d464dea0236acd5 =
-  BG.fromFFIType hs_bindgen_5d464dea0236acd5_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_5d464dea0236acd5_base
+                    (BG.toFFIType x0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                    (BG.toFFIType x4)
+                    (BG.toFFIType x5)
+                )
 
 -- | Get the closest match to the requested display mode.
 --
@@ -1458,7 +1495,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetDesktopDisplayMode@
 foreign import ccall safe "hs_bindgen_dba50a660cc82b9f"
   hs_bindgen_dba50a660cc82b9f_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetDesktopDisplayMode@
@@ -1466,7 +1503,8 @@
   :: SDL_DisplayID
   -> IO (PtrConst.PtrConst SDL_DisplayMode)
 hs_bindgen_dba50a660cc82b9f =
-  BG.fromFFIType hs_bindgen_dba50a660cc82b9f_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_dba50a660cc82b9f_base (BG.toFFIType x0))
 
 -- | Get information about the desktop\'s display mode.
 --
@@ -1493,7 +1531,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetCurrentDisplayMode@
 foreign import ccall safe "hs_bindgen_4430016da3318782"
   hs_bindgen_4430016da3318782_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetCurrentDisplayMode@
@@ -1501,7 +1539,8 @@
   :: SDL_DisplayID
   -> IO (PtrConst.PtrConst SDL_DisplayMode)
 hs_bindgen_4430016da3318782 =
-  BG.fromFFIType hs_bindgen_4430016da3318782_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_4430016da3318782_base (BG.toFFIType x0))
 
 -- | Get information about the current display mode.
 --
@@ -1529,14 +1568,15 @@
 foreign import ccall safe "hs_bindgen_e084554bb0ca9dc4"
   hs_bindgen_e084554bb0ca9dc4_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetDisplayForPoint@
 hs_bindgen_e084554bb0ca9dc4
   :: PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Point
   -> IO SDL_DisplayID
 hs_bindgen_e084554bb0ca9dc4 =
-  BG.fromFFIType hs_bindgen_e084554bb0ca9dc4_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_e084554bb0ca9dc4_base (BG.toFFIType x0))
 
 -- | Get the display containing a point.
 --
@@ -1561,14 +1601,15 @@
 foreign import ccall safe "hs_bindgen_50432f887d92198e"
   hs_bindgen_50432f887d92198e_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetDisplayForRect@
 hs_bindgen_50432f887d92198e
   :: PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
   -> IO SDL_DisplayID
 hs_bindgen_50432f887d92198e =
-  BG.fromFFIType hs_bindgen_50432f887d92198e_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_50432f887d92198e_base (BG.toFFIType x0))
 
 -- | Get the display primarily containing a rect.
 --
@@ -1593,14 +1634,15 @@
 foreign import ccall safe "hs_bindgen_338231bd9673a8d7"
   hs_bindgen_338231bd9673a8d7_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetDisplayForWindow@
 hs_bindgen_338231bd9673a8d7
   :: BG.Ptr SDL_Window
   -> IO SDL_DisplayID
 hs_bindgen_338231bd9673a8d7 =
-  BG.fromFFIType hs_bindgen_338231bd9673a8d7_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_338231bd9673a8d7_base (BG.toFFIType x0))
 
 -- | Get the display associated with a window.
 --
@@ -1625,14 +1667,15 @@
 foreign import ccall safe "hs_bindgen_c660a5f73943853a"
   hs_bindgen_c660a5f73943853a_base
     :: BG.Ptr BG.Void
-    -> IO Float
+    -> IO BG.CFloat
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetWindowPixelDensity@
 hs_bindgen_c660a5f73943853a
   :: BG.Ptr SDL_Window
   -> IO BG.CFloat
 hs_bindgen_c660a5f73943853a =
-  BG.fromFFIType hs_bindgen_c660a5f73943853a_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c660a5f73943853a_base (BG.toFFIType x0))
 
 -- | Get the pixel density of a window.
 --
@@ -1660,14 +1703,15 @@
 foreign import ccall safe "hs_bindgen_830868f00a2186dd"
   hs_bindgen_830868f00a2186dd_base
     :: BG.Ptr BG.Void
-    -> IO Float
+    -> IO BG.CFloat
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetWindowDisplayScale@
 hs_bindgen_830868f00a2186dd
   :: BG.Ptr SDL_Window
   -> IO BG.CFloat
 hs_bindgen_830868f00a2186dd =
-  BG.fromFFIType hs_bindgen_830868f00a2186dd_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_830868f00a2186dd_base (BG.toFFIType x0))
 
 -- | Get the content display scale relative to a window\'s pixel size.
 --
@@ -1696,7 +1740,7 @@
   hs_bindgen_5bd56762b4e281bc_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_SetWindowFullscreenMode@
 hs_bindgen_5bd56762b4e281bc
@@ -1704,7 +1748,9 @@
   -> PtrConst.PtrConst SDL_DisplayMode
   -> IO BG.CBool
 hs_bindgen_5bd56762b4e281bc =
-  BG.fromFFIType hs_bindgen_5bd56762b4e281bc_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_5bd56762b4e281bc_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the display mode to use when a window is visible and fullscreen.
 --
@@ -1747,7 +1793,8 @@
   :: BG.Ptr SDL_Window
   -> IO (PtrConst.PtrConst SDL_DisplayMode)
 hs_bindgen_75a4cc980febe857 =
-  BG.fromFFIType hs_bindgen_75a4cc980febe857_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_75a4cc980febe857_base (BG.toFFIType x0))
 
 -- | Query the display mode to use when a window is visible at fullscreen.
 --
@@ -1782,7 +1829,9 @@
   -> BG.Ptr HsBindgen.Runtime.LibC.CSize
   -> IO (BG.Ptr BG.Void)
 hs_bindgen_7312928923ad5425 =
-  BG.fromFFIType hs_bindgen_7312928923ad5425_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_7312928923ad5425_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the raw ICC profile data for the screen the window is currently on.
 --
@@ -1809,14 +1858,15 @@
 foreign import ccall safe "hs_bindgen_15580e3d1d0e9b89"
   hs_bindgen_15580e3d1d0e9b89_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.Support.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetWindowPixelFormat@
 hs_bindgen_15580e3d1d0e9b89
   :: BG.Ptr SDL_Window
   -> IO SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
 hs_bindgen_15580e3d1d0e9b89 =
-  BG.fromFFIType hs_bindgen_15580e3d1d0e9b89_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_15580e3d1d0e9b89_base (BG.toFFIType x0))
 
 -- | Get the pixel format associated with the window.
 --
@@ -1847,7 +1897,8 @@
   :: BG.Ptr BG.CInt
   -> IO (BG.Ptr (BG.Ptr SDL_Window))
 hs_bindgen_6428ebf130092b37 =
-  BG.fromFFIType hs_bindgen_6428ebf130092b37_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_6428ebf130092b37_base (BG.toFFIType x0))
 
 -- | Get a list of valid windows.
 --
@@ -1870,9 +1921,9 @@
 foreign import ccall safe "hs_bindgen_8e424f740acbd80f"
   hs_bindgen_8e424f740acbd80f_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> BG.Word64
+    -> BG.CInt
+    -> BG.CInt
+    -> HsBindgen.Runtime.LibC.Word64
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_CreateWindow@
@@ -1883,7 +1934,18 @@
   -> SDL_WindowFlags
   -> IO (BG.Ptr SDL_Window)
 hs_bindgen_8e424f740acbd80f =
-  BG.fromFFIType hs_bindgen_8e424f740acbd80f_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_8e424f740acbd80f_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Create a window with the specified dimensions and flags.
 --
@@ -1986,11 +2048,11 @@
 foreign import ccall safe "hs_bindgen_19b8bc2bc6b5cfae"
   hs_bindgen_19b8bc2bc6b5cfae_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> BG.Int32
-    -> BG.Int32
-    -> BG.Word64
+    -> BG.CInt
+    -> BG.CInt
+    -> BG.CInt
+    -> BG.CInt
+    -> HsBindgen.Runtime.LibC.Word64
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_CreatePopupWindow@
@@ -2003,7 +2065,22 @@
   -> SDL_WindowFlags
   -> IO (BG.Ptr SDL_Window)
 hs_bindgen_19b8bc2bc6b5cfae =
-  BG.fromFFIType hs_bindgen_19b8bc2bc6b5cfae_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_19b8bc2bc6b5cfae_base
+                    (BG.toFFIType x0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                    (BG.toFFIType x4)
+                    (BG.toFFIType x5)
+                )
 
 -- | Create a child popup window of the specified parent window.
 --
@@ -2083,7 +2160,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_CreateWindowWithProperties@
 foreign import ccall safe "hs_bindgen_a9c16b7c7380ac75"
   hs_bindgen_a9c16b7c7380ac75_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_CreateWindowWithProperties@
@@ -2091,7 +2168,8 @@
   :: SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
   -> IO (BG.Ptr SDL_Window)
 hs_bindgen_a9c16b7c7380ac75 =
-  BG.fromFFIType hs_bindgen_a9c16b7c7380ac75_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a9c16b7c7380ac75_base (BG.toFFIType x0))
 
 -- | Create a window with the specified properties.
 --
@@ -2223,14 +2301,15 @@
 foreign import ccall safe "hs_bindgen_667e66cbe1d6489b"
   hs_bindgen_667e66cbe1d6489b_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetWindowID@
 hs_bindgen_667e66cbe1d6489b
   :: BG.Ptr SDL_Window
   -> IO SDL_WindowID
 hs_bindgen_667e66cbe1d6489b =
-  BG.fromFFIType hs_bindgen_667e66cbe1d6489b_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_667e66cbe1d6489b_base (BG.toFFIType x0))
 
 -- | Get the numeric ID of a window.
 --
@@ -2256,7 +2335,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetWindowFromID@
 foreign import ccall safe "hs_bindgen_18346477e6758df9"
   hs_bindgen_18346477e6758df9_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetWindowFromID@
@@ -2264,7 +2343,8 @@
   :: SDL_WindowID
   -> IO (BG.Ptr SDL_Window)
 hs_bindgen_18346477e6758df9 =
-  BG.fromFFIType hs_bindgen_18346477e6758df9_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_18346477e6758df9_base (BG.toFFIType x0))
 
 -- | Get a window from a stored ID.
 --
@@ -2298,7 +2378,8 @@
   :: BG.Ptr SDL_Window
   -> IO (BG.Ptr SDL_Window)
 hs_bindgen_2d39d8129359a89b =
-  BG.fromFFIType hs_bindgen_2d39d8129359a89b_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_2d39d8129359a89b_base (BG.toFFIType x0))
 
 -- | Get parent of a window.
 --
@@ -2323,14 +2404,15 @@
 foreign import ccall safe "hs_bindgen_57b7ab5cd9801744"
   hs_bindgen_57b7ab5cd9801744_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetWindowProperties@
 hs_bindgen_57b7ab5cd9801744
   :: BG.Ptr SDL_Window
   -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
 hs_bindgen_57b7ab5cd9801744 =
-  BG.fromFFIType hs_bindgen_57b7ab5cd9801744_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_57b7ab5cd9801744_base (BG.toFFIType x0))
 
 -- | Get the properties associated with a window.
 --
@@ -2451,14 +2533,15 @@
 foreign import ccall safe "hs_bindgen_99baf1d6e8b1ddeb"
   hs_bindgen_99baf1d6e8b1ddeb_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word64
+    -> IO HsBindgen.Runtime.LibC.Word64
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetWindowFlags@
 hs_bindgen_99baf1d6e8b1ddeb
   :: BG.Ptr SDL_Window
   -> IO SDL_WindowFlags
 hs_bindgen_99baf1d6e8b1ddeb =
-  BG.fromFFIType hs_bindgen_99baf1d6e8b1ddeb_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_99baf1d6e8b1ddeb_base (BG.toFFIType x0))
 
 -- | Get the window flags.
 --
@@ -2484,7 +2567,7 @@
   hs_bindgen_54f765221fc62cf4_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_SetWindowTitle@
 hs_bindgen_54f765221fc62cf4
@@ -2492,7 +2575,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_54f765221fc62cf4 =
-  BG.fromFFIType hs_bindgen_54f765221fc62cf4_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_54f765221fc62cf4_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the title of a window.
 --
@@ -2530,7 +2615,8 @@
   :: BG.Ptr SDL_Window
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_b3fe38980dd2012e =
-  BG.fromFFIType hs_bindgen_b3fe38980dd2012e_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_b3fe38980dd2012e_base (BG.toFFIType x0))
 
 -- | Get the title of a window.
 --
@@ -2556,7 +2642,7 @@
   hs_bindgen_3ba2e8e7085b0cc8_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_SetWindowIcon@
 hs_bindgen_3ba2e8e7085b0cc8
@@ -2564,7 +2650,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface
   -> IO BG.CBool
 hs_bindgen_3ba2e8e7085b0cc8 =
-  BG.fromFFIType hs_bindgen_3ba2e8e7085b0cc8_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_3ba2e8e7085b0cc8_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the icon for a window.
 --
@@ -2595,9 +2683,9 @@
 foreign import ccall safe "hs_bindgen_5267578336028cc0"
   hs_bindgen_5267578336028cc0_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_SetWindowPosition@
 hs_bindgen_5267578336028cc0
@@ -2606,7 +2694,12 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_5267578336028cc0 =
-  BG.fromFFIType hs_bindgen_5267578336028cc0_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_5267578336028cc0_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Request that the window\'s position be set.
 --
@@ -2649,7 +2742,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetWindowPosition@
 hs_bindgen_cbc04f11ecff82d4
@@ -2658,7 +2751,12 @@
   -> BG.Ptr BG.CInt
   -> IO BG.CBool
 hs_bindgen_cbc04f11ecff82d4 =
-  BG.fromFFIType hs_bindgen_cbc04f11ecff82d4_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_cbc04f11ecff82d4_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get the position of a window.
 --
@@ -2695,9 +2793,9 @@
 foreign import ccall safe "hs_bindgen_463917e130d8e442"
   hs_bindgen_463917e130d8e442_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_SetWindowSize@
 hs_bindgen_463917e130d8e442
@@ -2706,7 +2804,12 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_463917e130d8e442 =
-  BG.fromFFIType hs_bindgen_463917e130d8e442_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_463917e130d8e442_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Request that the size of a window\'s client area be set.
 --
@@ -2749,7 +2852,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetWindowSize@
 hs_bindgen_31fa46c3424e203c
@@ -2758,7 +2861,12 @@
   -> BG.Ptr BG.CInt
   -> IO BG.CBool
 hs_bindgen_31fa46c3424e203c =
-  BG.fromFFIType hs_bindgen_31fa46c3424e203c_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_31fa46c3424e203c_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get the size of a window\'s client area.
 --
@@ -2794,7 +2902,7 @@
   hs_bindgen_b2567486cc8ef384_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetWindowSafeArea@
 hs_bindgen_b2567486cc8ef384
@@ -2802,7 +2910,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect
   -> IO BG.CBool
 hs_bindgen_b2567486cc8ef384 =
-  BG.fromFFIType hs_bindgen_b2567486cc8ef384_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_b2567486cc8ef384_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the safe area for this window.
 --
@@ -2831,9 +2941,9 @@
 foreign import ccall safe "hs_bindgen_4718fa8444201efc"
   hs_bindgen_4718fa8444201efc_base
     :: BG.Ptr BG.Void
-    -> Float
-    -> Float
-    -> IO BG.Word8
+    -> BG.CFloat
+    -> BG.CFloat
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_SetWindowAspectRatio@
 hs_bindgen_4718fa8444201efc
@@ -2842,7 +2952,12 @@
   -> BG.CFloat
   -> IO BG.CBool
 hs_bindgen_4718fa8444201efc =
-  BG.fromFFIType hs_bindgen_4718fa8444201efc_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_4718fa8444201efc_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Request that the aspect ratio of a window\'s client area be set.
 --
@@ -2886,7 +3001,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetWindowAspectRatio@
 hs_bindgen_b91e4ae738b99383
@@ -2895,7 +3010,12 @@
   -> BG.Ptr BG.CFloat
   -> IO BG.CBool
 hs_bindgen_b91e4ae738b99383 =
-  BG.fromFFIType hs_bindgen_b91e4ae738b99383_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_b91e4ae738b99383_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get the aspect ratio of a window\'s client area.
 --
@@ -2933,7 +3053,7 @@
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetWindowBordersSize@
 hs_bindgen_1a0014cc2d5e995b
@@ -2944,7 +3064,20 @@
   -> BG.Ptr BG.CInt
   -> IO BG.CBool
 hs_bindgen_1a0014cc2d5e995b =
-  BG.fromFFIType hs_bindgen_1a0014cc2d5e995b_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_1a0014cc2d5e995b_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Get the size of a window\'s borders (decorations) around the client area.
 --
@@ -2994,7 +3127,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetWindowSizeInPixels@
 hs_bindgen_30e760d14c134b4b
@@ -3003,7 +3136,12 @@
   -> BG.Ptr BG.CInt
   -> IO BG.CBool
 hs_bindgen_30e760d14c134b4b =
-  BG.fromFFIType hs_bindgen_30e760d14c134b4b_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_30e760d14c134b4b_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get the size of a window\'s client area, in pixels.
 --
@@ -3037,9 +3175,9 @@
 foreign import ccall safe "hs_bindgen_f0719ee9bdadb864"
   hs_bindgen_f0719ee9bdadb864_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_SetWindowMinimumSize@
 hs_bindgen_f0719ee9bdadb864
@@ -3048,7 +3186,12 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_f0719ee9bdadb864 =
-  BG.fromFFIType hs_bindgen_f0719ee9bdadb864_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_f0719ee9bdadb864_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set the minimum size of a window\'s client area.
 --
@@ -3084,7 +3227,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetWindowMinimumSize@
 hs_bindgen_8673ac2cc36b8fce
@@ -3093,7 +3236,12 @@
   -> BG.Ptr BG.CInt
   -> IO BG.CBool
 hs_bindgen_8673ac2cc36b8fce =
-  BG.fromFFIType hs_bindgen_8673ac2cc36b8fce_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_8673ac2cc36b8fce_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get the minimum size of a window\'s client area.
 --
@@ -3127,9 +3275,9 @@
 foreign import ccall safe "hs_bindgen_8b1eeeed1710ce2d"
   hs_bindgen_8b1eeeed1710ce2d_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_SetWindowMaximumSize@
 hs_bindgen_8b1eeeed1710ce2d
@@ -3138,7 +3286,12 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_8b1eeeed1710ce2d =
-  BG.fromFFIType hs_bindgen_8b1eeeed1710ce2d_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_8b1eeeed1710ce2d_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set the maximum size of a window\'s client area.
 --
@@ -3174,7 +3327,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetWindowMaximumSize@
 hs_bindgen_48e1ff926a106d78
@@ -3183,7 +3336,12 @@
   -> BG.Ptr BG.CInt
   -> IO BG.CBool
 hs_bindgen_48e1ff926a106d78 =
-  BG.fromFFIType hs_bindgen_48e1ff926a106d78_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_48e1ff926a106d78_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get the maximum size of a window\'s client area.
 --
@@ -3217,8 +3375,8 @@
 foreign import ccall safe "hs_bindgen_1fc2a3e35dc5c047"
   hs_bindgen_1fc2a3e35dc5c047_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_SetWindowBordered@
 hs_bindgen_1fc2a3e35dc5c047
@@ -3226,7 +3384,9 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_1fc2a3e35dc5c047 =
-  BG.fromFFIType hs_bindgen_1fc2a3e35dc5c047_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_1fc2a3e35dc5c047_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the border state of a window.
 --
@@ -3259,8 +3419,8 @@
 foreign import ccall safe "hs_bindgen_602617d3d8b24265"
   hs_bindgen_602617d3d8b24265_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_SetWindowResizable@
 hs_bindgen_602617d3d8b24265
@@ -3268,7 +3428,9 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_602617d3d8b24265 =
-  BG.fromFFIType hs_bindgen_602617d3d8b24265_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_602617d3d8b24265_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the user-resizable state of a window.
 --
@@ -3301,8 +3463,8 @@
 foreign import ccall safe "hs_bindgen_1ca9fa2de9450921"
   hs_bindgen_1ca9fa2de9450921_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_SetWindowAlwaysOnTop@
 hs_bindgen_1ca9fa2de9450921
@@ -3310,7 +3472,9 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_1ca9fa2de9450921 =
-  BG.fromFFIType hs_bindgen_1ca9fa2de9450921_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_1ca9fa2de9450921_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the window to always be above the others.
 --
@@ -3342,8 +3506,8 @@
 foreign import ccall safe "hs_bindgen_4de8e5711e0b8b35"
   hs_bindgen_4de8e5711e0b8b35_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_SetWindowFillDocument@
 hs_bindgen_4de8e5711e0b8b35
@@ -3351,7 +3515,9 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_4de8e5711e0b8b35 =
-  BG.fromFFIType hs_bindgen_4de8e5711e0b8b35_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_4de8e5711e0b8b35_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the window to fill the current document space (Emscripten only).
 --
@@ -3389,14 +3555,15 @@
 foreign import ccall safe "hs_bindgen_db90afdec297ac45"
   hs_bindgen_db90afdec297ac45_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_ShowWindow@
 hs_bindgen_db90afdec297ac45
   :: BG.Ptr SDL_Window
   -> IO BG.CBool
 hs_bindgen_db90afdec297ac45 =
-  BG.fromFFIType hs_bindgen_db90afdec297ac45_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_db90afdec297ac45_base (BG.toFFIType x0))
 
 -- | Show a window.
 --
@@ -3421,14 +3588,15 @@
 foreign import ccall safe "hs_bindgen_151dd0c79f668116"
   hs_bindgen_151dd0c79f668116_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_HideWindow@
 hs_bindgen_151dd0c79f668116
   :: BG.Ptr SDL_Window
   -> IO BG.CBool
 hs_bindgen_151dd0c79f668116 =
-  BG.fromFFIType hs_bindgen_151dd0c79f668116_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_151dd0c79f668116_base (BG.toFFIType x0))
 
 -- | Hide a window.
 --
@@ -3453,14 +3621,15 @@
 foreign import ccall safe "hs_bindgen_f3eab79ea97d0a96"
   hs_bindgen_f3eab79ea97d0a96_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_RaiseWindow@
 hs_bindgen_f3eab79ea97d0a96
   :: BG.Ptr SDL_Window
   -> IO BG.CBool
 hs_bindgen_f3eab79ea97d0a96 =
-  BG.fromFFIType hs_bindgen_f3eab79ea97d0a96_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_f3eab79ea97d0a96_base (BG.toFFIType x0))
 
 -- | Request that a window be raised above other windows and gain the input focus.
 --
@@ -3485,14 +3654,15 @@
 foreign import ccall safe "hs_bindgen_4702fc373b7a0194"
   hs_bindgen_4702fc373b7a0194_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_MaximizeWindow@
 hs_bindgen_4702fc373b7a0194
   :: BG.Ptr SDL_Window
   -> IO BG.CBool
 hs_bindgen_4702fc373b7a0194 =
-  BG.fromFFIType hs_bindgen_4702fc373b7a0194_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_4702fc373b7a0194_base (BG.toFFIType x0))
 
 -- | Request that the window be made as large as possible.
 --
@@ -3525,14 +3695,15 @@
 foreign import ccall safe "hs_bindgen_740052b61f66d8b0"
   hs_bindgen_740052b61f66d8b0_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_MinimizeWindow@
 hs_bindgen_740052b61f66d8b0
   :: BG.Ptr SDL_Window
   -> IO BG.CBool
 hs_bindgen_740052b61f66d8b0 =
-  BG.fromFFIType hs_bindgen_740052b61f66d8b0_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_740052b61f66d8b0_base (BG.toFFIType x0))
 
 -- | Request that the window be minimized to an iconic representation.
 --
@@ -3563,14 +3734,15 @@
 foreign import ccall safe "hs_bindgen_26d521828ca2c776"
   hs_bindgen_26d521828ca2c776_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_RestoreWindow@
 hs_bindgen_26d521828ca2c776
   :: BG.Ptr SDL_Window
   -> IO BG.CBool
 hs_bindgen_26d521828ca2c776 =
-  BG.fromFFIType hs_bindgen_26d521828ca2c776_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_26d521828ca2c776_base (BG.toFFIType x0))
 
 -- | Request that the size and position of a minimized or maximized window be restored.
 --
@@ -3601,8 +3773,8 @@
 foreign import ccall safe "hs_bindgen_b364407ada14e440"
   hs_bindgen_b364407ada14e440_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_SetWindowFullscreen@
 hs_bindgen_b364407ada14e440
@@ -3610,7 +3782,9 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_b364407ada14e440 =
-  BG.fromFFIType hs_bindgen_b364407ada14e440_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_b364407ada14e440_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Request that the window\'s fullscreen state be changed.
 --
@@ -3645,14 +3819,15 @@
 foreign import ccall safe "hs_bindgen_5fa6f076247f8fc0"
   hs_bindgen_5fa6f076247f8fc0_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_SyncWindow@
 hs_bindgen_5fa6f076247f8fc0
   :: BG.Ptr SDL_Window
   -> IO BG.CBool
 hs_bindgen_5fa6f076247f8fc0 =
-  BG.fromFFIType hs_bindgen_5fa6f076247f8fc0_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_5fa6f076247f8fc0_base (BG.toFFIType x0))
 
 -- | Block until any pending window state is finalized.
 --
@@ -3681,14 +3856,15 @@
 foreign import ccall safe "hs_bindgen_0094e6c8474f41c7"
   hs_bindgen_0094e6c8474f41c7_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_WindowHasSurface@
 hs_bindgen_0094e6c8474f41c7
   :: BG.Ptr SDL_Window
   -> IO BG.CBool
 hs_bindgen_0094e6c8474f41c7 =
-  BG.fromFFIType hs_bindgen_0094e6c8474f41c7_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_0094e6c8474f41c7_base (BG.toFFIType x0))
 
 -- | Return whether the window has a surface associated with it.
 --
@@ -3720,7 +3896,8 @@
   :: BG.Ptr SDL_Window
   -> IO (BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface)
 hs_bindgen_3935adead4d3fc9e =
-  BG.fromFFIType hs_bindgen_3935adead4d3fc9e_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3935adead4d3fc9e_base (BG.toFFIType x0))
 
 -- | Get the SDL surface associated with the window.
 --
@@ -3753,8 +3930,8 @@
 foreign import ccall safe "hs_bindgen_352d147569a3861c"
   hs_bindgen_352d147569a3861c_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_SetWindowSurfaceVSync@
 hs_bindgen_352d147569a3861c
@@ -3762,7 +3939,9 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_352d147569a3861c =
-  BG.fromFFIType hs_bindgen_352d147569a3861c_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_352d147569a3861c_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Toggle VSync for the window surface.
 --
@@ -3797,7 +3976,7 @@
   hs_bindgen_faa1386f6baf8835_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetWindowSurfaceVSync@
 hs_bindgen_faa1386f6baf8835
@@ -3805,7 +3984,9 @@
   -> BG.Ptr BG.CInt
   -> IO BG.CBool
 hs_bindgen_faa1386f6baf8835 =
-  BG.fromFFIType hs_bindgen_faa1386f6baf8835_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_faa1386f6baf8835_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get VSync for the window surface.
 --
@@ -3835,14 +4016,15 @@
 foreign import ccall safe "hs_bindgen_2865506d5d1ebc1d"
   hs_bindgen_2865506d5d1ebc1d_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_UpdateWindowSurface@
 hs_bindgen_2865506d5d1ebc1d
   :: BG.Ptr SDL_Window
   -> IO BG.CBool
 hs_bindgen_2865506d5d1ebc1d =
-  BG.fromFFIType hs_bindgen_2865506d5d1ebc1d_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_2865506d5d1ebc1d_base (BG.toFFIType x0))
 
 -- | Copy the window surface to the screen.
 --
@@ -3872,8 +4054,8 @@
   hs_bindgen_9f52950557ec570d_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_UpdateWindowSurfaceRects@
 hs_bindgen_9f52950557ec570d
@@ -3882,7 +4064,12 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_9f52950557ec570d =
-  BG.fromFFIType hs_bindgen_9f52950557ec570d_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_9f52950557ec570d_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Copy areas of the window surface to the screen.
 --
@@ -3922,14 +4109,15 @@
 foreign import ccall safe "hs_bindgen_281f842dd1d64c24"
   hs_bindgen_281f842dd1d64c24_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_DestroyWindowSurface@
 hs_bindgen_281f842dd1d64c24
   :: BG.Ptr SDL_Window
   -> IO BG.CBool
 hs_bindgen_281f842dd1d64c24 =
-  BG.fromFFIType hs_bindgen_281f842dd1d64c24_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_281f842dd1d64c24_base (BG.toFFIType x0))
 
 -- | Destroy the surface associated with the window.
 --
@@ -3955,8 +4143,8 @@
 foreign import ccall safe "hs_bindgen_9810610308d37d7a"
   hs_bindgen_9810610308d37d7a_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_SetWindowKeyboardGrab@
 hs_bindgen_9810610308d37d7a
@@ -3964,7 +4152,9 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_9810610308d37d7a =
-  BG.fromFFIType hs_bindgen_9810610308d37d7a_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_9810610308d37d7a_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set a window\'s keyboard grab mode.
 --
@@ -4002,8 +4192,8 @@
 foreign import ccall safe "hs_bindgen_d76ad355e95647e6"
   hs_bindgen_d76ad355e95647e6_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_SetWindowMouseGrab@
 hs_bindgen_d76ad355e95647e6
@@ -4011,7 +4201,9 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_d76ad355e95647e6 =
-  BG.fromFFIType hs_bindgen_d76ad355e95647e6_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_d76ad355e95647e6_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set a window\'s mouse grab mode.
 --
@@ -4042,14 +4234,15 @@
 foreign import ccall safe "hs_bindgen_d6cecb629e2e4cf1"
   hs_bindgen_d6cecb629e2e4cf1_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetWindowKeyboardGrab@
 hs_bindgen_d6cecb629e2e4cf1
   :: BG.Ptr SDL_Window
   -> IO BG.CBool
 hs_bindgen_d6cecb629e2e4cf1 =
-  BG.fromFFIType hs_bindgen_d6cecb629e2e4cf1_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d6cecb629e2e4cf1_base (BG.toFFIType x0))
 
 -- | Get a window\'s keyboard grab mode.
 --
@@ -4075,14 +4268,15 @@
 foreign import ccall safe "hs_bindgen_c4a10336d87afa11"
   hs_bindgen_c4a10336d87afa11_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetWindowMouseGrab@
 hs_bindgen_c4a10336d87afa11
   :: BG.Ptr SDL_Window
   -> IO BG.CBool
 hs_bindgen_c4a10336d87afa11 =
-  BG.fromFFIType hs_bindgen_c4a10336d87afa11_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c4a10336d87afa11_base (BG.toFFIType x0))
 
 -- | Get a window\'s mouse grab mode.
 --
@@ -4111,7 +4305,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetGrabbedWindow@
 hs_bindgen_dc47f3dead3a7c4c :: IO (BG.Ptr SDL_Window)
 hs_bindgen_dc47f3dead3a7c4c =
-  BG.fromFFIType hs_bindgen_dc47f3dead3a7c4c_base
+  fmap BG.fromFFIType hs_bindgen_dc47f3dead3a7c4c_base
 
 -- | Get the window that currently has an input grab enabled.
 --
@@ -4132,7 +4326,7 @@
   hs_bindgen_cea803a34ce672ab_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_SetWindowMouseRect@
 hs_bindgen_cea803a34ce672ab
@@ -4140,7 +4334,9 @@
   -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
   -> IO BG.CBool
 hs_bindgen_cea803a34ce672ab =
-  BG.fromFFIType hs_bindgen_cea803a34ce672ab_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_cea803a34ce672ab_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Confines the cursor to the specified area of a window.
 --
@@ -4178,7 +4374,8 @@
   :: BG.Ptr SDL_Window
   -> IO (PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect)
 hs_bindgen_20aa207b179a0f01 =
-  BG.fromFFIType hs_bindgen_20aa207b179a0f01_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_20aa207b179a0f01_base (BG.toFFIType x0))
 
 -- | Get the mouse confinement rectangle of a window.
 --
@@ -4203,8 +4400,8 @@
 foreign import ccall safe "hs_bindgen_8604a41f1b752f5d"
   hs_bindgen_8604a41f1b752f5d_base
     :: BG.Ptr BG.Void
-    -> Float
-    -> IO BG.Word8
+    -> BG.CFloat
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_SetWindowOpacity@
 hs_bindgen_8604a41f1b752f5d
@@ -4212,7 +4409,9 @@
   -> BG.CFloat
   -> IO BG.CBool
 hs_bindgen_8604a41f1b752f5d =
-  BG.fromFFIType hs_bindgen_8604a41f1b752f5d_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_8604a41f1b752f5d_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the opacity for a window.
 --
@@ -4245,14 +4444,15 @@
 foreign import ccall safe "hs_bindgen_3101cb57bb822dd1"
   hs_bindgen_3101cb57bb822dd1_base
     :: BG.Ptr BG.Void
-    -> IO Float
+    -> IO BG.CFloat
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetWindowOpacity@
 hs_bindgen_3101cb57bb822dd1
   :: BG.Ptr SDL_Window
   -> IO BG.CFloat
 hs_bindgen_3101cb57bb822dd1 =
-  BG.fromFFIType hs_bindgen_3101cb57bb822dd1_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3101cb57bb822dd1_base (BG.toFFIType x0))
 
 -- | Get the opacity of a window.
 --
@@ -4280,7 +4480,7 @@
   hs_bindgen_1cc8b9ab8edf00bb_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_SetWindowParent@
 hs_bindgen_1cc8b9ab8edf00bb
@@ -4288,7 +4488,9 @@
   -> BG.Ptr SDL_Window
   -> IO BG.CBool
 hs_bindgen_1cc8b9ab8edf00bb =
-  BG.fromFFIType hs_bindgen_1cc8b9ab8edf00bb_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_1cc8b9ab8edf00bb_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the window as a child of a parent window.
 --
@@ -4327,8 +4529,8 @@
 foreign import ccall safe "hs_bindgen_6a6cf75fb3644441"
   hs_bindgen_6a6cf75fb3644441_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_SetWindowModal@
 hs_bindgen_6a6cf75fb3644441
@@ -4336,7 +4538,9 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_6a6cf75fb3644441 =
-  BG.fromFFIType hs_bindgen_6a6cf75fb3644441_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_6a6cf75fb3644441_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Toggle the state of the window as modal.
 --
@@ -4367,8 +4571,8 @@
 foreign import ccall safe "hs_bindgen_b8c33cea6b55cf17"
   hs_bindgen_b8c33cea6b55cf17_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_SetWindowFocusable@
 hs_bindgen_b8c33cea6b55cf17
@@ -4376,7 +4580,9 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_b8c33cea6b55cf17 =
-  BG.fromFFIType hs_bindgen_b8c33cea6b55cf17_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_b8c33cea6b55cf17_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set whether the window may have input focus.
 --
@@ -4403,9 +4609,9 @@
 foreign import ccall safe "hs_bindgen_ce10733e3b7a4ffa"
   hs_bindgen_ce10733e3b7a4ffa_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_ShowWindowSystemMenu@
 hs_bindgen_ce10733e3b7a4ffa
@@ -4414,7 +4620,12 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_ce10733e3b7a4ffa =
-  BG.fromFFIType hs_bindgen_ce10733e3b7a4ffa_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_ce10733e3b7a4ffa_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Display the system-level window menu.
 --
@@ -4452,7 +4663,7 @@
     :: BG.Ptr BG.Void
     -> BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_SetWindowHitTest@
 hs_bindgen_9639f427d08bb73e
@@ -4461,7 +4672,12 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_9639f427d08bb73e =
-  BG.fromFFIType hs_bindgen_9639f427d08bb73e_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_9639f427d08bb73e_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Provide a callback that decides if a window region has special properties.
 --
@@ -4505,7 +4721,7 @@
   hs_bindgen_ed6846899beda7ab_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_SetWindowShape@
 hs_bindgen_ed6846899beda7ab
@@ -4513,7 +4729,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface
   -> IO BG.CBool
 hs_bindgen_ed6846899beda7ab =
-  BG.fromFFIType hs_bindgen_ed6846899beda7ab_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_ed6846899beda7ab_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the shape of a transparent window.
 --
@@ -4546,8 +4764,8 @@
 foreign import ccall safe "hs_bindgen_e1ccf70cb57d0520"
   hs_bindgen_e1ccf70cb57d0520_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
+    -> BG.CUInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_FlashWindow@
 hs_bindgen_e1ccf70cb57d0520
@@ -4555,7 +4773,9 @@
   -> SDL_FlashOperation
   -> IO BG.CBool
 hs_bindgen_e1ccf70cb57d0520 =
-  BG.fromFFIType hs_bindgen_e1ccf70cb57d0520_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_e1ccf70cb57d0520_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Request a window to demand attention from the user.
 --
@@ -4582,8 +4802,8 @@
 foreign import ccall safe "hs_bindgen_5b04ab3d00de3188"
   hs_bindgen_5b04ab3d00de3188_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_SetWindowProgressState@
 hs_bindgen_5b04ab3d00de3188
@@ -4591,7 +4811,9 @@
   -> SDL_ProgressState
   -> IO BG.CBool
 hs_bindgen_5b04ab3d00de3188 =
-  BG.fromFFIType hs_bindgen_5b04ab3d00de3188_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_5b04ab3d00de3188_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Sets the state of the progress bar for the given window’s taskbar icon.
 --
@@ -4619,14 +4841,15 @@
 foreign import ccall safe "hs_bindgen_f0c456909c3f00e4"
   hs_bindgen_f0c456909c3f00e4_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetWindowProgressState@
 hs_bindgen_f0c456909c3f00e4
   :: BG.Ptr SDL_Window
   -> IO SDL_ProgressState
 hs_bindgen_f0c456909c3f00e4 =
-  BG.fromFFIType hs_bindgen_f0c456909c3f00e4_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_f0c456909c3f00e4_base (BG.toFFIType x0))
 
 -- | Get the state of the progress bar for the given window’s taskbar icon.
 --
@@ -4650,8 +4873,8 @@
 foreign import ccall safe "hs_bindgen_61b3840500263851"
   hs_bindgen_61b3840500263851_base
     :: BG.Ptr BG.Void
-    -> Float
-    -> IO BG.Word8
+    -> BG.CFloat
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_SetWindowProgressValue@
 hs_bindgen_61b3840500263851
@@ -4659,7 +4882,9 @@
   -> BG.CFloat
   -> IO BG.CBool
 hs_bindgen_61b3840500263851 =
-  BG.fromFFIType hs_bindgen_61b3840500263851_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_61b3840500263851_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Sets the value of the progress bar for the given window’s taskbar icon.
 --
@@ -4687,14 +4912,15 @@
 foreign import ccall safe "hs_bindgen_11c3352b21aa2799"
   hs_bindgen_11c3352b21aa2799_base
     :: BG.Ptr BG.Void
-    -> IO Float
+    -> IO BG.CFloat
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GetWindowProgressValue@
 hs_bindgen_11c3352b21aa2799
   :: BG.Ptr SDL_Window
   -> IO BG.CFloat
 hs_bindgen_11c3352b21aa2799 =
-  BG.fromFFIType hs_bindgen_11c3352b21aa2799_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_11c3352b21aa2799_base (BG.toFFIType x0))
 
 -- | Get the value of the progress bar for the given window’s taskbar icon.
 --
@@ -4725,7 +4951,8 @@
   :: BG.Ptr SDL_Window
   -> IO ()
 hs_bindgen_b3962b19443d34da =
-  BG.fromFFIType hs_bindgen_b3962b19443d34da_base
+  \x0 ->
+    hs_bindgen_b3962b19443d34da_base (BG.toFFIType x0)
 
 -- | Destroy a window.
 --
@@ -4751,12 +4978,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_ScreenSaverEnabled@
 foreign import ccall safe "hs_bindgen_84c0659acf0fe2dc"
   hs_bindgen_84c0659acf0fe2dc_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_ScreenSaverEnabled@
 hs_bindgen_84c0659acf0fe2dc :: IO BG.CBool
 hs_bindgen_84c0659acf0fe2dc =
-  BG.fromFFIType hs_bindgen_84c0659acf0fe2dc_base
+  fmap BG.fromFFIType hs_bindgen_84c0659acf0fe2dc_base
 
 -- | Check whether the screensaver is currently enabled.
 --
@@ -4779,12 +5006,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_EnableScreenSaver@
 foreign import ccall safe "hs_bindgen_166142199f6402d0"
   hs_bindgen_166142199f6402d0_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_EnableScreenSaver@
 hs_bindgen_166142199f6402d0 :: IO BG.CBool
 hs_bindgen_166142199f6402d0 =
-  BG.fromFFIType hs_bindgen_166142199f6402d0_base
+  fmap BG.fromFFIType hs_bindgen_166142199f6402d0_base
 
 -- | Allow the screen to be blanked by a screen saver.
 --
@@ -4803,12 +5030,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_DisableScreenSaver@
 foreign import ccall safe "hs_bindgen_83a7f8efb2c664c5"
   hs_bindgen_83a7f8efb2c664c5_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_DisableScreenSaver@
 hs_bindgen_83a7f8efb2c664c5 :: IO BG.CBool
 hs_bindgen_83a7f8efb2c664c5 =
-  BG.fromFFIType hs_bindgen_83a7f8efb2c664c5_base
+  fmap BG.fromFFIType hs_bindgen_83a7f8efb2c664c5_base
 
 -- | Prevent the screen from being blanked by a screen saver.
 --
@@ -4832,14 +5059,15 @@
 foreign import ccall safe "hs_bindgen_c47d12c66f8cfd5c"
   hs_bindgen_c47d12c66f8cfd5c_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GL_LoadLibrary@
 hs_bindgen_c47d12c66f8cfd5c
   :: PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_c47d12c66f8cfd5c =
-  BG.fromFFIType hs_bindgen_c47d12c66f8cfd5c_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c47d12c66f8cfd5c_base (BG.toFFIType x0))
 
 -- | Dynamically load an OpenGL library.
 --
@@ -4868,14 +5096,15 @@
 foreign import ccall safe "hs_bindgen_e435ceb0289a8035"
   hs_bindgen_e435ceb0289a8035_base
     :: BG.Ptr BG.Void
-    -> IO (BG.FunPtr BG.Void)
+    -> IO HsBindgen.Runtime.Support.FunPtrVoid
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GL_GetProcAddress@
 hs_bindgen_e435ceb0289a8035
   :: PtrConst.PtrConst BG.CChar
   -> IO SDL3.Sys.Bindgen.Stdinc.SDL_FunctionPointer
 hs_bindgen_e435ceb0289a8035 =
-  BG.fromFFIType hs_bindgen_e435ceb0289a8035_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_e435ceb0289a8035_base (BG.toFFIType x0))
 
 -- | Get an OpenGL function by name.
 --
@@ -4914,14 +5143,15 @@
 foreign import ccall safe "hs_bindgen_894763e4be5fe96f"
   hs_bindgen_894763e4be5fe96f_base
     :: BG.Ptr BG.Void
-    -> IO (BG.FunPtr BG.Void)
+    -> IO HsBindgen.Runtime.Support.FunPtrVoid
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_EGL_GetProcAddress@
 hs_bindgen_894763e4be5fe96f
   :: PtrConst.PtrConst BG.CChar
   -> IO SDL3.Sys.Bindgen.Stdinc.SDL_FunctionPointer
 hs_bindgen_894763e4be5fe96f =
-  BG.fromFFIType hs_bindgen_894763e4be5fe96f_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_894763e4be5fe96f_base (BG.toFFIType x0))
 
 -- | Get an EGL library function by name.
 --
@@ -4952,7 +5182,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GL_UnloadLibrary@
 hs_bindgen_88c7a6f4d6a9b36e :: IO ()
 hs_bindgen_88c7a6f4d6a9b36e =
-  BG.fromFFIType hs_bindgen_88c7a6f4d6a9b36e_base
+  hs_bindgen_88c7a6f4d6a9b36e_base
 
 -- | Unload the OpenGL library previously loaded by @SDL_GL_LoadLibrary()@.
 --
@@ -4970,14 +5200,15 @@
 foreign import ccall safe "hs_bindgen_d8ad3d720e0d97e4"
   hs_bindgen_d8ad3d720e0d97e4_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GL_ExtensionSupported@
 hs_bindgen_d8ad3d720e0d97e4
   :: PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_d8ad3d720e0d97e4 =
-  BG.fromFFIType hs_bindgen_d8ad3d720e0d97e4_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d8ad3d720e0d97e4_base (BG.toFFIType x0))
 
 -- | Check if an OpenGL extension is supported for the current context.
 --
@@ -5009,7 +5240,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GL_ResetAttributes@
 hs_bindgen_0e89b220270eca27 :: IO ()
 hs_bindgen_0e89b220270eca27 =
-  BG.fromFFIType hs_bindgen_0e89b220270eca27_base
+  hs_bindgen_0e89b220270eca27_base
 
 -- | Reset all previously set OpenGL context attributes to their default values.
 --
@@ -5026,9 +5257,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GL_SetAttribute@
 foreign import ccall safe "hs_bindgen_6a7a5b133a68dc0f"
   hs_bindgen_6a7a5b133a68dc0f_base
-    :: BG.Word32
-    -> BG.Int32
-    -> IO BG.Word8
+    :: BG.CUInt
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GL_SetAttribute@
 hs_bindgen_6a7a5b133a68dc0f
@@ -5036,7 +5267,9 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_6a7a5b133a68dc0f =
-  BG.fromFFIType hs_bindgen_6a7a5b133a68dc0f_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_6a7a5b133a68dc0f_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set an OpenGL window attribute before window creation.
 --
@@ -5066,9 +5299,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GL_GetAttribute@
 foreign import ccall safe "hs_bindgen_a558edf739642b48"
   hs_bindgen_a558edf739642b48_base
-    :: BG.Word32
+    :: BG.CUInt
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GL_GetAttribute@
 hs_bindgen_a558edf739642b48
@@ -5076,7 +5309,9 @@
   -> BG.Ptr BG.CInt
   -> IO BG.CBool
 hs_bindgen_a558edf739642b48 =
-  BG.fromFFIType hs_bindgen_a558edf739642b48_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_a558edf739642b48_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the actual value for an attribute from the current context.
 --
@@ -5112,7 +5347,8 @@
   :: BG.Ptr SDL_Window
   -> IO SDL_GLContext
 hs_bindgen_7a22bf48d0f84507 =
-  BG.fromFFIType hs_bindgen_7a22bf48d0f84507_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_7a22bf48d0f84507_base (BG.toFFIType x0))
 
 -- | Create an OpenGL context for an OpenGL window, and make it current.
 --
@@ -5146,7 +5382,7 @@
   hs_bindgen_ff7daec2405dfb35_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GL_MakeCurrent@
 hs_bindgen_ff7daec2405dfb35
@@ -5154,7 +5390,9 @@
   -> SDL_GLContext
   -> IO BG.CBool
 hs_bindgen_ff7daec2405dfb35 =
-  BG.fromFFIType hs_bindgen_ff7daec2405dfb35_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_ff7daec2405dfb35_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set up an OpenGL context for rendering into an OpenGL window.
 --
@@ -5189,7 +5427,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GL_GetCurrentWindow@
 hs_bindgen_6eb4d946a4d2ae7b :: IO (BG.Ptr SDL_Window)
 hs_bindgen_6eb4d946a4d2ae7b =
-  BG.fromFFIType hs_bindgen_6eb4d946a4d2ae7b_base
+  fmap BG.fromFFIType hs_bindgen_6eb4d946a4d2ae7b_base
 
 -- | Get the currently active OpenGL window.
 --
@@ -5211,7 +5449,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GL_GetCurrentContext@
 hs_bindgen_c32923dac368266d :: IO SDL_GLContext
 hs_bindgen_c32923dac368266d =
-  BG.fromFFIType hs_bindgen_c32923dac368266d_base
+  fmap BG.fromFFIType hs_bindgen_c32923dac368266d_base
 
 -- | Get the currently active OpenGL context.
 --
@@ -5236,7 +5474,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_EGL_GetCurrentDisplay@
 hs_bindgen_19cd590b75a39bcc :: IO SDL_EGLDisplay
 hs_bindgen_19cd590b75a39bcc =
-  BG.fromFFIType hs_bindgen_19cd590b75a39bcc_base
+  fmap BG.fromFFIType hs_bindgen_19cd590b75a39bcc_base
 
 -- | Get the currently active EGL display.
 --
@@ -5259,7 +5497,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_EGL_GetCurrentConfig@
 hs_bindgen_652c87a58c2fcc27 :: IO SDL_EGLConfig
 hs_bindgen_652c87a58c2fcc27 =
-  BG.fromFFIType hs_bindgen_652c87a58c2fcc27_base
+  fmap BG.fromFFIType hs_bindgen_652c87a58c2fcc27_base
 
 -- | Get the currently active EGL config.
 --
@@ -5285,7 +5523,8 @@
   :: BG.Ptr SDL_Window
   -> IO SDL_EGLSurface
 hs_bindgen_a7fa1925e88a0d07 =
-  BG.fromFFIType hs_bindgen_a7fa1925e88a0d07_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a7fa1925e88a0d07_base (BG.toFFIType x0))
 
 -- | Get the EGL surface associated with the window.
 --
@@ -5322,7 +5561,15 @@
   -> BG.Ptr BG.Void
   -> IO ()
 hs_bindgen_5095f621e48adf13 =
-  BG.fromFFIType hs_bindgen_5095f621e48adf13_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_5095f621e48adf13_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Sets the callbacks for defining custom EGLAttrib arrays for EGL initialization.
 --
@@ -5359,15 +5606,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GL_SetSwapInterval@
 foreign import ccall safe "hs_bindgen_32295faebc369c7a"
   hs_bindgen_32295faebc369c7a_base
-    :: BG.Int32
-    -> IO BG.Word8
+    :: BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GL_SetSwapInterval@
 hs_bindgen_32295faebc369c7a
   :: BG.CInt
   -> IO BG.CBool
 hs_bindgen_32295faebc369c7a =
-  BG.fromFFIType hs_bindgen_32295faebc369c7a_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_32295faebc369c7a_base (BG.toFFIType x0))
 
 -- | Set the swap interval for the current OpenGL context.
 --
@@ -5398,14 +5646,15 @@
 foreign import ccall safe "hs_bindgen_04719e6e434557d3"
   hs_bindgen_04719e6e434557d3_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GL_GetSwapInterval@
 hs_bindgen_04719e6e434557d3
   :: BG.Ptr BG.CInt
   -> IO BG.CBool
 hs_bindgen_04719e6e434557d3 =
-  BG.fromFFIType hs_bindgen_04719e6e434557d3_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_04719e6e434557d3_base (BG.toFFIType x0))
 
 -- | Get the swap interval for the current OpenGL context.
 --
@@ -5432,14 +5681,15 @@
 foreign import ccall safe "hs_bindgen_1d8b57ab49fbefc1"
   hs_bindgen_1d8b57ab49fbefc1_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GL_SwapWindow@
 hs_bindgen_1d8b57ab49fbefc1
   :: BG.Ptr SDL_Window
   -> IO BG.CBool
 hs_bindgen_1d8b57ab49fbefc1 =
-  BG.fromFFIType hs_bindgen_1d8b57ab49fbefc1_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_1d8b57ab49fbefc1_base (BG.toFFIType x0))
 
 -- | Update a window with OpenGL rendering.
 --
@@ -5466,14 +5716,15 @@
 foreign import ccall safe "hs_bindgen_7da107ca01a650af"
   hs_bindgen_7da107ca01a650af_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Safe_SDL_GL_DestroyContext@
 hs_bindgen_7da107ca01a650af
   :: SDL_GLContext
   -> IO BG.CBool
 hs_bindgen_7da107ca01a650af =
-  BG.fromFFIType hs_bindgen_7da107ca01a650af_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_7da107ca01a650af_base (BG.toFFIType x0))
 
 -- | Delete an OpenGL context.
 --
diff --git a/src/SDL3/Sys/Bindgen/Video/Unsafe.hs b/src/SDL3/Sys/Bindgen/Video/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Video/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Video/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Video.Unsafe (
@@ -120,8 +122,11 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Pixels qualified
@@ -133,7 +138,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_video.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_video.h>"
          , "signed int hs_bindgen_5592dffe201a625d (void)"
          , "{"
          , "  return (SDL_GetNumVideoDrivers)();"
@@ -912,12 +921,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetNumVideoDrivers@
 foreign import ccall unsafe "hs_bindgen_5592dffe201a625d"
   hs_bindgen_5592dffe201a625d_base
-    :: IO BG.Int32
+    :: IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetNumVideoDrivers@
 hs_bindgen_5592dffe201a625d :: IO BG.CInt
 hs_bindgen_5592dffe201a625d =
-  BG.fromFFIType hs_bindgen_5592dffe201a625d_base
+  fmap BG.fromFFIType hs_bindgen_5592dffe201a625d_base
 
 -- | Get the number of video drivers compiled into SDL.
 --
@@ -936,7 +945,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetVideoDriver@
 foreign import ccall unsafe "hs_bindgen_85f4e358bde66c9a"
   hs_bindgen_85f4e358bde66c9a_base
-    :: BG.Int32
+    :: BG.CInt
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetVideoDriver@
@@ -944,7 +953,8 @@
   :: BG.CInt
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_85f4e358bde66c9a =
-  BG.fromFFIType hs_bindgen_85f4e358bde66c9a_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_85f4e358bde66c9a_base (BG.toFFIType x0))
 
 -- | Get the name of a built in video driver.
 --
@@ -977,7 +987,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetCurrentVideoDriver@
 hs_bindgen_63fbce696f1ed5a6 :: IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_63fbce696f1ed5a6 =
-  BG.fromFFIType hs_bindgen_63fbce696f1ed5a6_base
+  fmap BG.fromFFIType hs_bindgen_63fbce696f1ed5a6_base
 
 -- | Get the name of the currently initialized video driver.
 --
@@ -999,12 +1009,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetSystemTheme@
 foreign import ccall unsafe "hs_bindgen_c80ec935a539ddd8"
   hs_bindgen_c80ec935a539ddd8_base
-    :: IO BG.Word32
+    :: IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetSystemTheme@
 hs_bindgen_c80ec935a539ddd8 :: IO SDL_SystemTheme
 hs_bindgen_c80ec935a539ddd8 =
-  BG.fromFFIType hs_bindgen_c80ec935a539ddd8_base
+  fmap BG.fromFFIType hs_bindgen_c80ec935a539ddd8_base
 
 -- | Get the current system theme.
 --
@@ -1029,7 +1039,8 @@
   :: BG.Ptr BG.CInt
   -> IO (BG.Ptr SDL_DisplayID)
 hs_bindgen_d0c686e8303409e7 =
-  BG.fromFFIType hs_bindgen_d0c686e8303409e7_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d0c686e8303409e7_base (BG.toFFIType x0))
 
 -- | Get a list of currently connected displays.
 --
@@ -1051,12 +1062,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetPrimaryDisplay@
 foreign import ccall unsafe "hs_bindgen_6b2fa2820b978e45"
   hs_bindgen_6b2fa2820b978e45_base
-    :: IO BG.Word32
+    :: IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetPrimaryDisplay@
 hs_bindgen_6b2fa2820b978e45 :: IO SDL_DisplayID
 hs_bindgen_6b2fa2820b978e45 =
-  BG.fromFFIType hs_bindgen_6b2fa2820b978e45_base
+  fmap BG.fromFFIType hs_bindgen_6b2fa2820b978e45_base
 
 -- | Return the primary display.
 --
@@ -1075,15 +1086,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetDisplayProperties@
 foreign import ccall unsafe "hs_bindgen_2811399c7688084b"
   hs_bindgen_2811399c7688084b_base
-    :: BG.Word32
-    -> IO BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetDisplayProperties@
 hs_bindgen_2811399c7688084b
   :: SDL_DisplayID
   -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
 hs_bindgen_2811399c7688084b =
-  BG.fromFFIType hs_bindgen_2811399c7688084b_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_2811399c7688084b_base (BG.toFFIType x0))
 
 -- | Get the properties associated with a display.
 --
@@ -1122,7 +1134,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetDisplayName@
 foreign import ccall unsafe "hs_bindgen_348f75329e6ce8d9"
   hs_bindgen_348f75329e6ce8d9_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetDisplayName@
@@ -1130,7 +1142,8 @@
   :: SDL_DisplayID
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_348f75329e6ce8d9 =
-  BG.fromFFIType hs_bindgen_348f75329e6ce8d9_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_348f75329e6ce8d9_base (BG.toFFIType x0))
 
 -- | Get the name of a display in UTF-8 encoding.
 --
@@ -1154,9 +1167,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetDisplayBounds@
 foreign import ccall unsafe "hs_bindgen_ef8f0d981192b3f9"
   hs_bindgen_ef8f0d981192b3f9_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetDisplayBounds@
 hs_bindgen_ef8f0d981192b3f9
@@ -1164,7 +1177,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect
   -> IO BG.CBool
 hs_bindgen_ef8f0d981192b3f9 =
-  BG.fromFFIType hs_bindgen_ef8f0d981192b3f9_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_ef8f0d981192b3f9_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the desktop area represented by a display.
 --
@@ -1194,9 +1209,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetDisplayUsableBounds@
 foreign import ccall unsafe "hs_bindgen_c49b6c7690711e0a"
   hs_bindgen_c49b6c7690711e0a_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetDisplayUsableBounds@
 hs_bindgen_c49b6c7690711e0a
@@ -1204,7 +1219,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect
   -> IO BG.CBool
 hs_bindgen_c49b6c7690711e0a =
-  BG.fromFFIType hs_bindgen_c49b6c7690711e0a_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_c49b6c7690711e0a_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the usable desktop area represented by a display, in screen coordinates.
 --
@@ -1237,15 +1254,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetNaturalDisplayOrientation@
 foreign import ccall unsafe "hs_bindgen_57dcd89da18e0a7a"
   hs_bindgen_57dcd89da18e0a7a_base
-    :: BG.Word32
-    -> IO BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetNaturalDisplayOrientation@
 hs_bindgen_57dcd89da18e0a7a
   :: SDL_DisplayID
   -> IO SDL_DisplayOrientation
 hs_bindgen_57dcd89da18e0a7a =
-  BG.fromFFIType hs_bindgen_57dcd89da18e0a7a_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_57dcd89da18e0a7a_base (BG.toFFIType x0))
 
 -- | Get the orientation of a display when it is unrotated.
 --
@@ -1270,15 +1288,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetCurrentDisplayOrientation@
 foreign import ccall unsafe "hs_bindgen_c8c1a7af21e9840d"
   hs_bindgen_c8c1a7af21e9840d_base
-    :: BG.Word32
-    -> IO BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetCurrentDisplayOrientation@
 hs_bindgen_c8c1a7af21e9840d
   :: SDL_DisplayID
   -> IO SDL_DisplayOrientation
 hs_bindgen_c8c1a7af21e9840d =
-  BG.fromFFIType hs_bindgen_c8c1a7af21e9840d_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c8c1a7af21e9840d_base (BG.toFFIType x0))
 
 -- | Get the orientation of a display.
 --
@@ -1303,15 +1322,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetDisplayContentScale@
 foreign import ccall unsafe "hs_bindgen_84541dd84a5f8bf5"
   hs_bindgen_84541dd84a5f8bf5_base
-    :: BG.Word32
-    -> IO Float
+    :: HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CFloat
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetDisplayContentScale@
 hs_bindgen_84541dd84a5f8bf5
   :: SDL_DisplayID
   -> IO BG.CFloat
 hs_bindgen_84541dd84a5f8bf5 =
-  BG.fromFFIType hs_bindgen_84541dd84a5f8bf5_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_84541dd84a5f8bf5_base (BG.toFFIType x0))
 
 -- | Get the content scale of a display.
 --
@@ -1340,7 +1360,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetFullscreenDisplayModes@
 foreign import ccall unsafe "hs_bindgen_7fcb2edb01c8f735"
   hs_bindgen_7fcb2edb01c8f735_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> BG.Ptr BG.Void
     -> IO (BG.Ptr BG.Void)
 
@@ -1350,7 +1370,9 @@
   -> BG.Ptr BG.CInt
   -> IO (BG.Ptr (BG.Ptr SDL_DisplayMode))
 hs_bindgen_7fcb2edb01c8f735 =
-  BG.fromFFIType hs_bindgen_7fcb2edb01c8f735_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_7fcb2edb01c8f735_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get a list of fullscreen display modes available on a display.
 --
@@ -1393,13 +1415,13 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetClosestFullscreenDisplayMode@
 foreign import ccall unsafe "hs_bindgen_4d4a115b24dc1a8a"
   hs_bindgen_4d4a115b24dc1a8a_base
-    :: BG.Word32
-    -> BG.Int32
-    -> BG.Int32
-    -> Float
-    -> BG.Word8
+    :: HsBindgen.Runtime.LibC.Word32
+    -> BG.CInt
+    -> BG.CInt
+    -> BG.CFloat
+    -> BG.CBool
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetClosestFullscreenDisplayMode@
 hs_bindgen_4d4a115b24dc1a8a
@@ -1411,7 +1433,22 @@
   -> BG.Ptr SDL_DisplayMode
   -> IO BG.CBool
 hs_bindgen_4d4a115b24dc1a8a =
-  BG.fromFFIType hs_bindgen_4d4a115b24dc1a8a_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_4d4a115b24dc1a8a_base
+                    (BG.toFFIType x0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                    (BG.toFFIType x4)
+                    (BG.toFFIType x5)
+                )
 
 -- | Get the closest match to the requested display mode.
 --
@@ -1458,7 +1495,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetDesktopDisplayMode@
 foreign import ccall unsafe "hs_bindgen_f150e56ed07c3071"
   hs_bindgen_f150e56ed07c3071_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetDesktopDisplayMode@
@@ -1466,7 +1503,8 @@
   :: SDL_DisplayID
   -> IO (PtrConst.PtrConst SDL_DisplayMode)
 hs_bindgen_f150e56ed07c3071 =
-  BG.fromFFIType hs_bindgen_f150e56ed07c3071_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_f150e56ed07c3071_base (BG.toFFIType x0))
 
 -- | Get information about the desktop\'s display mode.
 --
@@ -1493,7 +1531,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetCurrentDisplayMode@
 foreign import ccall unsafe "hs_bindgen_090c1ea46d46ae35"
   hs_bindgen_090c1ea46d46ae35_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetCurrentDisplayMode@
@@ -1501,7 +1539,8 @@
   :: SDL_DisplayID
   -> IO (PtrConst.PtrConst SDL_DisplayMode)
 hs_bindgen_090c1ea46d46ae35 =
-  BG.fromFFIType hs_bindgen_090c1ea46d46ae35_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_090c1ea46d46ae35_base (BG.toFFIType x0))
 
 -- | Get information about the current display mode.
 --
@@ -1529,14 +1568,15 @@
 foreign import ccall unsafe "hs_bindgen_c4ca0071d547fe4e"
   hs_bindgen_c4ca0071d547fe4e_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetDisplayForPoint@
 hs_bindgen_c4ca0071d547fe4e
   :: PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Point
   -> IO SDL_DisplayID
 hs_bindgen_c4ca0071d547fe4e =
-  BG.fromFFIType hs_bindgen_c4ca0071d547fe4e_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c4ca0071d547fe4e_base (BG.toFFIType x0))
 
 -- | Get the display containing a point.
 --
@@ -1561,14 +1601,15 @@
 foreign import ccall unsafe "hs_bindgen_53772eb32f15250a"
   hs_bindgen_53772eb32f15250a_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetDisplayForRect@
 hs_bindgen_53772eb32f15250a
   :: PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
   -> IO SDL_DisplayID
 hs_bindgen_53772eb32f15250a =
-  BG.fromFFIType hs_bindgen_53772eb32f15250a_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_53772eb32f15250a_base (BG.toFFIType x0))
 
 -- | Get the display primarily containing a rect.
 --
@@ -1593,14 +1634,15 @@
 foreign import ccall unsafe "hs_bindgen_b5e8747042982325"
   hs_bindgen_b5e8747042982325_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetDisplayForWindow@
 hs_bindgen_b5e8747042982325
   :: BG.Ptr SDL_Window
   -> IO SDL_DisplayID
 hs_bindgen_b5e8747042982325 =
-  BG.fromFFIType hs_bindgen_b5e8747042982325_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_b5e8747042982325_base (BG.toFFIType x0))
 
 -- | Get the display associated with a window.
 --
@@ -1625,14 +1667,15 @@
 foreign import ccall unsafe "hs_bindgen_37fb7f14d8ab4245"
   hs_bindgen_37fb7f14d8ab4245_base
     :: BG.Ptr BG.Void
-    -> IO Float
+    -> IO BG.CFloat
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetWindowPixelDensity@
 hs_bindgen_37fb7f14d8ab4245
   :: BG.Ptr SDL_Window
   -> IO BG.CFloat
 hs_bindgen_37fb7f14d8ab4245 =
-  BG.fromFFIType hs_bindgen_37fb7f14d8ab4245_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_37fb7f14d8ab4245_base (BG.toFFIType x0))
 
 -- | Get the pixel density of a window.
 --
@@ -1660,14 +1703,15 @@
 foreign import ccall unsafe "hs_bindgen_f51393abfbd8d0f1"
   hs_bindgen_f51393abfbd8d0f1_base
     :: BG.Ptr BG.Void
-    -> IO Float
+    -> IO BG.CFloat
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetWindowDisplayScale@
 hs_bindgen_f51393abfbd8d0f1
   :: BG.Ptr SDL_Window
   -> IO BG.CFloat
 hs_bindgen_f51393abfbd8d0f1 =
-  BG.fromFFIType hs_bindgen_f51393abfbd8d0f1_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_f51393abfbd8d0f1_base (BG.toFFIType x0))
 
 -- | Get the content display scale relative to a window\'s pixel size.
 --
@@ -1696,7 +1740,7 @@
   hs_bindgen_13b017b8b715b141_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_SetWindowFullscreenMode@
 hs_bindgen_13b017b8b715b141
@@ -1704,7 +1748,9 @@
   -> PtrConst.PtrConst SDL_DisplayMode
   -> IO BG.CBool
 hs_bindgen_13b017b8b715b141 =
-  BG.fromFFIType hs_bindgen_13b017b8b715b141_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_13b017b8b715b141_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the display mode to use when a window is visible and fullscreen.
 --
@@ -1747,7 +1793,8 @@
   :: BG.Ptr SDL_Window
   -> IO (PtrConst.PtrConst SDL_DisplayMode)
 hs_bindgen_3d833d32498da130 =
-  BG.fromFFIType hs_bindgen_3d833d32498da130_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3d833d32498da130_base (BG.toFFIType x0))
 
 -- | Query the display mode to use when a window is visible at fullscreen.
 --
@@ -1782,7 +1829,9 @@
   -> BG.Ptr HsBindgen.Runtime.LibC.CSize
   -> IO (BG.Ptr BG.Void)
 hs_bindgen_c8fc95a50e802a12 =
-  BG.fromFFIType hs_bindgen_c8fc95a50e802a12_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_c8fc95a50e802a12_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the raw ICC profile data for the screen the window is currently on.
 --
@@ -1809,14 +1858,15 @@
 foreign import ccall unsafe "hs_bindgen_90e43d0f5b0c1797"
   hs_bindgen_90e43d0f5b0c1797_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.Support.CUInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetWindowPixelFormat@
 hs_bindgen_90e43d0f5b0c1797
   :: BG.Ptr SDL_Window
   -> IO SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
 hs_bindgen_90e43d0f5b0c1797 =
-  BG.fromFFIType hs_bindgen_90e43d0f5b0c1797_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_90e43d0f5b0c1797_base (BG.toFFIType x0))
 
 -- | Get the pixel format associated with the window.
 --
@@ -1847,7 +1897,8 @@
   :: BG.Ptr BG.CInt
   -> IO (BG.Ptr (BG.Ptr SDL_Window))
 hs_bindgen_37819cd7ef5a283c =
-  BG.fromFFIType hs_bindgen_37819cd7ef5a283c_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_37819cd7ef5a283c_base (BG.toFFIType x0))
 
 -- | Get a list of valid windows.
 --
@@ -1870,9 +1921,9 @@
 foreign import ccall unsafe "hs_bindgen_c104a86e94d91733"
   hs_bindgen_c104a86e94d91733_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> BG.Word64
+    -> BG.CInt
+    -> BG.CInt
+    -> HsBindgen.Runtime.LibC.Word64
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_CreateWindow@
@@ -1883,7 +1934,18 @@
   -> SDL_WindowFlags
   -> IO (BG.Ptr SDL_Window)
 hs_bindgen_c104a86e94d91733 =
-  BG.fromFFIType hs_bindgen_c104a86e94d91733_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_c104a86e94d91733_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Create a window with the specified dimensions and flags.
 --
@@ -1986,11 +2048,11 @@
 foreign import ccall unsafe "hs_bindgen_f8de823bce00580d"
   hs_bindgen_f8de823bce00580d_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> BG.Int32
-    -> BG.Int32
-    -> BG.Word64
+    -> BG.CInt
+    -> BG.CInt
+    -> BG.CInt
+    -> BG.CInt
+    -> HsBindgen.Runtime.LibC.Word64
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_CreatePopupWindow@
@@ -2003,7 +2065,22 @@
   -> SDL_WindowFlags
   -> IO (BG.Ptr SDL_Window)
 hs_bindgen_f8de823bce00580d =
-  BG.fromFFIType hs_bindgen_f8de823bce00580d_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            \x5 ->
+              fmap
+                BG.fromFFIType
+                ( hs_bindgen_f8de823bce00580d_base
+                    (BG.toFFIType x0)
+                    (BG.toFFIType x1)
+                    (BG.toFFIType x2)
+                    (BG.toFFIType x3)
+                    (BG.toFFIType x4)
+                    (BG.toFFIType x5)
+                )
 
 -- | Create a child popup window of the specified parent window.
 --
@@ -2083,7 +2160,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_CreateWindowWithProperties@
 foreign import ccall unsafe "hs_bindgen_397cd16b0ee4c2c1"
   hs_bindgen_397cd16b0ee4c2c1_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_CreateWindowWithProperties@
@@ -2091,7 +2168,8 @@
   :: SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
   -> IO (BG.Ptr SDL_Window)
 hs_bindgen_397cd16b0ee4c2c1 =
-  BG.fromFFIType hs_bindgen_397cd16b0ee4c2c1_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_397cd16b0ee4c2c1_base (BG.toFFIType x0))
 
 -- | Create a window with the specified properties.
 --
@@ -2223,14 +2301,15 @@
 foreign import ccall unsafe "hs_bindgen_4cd31f508a882913"
   hs_bindgen_4cd31f508a882913_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetWindowID@
 hs_bindgen_4cd31f508a882913
   :: BG.Ptr SDL_Window
   -> IO SDL_WindowID
 hs_bindgen_4cd31f508a882913 =
-  BG.fromFFIType hs_bindgen_4cd31f508a882913_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_4cd31f508a882913_base (BG.toFFIType x0))
 
 -- | Get the numeric ID of a window.
 --
@@ -2256,7 +2335,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetWindowFromID@
 foreign import ccall unsafe "hs_bindgen_9a86d1e90d48506e"
   hs_bindgen_9a86d1e90d48506e_base
-    :: BG.Word32
+    :: HsBindgen.Runtime.LibC.Word32
     -> IO (BG.Ptr BG.Void)
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetWindowFromID@
@@ -2264,7 +2343,8 @@
   :: SDL_WindowID
   -> IO (BG.Ptr SDL_Window)
 hs_bindgen_9a86d1e90d48506e =
-  BG.fromFFIType hs_bindgen_9a86d1e90d48506e_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_9a86d1e90d48506e_base (BG.toFFIType x0))
 
 -- | Get a window from a stored ID.
 --
@@ -2298,7 +2378,8 @@
   :: BG.Ptr SDL_Window
   -> IO (BG.Ptr SDL_Window)
 hs_bindgen_de155dd6392c018c =
-  BG.fromFFIType hs_bindgen_de155dd6392c018c_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_de155dd6392c018c_base (BG.toFFIType x0))
 
 -- | Get parent of a window.
 --
@@ -2323,14 +2404,15 @@
 foreign import ccall unsafe "hs_bindgen_354b9a2ce76470de"
   hs_bindgen_354b9a2ce76470de_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word32
+    -> IO HsBindgen.Runtime.LibC.Word32
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetWindowProperties@
 hs_bindgen_354b9a2ce76470de
   :: BG.Ptr SDL_Window
   -> IO SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
 hs_bindgen_354b9a2ce76470de =
-  BG.fromFFIType hs_bindgen_354b9a2ce76470de_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_354b9a2ce76470de_base (BG.toFFIType x0))
 
 -- | Get the properties associated with a window.
 --
@@ -2451,14 +2533,15 @@
 foreign import ccall unsafe "hs_bindgen_c7a6fd0b395c141b"
   hs_bindgen_c7a6fd0b395c141b_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word64
+    -> IO HsBindgen.Runtime.LibC.Word64
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetWindowFlags@
 hs_bindgen_c7a6fd0b395c141b
   :: BG.Ptr SDL_Window
   -> IO SDL_WindowFlags
 hs_bindgen_c7a6fd0b395c141b =
-  BG.fromFFIType hs_bindgen_c7a6fd0b395c141b_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_c7a6fd0b395c141b_base (BG.toFFIType x0))
 
 -- | Get the window flags.
 --
@@ -2484,7 +2567,7 @@
   hs_bindgen_fb8782aef9af1e58_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_SetWindowTitle@
 hs_bindgen_fb8782aef9af1e58
@@ -2492,7 +2575,9 @@
   -> PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_fb8782aef9af1e58 =
-  BG.fromFFIType hs_bindgen_fb8782aef9af1e58_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_fb8782aef9af1e58_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the title of a window.
 --
@@ -2530,7 +2615,8 @@
   :: BG.Ptr SDL_Window
   -> IO (PtrConst.PtrConst BG.CChar)
 hs_bindgen_b46de7aa720113f3 =
-  BG.fromFFIType hs_bindgen_b46de7aa720113f3_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_b46de7aa720113f3_base (BG.toFFIType x0))
 
 -- | Get the title of a window.
 --
@@ -2556,7 +2642,7 @@
   hs_bindgen_dcfd86c373d614de_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_SetWindowIcon@
 hs_bindgen_dcfd86c373d614de
@@ -2564,7 +2650,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface
   -> IO BG.CBool
 hs_bindgen_dcfd86c373d614de =
-  BG.fromFFIType hs_bindgen_dcfd86c373d614de_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_dcfd86c373d614de_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the icon for a window.
 --
@@ -2595,9 +2683,9 @@
 foreign import ccall unsafe "hs_bindgen_2778939bf2a03cc0"
   hs_bindgen_2778939bf2a03cc0_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_SetWindowPosition@
 hs_bindgen_2778939bf2a03cc0
@@ -2606,7 +2694,12 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_2778939bf2a03cc0 =
-  BG.fromFFIType hs_bindgen_2778939bf2a03cc0_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_2778939bf2a03cc0_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Request that the window\'s position be set.
 --
@@ -2649,7 +2742,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetWindowPosition@
 hs_bindgen_0dd4bcea36c16a31
@@ -2658,7 +2751,12 @@
   -> BG.Ptr BG.CInt
   -> IO BG.CBool
 hs_bindgen_0dd4bcea36c16a31 =
-  BG.fromFFIType hs_bindgen_0dd4bcea36c16a31_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_0dd4bcea36c16a31_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get the position of a window.
 --
@@ -2695,9 +2793,9 @@
 foreign import ccall unsafe "hs_bindgen_057ef11fd12bbeb6"
   hs_bindgen_057ef11fd12bbeb6_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_SetWindowSize@
 hs_bindgen_057ef11fd12bbeb6
@@ -2706,7 +2804,12 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_057ef11fd12bbeb6 =
-  BG.fromFFIType hs_bindgen_057ef11fd12bbeb6_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_057ef11fd12bbeb6_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Request that the size of a window\'s client area be set.
 --
@@ -2749,7 +2852,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetWindowSize@
 hs_bindgen_f812f66416921726
@@ -2758,7 +2861,12 @@
   -> BG.Ptr BG.CInt
   -> IO BG.CBool
 hs_bindgen_f812f66416921726 =
-  BG.fromFFIType hs_bindgen_f812f66416921726_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_f812f66416921726_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get the size of a window\'s client area.
 --
@@ -2794,7 +2902,7 @@
   hs_bindgen_212ea87435c7ebb9_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetWindowSafeArea@
 hs_bindgen_212ea87435c7ebb9
@@ -2802,7 +2910,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Rect.SDL_Rect
   -> IO BG.CBool
 hs_bindgen_212ea87435c7ebb9 =
-  BG.fromFFIType hs_bindgen_212ea87435c7ebb9_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_212ea87435c7ebb9_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the safe area for this window.
 --
@@ -2831,9 +2941,9 @@
 foreign import ccall unsafe "hs_bindgen_a97676f9d3d5cacb"
   hs_bindgen_a97676f9d3d5cacb_base
     :: BG.Ptr BG.Void
-    -> Float
-    -> Float
-    -> IO BG.Word8
+    -> BG.CFloat
+    -> BG.CFloat
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_SetWindowAspectRatio@
 hs_bindgen_a97676f9d3d5cacb
@@ -2842,7 +2952,12 @@
   -> BG.CFloat
   -> IO BG.CBool
 hs_bindgen_a97676f9d3d5cacb =
-  BG.fromFFIType hs_bindgen_a97676f9d3d5cacb_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_a97676f9d3d5cacb_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Request that the aspect ratio of a window\'s client area be set.
 --
@@ -2886,7 +3001,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetWindowAspectRatio@
 hs_bindgen_c4fcb6be51b89962
@@ -2895,7 +3010,12 @@
   -> BG.Ptr BG.CFloat
   -> IO BG.CBool
 hs_bindgen_c4fcb6be51b89962 =
-  BG.fromFFIType hs_bindgen_c4fcb6be51b89962_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_c4fcb6be51b89962_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get the aspect ratio of a window\'s client area.
 --
@@ -2933,7 +3053,7 @@
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetWindowBordersSize@
 hs_bindgen_fe9fa856ca0ad8ba
@@ -2944,7 +3064,20 @@
   -> BG.Ptr BG.CInt
   -> IO BG.CBool
 hs_bindgen_fe9fa856ca0ad8ba =
-  BG.fromFFIType hs_bindgen_fe9fa856ca0ad8ba_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          \x4 ->
+            fmap
+              BG.fromFFIType
+              ( hs_bindgen_fe9fa856ca0ad8ba_base
+                  (BG.toFFIType x0)
+                  (BG.toFFIType x1)
+                  (BG.toFFIType x2)
+                  (BG.toFFIType x3)
+                  (BG.toFFIType x4)
+              )
 
 -- | Get the size of a window\'s borders (decorations) around the client area.
 --
@@ -2994,7 +3127,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetWindowSizeInPixels@
 hs_bindgen_0bdc369c35af7209
@@ -3003,7 +3136,12 @@
   -> BG.Ptr BG.CInt
   -> IO BG.CBool
 hs_bindgen_0bdc369c35af7209 =
-  BG.fromFFIType hs_bindgen_0bdc369c35af7209_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_0bdc369c35af7209_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get the size of a window\'s client area, in pixels.
 --
@@ -3037,9 +3175,9 @@
 foreign import ccall unsafe "hs_bindgen_4a83221f1efbc09f"
   hs_bindgen_4a83221f1efbc09f_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_SetWindowMinimumSize@
 hs_bindgen_4a83221f1efbc09f
@@ -3048,7 +3186,12 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_4a83221f1efbc09f =
-  BG.fromFFIType hs_bindgen_4a83221f1efbc09f_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_4a83221f1efbc09f_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set the minimum size of a window\'s client area.
 --
@@ -3084,7 +3227,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetWindowMinimumSize@
 hs_bindgen_9492964d5df1add3
@@ -3093,7 +3236,12 @@
   -> BG.Ptr BG.CInt
   -> IO BG.CBool
 hs_bindgen_9492964d5df1add3 =
-  BG.fromFFIType hs_bindgen_9492964d5df1add3_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_9492964d5df1add3_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get the minimum size of a window\'s client area.
 --
@@ -3127,9 +3275,9 @@
 foreign import ccall unsafe "hs_bindgen_70ec3985e428bdd2"
   hs_bindgen_70ec3985e428bdd2_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_SetWindowMaximumSize@
 hs_bindgen_70ec3985e428bdd2
@@ -3138,7 +3286,12 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_70ec3985e428bdd2 =
-  BG.fromFFIType hs_bindgen_70ec3985e428bdd2_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_70ec3985e428bdd2_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Set the maximum size of a window\'s client area.
 --
@@ -3174,7 +3327,7 @@
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetWindowMaximumSize@
 hs_bindgen_948d13442e6065ab
@@ -3183,7 +3336,12 @@
   -> BG.Ptr BG.CInt
   -> IO BG.CBool
 hs_bindgen_948d13442e6065ab =
-  BG.fromFFIType hs_bindgen_948d13442e6065ab_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_948d13442e6065ab_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Get the maximum size of a window\'s client area.
 --
@@ -3217,8 +3375,8 @@
 foreign import ccall unsafe "hs_bindgen_6289af3cb8f93407"
   hs_bindgen_6289af3cb8f93407_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_SetWindowBordered@
 hs_bindgen_6289af3cb8f93407
@@ -3226,7 +3384,9 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_6289af3cb8f93407 =
-  BG.fromFFIType hs_bindgen_6289af3cb8f93407_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_6289af3cb8f93407_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the border state of a window.
 --
@@ -3259,8 +3419,8 @@
 foreign import ccall unsafe "hs_bindgen_46aff2e1cb31d53c"
   hs_bindgen_46aff2e1cb31d53c_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_SetWindowResizable@
 hs_bindgen_46aff2e1cb31d53c
@@ -3268,7 +3428,9 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_46aff2e1cb31d53c =
-  BG.fromFFIType hs_bindgen_46aff2e1cb31d53c_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_46aff2e1cb31d53c_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the user-resizable state of a window.
 --
@@ -3301,8 +3463,8 @@
 foreign import ccall unsafe "hs_bindgen_745fd81846537dd7"
   hs_bindgen_745fd81846537dd7_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_SetWindowAlwaysOnTop@
 hs_bindgen_745fd81846537dd7
@@ -3310,7 +3472,9 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_745fd81846537dd7 =
-  BG.fromFFIType hs_bindgen_745fd81846537dd7_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_745fd81846537dd7_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the window to always be above the others.
 --
@@ -3342,8 +3506,8 @@
 foreign import ccall unsafe "hs_bindgen_51036b434b8a9d9a"
   hs_bindgen_51036b434b8a9d9a_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_SetWindowFillDocument@
 hs_bindgen_51036b434b8a9d9a
@@ -3351,7 +3515,9 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_51036b434b8a9d9a =
-  BG.fromFFIType hs_bindgen_51036b434b8a9d9a_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_51036b434b8a9d9a_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the window to fill the current document space (Emscripten only).
 --
@@ -3389,14 +3555,15 @@
 foreign import ccall unsafe "hs_bindgen_7fdf198ee1ca7f92"
   hs_bindgen_7fdf198ee1ca7f92_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_ShowWindow@
 hs_bindgen_7fdf198ee1ca7f92
   :: BG.Ptr SDL_Window
   -> IO BG.CBool
 hs_bindgen_7fdf198ee1ca7f92 =
-  BG.fromFFIType hs_bindgen_7fdf198ee1ca7f92_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_7fdf198ee1ca7f92_base (BG.toFFIType x0))
 
 -- | Show a window.
 --
@@ -3421,14 +3588,15 @@
 foreign import ccall unsafe "hs_bindgen_2764604bcb0dc3ca"
   hs_bindgen_2764604bcb0dc3ca_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_HideWindow@
 hs_bindgen_2764604bcb0dc3ca
   :: BG.Ptr SDL_Window
   -> IO BG.CBool
 hs_bindgen_2764604bcb0dc3ca =
-  BG.fromFFIType hs_bindgen_2764604bcb0dc3ca_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_2764604bcb0dc3ca_base (BG.toFFIType x0))
 
 -- | Hide a window.
 --
@@ -3453,14 +3621,15 @@
 foreign import ccall unsafe "hs_bindgen_655550628b940a03"
   hs_bindgen_655550628b940a03_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_RaiseWindow@
 hs_bindgen_655550628b940a03
   :: BG.Ptr SDL_Window
   -> IO BG.CBool
 hs_bindgen_655550628b940a03 =
-  BG.fromFFIType hs_bindgen_655550628b940a03_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_655550628b940a03_base (BG.toFFIType x0))
 
 -- | Request that a window be raised above other windows and gain the input focus.
 --
@@ -3485,14 +3654,15 @@
 foreign import ccall unsafe "hs_bindgen_080d71419d89f8ac"
   hs_bindgen_080d71419d89f8ac_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_MaximizeWindow@
 hs_bindgen_080d71419d89f8ac
   :: BG.Ptr SDL_Window
   -> IO BG.CBool
 hs_bindgen_080d71419d89f8ac =
-  BG.fromFFIType hs_bindgen_080d71419d89f8ac_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_080d71419d89f8ac_base (BG.toFFIType x0))
 
 -- | Request that the window be made as large as possible.
 --
@@ -3525,14 +3695,15 @@
 foreign import ccall unsafe "hs_bindgen_e1f35d0dbc3b4400"
   hs_bindgen_e1f35d0dbc3b4400_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_MinimizeWindow@
 hs_bindgen_e1f35d0dbc3b4400
   :: BG.Ptr SDL_Window
   -> IO BG.CBool
 hs_bindgen_e1f35d0dbc3b4400 =
-  BG.fromFFIType hs_bindgen_e1f35d0dbc3b4400_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_e1f35d0dbc3b4400_base (BG.toFFIType x0))
 
 -- | Request that the window be minimized to an iconic representation.
 --
@@ -3563,14 +3734,15 @@
 foreign import ccall unsafe "hs_bindgen_e090b304456b95d1"
   hs_bindgen_e090b304456b95d1_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_RestoreWindow@
 hs_bindgen_e090b304456b95d1
   :: BG.Ptr SDL_Window
   -> IO BG.CBool
 hs_bindgen_e090b304456b95d1 =
-  BG.fromFFIType hs_bindgen_e090b304456b95d1_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_e090b304456b95d1_base (BG.toFFIType x0))
 
 -- | Request that the size and position of a minimized or maximized window be restored.
 --
@@ -3601,8 +3773,8 @@
 foreign import ccall unsafe "hs_bindgen_b1dbd6c7bf42bc68"
   hs_bindgen_b1dbd6c7bf42bc68_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_SetWindowFullscreen@
 hs_bindgen_b1dbd6c7bf42bc68
@@ -3610,7 +3782,9 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_b1dbd6c7bf42bc68 =
-  BG.fromFFIType hs_bindgen_b1dbd6c7bf42bc68_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_b1dbd6c7bf42bc68_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Request that the window\'s fullscreen state be changed.
 --
@@ -3645,14 +3819,15 @@
 foreign import ccall unsafe "hs_bindgen_ce8bade87de24cec"
   hs_bindgen_ce8bade87de24cec_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_SyncWindow@
 hs_bindgen_ce8bade87de24cec
   :: BG.Ptr SDL_Window
   -> IO BG.CBool
 hs_bindgen_ce8bade87de24cec =
-  BG.fromFFIType hs_bindgen_ce8bade87de24cec_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_ce8bade87de24cec_base (BG.toFFIType x0))
 
 -- | Block until any pending window state is finalized.
 --
@@ -3681,14 +3856,15 @@
 foreign import ccall unsafe "hs_bindgen_60a31e841c25b5c2"
   hs_bindgen_60a31e841c25b5c2_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_WindowHasSurface@
 hs_bindgen_60a31e841c25b5c2
   :: BG.Ptr SDL_Window
   -> IO BG.CBool
 hs_bindgen_60a31e841c25b5c2 =
-  BG.fromFFIType hs_bindgen_60a31e841c25b5c2_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_60a31e841c25b5c2_base (BG.toFFIType x0))
 
 -- | Return whether the window has a surface associated with it.
 --
@@ -3720,7 +3896,8 @@
   :: BG.Ptr SDL_Window
   -> IO (BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface)
 hs_bindgen_b27ac903c03a4dfa =
-  BG.fromFFIType hs_bindgen_b27ac903c03a4dfa_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_b27ac903c03a4dfa_base (BG.toFFIType x0))
 
 -- | Get the SDL surface associated with the window.
 --
@@ -3753,8 +3930,8 @@
 foreign import ccall unsafe "hs_bindgen_507572e10b7f7b5d"
   hs_bindgen_507572e10b7f7b5d_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_SetWindowSurfaceVSync@
 hs_bindgen_507572e10b7f7b5d
@@ -3762,7 +3939,9 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_507572e10b7f7b5d =
-  BG.fromFFIType hs_bindgen_507572e10b7f7b5d_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_507572e10b7f7b5d_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Toggle VSync for the window surface.
 --
@@ -3797,7 +3976,7 @@
   hs_bindgen_b6f4ee5ffa664900_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetWindowSurfaceVSync@
 hs_bindgen_b6f4ee5ffa664900
@@ -3805,7 +3984,9 @@
   -> BG.Ptr BG.CInt
   -> IO BG.CBool
 hs_bindgen_b6f4ee5ffa664900 =
-  BG.fromFFIType hs_bindgen_b6f4ee5ffa664900_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_b6f4ee5ffa664900_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get VSync for the window surface.
 --
@@ -3835,14 +4016,15 @@
 foreign import ccall unsafe "hs_bindgen_0647ceba715b9468"
   hs_bindgen_0647ceba715b9468_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_UpdateWindowSurface@
 hs_bindgen_0647ceba715b9468
   :: BG.Ptr SDL_Window
   -> IO BG.CBool
 hs_bindgen_0647ceba715b9468 =
-  BG.fromFFIType hs_bindgen_0647ceba715b9468_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_0647ceba715b9468_base (BG.toFFIType x0))
 
 -- | Copy the window surface to the screen.
 --
@@ -3872,8 +4054,8 @@
   hs_bindgen_99ad341567ec7dd7_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_UpdateWindowSurfaceRects@
 hs_bindgen_99ad341567ec7dd7
@@ -3882,7 +4064,12 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_99ad341567ec7dd7 =
-  BG.fromFFIType hs_bindgen_99ad341567ec7dd7_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_99ad341567ec7dd7_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Copy areas of the window surface to the screen.
 --
@@ -3922,14 +4109,15 @@
 foreign import ccall unsafe "hs_bindgen_7c381c64250e8266"
   hs_bindgen_7c381c64250e8266_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_DestroyWindowSurface@
 hs_bindgen_7c381c64250e8266
   :: BG.Ptr SDL_Window
   -> IO BG.CBool
 hs_bindgen_7c381c64250e8266 =
-  BG.fromFFIType hs_bindgen_7c381c64250e8266_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_7c381c64250e8266_base (BG.toFFIType x0))
 
 -- | Destroy the surface associated with the window.
 --
@@ -3955,8 +4143,8 @@
 foreign import ccall unsafe "hs_bindgen_088757457073c51d"
   hs_bindgen_088757457073c51d_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_SetWindowKeyboardGrab@
 hs_bindgen_088757457073c51d
@@ -3964,7 +4152,9 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_088757457073c51d =
-  BG.fromFFIType hs_bindgen_088757457073c51d_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_088757457073c51d_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set a window\'s keyboard grab mode.
 --
@@ -4002,8 +4192,8 @@
 foreign import ccall unsafe "hs_bindgen_fcca3f67a0285f40"
   hs_bindgen_fcca3f67a0285f40_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_SetWindowMouseGrab@
 hs_bindgen_fcca3f67a0285f40
@@ -4011,7 +4201,9 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_fcca3f67a0285f40 =
-  BG.fromFFIType hs_bindgen_fcca3f67a0285f40_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_fcca3f67a0285f40_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set a window\'s mouse grab mode.
 --
@@ -4042,14 +4234,15 @@
 foreign import ccall unsafe "hs_bindgen_cda2cd2af79b5ca6"
   hs_bindgen_cda2cd2af79b5ca6_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetWindowKeyboardGrab@
 hs_bindgen_cda2cd2af79b5ca6
   :: BG.Ptr SDL_Window
   -> IO BG.CBool
 hs_bindgen_cda2cd2af79b5ca6 =
-  BG.fromFFIType hs_bindgen_cda2cd2af79b5ca6_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_cda2cd2af79b5ca6_base (BG.toFFIType x0))
 
 -- | Get a window\'s keyboard grab mode.
 --
@@ -4075,14 +4268,15 @@
 foreign import ccall unsafe "hs_bindgen_3d8a4df5806b21ff"
   hs_bindgen_3d8a4df5806b21ff_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetWindowMouseGrab@
 hs_bindgen_3d8a4df5806b21ff
   :: BG.Ptr SDL_Window
   -> IO BG.CBool
 hs_bindgen_3d8a4df5806b21ff =
-  BG.fromFFIType hs_bindgen_3d8a4df5806b21ff_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_3d8a4df5806b21ff_base (BG.toFFIType x0))
 
 -- | Get a window\'s mouse grab mode.
 --
@@ -4111,7 +4305,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetGrabbedWindow@
 hs_bindgen_63a195963286004a :: IO (BG.Ptr SDL_Window)
 hs_bindgen_63a195963286004a =
-  BG.fromFFIType hs_bindgen_63a195963286004a_base
+  fmap BG.fromFFIType hs_bindgen_63a195963286004a_base
 
 -- | Get the window that currently has an input grab enabled.
 --
@@ -4132,7 +4326,7 @@
   hs_bindgen_3da85ada2677f1fd_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_SetWindowMouseRect@
 hs_bindgen_3da85ada2677f1fd
@@ -4140,7 +4334,9 @@
   -> PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect
   -> IO BG.CBool
 hs_bindgen_3da85ada2677f1fd =
-  BG.fromFFIType hs_bindgen_3da85ada2677f1fd_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_3da85ada2677f1fd_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Confines the cursor to the specified area of a window.
 --
@@ -4178,7 +4374,8 @@
   :: BG.Ptr SDL_Window
   -> IO (PtrConst.PtrConst SDL3.Sys.Bindgen.Rect.SDL_Rect)
 hs_bindgen_45c2c94bf4760d8a =
-  BG.fromFFIType hs_bindgen_45c2c94bf4760d8a_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_45c2c94bf4760d8a_base (BG.toFFIType x0))
 
 -- | Get the mouse confinement rectangle of a window.
 --
@@ -4203,8 +4400,8 @@
 foreign import ccall unsafe "hs_bindgen_019c9148c0aa4e8f"
   hs_bindgen_019c9148c0aa4e8f_base
     :: BG.Ptr BG.Void
-    -> Float
-    -> IO BG.Word8
+    -> BG.CFloat
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_SetWindowOpacity@
 hs_bindgen_019c9148c0aa4e8f
@@ -4212,7 +4409,9 @@
   -> BG.CFloat
   -> IO BG.CBool
 hs_bindgen_019c9148c0aa4e8f =
-  BG.fromFFIType hs_bindgen_019c9148c0aa4e8f_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_019c9148c0aa4e8f_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the opacity for a window.
 --
@@ -4245,14 +4444,15 @@
 foreign import ccall unsafe "hs_bindgen_744325d9009c4077"
   hs_bindgen_744325d9009c4077_base
     :: BG.Ptr BG.Void
-    -> IO Float
+    -> IO BG.CFloat
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetWindowOpacity@
 hs_bindgen_744325d9009c4077
   :: BG.Ptr SDL_Window
   -> IO BG.CFloat
 hs_bindgen_744325d9009c4077 =
-  BG.fromFFIType hs_bindgen_744325d9009c4077_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_744325d9009c4077_base (BG.toFFIType x0))
 
 -- | Get the opacity of a window.
 --
@@ -4280,7 +4480,7 @@
   hs_bindgen_effc3e47de752f57_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_SetWindowParent@
 hs_bindgen_effc3e47de752f57
@@ -4288,7 +4488,9 @@
   -> BG.Ptr SDL_Window
   -> IO BG.CBool
 hs_bindgen_effc3e47de752f57 =
-  BG.fromFFIType hs_bindgen_effc3e47de752f57_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_effc3e47de752f57_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the window as a child of a parent window.
 --
@@ -4327,8 +4529,8 @@
 foreign import ccall unsafe "hs_bindgen_d48e7b0b38e32483"
   hs_bindgen_d48e7b0b38e32483_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_SetWindowModal@
 hs_bindgen_d48e7b0b38e32483
@@ -4336,7 +4538,9 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_d48e7b0b38e32483 =
-  BG.fromFFIType hs_bindgen_d48e7b0b38e32483_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_d48e7b0b38e32483_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Toggle the state of the window as modal.
 --
@@ -4367,8 +4571,8 @@
 foreign import ccall unsafe "hs_bindgen_45029d07ea1d3a4d"
   hs_bindgen_45029d07ea1d3a4d_base
     :: BG.Ptr BG.Void
-    -> BG.Word8
-    -> IO BG.Word8
+    -> BG.CBool
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_SetWindowFocusable@
 hs_bindgen_45029d07ea1d3a4d
@@ -4376,7 +4580,9 @@
   -> BG.CBool
   -> IO BG.CBool
 hs_bindgen_45029d07ea1d3a4d =
-  BG.fromFFIType hs_bindgen_45029d07ea1d3a4d_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_45029d07ea1d3a4d_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set whether the window may have input focus.
 --
@@ -4403,9 +4609,9 @@
 foreign import ccall unsafe "hs_bindgen_839b36668059a297"
   hs_bindgen_839b36668059a297_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_ShowWindowSystemMenu@
 hs_bindgen_839b36668059a297
@@ -4414,7 +4620,12 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_839b36668059a297 =
-  BG.fromFFIType hs_bindgen_839b36668059a297_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_839b36668059a297_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Display the system-level window menu.
 --
@@ -4452,7 +4663,7 @@
     :: BG.Ptr BG.Void
     -> BG.FunPtr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_SetWindowHitTest@
 hs_bindgen_b4659f0d8b06588e
@@ -4461,7 +4672,12 @@
   -> BG.Ptr BG.Void
   -> IO BG.CBool
 hs_bindgen_b4659f0d8b06588e =
-  BG.fromFFIType hs_bindgen_b4659f0d8b06588e_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_b4659f0d8b06588e_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Provide a callback that decides if a window region has special properties.
 --
@@ -4505,7 +4721,7 @@
   hs_bindgen_e671b0b9ca790520_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_SetWindowShape@
 hs_bindgen_e671b0b9ca790520
@@ -4513,7 +4729,9 @@
   -> BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface
   -> IO BG.CBool
 hs_bindgen_e671b0b9ca790520 =
-  BG.fromFFIType hs_bindgen_e671b0b9ca790520_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_e671b0b9ca790520_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set the shape of a transparent window.
 --
@@ -4546,8 +4764,8 @@
 foreign import ccall unsafe "hs_bindgen_631082dd3b92af79"
   hs_bindgen_631082dd3b92af79_base
     :: BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
+    -> BG.CUInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_FlashWindow@
 hs_bindgen_631082dd3b92af79
@@ -4555,7 +4773,9 @@
   -> SDL_FlashOperation
   -> IO BG.CBool
 hs_bindgen_631082dd3b92af79 =
-  BG.fromFFIType hs_bindgen_631082dd3b92af79_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_631082dd3b92af79_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Request a window to demand attention from the user.
 --
@@ -4582,8 +4802,8 @@
 foreign import ccall unsafe "hs_bindgen_24d52be2d578e3a6"
   hs_bindgen_24d52be2d578e3a6_base
     :: BG.Ptr BG.Void
-    -> BG.Int32
-    -> IO BG.Word8
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_SetWindowProgressState@
 hs_bindgen_24d52be2d578e3a6
@@ -4591,7 +4811,9 @@
   -> SDL_ProgressState
   -> IO BG.CBool
 hs_bindgen_24d52be2d578e3a6 =
-  BG.fromFFIType hs_bindgen_24d52be2d578e3a6_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_24d52be2d578e3a6_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Sets the state of the progress bar for the given window’s taskbar icon.
 --
@@ -4619,14 +4841,15 @@
 foreign import ccall unsafe "hs_bindgen_d7a642f9cea765c4"
   hs_bindgen_d7a642f9cea765c4_base
     :: BG.Ptr BG.Void
-    -> IO BG.Int32
+    -> IO BG.CInt
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetWindowProgressState@
 hs_bindgen_d7a642f9cea765c4
   :: BG.Ptr SDL_Window
   -> IO SDL_ProgressState
 hs_bindgen_d7a642f9cea765c4 =
-  BG.fromFFIType hs_bindgen_d7a642f9cea765c4_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d7a642f9cea765c4_base (BG.toFFIType x0))
 
 -- | Get the state of the progress bar for the given window’s taskbar icon.
 --
@@ -4650,8 +4873,8 @@
 foreign import ccall unsafe "hs_bindgen_0a7984bb3f923d56"
   hs_bindgen_0a7984bb3f923d56_base
     :: BG.Ptr BG.Void
-    -> Float
-    -> IO BG.Word8
+    -> BG.CFloat
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_SetWindowProgressValue@
 hs_bindgen_0a7984bb3f923d56
@@ -4659,7 +4882,9 @@
   -> BG.CFloat
   -> IO BG.CBool
 hs_bindgen_0a7984bb3f923d56 =
-  BG.fromFFIType hs_bindgen_0a7984bb3f923d56_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_0a7984bb3f923d56_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Sets the value of the progress bar for the given window’s taskbar icon.
 --
@@ -4687,14 +4912,15 @@
 foreign import ccall unsafe "hs_bindgen_936a487daf968843"
   hs_bindgen_936a487daf968843_base
     :: BG.Ptr BG.Void
-    -> IO Float
+    -> IO BG.CFloat
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GetWindowProgressValue@
 hs_bindgen_936a487daf968843
   :: BG.Ptr SDL_Window
   -> IO BG.CFloat
 hs_bindgen_936a487daf968843 =
-  BG.fromFFIType hs_bindgen_936a487daf968843_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_936a487daf968843_base (BG.toFFIType x0))
 
 -- | Get the value of the progress bar for the given window’s taskbar icon.
 --
@@ -4725,7 +4951,8 @@
   :: BG.Ptr SDL_Window
   -> IO ()
 hs_bindgen_c66377fe72053eef =
-  BG.fromFFIType hs_bindgen_c66377fe72053eef_base
+  \x0 ->
+    hs_bindgen_c66377fe72053eef_base (BG.toFFIType x0)
 
 -- | Destroy a window.
 --
@@ -4751,12 +4978,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_ScreenSaverEnabled@
 foreign import ccall unsafe "hs_bindgen_8d4460920f35fe23"
   hs_bindgen_8d4460920f35fe23_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_ScreenSaverEnabled@
 hs_bindgen_8d4460920f35fe23 :: IO BG.CBool
 hs_bindgen_8d4460920f35fe23 =
-  BG.fromFFIType hs_bindgen_8d4460920f35fe23_base
+  fmap BG.fromFFIType hs_bindgen_8d4460920f35fe23_base
 
 -- | Check whether the screensaver is currently enabled.
 --
@@ -4779,12 +5006,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_EnableScreenSaver@
 foreign import ccall unsafe "hs_bindgen_b0634b88ba5dac7b"
   hs_bindgen_b0634b88ba5dac7b_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_EnableScreenSaver@
 hs_bindgen_b0634b88ba5dac7b :: IO BG.CBool
 hs_bindgen_b0634b88ba5dac7b =
-  BG.fromFFIType hs_bindgen_b0634b88ba5dac7b_base
+  fmap BG.fromFFIType hs_bindgen_b0634b88ba5dac7b_base
 
 -- | Allow the screen to be blanked by a screen saver.
 --
@@ -4803,12 +5030,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_DisableScreenSaver@
 foreign import ccall unsafe "hs_bindgen_2a05f306113c76cb"
   hs_bindgen_2a05f306113c76cb_base
-    :: IO BG.Word8
+    :: IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_DisableScreenSaver@
 hs_bindgen_2a05f306113c76cb :: IO BG.CBool
 hs_bindgen_2a05f306113c76cb =
-  BG.fromFFIType hs_bindgen_2a05f306113c76cb_base
+  fmap BG.fromFFIType hs_bindgen_2a05f306113c76cb_base
 
 -- | Prevent the screen from being blanked by a screen saver.
 --
@@ -4832,14 +5059,15 @@
 foreign import ccall unsafe "hs_bindgen_80ecb7f912f6a101"
   hs_bindgen_80ecb7f912f6a101_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GL_LoadLibrary@
 hs_bindgen_80ecb7f912f6a101
   :: PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_80ecb7f912f6a101 =
-  BG.fromFFIType hs_bindgen_80ecb7f912f6a101_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_80ecb7f912f6a101_base (BG.toFFIType x0))
 
 -- | Dynamically load an OpenGL library.
 --
@@ -4868,14 +5096,15 @@
 foreign import ccall unsafe "hs_bindgen_45ec5c45b7aeecbc"
   hs_bindgen_45ec5c45b7aeecbc_base
     :: BG.Ptr BG.Void
-    -> IO (BG.FunPtr BG.Void)
+    -> IO HsBindgen.Runtime.Support.FunPtrVoid
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GL_GetProcAddress@
 hs_bindgen_45ec5c45b7aeecbc
   :: PtrConst.PtrConst BG.CChar
   -> IO SDL3.Sys.Bindgen.Stdinc.SDL_FunctionPointer
 hs_bindgen_45ec5c45b7aeecbc =
-  BG.fromFFIType hs_bindgen_45ec5c45b7aeecbc_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_45ec5c45b7aeecbc_base (BG.toFFIType x0))
 
 -- | Get an OpenGL function by name.
 --
@@ -4914,14 +5143,15 @@
 foreign import ccall unsafe "hs_bindgen_fecd43d56eba918e"
   hs_bindgen_fecd43d56eba918e_base
     :: BG.Ptr BG.Void
-    -> IO (BG.FunPtr BG.Void)
+    -> IO HsBindgen.Runtime.Support.FunPtrVoid
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_EGL_GetProcAddress@
 hs_bindgen_fecd43d56eba918e
   :: PtrConst.PtrConst BG.CChar
   -> IO SDL3.Sys.Bindgen.Stdinc.SDL_FunctionPointer
 hs_bindgen_fecd43d56eba918e =
-  BG.fromFFIType hs_bindgen_fecd43d56eba918e_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_fecd43d56eba918e_base (BG.toFFIType x0))
 
 -- | Get an EGL library function by name.
 --
@@ -4952,7 +5182,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GL_UnloadLibrary@
 hs_bindgen_86d08bc666c9f566 :: IO ()
 hs_bindgen_86d08bc666c9f566 =
-  BG.fromFFIType hs_bindgen_86d08bc666c9f566_base
+  hs_bindgen_86d08bc666c9f566_base
 
 -- | Unload the OpenGL library previously loaded by @SDL_GL_LoadLibrary()@.
 --
@@ -4970,14 +5200,15 @@
 foreign import ccall unsafe "hs_bindgen_8c89c426b6cd15de"
   hs_bindgen_8c89c426b6cd15de_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GL_ExtensionSupported@
 hs_bindgen_8c89c426b6cd15de
   :: PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_8c89c426b6cd15de =
-  BG.fromFFIType hs_bindgen_8c89c426b6cd15de_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_8c89c426b6cd15de_base (BG.toFFIType x0))
 
 -- | Check if an OpenGL extension is supported for the current context.
 --
@@ -5009,7 +5240,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GL_ResetAttributes@
 hs_bindgen_c0ef2cbb30166af5 :: IO ()
 hs_bindgen_c0ef2cbb30166af5 =
-  BG.fromFFIType hs_bindgen_c0ef2cbb30166af5_base
+  hs_bindgen_c0ef2cbb30166af5_base
 
 -- | Reset all previously set OpenGL context attributes to their default values.
 --
@@ -5026,9 +5257,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GL_SetAttribute@
 foreign import ccall unsafe "hs_bindgen_dfea3fa025830d75"
   hs_bindgen_dfea3fa025830d75_base
-    :: BG.Word32
-    -> BG.Int32
-    -> IO BG.Word8
+    :: BG.CUInt
+    -> BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GL_SetAttribute@
 hs_bindgen_dfea3fa025830d75
@@ -5036,7 +5267,9 @@
   -> BG.CInt
   -> IO BG.CBool
 hs_bindgen_dfea3fa025830d75 =
-  BG.fromFFIType hs_bindgen_dfea3fa025830d75_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_dfea3fa025830d75_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set an OpenGL window attribute before window creation.
 --
@@ -5066,9 +5299,9 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GL_GetAttribute@
 foreign import ccall unsafe "hs_bindgen_b4ec3aa42353470f"
   hs_bindgen_b4ec3aa42353470f_base
-    :: BG.Word32
+    :: BG.CUInt
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GL_GetAttribute@
 hs_bindgen_b4ec3aa42353470f
@@ -5076,7 +5309,9 @@
   -> BG.Ptr BG.CInt
   -> IO BG.CBool
 hs_bindgen_b4ec3aa42353470f =
-  BG.fromFFIType hs_bindgen_b4ec3aa42353470f_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_b4ec3aa42353470f_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Get the actual value for an attribute from the current context.
 --
@@ -5112,7 +5347,8 @@
   :: BG.Ptr SDL_Window
   -> IO SDL_GLContext
 hs_bindgen_02589eafe594e5ce =
-  BG.fromFFIType hs_bindgen_02589eafe594e5ce_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_02589eafe594e5ce_base (BG.toFFIType x0))
 
 -- | Create an OpenGL context for an OpenGL window, and make it current.
 --
@@ -5146,7 +5382,7 @@
   hs_bindgen_d986b780d1ccac33_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GL_MakeCurrent@
 hs_bindgen_d986b780d1ccac33
@@ -5154,7 +5390,9 @@
   -> SDL_GLContext
   -> IO BG.CBool
 hs_bindgen_d986b780d1ccac33 =
-  BG.fromFFIType hs_bindgen_d986b780d1ccac33_base
+  \x0 ->
+    \x1 ->
+      fmap BG.fromFFIType (hs_bindgen_d986b780d1ccac33_base (BG.toFFIType x0) (BG.toFFIType x1))
 
 -- | Set up an OpenGL context for rendering into an OpenGL window.
 --
@@ -5189,7 +5427,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GL_GetCurrentWindow@
 hs_bindgen_24a0284995e8a74e :: IO (BG.Ptr SDL_Window)
 hs_bindgen_24a0284995e8a74e =
-  BG.fromFFIType hs_bindgen_24a0284995e8a74e_base
+  fmap BG.fromFFIType hs_bindgen_24a0284995e8a74e_base
 
 -- | Get the currently active OpenGL window.
 --
@@ -5211,7 +5449,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GL_GetCurrentContext@
 hs_bindgen_cb9ceaede20b4208 :: IO SDL_GLContext
 hs_bindgen_cb9ceaede20b4208 =
-  BG.fromFFIType hs_bindgen_cb9ceaede20b4208_base
+  fmap BG.fromFFIType hs_bindgen_cb9ceaede20b4208_base
 
 -- | Get the currently active OpenGL context.
 --
@@ -5236,7 +5474,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_EGL_GetCurrentDisplay@
 hs_bindgen_709f1c4141e36bd4 :: IO SDL_EGLDisplay
 hs_bindgen_709f1c4141e36bd4 =
-  BG.fromFFIType hs_bindgen_709f1c4141e36bd4_base
+  fmap BG.fromFFIType hs_bindgen_709f1c4141e36bd4_base
 
 -- | Get the currently active EGL display.
 --
@@ -5259,7 +5497,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_EGL_GetCurrentConfig@
 hs_bindgen_1a495e63c24b9e1d :: IO SDL_EGLConfig
 hs_bindgen_1a495e63c24b9e1d =
-  BG.fromFFIType hs_bindgen_1a495e63c24b9e1d_base
+  fmap BG.fromFFIType hs_bindgen_1a495e63c24b9e1d_base
 
 -- | Get the currently active EGL config.
 --
@@ -5285,7 +5523,8 @@
   :: BG.Ptr SDL_Window
   -> IO SDL_EGLSurface
 hs_bindgen_2dc2976e346931c2 =
-  BG.fromFFIType hs_bindgen_2dc2976e346931c2_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_2dc2976e346931c2_base (BG.toFFIType x0))
 
 -- | Get the EGL surface associated with the window.
 --
@@ -5322,7 +5561,15 @@
   -> BG.Ptr BG.Void
   -> IO ()
 hs_bindgen_6f6c52b23bae7a50 =
-  BG.fromFFIType hs_bindgen_6f6c52b23bae7a50_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          hs_bindgen_6f6c52b23bae7a50_base
+            (BG.toFFIType x0)
+            (BG.toFFIType x1)
+            (BG.toFFIType x2)
+            (BG.toFFIType x3)
 
 -- | Sets the callbacks for defining custom EGLAttrib arrays for EGL initialization.
 --
@@ -5359,15 +5606,16 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GL_SetSwapInterval@
 foreign import ccall unsafe "hs_bindgen_9fcc7f15d61d9182"
   hs_bindgen_9fcc7f15d61d9182_base
-    :: BG.Int32
-    -> IO BG.Word8
+    :: BG.CInt
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GL_SetSwapInterval@
 hs_bindgen_9fcc7f15d61d9182
   :: BG.CInt
   -> IO BG.CBool
 hs_bindgen_9fcc7f15d61d9182 =
-  BG.fromFFIType hs_bindgen_9fcc7f15d61d9182_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_9fcc7f15d61d9182_base (BG.toFFIType x0))
 
 -- | Set the swap interval for the current OpenGL context.
 --
@@ -5398,14 +5646,15 @@
 foreign import ccall unsafe "hs_bindgen_d23bd762103b2805"
   hs_bindgen_d23bd762103b2805_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GL_GetSwapInterval@
 hs_bindgen_d23bd762103b2805
   :: BG.Ptr BG.CInt
   -> IO BG.CBool
 hs_bindgen_d23bd762103b2805 =
-  BG.fromFFIType hs_bindgen_d23bd762103b2805_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_d23bd762103b2805_base (BG.toFFIType x0))
 
 -- | Get the swap interval for the current OpenGL context.
 --
@@ -5432,14 +5681,15 @@
 foreign import ccall unsafe "hs_bindgen_0142b6de91fcc321"
   hs_bindgen_0142b6de91fcc321_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GL_SwapWindow@
 hs_bindgen_0142b6de91fcc321
   :: BG.Ptr SDL_Window
   -> IO BG.CBool
 hs_bindgen_0142b6de91fcc321 =
-  BG.fromFFIType hs_bindgen_0142b6de91fcc321_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_0142b6de91fcc321_base (BG.toFFIType x0))
 
 -- | Update a window with OpenGL rendering.
 --
@@ -5466,14 +5716,15 @@
 foreign import ccall unsafe "hs_bindgen_efe95fa2c1c2690c"
   hs_bindgen_efe95fa2c1c2690c_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Video_Unsafe_SDL_GL_DestroyContext@
 hs_bindgen_efe95fa2c1c2690c
   :: SDL_GLContext
   -> IO BG.CBool
 hs_bindgen_efe95fa2c1c2690c =
-  BG.fromFFIType hs_bindgen_efe95fa2c1c2690c_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_efe95fa2c1c2690c_base (BG.toFFIType x0))
 
 -- | Delete an OpenGL context.
 --
diff --git a/src/SDL3/Sys/Bindgen/Vulkan.hs b/src/SDL3/Sys/Bindgen/Vulkan.hs
--- a/src/SDL3/Sys/Bindgen/Vulkan.hs
+++ b/src/SDL3/Sys/Bindgen/Vulkan.hs
@@ -13,6 +13,7 @@
 {-# LANGUAGE TypeOperators #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 module SDL3.Sys.Bindgen.Vulkan (
   SDL3.Sys.Bindgen.Vulkan.VkInstance (..),
@@ -24,6 +25,8 @@
   SDL3.Sys.Bindgen.Vulkan.VkAllocationCallbacks,
 )
 where
+
+import Prelude (Eq, Ord, Show, type (~))
 
 import HsBindgen.Runtime.HasCField qualified as HasCField
 import HsBindgen.Runtime.Marshal qualified as Marshal
diff --git a/src/SDL3/Sys/Bindgen/Vulkan/FunPtr.hs b/src/SDL3/Sys/Bindgen/Vulkan/FunPtr.hs
--- a/src/SDL3/Sys/Bindgen/Vulkan/FunPtr.hs
+++ b/src/SDL3/Sys/Bindgen/Vulkan/FunPtr.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Vulkan.FunPtr (
@@ -13,6 +15,8 @@
 )
 where
 
+import Prelude (IO, fmap)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
@@ -22,7 +26,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_vulkan.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_vulkan.h>"
          , "/* sdl3bindgensys_SDL3.Sys.Bindgen.Vulkan_get_SDL_Vulkan_LoadLibrary */"
          , "__attribute__ ((const))"
          , "_Bool (*hs_bindgen_d0d596710f473c05 (void)) ("
@@ -94,7 +102,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Vulkan_get_SDL_Vulkan_LoadLibrary@
 hs_bindgen_d0d596710f473c05 :: IO (BG.FunPtr (PtrConst.PtrConst BG.CChar -> IO BG.CBool))
 hs_bindgen_d0d596710f473c05 =
-  BG.fromFFIType hs_bindgen_d0d596710f473c05_base
+  fmap BG.fromFFIType hs_bindgen_d0d596710f473c05_base
 
 {-# NOINLINE sDL_Vulkan_LoadLibrary #-}
 
@@ -135,7 +143,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Vulkan_get_SDL_Vulkan_GetVkGetInstanceProcAddr@
 hs_bindgen_e561af225e7863f2 :: IO (BG.FunPtr (IO SDL3.Sys.Bindgen.Stdinc.SDL_FunctionPointer))
 hs_bindgen_e561af225e7863f2 =
-  BG.fromFFIType hs_bindgen_e561af225e7863f2_base
+  fmap BG.fromFFIType hs_bindgen_e561af225e7863f2_base
 
 {-# NOINLINE sDL_Vulkan_GetVkGetInstanceProcAddr #-}
 
@@ -164,7 +172,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Vulkan_get_SDL_Vulkan_UnloadLibrary@
 hs_bindgen_8dbd3b301be26b64 :: IO (BG.FunPtr (IO ()))
 hs_bindgen_8dbd3b301be26b64 =
-  BG.fromFFIType hs_bindgen_8dbd3b301be26b64_base
+  fmap BG.fromFFIType hs_bindgen_8dbd3b301be26b64_base
 
 {-# NOINLINE sDL_Vulkan_UnloadLibrary #-}
 
@@ -197,7 +205,7 @@
            (BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO (PtrConst.PtrConst (PtrConst.PtrConst BG.CChar)))
        )
 hs_bindgen_86f751b3ecdfa51d =
-  BG.fromFFIType hs_bindgen_86f751b3ecdfa51d_base
+  fmap BG.fromFFIType hs_bindgen_86f751b3ecdfa51d_base
 
 {-# NOINLINE sDL_Vulkan_GetInstanceExtensions #-}
 
@@ -241,7 +249,7 @@
            )
        )
 hs_bindgen_8ae9a4cb1d4352ac =
-  BG.fromFFIType hs_bindgen_8ae9a4cb1d4352ac_base
+  fmap BG.fromFFIType hs_bindgen_8ae9a4cb1d4352ac_base
 
 {-# NOINLINE sDL_Vulkan_CreateSurface #-}
 
@@ -286,7 +294,7 @@
 hs_bindgen_5ea94b407895c233
   :: IO (BG.FunPtr (VkInstance -> VkSurfaceKHR -> PtrConst.PtrConst VkAllocationCallbacks -> IO ()))
 hs_bindgen_5ea94b407895c233 =
-  BG.fromFFIType hs_bindgen_5ea94b407895c233_base
+  fmap BG.fromFFIType hs_bindgen_5ea94b407895c233_base
 
 {-# NOINLINE sDL_Vulkan_DestroySurface #-}
 
@@ -323,7 +331,7 @@
 hs_bindgen_e61814e6ac761e26
   :: IO (BG.FunPtr (VkInstance -> VkPhysicalDevice -> SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO BG.CBool))
 hs_bindgen_e61814e6ac761e26 =
-  BG.fromFFIType hs_bindgen_e61814e6ac761e26_base
+  fmap BG.fromFFIType hs_bindgen_e61814e6ac761e26_base
 
 {-# NOINLINE sDL_Vulkan_GetPresentationSupport #-}
 
diff --git a/src/SDL3/Sys/Bindgen/Vulkan/Safe.hs b/src/SDL3/Sys/Bindgen/Vulkan/Safe.hs
--- a/src/SDL3/Sys/Bindgen/Vulkan/Safe.hs
+++ b/src/SDL3/Sys/Bindgen/Vulkan/Safe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Vulkan.Safe (
@@ -13,7 +15,11 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Stdinc qualified
@@ -22,7 +28,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_vulkan.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_vulkan.h>"
          , "_Bool hs_bindgen_ef9e83627c649a75 ("
          , "  char const *arg1"
          , ")"
@@ -76,14 +86,15 @@
 foreign import ccall safe "hs_bindgen_ef9e83627c649a75"
   hs_bindgen_ef9e83627c649a75_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Vulkan_Safe_SDL_Vulkan_LoadLibrary@
 hs_bindgen_ef9e83627c649a75
   :: PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_ef9e83627c649a75 =
-  BG.fromFFIType hs_bindgen_ef9e83627c649a75_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_ef9e83627c649a75_base (BG.toFFIType x0))
 
 -- | Dynamically load the Vulkan loader library.
 --
@@ -119,12 +130,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Vulkan_Safe_SDL_Vulkan_GetVkGetInstanceProcAddr@
 foreign import ccall safe "hs_bindgen_eda99f289265681d"
   hs_bindgen_eda99f289265681d_base
-    :: IO (BG.FunPtr BG.Void)
+    :: IO HsBindgen.Runtime.Support.FunPtrVoid
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Vulkan_Safe_SDL_Vulkan_GetVkGetInstanceProcAddr@
 hs_bindgen_eda99f289265681d :: IO SDL3.Sys.Bindgen.Stdinc.SDL_FunctionPointer
 hs_bindgen_eda99f289265681d =
-  BG.fromFFIType hs_bindgen_eda99f289265681d_base
+  fmap BG.fromFFIType hs_bindgen_eda99f289265681d_base
 
 -- | Get the address of the @vkGetInstanceProcAddr@ function.
 --
@@ -151,7 +162,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Vulkan_Safe_SDL_Vulkan_UnloadLibrary@
 hs_bindgen_ba0b6a1db50d1914 :: IO ()
 hs_bindgen_ba0b6a1db50d1914 =
-  BG.fromFFIType hs_bindgen_ba0b6a1db50d1914_base
+  hs_bindgen_ba0b6a1db50d1914_base
 
 -- | Unload the Vulkan library previously loaded by @SDL_Vulkan_LoadLibrary()@.
 --
@@ -181,7 +192,8 @@
   :: BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO (PtrConst.PtrConst (PtrConst.PtrConst BG.CChar))
 hs_bindgen_282c9f5ce4ea1600 =
-  BG.fromFFIType hs_bindgen_282c9f5ce4ea1600_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_282c9f5ce4ea1600_base (BG.toFFIType x0))
 
 -- | Get the Vulkan instance extensions needed for vkCreateInstance.
 --
@@ -214,7 +226,7 @@
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Vulkan_Safe_SDL_Vulkan_CreateSurface@
 hs_bindgen_6e90d5d762dab7a4
@@ -224,7 +236,18 @@
   -> BG.Ptr VkSurfaceKHR
   -> IO BG.CBool
 hs_bindgen_6e90d5d762dab7a4 =
-  BG.fromFFIType hs_bindgen_6e90d5d762dab7a4_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_6e90d5d762dab7a4_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Create a Vulkan rendering surface for a window.
 --
@@ -275,7 +298,10 @@
   -> PtrConst.PtrConst VkAllocationCallbacks
   -> IO ()
 hs_bindgen_584b3250cc77055d =
-  BG.fromFFIType hs_bindgen_584b3250cc77055d_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        hs_bindgen_584b3250cc77055d_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2)
 
 -- | Destroy the Vulkan rendering surface of a window.
 --
@@ -312,8 +338,8 @@
   hs_bindgen_861d49977f9c657e_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Vulkan_Safe_SDL_Vulkan_GetPresentationSupport@
 hs_bindgen_861d49977f9c657e
@@ -322,7 +348,12 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_861d49977f9c657e =
-  BG.fromFFIType hs_bindgen_861d49977f9c657e_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_861d49977f9c657e_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Query support for presentation via a given physical device and queue family.
 --
diff --git a/src/SDL3/Sys/Bindgen/Vulkan/Unsafe.hs b/src/SDL3/Sys/Bindgen/Vulkan/Unsafe.hs
--- a/src/SDL3/Sys/Bindgen/Vulkan/Unsafe.hs
+++ b/src/SDL3/Sys/Bindgen/Vulkan/Unsafe.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_HADDOCK prune #-}
 
 module SDL3.Sys.Bindgen.Vulkan.Unsafe (
@@ -13,7 +15,11 @@
 )
 where
 
+import Prelude (IO, fmap)
+
+import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified
 import HsBindgen.Runtime.Support qualified as BG
 import HsBindgen.Runtime.Support.CAPI qualified
 import SDL3.Sys.Bindgen.Stdinc qualified
@@ -22,7 +28,11 @@
 
 $( HsBindgen.Runtime.Support.CAPI.addCSource
      ( HsBindgen.Runtime.Support.CAPI.unlines
-         [ "#include <SDL3/SDL_vulkan.h>"
+         [ "#define SDL_MAIN_HANDLED"
+         , "#define SDL_SLOW_MEMCPY"
+         , "#define SDL_SLOW_MEMMOVE"
+         , "#define SDL_SLOW_MEMSET"
+         , "#include <SDL3/SDL_vulkan.h>"
          , "_Bool hs_bindgen_a109086f43a5b6e5 ("
          , "  char const *arg1"
          , ")"
@@ -76,14 +86,15 @@
 foreign import ccall unsafe "hs_bindgen_a109086f43a5b6e5"
   hs_bindgen_a109086f43a5b6e5_base
     :: BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Vulkan_Unsafe_SDL_Vulkan_LoadLibrary@
 hs_bindgen_a109086f43a5b6e5
   :: PtrConst.PtrConst BG.CChar
   -> IO BG.CBool
 hs_bindgen_a109086f43a5b6e5 =
-  BG.fromFFIType hs_bindgen_a109086f43a5b6e5_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_a109086f43a5b6e5_base (BG.toFFIType x0))
 
 -- | Dynamically load the Vulkan loader library.
 --
@@ -119,12 +130,12 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Vulkan_Unsafe_SDL_Vulkan_GetVkGetInstanceProcAddr@
 foreign import ccall unsafe "hs_bindgen_4a040ba0b3ef299e"
   hs_bindgen_4a040ba0b3ef299e_base
-    :: IO (BG.FunPtr BG.Void)
+    :: IO HsBindgen.Runtime.Support.FunPtrVoid
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Vulkan_Unsafe_SDL_Vulkan_GetVkGetInstanceProcAddr@
 hs_bindgen_4a040ba0b3ef299e :: IO SDL3.Sys.Bindgen.Stdinc.SDL_FunctionPointer
 hs_bindgen_4a040ba0b3ef299e =
-  BG.fromFFIType hs_bindgen_4a040ba0b3ef299e_base
+  fmap BG.fromFFIType hs_bindgen_4a040ba0b3ef299e_base
 
 -- | Get the address of the @vkGetInstanceProcAddr@ function.
 --
@@ -151,7 +162,7 @@
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Vulkan_Unsafe_SDL_Vulkan_UnloadLibrary@
 hs_bindgen_37af72574ddcbb1a :: IO ()
 hs_bindgen_37af72574ddcbb1a =
-  BG.fromFFIType hs_bindgen_37af72574ddcbb1a_base
+  hs_bindgen_37af72574ddcbb1a_base
 
 -- | Unload the Vulkan library previously loaded by @SDL_Vulkan_LoadLibrary()@.
 --
@@ -181,7 +192,8 @@
   :: BG.Ptr SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO (PtrConst.PtrConst (PtrConst.PtrConst BG.CChar))
 hs_bindgen_2aad81b39a87b1fa =
-  BG.fromFFIType hs_bindgen_2aad81b39a87b1fa_base
+  \x0 ->
+    fmap BG.fromFFIType (hs_bindgen_2aad81b39a87b1fa_base (BG.toFFIType x0))
 
 -- | Get the Vulkan instance extensions needed for vkCreateInstance.
 --
@@ -214,7 +226,7 @@
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> IO BG.Word8
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Vulkan_Unsafe_SDL_Vulkan_CreateSurface@
 hs_bindgen_32bf040c7a36881e
@@ -224,7 +236,18 @@
   -> BG.Ptr VkSurfaceKHR
   -> IO BG.CBool
 hs_bindgen_32bf040c7a36881e =
-  BG.fromFFIType hs_bindgen_32bf040c7a36881e_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        \x3 ->
+          fmap
+            BG.fromFFIType
+            ( hs_bindgen_32bf040c7a36881e_base
+                (BG.toFFIType x0)
+                (BG.toFFIType x1)
+                (BG.toFFIType x2)
+                (BG.toFFIType x3)
+            )
 
 -- | Create a Vulkan rendering surface for a window.
 --
@@ -275,7 +298,10 @@
   -> PtrConst.PtrConst VkAllocationCallbacks
   -> IO ()
 hs_bindgen_c7debc5633e16c49 =
-  BG.fromFFIType hs_bindgen_c7debc5633e16c49_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        hs_bindgen_c7debc5633e16c49_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2)
 
 -- | Destroy the Vulkan rendering surface of a window.
 --
@@ -312,8 +338,8 @@
   hs_bindgen_dfcebfd398bdf0a8_base
     :: BG.Ptr BG.Void
     -> BG.Ptr BG.Void
-    -> BG.Word32
-    -> IO BG.Word8
+    -> HsBindgen.Runtime.LibC.Word32
+    -> IO BG.CBool
 
 -- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Vulkan_Unsafe_SDL_Vulkan_GetPresentationSupport@
 hs_bindgen_dfcebfd398bdf0a8
@@ -322,7 +348,12 @@
   -> SDL3.Sys.Bindgen.Stdinc.Uint32
   -> IO BG.CBool
 hs_bindgen_dfcebfd398bdf0a8 =
-  BG.fromFFIType hs_bindgen_dfcebfd398bdf0a8_base
+  \x0 ->
+    \x1 ->
+      \x2 ->
+        fmap
+          BG.fromFFIType
+          (hs_bindgen_dfcebfd398bdf0a8_base (BG.toFFIType x0) (BG.toFFIType x1) (BG.toFFIType x2))
 
 -- | Query support for presentation via a given physical device and queue family.
 --
diff --git a/src/SDL3/Sys/Bits.hs b/src/SDL3/Sys/Bits.hs
--- a/src/SDL3/Sys/Bits.hs
+++ b/src/SDL3/Sys/Bits.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | Functions for fiddling with bits and bitmasks. Get the index of the most significant (set) bit in a 32-bit number.
 --
 --     This operation can also be stated as \"count leading zeroes\" and \"log base 2\".
@@ -27,6 +29,7 @@
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (Bool, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.LibC qualified
diff --git a/src/SDL3/Sys/Blendmode.hs b/src/SDL3/Sys/Blendmode.hs
--- a/src/SDL3/Sys/Blendmode.hs
+++ b/src/SDL3/Sys/Blendmode.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | Blend modes decide how two colors will mix together. There are both standard modes for basic needs and a means to create custom modes, dictating what sort of math to do on what color components. A set of blend modes used in drawing operations.
 --
@@ -33,6 +34,8 @@
   SDL3.Sys.Blendmode.composeCustomBlendModeSafe,
 )
 where
+
+import Prelude (IO)
 
 import SDL3.Sys.Bindgen.Blendmode
 import SDL3.Sys.Bindgen.Blendmode.Safe qualified as Safe
diff --git a/src/SDL3/Sys/Camera.hs b/src/SDL3/Sys/Camera.hs
--- a/src/SDL3/Sys/Camera.hs
+++ b/src/SDL3/Sys/Camera.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | Video capture for the SDL library.
 --
 --     This API lets apps read input from video sources, like webcams. Camera devices can be enumerated, queried, and opened. Once opened, it will provide SDL_Surface objects as new frames of video come in. These surfaces can be uploaded to an SDL_Texture or processed as pixels in memory.
@@ -63,6 +65,7 @@
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (Bool, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.LibC qualified
diff --git a/src/SDL3/Sys/Clipboard.hs b/src/SDL3/Sys/Clipboard.hs
--- a/src/SDL3/Sys/Clipboard.hs
+++ b/src/SDL3/Sys/Clipboard.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | SDL provides access to the system clipboard, both for reading information from other processes and publishing information of its own.
 --
 --     This is not just text! SDL apps can access and publish data by mimetype.
@@ -64,6 +66,7 @@
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (Bool, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.LibC qualified
diff --git a/src/SDL3/Sys/Cpuinfo.hs b/src/SDL3/Sys/Cpuinfo.hs
--- a/src/SDL3/Sys/Cpuinfo.hs
+++ b/src/SDL3/Sys/Cpuinfo.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | CPU feature detection for SDL.
 --
 --     These functions are largely concerned with reporting if the system has access to various SIMD instruction sets, but also has other important info to share, such as system RAM size and number of logical CPU cores.
@@ -59,6 +61,7 @@
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (Bool, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.LibC qualified
diff --git a/src/SDL3/Sys/Dialog.hs b/src/SDL3/Sys/Dialog.hs
--- a/src/SDL3/Sys/Dialog.hs
+++ b/src/SDL3/Sys/Dialog.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | File dialog support.
 --
 --     SDL offers file dialogs, to let users select files with native GUI interfaces. There are \"open\" dialogs, \"save\" dialogs, and folder selection dialogs. The app can control some details, such as filtering to specific files, or whether multiple files can be selected by the user.
@@ -29,6 +31,7 @@
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (Bool, IO)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.LibC qualified
diff --git a/src/SDL3/Sys/Dlopennote.hs b/src/SDL3/Sys/Dlopennote.hs
--- a/src/SDL3/Sys/Dlopennote.hs
+++ b/src/SDL3/Sys/Dlopennote.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | This header allows you to annotate your code so external tools know about dynamic shared library dependencies.
 --
 --     If you determine that your toolchain doesn\'t support dlopen notes, you can disable this feature by defining @SDL_DISABLE_DLOPEN_NOTES@. You can use this CMake snippet to check for support:
diff --git a/src/SDL3/Sys/Endian.hs b/src/SDL3/Sys/Endian.hs
--- a/src/SDL3/Sys/Endian.hs
+++ b/src/SDL3/Sys/Endian.hs
@@ -1,27 +1,48 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | Functions for reading and writing endian-specific values.
 --
 --     == FFI conventions
 --
 --     Unsuffixed aliases are __unsafe__ foreign imports; aliases suffixed @Safe@ are safe. Functions whose callbacks fire during the call export only the Safe alias (the genuine unsafe import stays reachable under @SDL3.Sys.Bindgen.Endian.Unsafe@); functions curated unsafe-only export only the unsuffixed one. Each alias\'s documentation records its flavor and rationale.
 --
+--     The C shims are functions this package defines in C over what the FFI cannot call directly (variadic functions, function-like macros), each named after what it wraps; the same flavor rules apply. Their raw imports live under "SDL3.Sys.Bindgen.EndianShims".
+--
 --     Full conventions: "SDL3.Sys".
 module SDL3.Sys.Endian (
   module SDL3.Sys.Bindgen.Endian,
 
   -- * Function aliases
   SDL3.Sys.Endian.swapFloat,
+
+  -- * C shims
+  SDL3.Sys.Endian.swap16,
+  SDL3.Sys.Endian.swap32,
+  SDL3.Sys.Endian.swap64,
+  SDL3.Sys.Endian.swap16LE,
+  SDL3.Sys.Endian.swap32LE,
+  SDL3.Sys.Endian.swap64LE,
+  SDL3.Sys.Endian.swapFloatLE,
+  SDL3.Sys.Endian.swap16BE,
+  SDL3.Sys.Endian.swap32BE,
+  SDL3.Sys.Endian.swap64BE,
+  SDL3.Sys.Endian.swapFloatBE,
 )
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (Float, IO, fmap)
 
 import HsBindgen.Runtime.LibC qualified
+import HsBindgen.Runtime.Support qualified as BG
 import SDL3.Sys.Bindgen.Endian
 import SDL3.Sys.Bindgen.Endian.Unsafe qualified as Unsafe
+import SDL3.Sys.Bindgen.EndianShims.Unsafe qualified as Unsafe
+import SDL3.Sys.Bindgen.Stdinc qualified
 
 -- | Byte-swap a floating point number.
 --
---     This will always byte-swap the value, whether it\'s currently in the native byteorder of the system or not. You should use SDL_SwapFloatLE or SDL_SwapFloatBE instead, in most cases.
+--     This will always byte-swap the value, whether it\'s currently in the native byteorder of the system or not. You should use 'swapFloatLE' or 'swapFloatBE' instead, in most cases.
 --
 --     Note that this is a forced-inline function in a header, and not a public API function available in the SDL library (which is to say, the code is embedded in the calling program and the linker and dynamic loader will not be able to find this function inside SDL itself).
 --
@@ -50,3 +71,333 @@
 swapFloat =
   \x00 ->
     fmap Coerce.coerce (Unsafe.sDL_SwapFloat (Coerce.coerce x00))
+
+-- | Byte-swap an unsigned 16-bit number.
+--
+--     The SDL_Swap16 macro as a function. It always byte-swaps the value, whatever the system\'s byte order; 'swap16LE' or 'swap16BE' are what you want in most cases.
+--
+--     [Returns]: @x@, with its bytes in the opposite endian order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_Swap16@.
+--                   The safe import is not exported
+--                   : pure bit manipulation on an immediate value; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_Swap16@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 38:26@
+swap16
+  :: BG.Word16
+  -- ^
+  --
+  --           [@x@]: the value to byte-swap.
+  -> IO BG.Word16
+swap16 =
+  \x00 ->
+    fmap Coerce.coerce (Unsafe.lithon_SDL_Swap16 (Coerce.coerce x00))
+
+-- | Byte-swap an unsigned 32-bit number.
+--
+--     The SDL_Swap32 macro as a function. It always byte-swaps the value, whatever the system\'s byte order; 'swap32LE' or 'swap32BE' are what you want in most cases.
+--
+--     [Returns]: @x@, with its bytes in the opposite endian order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_Swap32@.
+--                   The safe import is not exported
+--                   : pure bit manipulation on an immediate value; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_Swap32@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 57:26@
+swap32
+  :: BG.Word32
+  -- ^
+  --
+  --           [@x@]: the value to byte-swap.
+  -> IO BG.Word32
+swap32 =
+  \x00 ->
+    fmap Coerce.coerce (Unsafe.lithon_SDL_Swap32 (Coerce.coerce x00))
+
+-- | Byte-swap an unsigned 64-bit number.
+--
+--     The SDL_Swap64 macro as a function. It always byte-swaps the value, whatever the system\'s byte order; 'swap64LE' or 'swap64BE' are what you want in most cases.
+--
+--     [Returns]: @x@, with its bytes in the opposite endian order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_Swap64@.
+--                   The safe import is not exported
+--                   : pure bit manipulation on an immediate value; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_Swap64@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 76:26@
+swap64
+  :: BG.Word64
+  -- ^
+  --
+  --           [@x@]: the value to byte-swap.
+  -> IO BG.Word64
+swap64 =
+  \x00 ->
+    fmap Coerce.coerce (Unsafe.lithon_SDL_Swap64 (Coerce.coerce x00))
+
+-- | Swap a 16-bit value from littleendian to native byte order.
+--
+--     The SDL_Swap16LE macro as a function. If this is running on a littleendian system, @x@ is returned unchanged.
+--
+--     [Returns]: @x@ in native byte order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_Swap16LE@.
+--                   The safe import is not exported
+--                   : pure bit manipulation on an immediate value; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_Swap16LE@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 94:26@
+swap16LE
+  :: BG.Word16
+  -- ^
+  --
+  --           [@x@]: the value to swap, in littleendian byte order.
+  -> IO BG.Word16
+swap16LE =
+  \x00 ->
+    fmap Coerce.coerce (Unsafe.lithon_SDL_Swap16LE (Coerce.coerce x00))
+
+-- | Swap a 32-bit value from littleendian to native byte order.
+--
+--     The SDL_Swap32LE macro as a function. If this is running on a littleendian system, @x@ is returned unchanged.
+--
+--     [Returns]: @x@ in native byte order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_Swap32LE@.
+--                   The safe import is not exported
+--                   : pure bit manipulation on an immediate value; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_Swap32LE@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 112:26@
+swap32LE
+  :: BG.Word32
+  -- ^
+  --
+  --           [@x@]: the value to swap, in littleendian byte order.
+  -> IO BG.Word32
+swap32LE =
+  \x00 ->
+    fmap Coerce.coerce (Unsafe.lithon_SDL_Swap32LE (Coerce.coerce x00))
+
+-- | Swap a 64-bit value from littleendian to native byte order.
+--
+--     The SDL_Swap64LE macro as a function. If this is running on a littleendian system, @x@ is returned unchanged.
+--
+--     [Returns]: @x@ in native byte order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_Swap64LE@.
+--                   The safe import is not exported
+--                   : pure bit manipulation on an immediate value; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_Swap64LE@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 130:26@
+swap64LE
+  :: BG.Word64
+  -- ^
+  --
+  --           [@x@]: the value to swap, in littleendian byte order.
+  -> IO BG.Word64
+swap64LE =
+  \x00 ->
+    fmap Coerce.coerce (Unsafe.lithon_SDL_Swap64LE (Coerce.coerce x00))
+
+-- | Swap a floating point value from littleendian to native byte order.
+--
+--     The SDL_SwapFloatLE macro as a function. If this is running on a littleendian system, @x@ is returned unchanged.
+--
+--     [Returns]: @x@ in native byte order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_SwapFloatLE@.
+--                   The safe import is not exported
+--                   : pure bit manipulation on an immediate value; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_SwapFloatLE@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 148:25@
+swapFloatLE
+  :: Float
+  -- ^
+  --
+  --           [@x@]: the value to swap, in littleendian byte order.
+  -> IO Float
+swapFloatLE =
+  \x00 ->
+    fmap Coerce.coerce (Unsafe.lithon_SDL_SwapFloatLE (Coerce.coerce x00))
+
+-- | Swap a 16-bit value from bigendian to native byte order.
+--
+--     The SDL_Swap16BE macro as a function. If this is running on a bigendian system, @x@ is returned unchanged.
+--
+--     [Returns]: @x@ in native byte order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_Swap16BE@.
+--                   The safe import is not exported
+--                   : pure bit manipulation on an immediate value; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_Swap16BE@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 166:26@
+swap16BE
+  :: BG.Word16
+  -- ^
+  --
+  --           [@x@]: the value to swap, in bigendian byte order.
+  -> IO BG.Word16
+swap16BE =
+  \x00 ->
+    fmap Coerce.coerce (Unsafe.lithon_SDL_Swap16BE (Coerce.coerce x00))
+
+-- | Swap a 32-bit value from bigendian to native byte order.
+--
+--     The SDL_Swap32BE macro as a function. If this is running on a bigendian system, @x@ is returned unchanged.
+--
+--     [Returns]: @x@ in native byte order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_Swap32BE@.
+--                   The safe import is not exported
+--                   : pure bit manipulation on an immediate value; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_Swap32BE@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 184:26@
+swap32BE
+  :: BG.Word32
+  -- ^
+  --
+  --           [@x@]: the value to swap, in bigendian byte order.
+  -> IO BG.Word32
+swap32BE =
+  \x00 ->
+    fmap Coerce.coerce (Unsafe.lithon_SDL_Swap32BE (Coerce.coerce x00))
+
+-- | Swap a 64-bit value from bigendian to native byte order.
+--
+--     The SDL_Swap64BE macro as a function. If this is running on a bigendian system, @x@ is returned unchanged.
+--
+--     [Returns]: @x@ in native byte order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_Swap64BE@.
+--                   The safe import is not exported
+--                   : pure bit manipulation on an immediate value; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_Swap64BE@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 202:26@
+swap64BE
+  :: BG.Word64
+  -- ^
+  --
+  --           [@x@]: the value to swap, in bigendian byte order.
+  -> IO BG.Word64
+swap64BE =
+  \x00 ->
+    fmap Coerce.coerce (Unsafe.lithon_SDL_Swap64BE (Coerce.coerce x00))
+
+-- | Swap a floating point value from bigendian to native byte order.
+--
+--     The SDL_SwapFloatBE macro as a function. If this is running on a bigendian system, @x@ is returned unchanged.
+--
+--     [Returns]: @x@ in native byte order.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_SwapFloatBE@.
+--                   The safe import is not exported
+--                   : pure bit manipulation on an immediate value; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_SwapFloatBE@, defined at @sdl3-bindgen-sys\/SDL_endian_shims.h 220:25@
+swapFloatBE
+  :: Float
+  -- ^
+  --
+  --           [@x@]: the value to swap, in bigendian byte order.
+  -> IO Float
+swapFloatBE =
+  \x00 ->
+    fmap Coerce.coerce (Unsafe.lithon_SDL_SwapFloatBE (Coerce.coerce x00))
diff --git a/src/SDL3/Sys/Error.hs b/src/SDL3/Sys/Error.hs
--- a/src/SDL3/Sys/Error.hs
+++ b/src/SDL3/Sys/Error.hs
@@ -1,22 +1,34 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | Simple error message routines for SDL.
 --
 --     == FFI conventions
 --
 --     Unsuffixed aliases are __unsafe__ foreign imports; aliases suffixed @Safe@ are safe. Functions whose callbacks fire during the call export only the Safe alias (the genuine unsafe import stays reachable under @SDL3.Sys.Bindgen.Error.Unsafe@); functions curated unsafe-only export only the unsuffixed one. Each alias\'s documentation records its flavor and rationale.
 --
+--     The C shims are functions this package defines in C over what the FFI cannot call directly (variadic functions, function-like macros), each named after what it wraps; the same flavor rules apply. Their raw imports live under "SDL3.Sys.Bindgen.ErrorShims".
+--
 --     Full conventions: "SDL3.Sys".
 module SDL3.Sys.Error (
   -- * Function aliases
   SDL3.Sys.Error.outOfMemory,
   SDL3.Sys.Error.getError,
   SDL3.Sys.Error.clearError,
+
+  -- * C shims
+  SDL3.Sys.Error.setError,
+  SDL3.Sys.Error.unsupported,
+  SDL3.Sys.Error.invalidParamError,
 )
 where
 
+import Prelude (Bool, IO, fmap)
+
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import SDL3.Sys.Bindgen.Error.Unsafe qualified as Unsafe
+import SDL3.Sys.Bindgen.ErrorShims.Unsafe qualified as Unsafe
 
 -- | Set an error indicating that memory allocation failed.
 --
@@ -60,7 +72,7 @@
 --
 --     @since 3.2.0
 --
---     [See also]: 'clearError', @SDL_SetError@
+--     [See also]: 'clearError', @'setError'@
 --
 --     === __@sdl3-bindgen-sys@ notes__
 --
@@ -80,7 +92,7 @@
 --
 --     @since 3.2.0
 --
---     [See also]: 'getError', @SDL_SetError@
+--     [See also]: 'getError', @'setError'@
 --
 --     === __@sdl3-bindgen-sys@ notes__
 --
@@ -94,3 +106,95 @@
 --     [C declaration]: @SDL_ClearError@, defined at @SDL3\/SDL_error.h 172:34@
 clearError :: IO Bool
 clearError = fmap CBool.toBool Unsafe.sDL_ClearError
+
+-- | Set the SDL error message for the current thread.
+--
+--     A fixed-arity shim over the variadic SDL_SetError: @message@ becomes the error message verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     Calling this function will replace any previous error message that was set. It always returns false, since SDL frequently uses false to signify a failing result.
+--
+--     [Returns]: false.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'clearError', 'getError'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_SetError@.
+--                   The safe import is not exported
+--                   : formats into the thread-local error buffer; SDL_SetErrorV\'s log call is compiled out (\#if 0, SDL 3.2.0 through 3.4.16); cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_SetError@, defined at @sdl3-bindgen-sys\/SDL_error_shims.h 45:24@
+setError
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the error message, in UTF-8.
+  -> IO Bool
+setError =
+  \x00 ->
+    fmap CBool.toBool (Unsafe.lithon_SDL_SetError x00)
+
+-- | Report an unsupported operation with SDL\'s standard error message.
+--
+--     The SDL_Unsupported macro as a function: it sets the error message to \"That operation is not supported\".
+--
+--     [Returns]: false.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'setError'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_Unsupported@.
+--                   The safe import is not exported
+--                   : formats into the thread-local error buffer; SDL_SetErrorV\'s log call is compiled out (\#if 0, SDL 3.2.0 through 3.4.16); cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_Unsupported@, defined at @sdl3-bindgen-sys\/SDL_error_shims.h 64:24@
+unsupported :: IO Bool
+unsupported =
+  fmap CBool.toBool Unsafe.lithon_SDL_Unsupported
+
+-- | Report an invalid parameter with SDL\'s standard error message.
+--
+--     The SDL_InvalidParamError macro as a function: it sets the error message to \"Parameter \'name\' is invalid\", with the parameter\'s name in place of name.
+--
+--     [Returns]: false.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'setError'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_InvalidParamError@.
+--                   The safe import is not exported
+--                   : formats into the thread-local error buffer; SDL_SetErrorV\'s log call is compiled out (\#if 0, SDL 3.2.0 through 3.4.16); cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_InvalidParamError@, defined at @sdl3-bindgen-sys\/SDL_error_shims.h 84:24@
+invalidParamError
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@param@]: the name of the invalid parameter, in UTF-8.
+  -> IO Bool
+invalidParamError =
+  \x00 ->
+    fmap CBool.toBool (Unsafe.lithon_SDL_InvalidParamError x00)
diff --git a/src/SDL3/Sys/Events.hs b/src/SDL3/Sys/Events.hs
--- a/src/SDL3/Sys/Events.hs
+++ b/src/SDL3/Sys/Events.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | Event queue management.
 --
 --     It\'s extremely common often required that an app deal with SDL\'s event queue. Almost all useful information about interactions with the real world flow through here: the user interacting with the computer and app, hardware coming and going, the system changing in some way, etc.
@@ -66,6 +68,7 @@
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (Bool, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.LibC qualified
@@ -95,7 +98,7 @@
 --                   The safe flavor is 'pumpEventsSafe'
 --                   : may re-enter registered watchers\/filters\/hit tests.
 --
---     [C declaration]: @SDL_PumpEvents@, defined at @SDL3\/SDL_events.h 1101:34@
+--     [C declaration]: @SDL_PumpEvents@, defined at @SDL3\/SDL_events.h 1106:34@
 pumpEvents :: IO ()
 pumpEvents = Unsafe.sDL_PumpEvents
 
@@ -117,7 +120,7 @@
 --                   The unsafe flavor is 'pumpEvents'
 --                   : may re-enter registered watchers\/filters\/hit tests.
 --
---     [C declaration]: @SDL_PumpEvents@, defined at @SDL3\/SDL_events.h 1101:34@
+--     [C declaration]: @SDL_PumpEvents@, defined at @SDL3\/SDL_events.h 1106:34@
 pumpEventsSafe :: IO ()
 pumpEventsSafe = Safe.sDL_PumpEvents
 
@@ -150,7 +153,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_PeepEvents@, defined at @SDL3\/SDL_events.h 1159:33@
+--     [C declaration]: @SDL_PeepEvents@, defined at @SDL3\/SDL_events.h 1164:33@
 peepEvents
   :: BG.Ptr SDL_Event
   -- ^
@@ -212,7 +215,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_PeepEvents@, defined at @SDL3\/SDL_events.h 1159:33@
+--     [C declaration]: @SDL_PeepEvents@, defined at @SDL3\/SDL_events.h 1164:33@
 peepEventsSafe
   :: BG.Ptr SDL_Event
   -- ^
@@ -266,7 +269,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_HasEvent@, defined at @SDL3\/SDL_events.h 1178:34@
+--     [C declaration]: @SDL_HasEvent@, defined at @SDL3\/SDL_events.h 1183:34@
 hasEvent
   :: BG.Word32
   -- ^
@@ -298,7 +301,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_HasEvent@, defined at @SDL3\/SDL_events.h 1178:34@
+--     [C declaration]: @SDL_HasEvent@, defined at @SDL3\/SDL_events.h 1183:34@
 hasEventSafe
   :: BG.Word32
   -- ^
@@ -330,7 +333,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_HasEvents@, defined at @SDL3\/SDL_events.h 1199:34@
+--     [C declaration]: @SDL_HasEvents@, defined at @SDL3\/SDL_events.h 1204:34@
 hasEvents
   :: BG.Word32
   -- ^
@@ -367,7 +370,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_HasEvents@, defined at @SDL3\/SDL_events.h 1199:34@
+--     [C declaration]: @SDL_HasEvents@, defined at @SDL3\/SDL_events.h 1204:34@
 hasEventsSafe
   :: BG.Word32
   -- ^
@@ -408,7 +411,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_FlushEvent@, defined at @SDL3\/SDL_events.h 1227:34@
+--     [C declaration]: @SDL_FlushEvent@, defined at @SDL3\/SDL_events.h 1232:34@
 flushEvent
   :: BG.Word32
   -- ^
@@ -443,7 +446,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_FlushEvent@, defined at @SDL3\/SDL_events.h 1227:34@
+--     [C declaration]: @SDL_FlushEvent@, defined at @SDL3\/SDL_events.h 1232:34@
 flushEventSafe
   :: BG.Word32
   -- ^
@@ -476,7 +479,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_FlushEvents@, defined at @SDL3\/SDL_events.h 1254:34@
+--     [C declaration]: @SDL_FlushEvents@, defined at @SDL3\/SDL_events.h 1259:34@
 flushEvents
   :: BG.Word32
   -- ^
@@ -515,7 +518,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_FlushEvents@, defined at @SDL3\/SDL_events.h 1254:34@
+--     [C declaration]: @SDL_FlushEvents@, defined at @SDL3\/SDL_events.h 1259:34@
 flushEventsSafe
   :: BG.Word32
   -- ^
@@ -575,7 +578,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_PollEvent@, defined at @SDL3\/SDL_events.h 1305:34@
+--     [C declaration]: @SDL_PollEvent@, defined at @SDL3\/SDL_events.h 1310:34@
 pollEvent
   :: BG.Ptr SDL_Event
   -- ^
@@ -629,7 +632,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_PollEvent@, defined at @SDL3\/SDL_events.h 1305:34@
+--     [C declaration]: @SDL_PollEvent@, defined at @SDL3\/SDL_events.h 1310:34@
 pollEventSafe
   :: BG.Ptr SDL_Event
   -- ^
@@ -662,7 +665,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_WaitEvent@, defined at @SDL3\/SDL_events.h 1329:34@
+--     [C declaration]: @SDL_WaitEvent@, defined at @SDL3\/SDL_events.h 1334:34@
 waitEvent
   :: BG.Ptr SDL_Event
   -- ^
@@ -695,7 +698,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_WaitEvent@, defined at @SDL3\/SDL_events.h 1329:34@
+--     [C declaration]: @SDL_WaitEvent@, defined at @SDL3\/SDL_events.h 1334:34@
 waitEventSafe
   :: BG.Ptr SDL_Event
   -- ^
@@ -730,7 +733,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_WaitEventTimeout@, defined at @SDL3\/SDL_events.h 1359:34@
+--     [C declaration]: @SDL_WaitEventTimeout@, defined at @SDL3\/SDL_events.h 1364:34@
 waitEventTimeout
   :: BG.Ptr SDL_Event
   -- ^
@@ -771,7 +774,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_WaitEventTimeout@, defined at @SDL3\/SDL_events.h 1359:34@
+--     [C declaration]: @SDL_WaitEventTimeout@, defined at @SDL3\/SDL_events.h 1364:34@
 waitEventTimeoutSafe
   :: BG.Ptr SDL_Event
   -- ^
@@ -814,7 +817,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_PushEvent@, defined at @SDL3\/SDL_events.h 1393:34@
+--     [C declaration]: @SDL_PushEvent@, defined at @SDL3\/SDL_events.h 1398:34@
 pushEvent
   :: BG.Ptr SDL_Event
   -- ^
@@ -851,7 +854,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_PushEvent@, defined at @SDL3\/SDL_events.h 1393:34@
+--     [C declaration]: @SDL_PushEvent@, defined at @SDL3\/SDL_events.h 1398:34@
 pushEventSafe
   :: BG.Ptr SDL_Event
   -- ^
@@ -887,7 +890,7 @@
 --                   The safe flavor is 'setEventFilterSafe'
 --                   : registration; the filter runs from later event calls.
 --
---     [C declaration]: @SDL_SetEventFilter@, defined at @SDL3\/SDL_events.h 1458:34@
+--     [C declaration]: @SDL_SetEventFilter@, defined at @SDL3\/SDL_events.h 1463:34@
 setEventFilter
   :: SDL_EventFilter
   -- ^
@@ -926,7 +929,7 @@
 --                   The unsafe flavor is 'setEventFilter'
 --                   : registration; the filter runs from later event calls.
 --
---     [C declaration]: @SDL_SetEventFilter@, defined at @SDL3\/SDL_events.h 1458:34@
+--     [C declaration]: @SDL_SetEventFilter@, defined at @SDL3\/SDL_events.h 1463:34@
 setEventFilterSafe
   :: SDL_EventFilter
   -- ^
@@ -960,7 +963,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetEventFilter@, defined at @SDL3\/SDL_events.h 1477:34@
+--     [C declaration]: @SDL_GetEventFilter@, defined at @SDL3\/SDL_events.h 1482:34@
 getEventFilter
   :: BG.Ptr SDL_EventFilter
   -- ^
@@ -997,7 +1000,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetEventFilter@, defined at @SDL3\/SDL_events.h 1477:34@
+--     [C declaration]: @SDL_GetEventFilter@, defined at @SDL3\/SDL_events.h 1482:34@
 getEventFilterSafe
   :: BG.Ptr SDL_EventFilter
   -- ^
@@ -1040,7 +1043,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_AddEventWatch@, defined at @SDL3\/SDL_events.h 1509:34@
+--     [C declaration]: @SDL_AddEventWatch@, defined at @SDL3\/SDL_events.h 1514:34@
 addEventWatch
   :: SDL_EventFilter
   -- ^
@@ -1083,7 +1086,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_AddEventWatch@, defined at @SDL3\/SDL_events.h 1509:34@
+--     [C declaration]: @SDL_AddEventWatch@, defined at @SDL3\/SDL_events.h 1514:34@
 addEventWatchSafe
   :: SDL_EventFilter
   -- ^
@@ -1115,7 +1118,7 @@
 --                   The safe flavor is 'removeEventWatchSafe'
 --                   : deregistration only.
 --
---     [C declaration]: @SDL_RemoveEventWatch@, defined at @SDL3\/SDL_events.h 1526:34@
+--     [C declaration]: @SDL_RemoveEventWatch@, defined at @SDL3\/SDL_events.h 1531:34@
 removeEventWatch
   :: SDL_EventFilter
   -- ^
@@ -1144,7 +1147,7 @@
 --                   The unsafe flavor is 'removeEventWatch'
 --                   : deregistration only.
 --
---     [C declaration]: @SDL_RemoveEventWatch@, defined at @SDL3\/SDL_events.h 1526:34@
+--     [C declaration]: @SDL_RemoveEventWatch@, defined at @SDL3\/SDL_events.h 1531:34@
 removeEventWatchSafe
   :: SDL_EventFilter
   -- ^
@@ -1175,7 +1178,7 @@
 --                   If your callback is a non-Haskell function pointer that never
 -- re-enters the Haskell runtime, the unsafe import remains available as @SDL3.Sys.Bindgen.Events.Unsafe.sDL_FilterEvents@.
 --
---     [C declaration]: @SDL_FilterEvents@, defined at @SDL3\/SDL_events.h 1546:34@
+--     [C declaration]: @SDL_FilterEvents@, defined at @SDL3\/SDL_events.h 1551:34@
 filterEventsSafe
   :: SDL_EventFilter
   -- ^
@@ -1205,7 +1208,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_SetEventEnabled@, defined at @SDL3\/SDL_events.h 1560:34@
+--     [C declaration]: @SDL_SetEventEnabled@, defined at @SDL3\/SDL_events.h 1565:34@
 setEventEnabled
   :: BG.Word32
   -- ^
@@ -1238,7 +1241,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_SetEventEnabled@, defined at @SDL3\/SDL_events.h 1560:34@
+--     [C declaration]: @SDL_SetEventEnabled@, defined at @SDL3\/SDL_events.h 1565:34@
 setEventEnabledSafe
   :: BG.Word32
   -- ^
@@ -1273,7 +1276,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_EventEnabled@, defined at @SDL3\/SDL_events.h 1574:34@
+--     [C declaration]: @SDL_EventEnabled@, defined at @SDL3\/SDL_events.h 1579:34@
 eventEnabled
   :: BG.Word32
   -- ^
@@ -1303,7 +1306,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_EventEnabled@, defined at @SDL3\/SDL_events.h 1574:34@
+--     [C declaration]: @SDL_EventEnabled@, defined at @SDL3\/SDL_events.h 1579:34@
 eventEnabledSafe
   :: BG.Word32
   -- ^
@@ -1333,7 +1336,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_RegisterEvents@, defined at @SDL3\/SDL_events.h 1590:36@
+--     [C declaration]: @SDL_RegisterEvents@, defined at @SDL3\/SDL_events.h 1595:36@
 registerEvents
   :: BG.Int32
   -- ^
@@ -1363,7 +1366,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_RegisterEvents@, defined at @SDL3\/SDL_events.h 1590:36@
+--     [C declaration]: @SDL_RegisterEvents@, defined at @SDL3\/SDL_events.h 1595:36@
 registerEventsSafe
   :: BG.Int32
   -- ^
@@ -1390,7 +1393,7 @@
 --                   The safe flavor is 'getWindowFromEventSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetWindowFromEvent@, defined at @SDL3\/SDL_events.h 1606:42@
+--     [C declaration]: @SDL_GetWindowFromEvent@, defined at @SDL3\/SDL_events.h 1611:42@
 getWindowFromEvent
   :: PtrConst.PtrConst SDL_Event
   -- ^
@@ -1415,7 +1418,7 @@
 --                   The unsafe flavor is 'getWindowFromEvent'
 --                   .
 --
---     [C declaration]: @SDL_GetWindowFromEvent@, defined at @SDL3\/SDL_events.h 1606:42@
+--     [C declaration]: @SDL_GetWindowFromEvent@, defined at @SDL3\/SDL_events.h 1611:42@
 getWindowFromEventSafe
   :: PtrConst.PtrConst SDL_Event
   -- ^
@@ -1451,7 +1454,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetEventDescription@, defined at @SDL3\/SDL_events.h 1638:33@
+--     [C declaration]: @SDL_GetEventDescription@, defined at @SDL3\/SDL_events.h 1643:33@
 getEventDescription
   :: PtrConst.PtrConst SDL_Event
   -- ^
@@ -1499,7 +1502,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetEventDescription@, defined at @SDL3\/SDL_events.h 1638:33@
+--     [C declaration]: @SDL_GetEventDescription@, defined at @SDL3\/SDL_events.h 1643:33@
 getEventDescriptionSafe
   :: PtrConst.PtrConst SDL_Event
   -- ^
diff --git a/src/SDL3/Sys/Filesystem.hs b/src/SDL3/Sys/Filesystem.hs
--- a/src/SDL3/Sys/Filesystem.hs
+++ b/src/SDL3/Sys/Filesystem.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | SDL offers an API for examining and manipulating the system\'s filesystem. This covers most things one would need to do with directories, except for actual file I\/O (which is covered by [CategoryIOStream](https:\/\/wiki.libsdl.org\/SDL3\/CategoryIOStream) and [CategoryAsyncIO](https:\/\/wiki.libsdl.org\/SDL3\/CategoryAsyncIO) instead).
 --
@@ -81,6 +82,8 @@
   SDL3.Sys.Filesystem.getCurrentDirectorySafe,
 )
 where
+
+import Prelude (Bool, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
diff --git a/src/SDL3/Sys/Gamepad.hs b/src/SDL3/Sys/Gamepad.hs
--- a/src/SDL3/Sys/Gamepad.hs
+++ b/src/SDL3/Sys/Gamepad.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | SDL provides a low-level joystick API, which just treats joysticks as an arbitrary pile of buttons, axes, and hat switches. If you\'re planning to write your own control configuration screen, this can give you a lot of flexibility, but that\'s a lot of work, and most things that we consider \"joysticks\" now are actually console-style gamepads. So SDL provides the gamepad API on top of the lower-level joystick functionality.
 --
 --     The difference between a joystick and a gamepad is that a gamepad tells you /where/ a button or axis is on the device. You don\'t speak to gamepads in terms of arbitrary numbers like \"button 3\" or \"axis 2\" but in standard locations: the d-pad, the shoulder buttons, triggers, A\/B\/X\/Y (or X\/O\/Square\/Triangle, if you will).
@@ -179,6 +181,7 @@
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (Bool, Float, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.LibC qualified
@@ -232,7 +235,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_AddGamepadMapping@, defined at @SDL3\/SDL_gamepad.h 346:33@
+--     [C declaration]: @SDL_AddGamepadMapping@, defined at @SDL3\/SDL_gamepad.h 347:33@
 addGamepadMapping
   :: PtrConst.PtrConst BG.CChar
   -- ^
@@ -280,7 +283,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_AddGamepadMapping@, defined at @SDL3\/SDL_gamepad.h 346:33@
+--     [C declaration]: @SDL_AddGamepadMapping@, defined at @SDL3\/SDL_gamepad.h 347:33@
 addGamepadMappingSafe
   :: PtrConst.PtrConst BG.CChar
   -- ^
@@ -320,7 +323,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_AddGamepadMappingsFromIO@, defined at @SDL3\/SDL_gamepad.h 386:33@
+--     [C declaration]: @SDL_AddGamepadMappingsFromIO@, defined at @SDL3\/SDL_gamepad.h 387:33@
 addGamepadMappingsFromIO
   :: BG.Ptr SDL3.Sys.Bindgen.Iostream.SDL_IOStream
   -- ^
@@ -365,7 +368,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_AddGamepadMappingsFromIO@, defined at @SDL3\/SDL_gamepad.h 386:33@
+--     [C declaration]: @SDL_AddGamepadMappingsFromIO@, defined at @SDL3\/SDL_gamepad.h 387:33@
 addGamepadMappingsFromIOSafe
   :: BG.Ptr SDL3.Sys.Bindgen.Iostream.SDL_IOStream
   -- ^
@@ -408,7 +411,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_AddGamepadMappingsFromFile@, defined at @SDL3\/SDL_gamepad.h 420:33@
+--     [C declaration]: @SDL_AddGamepadMappingsFromFile@, defined at @SDL3\/SDL_gamepad.h 421:33@
 addGamepadMappingsFromFile
   :: PtrConst.PtrConst BG.CChar
   -- ^
@@ -446,7 +449,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_AddGamepadMappingsFromFile@, defined at @SDL3\/SDL_gamepad.h 420:33@
+--     [C declaration]: @SDL_AddGamepadMappingsFromFile@, defined at @SDL3\/SDL_gamepad.h 421:33@
 addGamepadMappingsFromFileSafe
   :: PtrConst.PtrConst BG.CChar
   -- ^
@@ -476,7 +479,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_ReloadGamepadMappings@, defined at @SDL3\/SDL_gamepad.h 434:34@
+--     [C declaration]: @SDL_ReloadGamepadMappings@, defined at @SDL3\/SDL_gamepad.h 435:34@
 reloadGamepadMappings :: IO Bool
 reloadGamepadMappings =
   fmap CBool.toBool Unsafe.sDL_ReloadGamepadMappings
@@ -500,7 +503,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_ReloadGamepadMappings@, defined at @SDL3\/SDL_gamepad.h 434:34@
+--     [C declaration]: @SDL_ReloadGamepadMappings@, defined at @SDL3\/SDL_gamepad.h 435:34@
 reloadGamepadMappingsSafe :: IO Bool
 reloadGamepadMappingsSafe =
   fmap CBool.toBool Safe.sDL_ReloadGamepadMappings
@@ -519,7 +522,7 @@
 --                   The safe flavor is 'getGamepadMappingsSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadMappings@, defined at @SDL3\/SDL_gamepad.h 450:37@
+--     [C declaration]: @SDL_GetGamepadMappings@, defined at @SDL3\/SDL_gamepad.h 451:37@
 getGamepadMappings
   :: BG.Ptr BG.CInt
   -- ^
@@ -542,7 +545,7 @@
 --                   The unsafe flavor is 'getGamepadMappings'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadMappings@, defined at @SDL3\/SDL_gamepad.h 450:37@
+--     [C declaration]: @SDL_GetGamepadMappings@, defined at @SDL3\/SDL_gamepad.h 451:37@
 getGamepadMappingsSafe
   :: BG.Ptr BG.CInt
   -- ^
@@ -567,7 +570,7 @@
 --                   The safe flavor is 'getGamepadMappingForGUIDSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadMappingForGUID@, defined at @SDL3\/SDL_gamepad.h 467:36@
+--     [C declaration]: @SDL_GetGamepadMappingForGUID@, defined at @SDL3\/SDL_gamepad.h 468:36@
 getGamepadMappingForGUID
   :: SDL3.Sys.Bindgen.Guid.SDL_GUID
   -- ^
@@ -593,7 +596,7 @@
 --                   The unsafe flavor is 'getGamepadMappingForGUID'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadMappingForGUID@, defined at @SDL3\/SDL_gamepad.h 467:36@
+--     [C declaration]: @SDL_GetGamepadMappingForGUID@, defined at @SDL3\/SDL_gamepad.h 468:36@
 getGamepadMappingForGUIDSafe
   :: SDL3.Sys.Bindgen.Guid.SDL_GUID
   -- ^
@@ -621,7 +624,7 @@
 --                   The safe flavor is 'getGamepadMappingSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadMapping@, defined at @SDL3\/SDL_gamepad.h 488:36@
+--     [C declaration]: @SDL_GetGamepadMapping@, defined at @SDL3\/SDL_gamepad.h 489:36@
 getGamepadMapping
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -648,7 +651,7 @@
 --                   The unsafe flavor is 'getGamepadMapping'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadMapping@, defined at @SDL3\/SDL_gamepad.h 488:36@
+--     [C declaration]: @SDL_GetGamepadMapping@, defined at @SDL3\/SDL_gamepad.h 489:36@
 getGamepadMappingSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -678,7 +681,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_SetGamepadMapping@, defined at @SDL3\/SDL_gamepad.h 508:34@
+--     [C declaration]: @SDL_SetGamepadMapping@, defined at @SDL3\/SDL_gamepad.h 509:34@
 setGamepadMapping
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -715,7 +718,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_SetGamepadMapping@, defined at @SDL3\/SDL_gamepad.h 508:34@
+--     [C declaration]: @SDL_SetGamepadMapping@, defined at @SDL3\/SDL_gamepad.h 509:34@
 setGamepadMappingSafe
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -750,7 +753,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_HasGamepad@, defined at @SDL3\/SDL_gamepad.h 521:34@
+--     [C declaration]: @SDL_HasGamepad@, defined at @SDL3\/SDL_gamepad.h 522:34@
 hasGamepad :: IO Bool
 hasGamepad = fmap CBool.toBool Unsafe.sDL_HasGamepad
 
@@ -773,7 +776,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_HasGamepad@, defined at @SDL3\/SDL_gamepad.h 521:34@
+--     [C declaration]: @SDL_HasGamepad@, defined at @SDL3\/SDL_gamepad.h 522:34@
 hasGamepadSafe :: IO Bool
 hasGamepadSafe =
   fmap CBool.toBool Safe.sDL_HasGamepad
@@ -794,7 +797,7 @@
 --                   The safe flavor is 'getGamepadsSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepads@, defined at @SDL3\/SDL_gamepad.h 539:46@
+--     [C declaration]: @SDL_GetGamepads@, defined at @SDL3\/SDL_gamepad.h 540:46@
 getGamepads
   :: BG.Ptr BG.CInt
   -- ^
@@ -819,7 +822,7 @@
 --                   The unsafe flavor is 'getGamepads'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepads@, defined at @SDL3\/SDL_gamepad.h 539:46@
+--     [C declaration]: @SDL_GetGamepads@, defined at @SDL3\/SDL_gamepad.h 540:46@
 getGamepadsSafe
   :: BG.Ptr BG.CInt
   -- ^
@@ -847,7 +850,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_IsGamepad@, defined at @SDL3\/SDL_gamepad.h 555:34@
+--     [C declaration]: @SDL_IsGamepad@, defined at @SDL3\/SDL_gamepad.h 556:34@
 isGamepad
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -876,7 +879,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_IsGamepad@, defined at @SDL3\/SDL_gamepad.h 555:34@
+--     [C declaration]: @SDL_IsGamepad@, defined at @SDL3\/SDL_gamepad.h 556:34@
 isGamepadSafe
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -904,7 +907,7 @@
 --                   The safe flavor is 'getGamepadNameForIDSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadNameForID@, defined at @SDL3\/SDL_gamepad.h 573:42@
+--     [C declaration]: @SDL_GetGamepadNameForID@, defined at @SDL3\/SDL_gamepad.h 574:42@
 getGamepadNameForID
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -931,7 +934,7 @@
 --                   The unsafe flavor is 'getGamepadNameForID'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadNameForID@, defined at @SDL3\/SDL_gamepad.h 573:42@
+--     [C declaration]: @SDL_GetGamepadNameForID@, defined at @SDL3\/SDL_gamepad.h 574:42@
 getGamepadNameForIDSafe
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -959,7 +962,7 @@
 --                   The safe flavor is 'getGamepadPathForIDSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadPathForID@, defined at @SDL3\/SDL_gamepad.h 591:42@
+--     [C declaration]: @SDL_GetGamepadPathForID@, defined at @SDL3\/SDL_gamepad.h 592:42@
 getGamepadPathForID
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -986,7 +989,7 @@
 --                   The unsafe flavor is 'getGamepadPathForID'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadPathForID@, defined at @SDL3\/SDL_gamepad.h 591:42@
+--     [C declaration]: @SDL_GetGamepadPathForID@, defined at @SDL3\/SDL_gamepad.h 592:42@
 getGamepadPathForIDSafe
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1017,7 +1020,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetGamepadPlayerIndexForID@, defined at @SDL3\/SDL_gamepad.h 608:33@
+--     [C declaration]: @SDL_GetGamepadPlayerIndexForID@, defined at @SDL3\/SDL_gamepad.h 609:33@
 getGamepadPlayerIndexForID
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1049,7 +1052,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetGamepadPlayerIndexForID@, defined at @SDL3\/SDL_gamepad.h 608:33@
+--     [C declaration]: @SDL_GetGamepadPlayerIndexForID@, defined at @SDL3\/SDL_gamepad.h 609:33@
 getGamepadPlayerIndexForIDSafe
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1078,7 +1081,7 @@
 --                   The safe flavor is 'getGamepadGUIDForIDSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadGUIDForID@, defined at @SDL3\/SDL_gamepad.h 626:38@
+--     [C declaration]: @SDL_GetGamepadGUIDForID@, defined at @SDL3\/SDL_gamepad.h 627:38@
 getGamepadGUIDForID
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1105,7 +1108,7 @@
 --                   The unsafe flavor is 'getGamepadGUIDForID'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadGUIDForID@, defined at @SDL3\/SDL_gamepad.h 626:38@
+--     [C declaration]: @SDL_GetGamepadGUIDForID@, defined at @SDL3\/SDL_gamepad.h 627:38@
 getGamepadGUIDForIDSafe
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1136,7 +1139,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetGamepadVendorForID@, defined at @SDL3\/SDL_gamepad.h 645:36@
+--     [C declaration]: @SDL_GetGamepadVendorForID@, defined at @SDL3\/SDL_gamepad.h 646:36@
 getGamepadVendorForID
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1168,7 +1171,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetGamepadVendorForID@, defined at @SDL3\/SDL_gamepad.h 645:36@
+--     [C declaration]: @SDL_GetGamepadVendorForID@, defined at @SDL3\/SDL_gamepad.h 646:36@
 getGamepadVendorForIDSafe
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1200,7 +1203,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetGamepadProductForID@, defined at @SDL3\/SDL_gamepad.h 664:36@
+--     [C declaration]: @SDL_GetGamepadProductForID@, defined at @SDL3\/SDL_gamepad.h 665:36@
 getGamepadProductForID
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1232,7 +1235,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetGamepadProductForID@, defined at @SDL3\/SDL_gamepad.h 664:36@
+--     [C declaration]: @SDL_GetGamepadProductForID@, defined at @SDL3\/SDL_gamepad.h 665:36@
 getGamepadProductForIDSafe
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1264,7 +1267,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetGamepadProductVersionForID@, defined at @SDL3\/SDL_gamepad.h 683:36@
+--     [C declaration]: @SDL_GetGamepadProductVersionForID@, defined at @SDL3\/SDL_gamepad.h 684:36@
 getGamepadProductVersionForID
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1296,7 +1299,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetGamepadProductVersionForID@, defined at @SDL3\/SDL_gamepad.h 683:36@
+--     [C declaration]: @SDL_GetGamepadProductVersionForID@, defined at @SDL3\/SDL_gamepad.h 684:36@
 getGamepadProductVersionForIDSafe
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1325,7 +1328,7 @@
 --                   The safe flavor is 'getGamepadTypeForIDSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadTypeForID@, defined at @SDL3\/SDL_gamepad.h 701:45@
+--     [C declaration]: @SDL_GetGamepadTypeForID@, defined at @SDL3\/SDL_gamepad.h 702:45@
 getGamepadTypeForID
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1352,7 +1355,7 @@
 --                   The unsafe flavor is 'getGamepadTypeForID'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadTypeForID@, defined at @SDL3\/SDL_gamepad.h 701:45@
+--     [C declaration]: @SDL_GetGamepadTypeForID@, defined at @SDL3\/SDL_gamepad.h 702:45@
 getGamepadTypeForIDSafe
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1380,7 +1383,7 @@
 --                   The safe flavor is 'getRealGamepadTypeForIDSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetRealGamepadTypeForID@, defined at @SDL3\/SDL_gamepad.h 719:45@
+--     [C declaration]: @SDL_GetRealGamepadTypeForID@, defined at @SDL3\/SDL_gamepad.h 720:45@
 getRealGamepadTypeForID
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1408,7 +1411,7 @@
 --                   The unsafe flavor is 'getRealGamepadTypeForID'
 --                   .
 --
---     [C declaration]: @SDL_GetRealGamepadTypeForID@, defined at @SDL3\/SDL_gamepad.h 719:45@
+--     [C declaration]: @SDL_GetRealGamepadTypeForID@, defined at @SDL3\/SDL_gamepad.h 720:45@
 getRealGamepadTypeForIDSafe
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1436,7 +1439,7 @@
 --                   The safe flavor is 'getGamepadMappingForIDSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadMappingForID@, defined at @SDL3\/SDL_gamepad.h 737:36@
+--     [C declaration]: @SDL_GetGamepadMappingForID@, defined at @SDL3\/SDL_gamepad.h 738:36@
 getGamepadMappingForID
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1464,7 +1467,7 @@
 --                   The unsafe flavor is 'getGamepadMappingForID'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadMappingForID@, defined at @SDL3\/SDL_gamepad.h 737:36@
+--     [C declaration]: @SDL_GetGamepadMappingForID@, defined at @SDL3\/SDL_gamepad.h 738:36@
 getGamepadMappingForIDSafe
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1490,7 +1493,7 @@
 --                   The safe flavor is 'openGamepadSafe'
 --                   .
 --
---     [C declaration]: @SDL_OpenGamepad@, defined at @SDL3\/SDL_gamepad.h 753:43@
+--     [C declaration]: @SDL_OpenGamepad@, defined at @SDL3\/SDL_gamepad.h 754:43@
 openGamepad
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1515,7 +1518,7 @@
 --                   The unsafe flavor is 'openGamepad'
 --                   .
 --
---     [C declaration]: @SDL_OpenGamepad@, defined at @SDL3\/SDL_gamepad.h 753:43@
+--     [C declaration]: @SDL_OpenGamepad@, defined at @SDL3\/SDL_gamepad.h 754:43@
 openGamepadSafe
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1538,7 +1541,7 @@
 --                   The safe flavor is 'getGamepadFromIDSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadFromID@, defined at @SDL3\/SDL_gamepad.h 767:43@
+--     [C declaration]: @SDL_GetGamepadFromID@, defined at @SDL3\/SDL_gamepad.h 768:43@
 getGamepadFromID
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1561,7 +1564,7 @@
 --                   The unsafe flavor is 'getGamepadFromID'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadFromID@, defined at @SDL3\/SDL_gamepad.h 767:43@
+--     [C declaration]: @SDL_GetGamepadFromID@, defined at @SDL3\/SDL_gamepad.h 768:43@
 getGamepadFromIDSafe
   :: SDL3.Sys.Bindgen.Joystick.SDL_JoystickID
   -- ^
@@ -1589,7 +1592,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetGamepadFromPlayerIndex@, defined at @SDL3\/SDL_gamepad.h 782:43@
+--     [C declaration]: @SDL_GetGamepadFromPlayerIndex@, defined at @SDL3\/SDL_gamepad.h 783:43@
 getGamepadFromPlayerIndex
   :: BG.Int32
   -- ^
@@ -1619,7 +1622,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetGamepadFromPlayerIndex@, defined at @SDL3\/SDL_gamepad.h 782:43@
+--     [C declaration]: @SDL_GetGamepadFromPlayerIndex@, defined at @SDL3\/SDL_gamepad.h 783:43@
 getGamepadFromPlayerIndexSafe
   :: BG.Int32
   -- ^
@@ -1658,7 +1661,7 @@
 --                   The safe flavor is 'getGamepadPropertiesSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadProperties@, defined at @SDL3\/SDL_gamepad.h 811:46@
+--     [C declaration]: @SDL_GetGamepadProperties@, defined at @SDL3\/SDL_gamepad.h 812:46@
 getGamepadProperties
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1696,7 +1699,7 @@
 --                   The unsafe flavor is 'getGamepadProperties'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadProperties@, defined at @SDL3\/SDL_gamepad.h 811:46@
+--     [C declaration]: @SDL_GetGamepadProperties@, defined at @SDL3\/SDL_gamepad.h 812:46@
 getGamepadPropertiesSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1720,7 +1723,7 @@
 --                   The safe flavor is 'getGamepadIDSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadID@, defined at @SDL3\/SDL_gamepad.h 831:44@
+--     [C declaration]: @SDL_GetGamepadID@, defined at @SDL3\/SDL_gamepad.h 832:44@
 getGamepadID
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1743,7 +1746,7 @@
 --                   The unsafe flavor is 'getGamepadID'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadID@, defined at @SDL3\/SDL_gamepad.h 831:44@
+--     [C declaration]: @SDL_GetGamepadID@, defined at @SDL3\/SDL_gamepad.h 832:44@
 getGamepadIDSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1768,7 +1771,7 @@
 --                   The safe flavor is 'getGamepadNameSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadName@, defined at @SDL3\/SDL_gamepad.h 847:42@
+--     [C declaration]: @SDL_GetGamepadName@, defined at @SDL3\/SDL_gamepad.h 848:42@
 getGamepadName
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1793,7 +1796,7 @@
 --                   The unsafe flavor is 'getGamepadName'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadName@, defined at @SDL3\/SDL_gamepad.h 847:42@
+--     [C declaration]: @SDL_GetGamepadName@, defined at @SDL3\/SDL_gamepad.h 848:42@
 getGamepadNameSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1818,7 +1821,7 @@
 --                   The safe flavor is 'getGamepadPathSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadPath@, defined at @SDL3\/SDL_gamepad.h 863:42@
+--     [C declaration]: @SDL_GetGamepadPath@, defined at @SDL3\/SDL_gamepad.h 864:42@
 getGamepadPath
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1843,7 +1846,7 @@
 --                   The unsafe flavor is 'getGamepadPath'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadPath@, defined at @SDL3\/SDL_gamepad.h 863:42@
+--     [C declaration]: @SDL_GetGamepadPath@, defined at @SDL3\/SDL_gamepad.h 864:42@
 getGamepadPathSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1868,7 +1871,7 @@
 --                   The safe flavor is 'getGamepadTypeSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadType@, defined at @SDL3\/SDL_gamepad.h 878:45@
+--     [C declaration]: @SDL_GetGamepadType@, defined at @SDL3\/SDL_gamepad.h 879:45@
 getGamepadType
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1893,7 +1896,7 @@
 --                   The unsafe flavor is 'getGamepadType'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadType@, defined at @SDL3\/SDL_gamepad.h 878:45@
+--     [C declaration]: @SDL_GetGamepadType@, defined at @SDL3\/SDL_gamepad.h 879:45@
 getGamepadTypeSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1918,7 +1921,7 @@
 --                   The safe flavor is 'getRealGamepadTypeSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetRealGamepadType@, defined at @SDL3\/SDL_gamepad.h 893:45@
+--     [C declaration]: @SDL_GetRealGamepadType@, defined at @SDL3\/SDL_gamepad.h 894:45@
 getRealGamepadType
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1943,7 +1946,7 @@
 --                   The unsafe flavor is 'getRealGamepadType'
 --                   .
 --
---     [C declaration]: @SDL_GetRealGamepadType@, defined at @SDL3\/SDL_gamepad.h 893:45@
+--     [C declaration]: @SDL_GetRealGamepadType@, defined at @SDL3\/SDL_gamepad.h 894:45@
 getRealGamepadTypeSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -1973,7 +1976,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetGamepadPlayerIndex@, defined at @SDL3\/SDL_gamepad.h 909:33@
+--     [C declaration]: @SDL_GetGamepadPlayerIndex@, defined at @SDL3\/SDL_gamepad.h 910:33@
 getGamepadPlayerIndex
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2005,7 +2008,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetGamepadPlayerIndex@, defined at @SDL3\/SDL_gamepad.h 909:33@
+--     [C declaration]: @SDL_GetGamepadPlayerIndex@, defined at @SDL3\/SDL_gamepad.h 910:33@
 getGamepadPlayerIndexSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2035,7 +2038,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_SetGamepadPlayerIndex@, defined at @SDL3\/SDL_gamepad.h 926:34@
+--     [C declaration]: @SDL_SetGamepadPlayerIndex@, defined at @SDL3\/SDL_gamepad.h 927:34@
 setGamepadPlayerIndex
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2070,7 +2073,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_SetGamepadPlayerIndex@, defined at @SDL3\/SDL_gamepad.h 926:34@
+--     [C declaration]: @SDL_SetGamepadPlayerIndex@, defined at @SDL3\/SDL_gamepad.h 927:34@
 setGamepadPlayerIndexSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2107,7 +2110,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetGamepadVendor@, defined at @SDL3\/SDL_gamepad.h 942:36@
+--     [C declaration]: @SDL_GetGamepadVendor@, defined at @SDL3\/SDL_gamepad.h 943:36@
 getGamepadVendor
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2139,7 +2142,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetGamepadVendor@, defined at @SDL3\/SDL_gamepad.h 942:36@
+--     [C declaration]: @SDL_GetGamepadVendor@, defined at @SDL3\/SDL_gamepad.h 943:36@
 getGamepadVendorSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2171,7 +2174,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetGamepadProduct@, defined at @SDL3\/SDL_gamepad.h 958:36@
+--     [C declaration]: @SDL_GetGamepadProduct@, defined at @SDL3\/SDL_gamepad.h 959:36@
 getGamepadProduct
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2203,7 +2206,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetGamepadProduct@, defined at @SDL3\/SDL_gamepad.h 958:36@
+--     [C declaration]: @SDL_GetGamepadProduct@, defined at @SDL3\/SDL_gamepad.h 959:36@
 getGamepadProductSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2235,7 +2238,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetGamepadProductVersion@, defined at @SDL3\/SDL_gamepad.h 974:36@
+--     [C declaration]: @SDL_GetGamepadProductVersion@, defined at @SDL3\/SDL_gamepad.h 975:36@
 getGamepadProductVersion
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2267,7 +2270,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetGamepadProductVersion@, defined at @SDL3\/SDL_gamepad.h 974:36@
+--     [C declaration]: @SDL_GetGamepadProductVersion@, defined at @SDL3\/SDL_gamepad.h 975:36@
 getGamepadProductVersionSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2297,7 +2300,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetGamepadFirmwareVersion@, defined at @SDL3\/SDL_gamepad.h 988:36@
+--     [C declaration]: @SDL_GetGamepadFirmwareVersion@, defined at @SDL3\/SDL_gamepad.h 989:36@
 getGamepadFirmwareVersion
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2327,7 +2330,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetGamepadFirmwareVersion@, defined at @SDL3\/SDL_gamepad.h 988:36@
+--     [C declaration]: @SDL_GetGamepadFirmwareVersion@, defined at @SDL3\/SDL_gamepad.h 989:36@
 getGamepadFirmwareVersionSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2354,7 +2357,7 @@
 --                   The safe flavor is 'getGamepadSerialSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadSerial@, defined at @SDL3\/SDL_gamepad.h 1002:42@
+--     [C declaration]: @SDL_GetGamepadSerial@, defined at @SDL3\/SDL_gamepad.h 1003:42@
 getGamepadSerial
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2379,7 +2382,7 @@
 --                   The unsafe flavor is 'getGamepadSerial'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadSerial@, defined at @SDL3\/SDL_gamepad.h 1002:42@
+--     [C declaration]: @SDL_GetGamepadSerial@, defined at @SDL3\/SDL_gamepad.h 1003:42@
 getGamepadSerialSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2407,7 +2410,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetGamepadSteamHandle@, defined at @SDL3\/SDL_gamepad.h 1017:36@
+--     [C declaration]: @SDL_GetGamepadSteamHandle@, defined at @SDL3\/SDL_gamepad.h 1018:36@
 getGamepadSteamHandle
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2437,7 +2440,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetGamepadSteamHandle@, defined at @SDL3\/SDL_gamepad.h 1017:36@
+--     [C declaration]: @SDL_GetGamepadSteamHandle@, defined at @SDL3\/SDL_gamepad.h 1018:36@
 getGamepadSteamHandleSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2462,7 +2465,7 @@
 --                   The safe flavor is 'getGamepadConnectionStateSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadConnectionState@, defined at @SDL3\/SDL_gamepad.h 1031:57@
+--     [C declaration]: @SDL_GetGamepadConnectionState@, defined at @SDL3\/SDL_gamepad.h 1032:57@
 getGamepadConnectionState
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2486,7 +2489,7 @@
 --                   The unsafe flavor is 'getGamepadConnectionState'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadConnectionState@, defined at @SDL3\/SDL_gamepad.h 1031:57@
+--     [C declaration]: @SDL_GetGamepadConnectionState@, defined at @SDL3\/SDL_gamepad.h 1032:57@
 getGamepadConnectionStateSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2512,7 +2515,7 @@
 --                   The safe flavor is 'getGamepadPowerInfoSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadPowerInfo@, defined at @SDL3\/SDL_gamepad.h 1053:44@
+--     [C declaration]: @SDL_GetGamepadPowerInfo@, defined at @SDL3\/SDL_gamepad.h 1054:44@
 getGamepadPowerInfo
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2541,7 +2544,7 @@
 --                   The unsafe flavor is 'getGamepadPowerInfo'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadPowerInfo@, defined at @SDL3\/SDL_gamepad.h 1053:44@
+--     [C declaration]: @SDL_GetGamepadPowerInfo@, defined at @SDL3\/SDL_gamepad.h 1054:44@
 getGamepadPowerInfoSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2572,7 +2575,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GamepadConnected@, defined at @SDL3\/SDL_gamepad.h 1067:34@
+--     [C declaration]: @SDL_GamepadConnected@, defined at @SDL3\/SDL_gamepad.h 1068:34@
 gamepadConnected
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2600,7 +2603,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GamepadConnected@, defined at @SDL3\/SDL_gamepad.h 1067:34@
+--     [C declaration]: @SDL_GamepadConnected@, defined at @SDL3\/SDL_gamepad.h 1068:34@
 gamepadConnectedSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2629,7 +2632,7 @@
 --                   The safe flavor is 'getGamepadJoystickSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadJoystick@, defined at @SDL3\/SDL_gamepad.h 1089:44@
+--     [C declaration]: @SDL_GetGamepadJoystick@, defined at @SDL3\/SDL_gamepad.h 1090:44@
 getGamepadJoystick
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2656,7 +2659,7 @@
 --                   The unsafe flavor is 'getGamepadJoystick'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadJoystick@, defined at @SDL3\/SDL_gamepad.h 1089:44@
+--     [C declaration]: @SDL_GetGamepadJoystick@, defined at @SDL3\/SDL_gamepad.h 1090:44@
 getGamepadJoystickSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2684,7 +2687,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_SetGamepadEventsEnabled@, defined at @SDL3\/SDL_gamepad.h 1106:34@
+--     [C declaration]: @SDL_SetGamepadEventsEnabled@, defined at @SDL3\/SDL_gamepad.h 1107:34@
 setGamepadEventsEnabled
   :: Bool
   -- ^
@@ -2714,7 +2717,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_SetGamepadEventsEnabled@, defined at @SDL3\/SDL_gamepad.h 1106:34@
+--     [C declaration]: @SDL_SetGamepadEventsEnabled@, defined at @SDL3\/SDL_gamepad.h 1107:34@
 setGamepadEventsEnabledSafe
   :: Bool
   -- ^
@@ -2746,7 +2749,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GamepadEventsEnabled@, defined at @SDL3\/SDL_gamepad.h 1122:34@
+--     [C declaration]: @SDL_GamepadEventsEnabled@, defined at @SDL3\/SDL_gamepad.h 1123:34@
 gamepadEventsEnabled :: IO Bool
 gamepadEventsEnabled =
   fmap CBool.toBool Unsafe.sDL_GamepadEventsEnabled
@@ -2772,7 +2775,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GamepadEventsEnabled@, defined at @SDL3\/SDL_gamepad.h 1122:34@
+--     [C declaration]: @SDL_GamepadEventsEnabled@, defined at @SDL3\/SDL_gamepad.h 1123:34@
 gamepadEventsEnabledSafe :: IO Bool
 gamepadEventsEnabledSafe =
   fmap CBool.toBool Safe.sDL_GamepadEventsEnabled
@@ -2791,7 +2794,7 @@
 --                   The safe flavor is 'getGamepadBindingsSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadBindings@, defined at @SDL3\/SDL_gamepad.h 1138:51@
+--     [C declaration]: @SDL_GetGamepadBindings@, defined at @SDL3\/SDL_gamepad.h 1139:51@
 getGamepadBindings
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2818,7 +2821,7 @@
 --                   The unsafe flavor is 'getGamepadBindings'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadBindings@, defined at @SDL3\/SDL_gamepad.h 1138:51@
+--     [C declaration]: @SDL_GetGamepadBindings@, defined at @SDL3\/SDL_gamepad.h 1139:51@
 getGamepadBindingsSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -2845,7 +2848,7 @@
 --                   The safe flavor is 'updateGamepadsSafe'
 --                   : routes through joystick update; virtual-device callbacks run synchronously.
 --
---     [C declaration]: @SDL_UpdateGamepads@, defined at @SDL3\/SDL_gamepad.h 1151:34@
+--     [C declaration]: @SDL_UpdateGamepads@, defined at @SDL3\/SDL_gamepad.h 1152:34@
 updateGamepads :: IO ()
 updateGamepads = Unsafe.sDL_UpdateGamepads
 
@@ -2863,7 +2866,7 @@
 --                   The unsafe flavor is 'updateGamepads'
 --                   : routes through joystick update; virtual-device callbacks run synchronously.
 --
---     [C declaration]: @SDL_UpdateGamepads@, defined at @SDL3\/SDL_gamepad.h 1151:34@
+--     [C declaration]: @SDL_UpdateGamepads@, defined at @SDL3\/SDL_gamepad.h 1152:34@
 updateGamepadsSafe :: IO ()
 updateGamepadsSafe = Safe.sDL_UpdateGamepads
 
@@ -2885,7 +2888,7 @@
 --                   The safe flavor is 'getGamepadTypeFromStringSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadTypeFromString@, defined at @SDL3\/SDL_gamepad.h 1171:45@
+--     [C declaration]: @SDL_GetGamepadTypeFromString@, defined at @SDL3\/SDL_gamepad.h 1172:45@
 getGamepadTypeFromString
   :: PtrConst.PtrConst BG.CChar
   -- ^
@@ -2913,7 +2916,7 @@
 --                   The unsafe flavor is 'getGamepadTypeFromString'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadTypeFromString@, defined at @SDL3\/SDL_gamepad.h 1171:45@
+--     [C declaration]: @SDL_GetGamepadTypeFromString@, defined at @SDL3\/SDL_gamepad.h 1172:45@
 getGamepadTypeFromStringSafe
   :: PtrConst.PtrConst BG.CChar
   -- ^
@@ -2939,7 +2942,7 @@
 --                   The safe flavor is 'getGamepadStringForTypeSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadStringForType@, defined at @SDL3\/SDL_gamepad.h 1187:42@
+--     [C declaration]: @SDL_GetGamepadStringForType@, defined at @SDL3\/SDL_gamepad.h 1188:42@
 getGamepadStringForType
   :: SDL_GamepadType
   -- ^
@@ -2965,7 +2968,7 @@
 --                   The unsafe flavor is 'getGamepadStringForType'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadStringForType@, defined at @SDL3\/SDL_gamepad.h 1187:42@
+--     [C declaration]: @SDL_GetGamepadStringForType@, defined at @SDL3\/SDL_gamepad.h 1188:42@
 getGamepadStringForTypeSafe
   :: SDL_GamepadType
   -- ^
@@ -2995,7 +2998,7 @@
 --                   The safe flavor is 'getGamepadAxisFromStringSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadAxisFromString@, defined at @SDL3\/SDL_gamepad.h 1211:45@
+--     [C declaration]: @SDL_GetGamepadAxisFromString@, defined at @SDL3\/SDL_gamepad.h 1212:45@
 getGamepadAxisFromString
   :: PtrConst.PtrConst BG.CChar
   -- ^
@@ -3025,7 +3028,7 @@
 --                   The unsafe flavor is 'getGamepadAxisFromString'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadAxisFromString@, defined at @SDL3\/SDL_gamepad.h 1211:45@
+--     [C declaration]: @SDL_GetGamepadAxisFromString@, defined at @SDL3\/SDL_gamepad.h 1212:45@
 getGamepadAxisFromStringSafe
   :: PtrConst.PtrConst BG.CChar
   -- ^
@@ -3051,7 +3054,7 @@
 --                   The safe flavor is 'getGamepadStringForAxisSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadStringForAxis@, defined at @SDL3\/SDL_gamepad.h 1227:42@
+--     [C declaration]: @SDL_GetGamepadStringForAxis@, defined at @SDL3\/SDL_gamepad.h 1228:42@
 getGamepadStringForAxis
   :: SDL_GamepadAxis
   -- ^
@@ -3077,7 +3080,7 @@
 --                   The unsafe flavor is 'getGamepadStringForAxis'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadStringForAxis@, defined at @SDL3\/SDL_gamepad.h 1227:42@
+--     [C declaration]: @SDL_GetGamepadStringForAxis@, defined at @SDL3\/SDL_gamepad.h 1228:42@
 getGamepadStringForAxisSafe
   :: SDL_GamepadAxis
   -- ^
@@ -3108,7 +3111,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GamepadHasAxis@, defined at @SDL3\/SDL_gamepad.h 1246:34@
+--     [C declaration]: @SDL_GamepadHasAxis@, defined at @SDL3\/SDL_gamepad.h 1247:34@
 gamepadHasAxis
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -3145,7 +3148,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GamepadHasAxis@, defined at @SDL3\/SDL_gamepad.h 1246:34@
+--     [C declaration]: @SDL_GamepadHasAxis@, defined at @SDL3\/SDL_gamepad.h 1247:34@
 gamepadHasAxisSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -3188,7 +3191,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetGamepadAxis@, defined at @SDL3\/SDL_gamepad.h 1274:36@
+--     [C declaration]: @SDL_GetGamepadAxis@, defined at @SDL3\/SDL_gamepad.h 1275:36@
 getGamepadAxis
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -3231,7 +3234,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetGamepadAxis@, defined at @SDL3\/SDL_gamepad.h 1274:36@
+--     [C declaration]: @SDL_GetGamepadAxis@, defined at @SDL3\/SDL_gamepad.h 1275:36@
 getGamepadAxisSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -3265,7 +3268,7 @@
 --                   The safe flavor is 'getGamepadButtonFromStringSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadButtonFromString@, defined at @SDL3\/SDL_gamepad.h 1294:47@
+--     [C declaration]: @SDL_GetGamepadButtonFromString@, defined at @SDL3\/SDL_gamepad.h 1295:47@
 getGamepadButtonFromString
   :: PtrConst.PtrConst BG.CChar
   -- ^
@@ -3293,7 +3296,7 @@
 --                   The unsafe flavor is 'getGamepadButtonFromString'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadButtonFromString@, defined at @SDL3\/SDL_gamepad.h 1294:47@
+--     [C declaration]: @SDL_GetGamepadButtonFromString@, defined at @SDL3\/SDL_gamepad.h 1295:47@
 getGamepadButtonFromStringSafe
   :: PtrConst.PtrConst BG.CChar
   -- ^
@@ -3319,7 +3322,7 @@
 --                   The safe flavor is 'getGamepadStringForButtonSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadStringForButton@, defined at @SDL3\/SDL_gamepad.h 1310:42@
+--     [C declaration]: @SDL_GetGamepadStringForButton@, defined at @SDL3\/SDL_gamepad.h 1311:42@
 getGamepadStringForButton
   :: SDL_GamepadButton
   -- ^
@@ -3345,7 +3348,7 @@
 --                   The unsafe flavor is 'getGamepadStringForButton'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadStringForButton@, defined at @SDL3\/SDL_gamepad.h 1310:42@
+--     [C declaration]: @SDL_GetGamepadStringForButton@, defined at @SDL3\/SDL_gamepad.h 1311:42@
 getGamepadStringForButtonSafe
   :: SDL_GamepadButton
   -- ^
@@ -3376,7 +3379,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GamepadHasButton@, defined at @SDL3\/SDL_gamepad.h 1328:34@
+--     [C declaration]: @SDL_GamepadHasButton@, defined at @SDL3\/SDL_gamepad.h 1329:34@
 gamepadHasButton
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -3413,7 +3416,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GamepadHasButton@, defined at @SDL3\/SDL_gamepad.h 1328:34@
+--     [C declaration]: @SDL_GamepadHasButton@, defined at @SDL3\/SDL_gamepad.h 1329:34@
 gamepadHasButtonSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -3448,7 +3451,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetGamepadButton@, defined at @SDL3\/SDL_gamepad.h 1344:34@
+--     [C declaration]: @SDL_GetGamepadButton@, defined at @SDL3\/SDL_gamepad.h 1345:34@
 getGamepadButton
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -3483,7 +3486,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetGamepadButton@, defined at @SDL3\/SDL_gamepad.h 1344:34@
+--     [C declaration]: @SDL_GetGamepadButton@, defined at @SDL3\/SDL_gamepad.h 1345:34@
 getGamepadButtonSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -3515,7 +3518,7 @@
 --                   The safe flavor is 'getGamepadButtonLabelForTypeSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadButtonLabelForType@, defined at @SDL3\/SDL_gamepad.h 1359:52@
+--     [C declaration]: @SDL_GetGamepadButtonLabelForType@, defined at @SDL3\/SDL_gamepad.h 1360:52@
 getGamepadButtonLabelForType
   :: SDL_GamepadType
   -- ^
@@ -3545,7 +3548,7 @@
 --                   The unsafe flavor is 'getGamepadButtonLabelForType'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadButtonLabelForType@, defined at @SDL3\/SDL_gamepad.h 1359:52@
+--     [C declaration]: @SDL_GetGamepadButtonLabelForType@, defined at @SDL3\/SDL_gamepad.h 1360:52@
 getGamepadButtonLabelForTypeSafe
   :: SDL_GamepadType
   -- ^
@@ -3575,7 +3578,7 @@
 --                   The safe flavor is 'getGamepadButtonLabelSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadButtonLabel@, defined at @SDL3\/SDL_gamepad.h 1374:52@
+--     [C declaration]: @SDL_GetGamepadButtonLabel@, defined at @SDL3\/SDL_gamepad.h 1375:52@
 getGamepadButtonLabel
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -3605,7 +3608,7 @@
 --                   The unsafe flavor is 'getGamepadButtonLabel'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadButtonLabel@, defined at @SDL3\/SDL_gamepad.h 1374:52@
+--     [C declaration]: @SDL_GetGamepadButtonLabel@, defined at @SDL3\/SDL_gamepad.h 1375:52@
 getGamepadButtonLabelSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -3638,7 +3641,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetNumGamepadTouchpads@, defined at @SDL3\/SDL_gamepad.h 1388:33@
+--     [C declaration]: @SDL_GetNumGamepadTouchpads@, defined at @SDL3\/SDL_gamepad.h 1389:33@
 getNumGamepadTouchpads
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -3668,7 +3671,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetNumGamepadTouchpads@, defined at @SDL3\/SDL_gamepad.h 1388:33@
+--     [C declaration]: @SDL_GetNumGamepadTouchpads@, defined at @SDL3\/SDL_gamepad.h 1389:33@
 getNumGamepadTouchpadsSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -3698,7 +3701,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetNumGamepadTouchpadFingers@, defined at @SDL3\/SDL_gamepad.h 1405:33@
+--     [C declaration]: @SDL_GetNumGamepadTouchpadFingers@, defined at @SDL3\/SDL_gamepad.h 1406:33@
 getNumGamepadTouchpadFingers
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -3733,7 +3736,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetNumGamepadTouchpadFingers@, defined at @SDL3\/SDL_gamepad.h 1405:33@
+--     [C declaration]: @SDL_GetNumGamepadTouchpadFingers@, defined at @SDL3\/SDL_gamepad.h 1406:33@
 getNumGamepadTouchpadFingersSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -3768,7 +3771,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetGamepadTouchpadFinger@, defined at @SDL3\/SDL_gamepad.h 1429:34@
+--     [C declaration]: @SDL_GetGamepadTouchpadFinger@, defined at @SDL3\/SDL_gamepad.h 1430:34@
 getGamepadTouchpadFinger
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -3830,7 +3833,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetGamepadTouchpadFinger@, defined at @SDL3\/SDL_gamepad.h 1429:34@
+--     [C declaration]: @SDL_GetGamepadTouchpadFinger@, defined at @SDL3\/SDL_gamepad.h 1430:34@
 getGamepadTouchpadFingerSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -3892,7 +3895,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GamepadHasSensor@, defined at @SDL3\/SDL_gamepad.h 1446:34@
+--     [C declaration]: @SDL_GamepadHasSensor@, defined at @SDL3\/SDL_gamepad.h 1447:34@
 gamepadHasSensor
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -3927,7 +3930,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GamepadHasSensor@, defined at @SDL3\/SDL_gamepad.h 1446:34@
+--     [C declaration]: @SDL_GamepadHasSensor@, defined at @SDL3\/SDL_gamepad.h 1447:34@
 gamepadHasSensorSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -3962,7 +3965,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_SetGamepadSensorEnabled@, defined at @SDL3\/SDL_gamepad.h 1464:34@
+--     [C declaration]: @SDL_SetGamepadSensorEnabled@, defined at @SDL3\/SDL_gamepad.h 1465:34@
 setGamepadSensorEnabled
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -4002,7 +4005,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_SetGamepadSensorEnabled@, defined at @SDL3\/SDL_gamepad.h 1464:34@
+--     [C declaration]: @SDL_SetGamepadSensorEnabled@, defined at @SDL3\/SDL_gamepad.h 1465:34@
 setGamepadSensorEnabledSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -4042,7 +4045,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GamepadSensorEnabled@, defined at @SDL3\/SDL_gamepad.h 1479:34@
+--     [C declaration]: @SDL_GamepadSensorEnabled@, defined at @SDL3\/SDL_gamepad.h 1480:34@
 gamepadSensorEnabled
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -4077,7 +4080,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GamepadSensorEnabled@, defined at @SDL3\/SDL_gamepad.h 1479:34@
+--     [C declaration]: @SDL_GamepadSensorEnabled@, defined at @SDL3\/SDL_gamepad.h 1480:34@
 gamepadSensorEnabledSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -4110,7 +4113,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetGamepadSensorDataRate@, defined at @SDL3\/SDL_gamepad.h 1492:35@
+--     [C declaration]: @SDL_GetGamepadSensorDataRate@, defined at @SDL3\/SDL_gamepad.h 1493:35@
 getGamepadSensorDataRate
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -4143,7 +4146,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetGamepadSensorDataRate@, defined at @SDL3\/SDL_gamepad.h 1492:35@
+--     [C declaration]: @SDL_GetGamepadSensorDataRate@, defined at @SDL3\/SDL_gamepad.h 1493:35@
 getGamepadSensorDataRateSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -4178,7 +4181,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetGamepadSensorData@, defined at @SDL3\/SDL_gamepad.h 1511:34@
+--     [C declaration]: @SDL_GetGamepadSensorData@, defined at @SDL3\/SDL_gamepad.h 1512:34@
 getGamepadSensorData
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -4223,7 +4226,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GetGamepadSensorData@, defined at @SDL3\/SDL_gamepad.h 1511:34@
+--     [C declaration]: @SDL_GetGamepadSensorData@, defined at @SDL3\/SDL_gamepad.h 1512:34@
 getGamepadSensorDataSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -4270,7 +4273,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_RumbleGamepad@, defined at @SDL3\/SDL_gamepad.h 1535:34@
+--     [C declaration]: @SDL_RumbleGamepad@, defined at @SDL3\/SDL_gamepad.h 1536:34@
 rumbleGamepad
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -4319,7 +4322,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_RumbleGamepad@, defined at @SDL3\/SDL_gamepad.h 1535:34@
+--     [C declaration]: @SDL_RumbleGamepad@, defined at @SDL3\/SDL_gamepad.h 1536:34@
 rumbleGamepadSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -4372,7 +4375,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_RumbleGamepadTriggers@, defined at @SDL3\/SDL_gamepad.h 1565:34@
+--     [C declaration]: @SDL_RumbleGamepadTriggers@, defined at @SDL3\/SDL_gamepad.h 1566:34@
 rumbleGamepadTriggers
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -4425,7 +4428,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_RumbleGamepadTriggers@, defined at @SDL3\/SDL_gamepad.h 1565:34@
+--     [C declaration]: @SDL_RumbleGamepadTriggers@, defined at @SDL3\/SDL_gamepad.h 1566:34@
 rumbleGamepadTriggersSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -4474,7 +4477,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_SetGamepadLED@, defined at @SDL3\/SDL_gamepad.h 1587:34@
+--     [C declaration]: @SDL_SetGamepadLED@, defined at @SDL3\/SDL_gamepad.h 1588:34@
 setGamepadLED
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -4523,7 +4526,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_SetGamepadLED@, defined at @SDL3\/SDL_gamepad.h 1587:34@
+--     [C declaration]: @SDL_SetGamepadLED@, defined at @SDL3\/SDL_gamepad.h 1588:34@
 setGamepadLEDSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -4568,7 +4571,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_SendGamepadEffect@, defined at @SDL3\/SDL_gamepad.h 1602:34@
+--     [C declaration]: @SDL_SendGamepadEffect@, defined at @SDL3\/SDL_gamepad.h 1603:34@
 sendGamepadEffect
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -4606,7 +4609,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_SendGamepadEffect@, defined at @SDL3\/SDL_gamepad.h 1602:34@
+--     [C declaration]: @SDL_SendGamepadEffect@, defined at @SDL3\/SDL_gamepad.h 1603:34@
 sendGamepadEffectSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -4641,7 +4644,7 @@
 --                   The safe flavor is 'closeGamepadSafe'
 --                   .
 --
---     [C declaration]: @SDL_CloseGamepad@, defined at @SDL3\/SDL_gamepad.h 1616:34@
+--     [C declaration]: @SDL_CloseGamepad@, defined at @SDL3\/SDL_gamepad.h 1617:34@
 closeGamepad
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -4664,7 +4667,7 @@
 --                   The unsafe flavor is 'closeGamepad'
 --                   .
 --
---     [C declaration]: @SDL_CloseGamepad@, defined at @SDL3\/SDL_gamepad.h 1616:34@
+--     [C declaration]: @SDL_CloseGamepad@, defined at @SDL3\/SDL_gamepad.h 1617:34@
 closeGamepadSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -4689,7 +4692,7 @@
 --                   The safe flavor is 'getGamepadAppleSFSymbolsNameForButtonSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadAppleSFSymbolsNameForButton@, defined at @SDL3\/SDL_gamepad.h 1632:42@
+--     [C declaration]: @SDL_GetGamepadAppleSFSymbolsNameForButton@, defined at @SDL3\/SDL_gamepad.h 1633:42@
 getGamepadAppleSFSymbolsNameForButton
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -4719,7 +4722,7 @@
 --                   The unsafe flavor is 'getGamepadAppleSFSymbolsNameForButton'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadAppleSFSymbolsNameForButton@, defined at @SDL3\/SDL_gamepad.h 1632:42@
+--     [C declaration]: @SDL_GetGamepadAppleSFSymbolsNameForButton@, defined at @SDL3\/SDL_gamepad.h 1633:42@
 getGamepadAppleSFSymbolsNameForButtonSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -4749,7 +4752,7 @@
 --                   The safe flavor is 'getGamepadAppleSFSymbolsNameForAxisSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadAppleSFSymbolsNameForAxis@, defined at @SDL3\/SDL_gamepad.h 1647:42@
+--     [C declaration]: @SDL_GetGamepadAppleSFSymbolsNameForAxis@, defined at @SDL3\/SDL_gamepad.h 1648:42@
 getGamepadAppleSFSymbolsNameForAxis
   :: BG.Ptr SDL_Gamepad
   -- ^
@@ -4779,7 +4782,7 @@
 --                   The unsafe flavor is 'getGamepadAppleSFSymbolsNameForAxis'
 --                   .
 --
---     [C declaration]: @SDL_GetGamepadAppleSFSymbolsNameForAxis@, defined at @SDL3\/SDL_gamepad.h 1647:42@
+--     [C declaration]: @SDL_GetGamepadAppleSFSymbolsNameForAxis@, defined at @SDL3\/SDL_gamepad.h 1648:42@
 getGamepadAppleSFSymbolsNameForAxisSafe
   :: BG.Ptr SDL_Gamepad
   -- ^
diff --git a/src/SDL3/Sys/Gpu.hs b/src/SDL3/Sys/Gpu.hs
--- a/src/SDL3/Sys/Gpu.hs
+++ b/src/SDL3/Sys/Gpu.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | The GPU API offers a cross-platform way for apps to talk to modern graphics hardware. It offers both 3D graphics and compute support, in the style of Metal, Vulkan, and Direct3D 12.
 --
@@ -465,6 +466,7 @@
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (Bool, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.LibC qualified
@@ -3397,6 +3399,8 @@
 --
 --     The textures must have been created with SDL_GPU_TEXTUREUSAGE_SAMPLER.
 --
+--     The textures being bound must have a matching type declared in the shader (2D, 3D, etc.). Multisample textures are not allowed.
+--
 --     Be sure your shader is set up according to the requirements documented in @'createGPUShader'@.
 --
 --     @since 3.2.0
@@ -3412,7 +3416,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_BindGPUVertexSamplers@, defined at @SDL3\/SDL_gpu.h 3408:34@
+--     [C declaration]: @SDL_BindGPUVertexSamplers@, defined at @SDL3\/SDL_gpu.h 3411:34@
 bindGPUVertexSamplers
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -3442,6 +3446,8 @@
 --
 --     The textures must have been created with SDL_GPU_TEXTUREUSAGE_SAMPLER.
 --
+--     The textures being bound must have a matching type declared in the shader (2D, 3D, etc.). Multisample textures are not allowed.
+--
 --     Be sure your shader is set up according to the requirements documented in @'createGPUShader'@.
 --
 --     @since 3.2.0
@@ -3457,7 +3463,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_BindGPUVertexSamplers@, defined at @SDL3\/SDL_gpu.h 3408:34@
+--     [C declaration]: @SDL_BindGPUVertexSamplers@, defined at @SDL3\/SDL_gpu.h 3411:34@
 bindGPUVertexSamplersSafe
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -3487,6 +3493,8 @@
 --
 --     These textures must have been created with SDL_GPU_TEXTUREUSAGE_GRAPHICS_STORAGE_READ.
 --
+--     The textures being bound must have a matching type declared in the shader (2D, 3D, 2DMS, etc.)
+--
 --     Be sure your shader is set up according to the requirements documented in @'createGPUShader'@.
 --
 --     @since 3.2.0
@@ -3502,7 +3510,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_BindGPUVertexStorageTextures@, defined at @SDL3\/SDL_gpu.h 3432:34@
+--     [C declaration]: @SDL_BindGPUVertexStorageTextures@, defined at @SDL3\/SDL_gpu.h 3438:34@
 bindGPUVertexStorageTextures
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -3532,6 +3540,8 @@
 --
 --     These textures must have been created with SDL_GPU_TEXTUREUSAGE_GRAPHICS_STORAGE_READ.
 --
+--     The textures being bound must have a matching type declared in the shader (2D, 3D, 2DMS, etc.)
+--
 --     Be sure your shader is set up according to the requirements documented in @'createGPUShader'@.
 --
 --     @since 3.2.0
@@ -3547,7 +3557,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_BindGPUVertexStorageTextures@, defined at @SDL3\/SDL_gpu.h 3432:34@
+--     [C declaration]: @SDL_BindGPUVertexStorageTextures@, defined at @SDL3\/SDL_gpu.h 3438:34@
 bindGPUVertexStorageTexturesSafe
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -3592,7 +3602,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_BindGPUVertexStorageBuffers@, defined at @SDL3\/SDL_gpu.h 3456:34@
+--     [C declaration]: @SDL_BindGPUVertexStorageBuffers@, defined at @SDL3\/SDL_gpu.h 3462:34@
 bindGPUVertexStorageBuffers
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -3637,7 +3647,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_BindGPUVertexStorageBuffers@, defined at @SDL3\/SDL_gpu.h 3456:34@
+--     [C declaration]: @SDL_BindGPUVertexStorageBuffers@, defined at @SDL3\/SDL_gpu.h 3462:34@
 bindGPUVertexStorageBuffersSafe
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -3667,6 +3677,8 @@
 --
 --     The textures must have been created with SDL_GPU_TEXTUREUSAGE_SAMPLER.
 --
+--     The textures being bound must have a matching type declared in the shader (2D, 3D, etc.). Multisample textures are not allowed.
+--
 --     Be sure your shader is set up according to the requirements documented in @'createGPUShader'@.
 --
 --     @since 3.2.0
@@ -3682,7 +3694,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_BindGPUFragmentSamplers@, defined at @SDL3\/SDL_gpu.h 3481:34@
+--     [C declaration]: @SDL_BindGPUFragmentSamplers@, defined at @SDL3\/SDL_gpu.h 3490:34@
 bindGPUFragmentSamplers
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -3712,6 +3724,8 @@
 --
 --     The textures must have been created with SDL_GPU_TEXTUREUSAGE_SAMPLER.
 --
+--     The textures being bound must have a matching type declared in the shader (2D, 3D, etc.). Multisample textures are not allowed.
+--
 --     Be sure your shader is set up according to the requirements documented in @'createGPUShader'@.
 --
 --     @since 3.2.0
@@ -3727,7 +3741,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_BindGPUFragmentSamplers@, defined at @SDL3\/SDL_gpu.h 3481:34@
+--     [C declaration]: @SDL_BindGPUFragmentSamplers@, defined at @SDL3\/SDL_gpu.h 3490:34@
 bindGPUFragmentSamplersSafe
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -3757,6 +3771,8 @@
 --
 --     These textures must have been created with SDL_GPU_TEXTUREUSAGE_GRAPHICS_STORAGE_READ.
 --
+--     The textures being bound must have a matching type declared in the shader (2D, 3D, 2DMS, etc.)
+--
 --     Be sure your shader is set up according to the requirements documented in @'createGPUShader'@.
 --
 --     @since 3.2.0
@@ -3772,7 +3788,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_BindGPUFragmentStorageTextures@, defined at @SDL3\/SDL_gpu.h 3505:34@
+--     [C declaration]: @SDL_BindGPUFragmentStorageTextures@, defined at @SDL3\/SDL_gpu.h 3517:34@
 bindGPUFragmentStorageTextures
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -3802,6 +3818,8 @@
 --
 --     These textures must have been created with SDL_GPU_TEXTUREUSAGE_GRAPHICS_STORAGE_READ.
 --
+--     The textures being bound must have a matching type declared in the shader (2D, 3D, 2DMS, etc.)
+--
 --     Be sure your shader is set up according to the requirements documented in @'createGPUShader'@.
 --
 --     @since 3.2.0
@@ -3817,7 +3835,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_BindGPUFragmentStorageTextures@, defined at @SDL3\/SDL_gpu.h 3505:34@
+--     [C declaration]: @SDL_BindGPUFragmentStorageTextures@, defined at @SDL3\/SDL_gpu.h 3517:34@
 bindGPUFragmentStorageTexturesSafe
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -3862,7 +3880,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_BindGPUFragmentStorageBuffers@, defined at @SDL3\/SDL_gpu.h 3529:34@
+--     [C declaration]: @SDL_BindGPUFragmentStorageBuffers@, defined at @SDL3\/SDL_gpu.h 3541:34@
 bindGPUFragmentStorageBuffers
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -3907,7 +3925,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_BindGPUFragmentStorageBuffers@, defined at @SDL3\/SDL_gpu.h 3529:34@
+--     [C declaration]: @SDL_BindGPUFragmentStorageBuffers@, defined at @SDL3\/SDL_gpu.h 3541:34@
 bindGPUFragmentStorageBuffersSafe
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -3950,7 +3968,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_DrawGPUIndexedPrimitives@, defined at @SDL3\/SDL_gpu.h 3560:34@
+--     [C declaration]: @SDL_DrawGPUIndexedPrimitives@, defined at @SDL3\/SDL_gpu.h 3572:34@
 drawGPUIndexedPrimitives
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -4009,7 +4027,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_DrawGPUIndexedPrimitives@, defined at @SDL3\/SDL_gpu.h 3560:34@
+--     [C declaration]: @SDL_DrawGPUIndexedPrimitives@, defined at @SDL3\/SDL_gpu.h 3572:34@
 drawGPUIndexedPrimitivesSafe
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -4068,7 +4086,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_DrawGPUPrimitives@, defined at @SDL3\/SDL_gpu.h 3588:34@
+--     [C declaration]: @SDL_DrawGPUPrimitives@, defined at @SDL3\/SDL_gpu.h 3600:34@
 drawGPUPrimitives
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -4121,7 +4139,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_DrawGPUPrimitives@, defined at @SDL3\/SDL_gpu.h 3588:34@
+--     [C declaration]: @SDL_DrawGPUPrimitives@, defined at @SDL3\/SDL_gpu.h 3600:34@
 drawGPUPrimitivesSafe
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -4172,7 +4190,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_DrawGPUPrimitivesIndirect@, defined at @SDL3\/SDL_gpu.h 3611:34@
+--     [C declaration]: @SDL_DrawGPUPrimitivesIndirect@, defined at @SDL3\/SDL_gpu.h 3623:34@
 drawGPUPrimitivesIndirect
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -4213,7 +4231,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_DrawGPUPrimitivesIndirect@, defined at @SDL3\/SDL_gpu.h 3611:34@
+--     [C declaration]: @SDL_DrawGPUPrimitivesIndirect@, defined at @SDL3\/SDL_gpu.h 3623:34@
 drawGPUPrimitivesIndirectSafe
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -4254,7 +4272,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_DrawGPUIndexedPrimitivesIndirect@, defined at @SDL3\/SDL_gpu.h 3633:34@
+--     [C declaration]: @SDL_DrawGPUIndexedPrimitivesIndirect@, defined at @SDL3\/SDL_gpu.h 3645:34@
 drawGPUIndexedPrimitivesIndirect
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -4295,7 +4313,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_DrawGPUIndexedPrimitivesIndirect@, defined at @SDL3\/SDL_gpu.h 3633:34@
+--     [C declaration]: @SDL_DrawGPUIndexedPrimitivesIndirect@, defined at @SDL3\/SDL_gpu.h 3645:34@
 drawGPUIndexedPrimitivesIndirectSafe
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -4333,7 +4351,7 @@
 --                   The safe flavor is 'endGPURenderPassSafe'
 --                   .
 --
---     [C declaration]: @SDL_EndGPURenderPass@, defined at @SDL3\/SDL_gpu.h 3649:34@
+--     [C declaration]: @SDL_EndGPURenderPass@, defined at @SDL3\/SDL_gpu.h 3661:34@
 endGPURenderPass
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -4354,7 +4372,7 @@
 --                   The unsafe flavor is 'endGPURenderPass'
 --                   .
 --
---     [C declaration]: @SDL_EndGPURenderPass@, defined at @SDL3\/SDL_gpu.h 3649:34@
+--     [C declaration]: @SDL_EndGPURenderPass@, defined at @SDL3\/SDL_gpu.h 3661:34@
 endGPURenderPassSafe
   :: BG.Ptr SDL_GPURenderPass
   -- ^
@@ -4384,7 +4402,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_BeginGPUComputePass@, defined at @SDL3\/SDL_gpu.h 3691:50@
+--     [C declaration]: @SDL_BeginGPUComputePass@, defined at @SDL3\/SDL_gpu.h 3703:50@
 beginGPUComputePass
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -4436,7 +4454,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_BeginGPUComputePass@, defined at @SDL3\/SDL_gpu.h 3691:50@
+--     [C declaration]: @SDL_BeginGPUComputePass@, defined at @SDL3\/SDL_gpu.h 3703:50@
 beginGPUComputePassSafe
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -4477,7 +4495,7 @@
 --                   The safe flavor is 'bindGPUComputePipelineSafe'
 --                   .
 --
---     [C declaration]: @SDL_BindGPUComputePipeline@, defined at @SDL3\/SDL_gpu.h 3706:34@
+--     [C declaration]: @SDL_BindGPUComputePipeline@, defined at @SDL3\/SDL_gpu.h 3718:34@
 bindGPUComputePipeline
   :: BG.Ptr SDL_GPUComputePass
   -- ^
@@ -4501,7 +4519,7 @@
 --                   The unsafe flavor is 'bindGPUComputePipeline'
 --                   .
 --
---     [C declaration]: @SDL_BindGPUComputePipeline@, defined at @SDL3\/SDL_gpu.h 3706:34@
+--     [C declaration]: @SDL_BindGPUComputePipeline@, defined at @SDL3\/SDL_gpu.h 3718:34@
 bindGPUComputePipelineSafe
   :: BG.Ptr SDL_GPUComputePass
   -- ^
@@ -4519,6 +4537,8 @@
 --
 --     The textures must have been created with SDL_GPU_TEXTUREUSAGE_SAMPLER.
 --
+--     The textures being bound must have a matching type declared in the shader (2D, 3D, etc.). Multisample textures are not allowed.
+--
 --     Be sure your shader is set up according to the requirements documented in @'createGPUComputePipeline'@.
 --
 --     @since 3.2.0
@@ -4534,7 +4554,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_BindGPUComputeSamplers@, defined at @SDL3\/SDL_gpu.h 3729:34@
+--     [C declaration]: @SDL_BindGPUComputeSamplers@, defined at @SDL3\/SDL_gpu.h 3744:34@
 bindGPUComputeSamplers
   :: BG.Ptr SDL_GPUComputePass
   -- ^
@@ -4564,6 +4584,8 @@
 --
 --     The textures must have been created with SDL_GPU_TEXTUREUSAGE_SAMPLER.
 --
+--     The textures being bound must have a matching type declared in the shader (2D, 3D, etc.). Multisample textures are not allowed.
+--
 --     Be sure your shader is set up according to the requirements documented in @'createGPUComputePipeline'@.
 --
 --     @since 3.2.0
@@ -4579,7 +4601,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_BindGPUComputeSamplers@, defined at @SDL3\/SDL_gpu.h 3729:34@
+--     [C declaration]: @SDL_BindGPUComputeSamplers@, defined at @SDL3\/SDL_gpu.h 3744:34@
 bindGPUComputeSamplersSafe
   :: BG.Ptr SDL_GPUComputePass
   -- ^
@@ -4609,6 +4631,8 @@
 --
 --     These textures must have been created with SDL_GPU_TEXTUREUSAGE_COMPUTE_STORAGE_READ.
 --
+--     The textures being bound must have a matching type declared in the shader (2D, 3D, 2DMS, etc.)
+--
 --     Be sure your shader is set up according to the requirements documented in @'createGPUComputePipeline'@.
 --
 --     @since 3.2.0
@@ -4624,7 +4648,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_BindGPUComputeStorageTextures@, defined at @SDL3\/SDL_gpu.h 3753:34@
+--     [C declaration]: @SDL_BindGPUComputeStorageTextures@, defined at @SDL3\/SDL_gpu.h 3771:34@
 bindGPUComputeStorageTextures
   :: BG.Ptr SDL_GPUComputePass
   -- ^
@@ -4654,6 +4678,8 @@
 --
 --     These textures must have been created with SDL_GPU_TEXTUREUSAGE_COMPUTE_STORAGE_READ.
 --
+--     The textures being bound must have a matching type declared in the shader (2D, 3D, 2DMS, etc.)
+--
 --     Be sure your shader is set up according to the requirements documented in @'createGPUComputePipeline'@.
 --
 --     @since 3.2.0
@@ -4669,7 +4695,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_BindGPUComputeStorageTextures@, defined at @SDL3\/SDL_gpu.h 3753:34@
+--     [C declaration]: @SDL_BindGPUComputeStorageTextures@, defined at @SDL3\/SDL_gpu.h 3771:34@
 bindGPUComputeStorageTexturesSafe
   :: BG.Ptr SDL_GPUComputePass
   -- ^
@@ -4714,7 +4740,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_BindGPUComputeStorageBuffers@, defined at @SDL3\/SDL_gpu.h 3777:34@
+--     [C declaration]: @SDL_BindGPUComputeStorageBuffers@, defined at @SDL3\/SDL_gpu.h 3795:34@
 bindGPUComputeStorageBuffers
   :: BG.Ptr SDL_GPUComputePass
   -- ^
@@ -4759,7 +4785,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_BindGPUComputeStorageBuffers@, defined at @SDL3\/SDL_gpu.h 3777:34@
+--     [C declaration]: @SDL_BindGPUComputeStorageBuffers@, defined at @SDL3\/SDL_gpu.h 3795:34@
 bindGPUComputeStorageBuffersSafe
   :: BG.Ptr SDL_GPUComputePass
   -- ^
@@ -4802,7 +4828,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_DispatchGPUCompute@, defined at @SDL3\/SDL_gpu.h 3803:34@
+--     [C declaration]: @SDL_DispatchGPUCompute@, defined at @SDL3\/SDL_gpu.h 3821:34@
 dispatchGPUCompute
   :: BG.Ptr SDL_GPUComputePass
   -- ^
@@ -4845,7 +4871,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_DispatchGPUCompute@, defined at @SDL3\/SDL_gpu.h 3803:34@
+--     [C declaration]: @SDL_DispatchGPUCompute@, defined at @SDL3\/SDL_gpu.h 3821:34@
 dispatchGPUComputeSafe
   :: BG.Ptr SDL_GPUComputePass
   -- ^
@@ -4888,7 +4914,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_DispatchGPUComputeIndirect@, defined at @SDL3\/SDL_gpu.h 3827:34@
+--     [C declaration]: @SDL_DispatchGPUComputeIndirect@, defined at @SDL3\/SDL_gpu.h 3845:34@
 dispatchGPUComputeIndirect
   :: BG.Ptr SDL_GPUComputePass
   -- ^
@@ -4926,7 +4952,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_DispatchGPUComputeIndirect@, defined at @SDL3\/SDL_gpu.h 3827:34@
+--     [C declaration]: @SDL_DispatchGPUComputeIndirect@, defined at @SDL3\/SDL_gpu.h 3845:34@
 dispatchGPUComputeIndirectSafe
   :: BG.Ptr SDL_GPUComputePass
   -- ^
@@ -4959,7 +4985,7 @@
 --                   The safe flavor is 'endGPUComputePassSafe'
 --                   .
 --
---     [C declaration]: @SDL_EndGPUComputePass@, defined at @SDL3\/SDL_gpu.h 3842:34@
+--     [C declaration]: @SDL_EndGPUComputePass@, defined at @SDL3\/SDL_gpu.h 3860:34@
 endGPUComputePass
   :: BG.Ptr SDL_GPUComputePass
   -- ^
@@ -4980,7 +5006,7 @@
 --                   The unsafe flavor is 'endGPUComputePass'
 --                   .
 --
---     [C declaration]: @SDL_EndGPUComputePass@, defined at @SDL3\/SDL_gpu.h 3842:34@
+--     [C declaration]: @SDL_EndGPUComputePass@, defined at @SDL3\/SDL_gpu.h 3860:34@
 endGPUComputePassSafe
   :: BG.Ptr SDL_GPUComputePass
   -- ^
@@ -5006,7 +5032,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_MapGPUTransferBuffer@, defined at @SDL3\/SDL_gpu.h 3862:36@
+--     [C declaration]: @SDL_MapGPUTransferBuffer@, defined at @SDL3\/SDL_gpu.h 3880:36@
 mapGPUTransferBuffer
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -5044,7 +5070,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_MapGPUTransferBuffer@, defined at @SDL3\/SDL_gpu.h 3862:36@
+--     [C declaration]: @SDL_MapGPUTransferBuffer@, defined at @SDL3\/SDL_gpu.h 3880:36@
 mapGPUTransferBufferSafe
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -5075,7 +5101,7 @@
 --                   The safe flavor is 'unmapGPUTransferBufferSafe'
 --                   .
 --
---     [C declaration]: @SDL_UnmapGPUTransferBuffer@, defined at @SDL3\/SDL_gpu.h 3875:34@
+--     [C declaration]: @SDL_UnmapGPUTransferBuffer@, defined at @SDL3\/SDL_gpu.h 3893:34@
 unmapGPUTransferBuffer
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -5099,7 +5125,7 @@
 --                   The unsafe flavor is 'unmapGPUTransferBuffer'
 --                   .
 --
---     [C declaration]: @SDL_UnmapGPUTransferBuffer@, defined at @SDL3\/SDL_gpu.h 3875:34@
+--     [C declaration]: @SDL_UnmapGPUTransferBuffer@, defined at @SDL3\/SDL_gpu.h 3893:34@
 unmapGPUTransferBufferSafe
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -5129,7 +5155,7 @@
 --                   The safe flavor is 'beginGPUCopyPassSafe'
 --                   .
 --
---     [C declaration]: @SDL_BeginGPUCopyPass@, defined at @SDL3\/SDL_gpu.h 3895:47@
+--     [C declaration]: @SDL_BeginGPUCopyPass@, defined at @SDL3\/SDL_gpu.h 3913:47@
 beginGPUCopyPass
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -5154,7 +5180,7 @@
 --                   The unsafe flavor is 'beginGPUCopyPass'
 --                   .
 --
---     [C declaration]: @SDL_BeginGPUCopyPass@, defined at @SDL3\/SDL_gpu.h 3895:47@
+--     [C declaration]: @SDL_BeginGPUCopyPass@, defined at @SDL3\/SDL_gpu.h 3913:47@
 beginGPUCopyPassSafe
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -5180,7 +5206,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_UploadToGPUTexture@, defined at @SDL3\/SDL_gpu.h 3915:34@
+--     [C declaration]: @SDL_UploadToGPUTexture@, defined at @SDL3\/SDL_gpu.h 3933:34@
 uploadToGPUTexture
   :: BG.Ptr SDL_GPUCopyPass
   -- ^
@@ -5223,7 +5249,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_UploadToGPUTexture@, defined at @SDL3\/SDL_gpu.h 3915:34@
+--     [C declaration]: @SDL_UploadToGPUTexture@, defined at @SDL3\/SDL_gpu.h 3933:34@
 uploadToGPUTextureSafe
   :: BG.Ptr SDL_GPUCopyPass
   -- ^
@@ -5264,7 +5290,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_UploadToGPUBuffer@, defined at @SDL3\/SDL_gpu.h 3935:34@
+--     [C declaration]: @SDL_UploadToGPUBuffer@, defined at @SDL3\/SDL_gpu.h 3953:34@
 uploadToGPUBuffer
   :: BG.Ptr SDL_GPUCopyPass
   -- ^
@@ -5305,7 +5331,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_UploadToGPUBuffer@, defined at @SDL3\/SDL_gpu.h 3935:34@
+--     [C declaration]: @SDL_UploadToGPUBuffer@, defined at @SDL3\/SDL_gpu.h 3953:34@
 uploadToGPUBufferSafe
   :: BG.Ptr SDL_GPUCopyPass
   -- ^
@@ -5348,7 +5374,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_CopyGPUTextureToTexture@, defined at @SDL3\/SDL_gpu.h 3962:34@
+--     [C declaration]: @SDL_CopyGPUTextureToTexture@, defined at @SDL3\/SDL_gpu.h 3980:34@
 copyGPUTextureToTexture
   :: BG.Ptr SDL_GPUCopyPass
   -- ^
@@ -5413,7 +5439,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_CopyGPUTextureToTexture@, defined at @SDL3\/SDL_gpu.h 3962:34@
+--     [C declaration]: @SDL_CopyGPUTextureToTexture@, defined at @SDL3\/SDL_gpu.h 3980:34@
 copyGPUTextureToTextureSafe
   :: BG.Ptr SDL_GPUCopyPass
   -- ^
@@ -5476,7 +5502,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_CopyGPUBufferToBuffer@, defined at @SDL3\/SDL_gpu.h 3986:34@
+--     [C declaration]: @SDL_CopyGPUBufferToBuffer@, defined at @SDL3\/SDL_gpu.h 4004:34@
 copyGPUBufferToBuffer
   :: BG.Ptr SDL_GPUCopyPass
   -- ^
@@ -5522,7 +5548,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_CopyGPUBufferToBuffer@, defined at @SDL3\/SDL_gpu.h 3986:34@
+--     [C declaration]: @SDL_CopyGPUBufferToBuffer@, defined at @SDL3\/SDL_gpu.h 4004:34@
 copyGPUBufferToBufferSafe
   :: BG.Ptr SDL_GPUCopyPass
   -- ^
@@ -5565,7 +5591,7 @@
 --                   The safe flavor is 'downloadFromGPUTextureSafe'
 --                   .
 --
---     [C declaration]: @SDL_DownloadFromGPUTexture@, defined at @SDL3\/SDL_gpu.h 4006:34@
+--     [C declaration]: @SDL_DownloadFromGPUTexture@, defined at @SDL3\/SDL_gpu.h 4024:34@
 downloadFromGPUTexture
   :: BG.Ptr SDL_GPUCopyPass
   -- ^
@@ -5595,7 +5621,7 @@
 --                   The unsafe flavor is 'downloadFromGPUTexture'
 --                   .
 --
---     [C declaration]: @SDL_DownloadFromGPUTexture@, defined at @SDL3\/SDL_gpu.h 4006:34@
+--     [C declaration]: @SDL_DownloadFromGPUTexture@, defined at @SDL3\/SDL_gpu.h 4024:34@
 downloadFromGPUTextureSafe
   :: BG.Ptr SDL_GPUCopyPass
   -- ^
@@ -5625,7 +5651,7 @@
 --                   The safe flavor is 'downloadFromGPUBufferSafe'
 --                   .
 --
---     [C declaration]: @SDL_DownloadFromGPUBuffer@, defined at @SDL3\/SDL_gpu.h 4023:34@
+--     [C declaration]: @SDL_DownloadFromGPUBuffer@, defined at @SDL3\/SDL_gpu.h 4041:34@
 downloadFromGPUBuffer
   :: BG.Ptr SDL_GPUCopyPass
   -- ^
@@ -5655,7 +5681,7 @@
 --                   The unsafe flavor is 'downloadFromGPUBuffer'
 --                   .
 --
---     [C declaration]: @SDL_DownloadFromGPUBuffer@, defined at @SDL3\/SDL_gpu.h 4023:34@
+--     [C declaration]: @SDL_DownloadFromGPUBuffer@, defined at @SDL3\/SDL_gpu.h 4041:34@
 downloadFromGPUBufferSafe
   :: BG.Ptr SDL_GPUCopyPass
   -- ^
@@ -5683,7 +5709,7 @@
 --                   The safe flavor is 'endGPUCopyPassSafe'
 --                   .
 --
---     [C declaration]: @SDL_EndGPUCopyPass@, defined at @SDL3\/SDL_gpu.h 4035:34@
+--     [C declaration]: @SDL_EndGPUCopyPass@, defined at @SDL3\/SDL_gpu.h 4053:34@
 endGPUCopyPass
   :: BG.Ptr SDL_GPUCopyPass
   -- ^
@@ -5702,7 +5728,7 @@
 --                   The unsafe flavor is 'endGPUCopyPass'
 --                   .
 --
---     [C declaration]: @SDL_EndGPUCopyPass@, defined at @SDL3\/SDL_gpu.h 4035:34@
+--     [C declaration]: @SDL_EndGPUCopyPass@, defined at @SDL3\/SDL_gpu.h 4053:34@
 endGPUCopyPassSafe
   :: BG.Ptr SDL_GPUCopyPass
   -- ^
@@ -5723,7 +5749,7 @@
 --                   The safe flavor is 'generateMipmapsForGPUTextureSafe'
 --                   .
 --
---     [C declaration]: @SDL_GenerateMipmapsForGPUTexture@, defined at @SDL3\/SDL_gpu.h 4048:34@
+--     [C declaration]: @SDL_GenerateMipmapsForGPUTexture@, defined at @SDL3\/SDL_gpu.h 4066:34@
 generateMipmapsForGPUTexture
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -5749,7 +5775,7 @@
 --                   The unsafe flavor is 'generateMipmapsForGPUTexture'
 --                   .
 --
---     [C declaration]: @SDL_GenerateMipmapsForGPUTexture@, defined at @SDL3\/SDL_gpu.h 4048:34@
+--     [C declaration]: @SDL_GenerateMipmapsForGPUTexture@, defined at @SDL3\/SDL_gpu.h 4066:34@
 generateMipmapsForGPUTextureSafe
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -5775,7 +5801,7 @@
 --                   The safe flavor is 'blitGPUTextureSafe'
 --                   .
 --
---     [C declaration]: @SDL_BlitGPUTexture@, defined at @SDL3\/SDL_gpu.h 4062:34@
+--     [C declaration]: @SDL_BlitGPUTexture@, defined at @SDL3\/SDL_gpu.h 4080:34@
 blitGPUTexture
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -5800,7 +5826,7 @@
 --                   The unsafe flavor is 'blitGPUTexture'
 --                   .
 --
---     [C declaration]: @SDL_BlitGPUTexture@, defined at @SDL3\/SDL_gpu.h 4062:34@
+--     [C declaration]: @SDL_BlitGPUTexture@, defined at @SDL3\/SDL_gpu.h 4080:34@
 blitGPUTextureSafe
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -5832,7 +5858,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_WindowSupportsGPUSwapchainComposition@, defined at @SDL3\/SDL_gpu.h 4082:34@
+--     [C declaration]: @SDL_WindowSupportsGPUSwapchainComposition@, defined at @SDL3\/SDL_gpu.h 4100:34@
 windowSupportsGPUSwapchainComposition
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -5872,7 +5898,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_WindowSupportsGPUSwapchainComposition@, defined at @SDL3\/SDL_gpu.h 4082:34@
+--     [C declaration]: @SDL_WindowSupportsGPUSwapchainComposition@, defined at @SDL3\/SDL_gpu.h 4100:34@
 windowSupportsGPUSwapchainCompositionSafe
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -5912,7 +5938,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_WindowSupportsGPUPresentMode@, defined at @SDL3\/SDL_gpu.h 4101:34@
+--     [C declaration]: @SDL_WindowSupportsGPUPresentMode@, defined at @SDL3\/SDL_gpu.h 4119:34@
 windowSupportsGPUPresentMode
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -5952,7 +5978,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_WindowSupportsGPUPresentMode@, defined at @SDL3\/SDL_gpu.h 4101:34@
+--     [C declaration]: @SDL_WindowSupportsGPUPresentMode@, defined at @SDL3\/SDL_gpu.h 4119:34@
 windowSupportsGPUPresentModeSafe
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -5996,7 +6022,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_ClaimWindowForGPUDevice@, defined at @SDL3\/SDL_gpu.h 4133:34@
+--     [C declaration]: @SDL_ClaimWindowForGPUDevice@, defined at @SDL3\/SDL_gpu.h 4151:34@
 claimWindowForGPUDevice
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -6035,7 +6061,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_ClaimWindowForGPUDevice@, defined at @SDL3\/SDL_gpu.h 4133:34@
+--     [C declaration]: @SDL_ClaimWindowForGPUDevice@, defined at @SDL3\/SDL_gpu.h 4151:34@
 claimWindowForGPUDeviceSafe
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -6063,7 +6089,7 @@
 --                   The safe flavor is 'releaseWindowFromGPUDeviceSafe'
 --                   .
 --
---     [C declaration]: @SDL_ReleaseWindowFromGPUDevice@, defined at @SDL3\/SDL_gpu.h 4147:34@
+--     [C declaration]: @SDL_ReleaseWindowFromGPUDevice@, defined at @SDL3\/SDL_gpu.h 4165:34@
 releaseWindowFromGPUDevice
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -6089,7 +6115,7 @@
 --                   The unsafe flavor is 'releaseWindowFromGPUDevice'
 --                   .
 --
---     [C declaration]: @SDL_ReleaseWindowFromGPUDevice@, defined at @SDL3\/SDL_gpu.h 4147:34@
+--     [C declaration]: @SDL_ReleaseWindowFromGPUDevice@, defined at @SDL3\/SDL_gpu.h 4165:34@
 releaseWindowFromGPUDeviceSafe
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -6124,7 +6150,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_SetGPUSwapchainParameters@, defined at @SDL3\/SDL_gpu.h 4174:34@
+--     [C declaration]: @SDL_SetGPUSwapchainParameters@, defined at @SDL3\/SDL_gpu.h 4192:34@
 setGPUSwapchainParameters
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -6171,7 +6197,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_SetGPUSwapchainParameters@, defined at @SDL3\/SDL_gpu.h 4174:34@
+--     [C declaration]: @SDL_SetGPUSwapchainParameters@, defined at @SDL3\/SDL_gpu.h 4192:34@
 setGPUSwapchainParametersSafe
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -6220,7 +6246,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_SetGPUAllowedFramesInFlight@, defined at @SDL3\/SDL_gpu.h 4205:34@
+--     [C declaration]: @SDL_SetGPUAllowedFramesInFlight@, defined at @SDL3\/SDL_gpu.h 4223:34@
 setGPUAllowedFramesInFlight
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -6259,7 +6285,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_SetGPUAllowedFramesInFlight@, defined at @SDL3\/SDL_gpu.h 4205:34@
+--     [C declaration]: @SDL_SetGPUAllowedFramesInFlight@, defined at @SDL3\/SDL_gpu.h 4223:34@
 setGPUAllowedFramesInFlightSafe
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -6289,7 +6315,7 @@
 --                   The safe flavor is 'getGPUSwapchainTextureFormatSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetGPUSwapchainTextureFormat@, defined at @SDL3\/SDL_gpu.h 4220:50@
+--     [C declaration]: @SDL_GetGPUSwapchainTextureFormat@, defined at @SDL3\/SDL_gpu.h 4238:50@
 getGPUSwapchainTextureFormat
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -6317,7 +6343,7 @@
 --                   The unsafe flavor is 'getGPUSwapchainTextureFormat'
 --                   .
 --
---     [C declaration]: @SDL_GetGPUSwapchainTextureFormat@, defined at @SDL3\/SDL_gpu.h 4220:50@
+--     [C declaration]: @SDL_GetGPUSwapchainTextureFormat@, defined at @SDL3\/SDL_gpu.h 4238:50@
 getGPUSwapchainTextureFormatSafe
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -6358,7 +6384,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_AcquireGPUSwapchainTexture@, defined at @SDL3\/SDL_gpu.h 4272:34@
+--     [C declaration]: @SDL_AcquireGPUSwapchainTexture@, defined at @SDL3\/SDL_gpu.h 4290:34@
 acquireGPUSwapchainTexture
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -6416,7 +6442,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_AcquireGPUSwapchainTexture@, defined at @SDL3\/SDL_gpu.h 4272:34@
+--     [C declaration]: @SDL_AcquireGPUSwapchainTexture@, defined at @SDL3\/SDL_gpu.h 4290:34@
 acquireGPUSwapchainTextureSafe
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -6466,7 +6492,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_WaitForGPUSwapchain@, defined at @SDL3\/SDL_gpu.h 4296:34@
+--     [C declaration]: @SDL_WaitForGPUSwapchain@, defined at @SDL3\/SDL_gpu.h 4314:34@
 waitForGPUSwapchain
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -6501,7 +6527,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_WaitForGPUSwapchain@, defined at @SDL3\/SDL_gpu.h 4296:34@
+--     [C declaration]: @SDL_WaitForGPUSwapchain@, defined at @SDL3\/SDL_gpu.h 4314:34@
 waitForGPUSwapchainSafe
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -6544,7 +6570,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_WaitAndAcquireGPUSwapchainTexture@, defined at @SDL3\/SDL_gpu.h 4342:34@
+--     [C declaration]: @SDL_WaitAndAcquireGPUSwapchainTexture@, defined at @SDL3\/SDL_gpu.h 4360:34@
 waitAndAcquireGPUSwapchainTexture
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -6602,7 +6628,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_WaitAndAcquireGPUSwapchainTexture@, defined at @SDL3\/SDL_gpu.h 4342:34@
+--     [C declaration]: @SDL_WaitAndAcquireGPUSwapchainTexture@, defined at @SDL3\/SDL_gpu.h 4360:34@
 waitAndAcquireGPUSwapchainTextureSafe
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -6656,7 +6682,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_SubmitGPUCommandBuffer@, defined at @SDL3\/SDL_gpu.h 4370:34@
+--     [C declaration]: @SDL_SubmitGPUCommandBuffer@, defined at @SDL3\/SDL_gpu.h 4388:34@
 submitGPUCommandBuffer
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -6690,7 +6716,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_SubmitGPUCommandBuffer@, defined at @SDL3\/SDL_gpu.h 4370:34@
+--     [C declaration]: @SDL_SubmitGPUCommandBuffer@, defined at @SDL3\/SDL_gpu.h 4388:34@
 submitGPUCommandBufferSafe
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -6721,7 +6747,7 @@
 --                   The safe flavor is 'submitGPUCommandBufferAndAcquireFenceSafe'
 --                   .
 --
---     [C declaration]: @SDL_SubmitGPUCommandBufferAndAcquireFence@, defined at @SDL3\/SDL_gpu.h 4397:44@
+--     [C declaration]: @SDL_SubmitGPUCommandBufferAndAcquireFence@, defined at @SDL3\/SDL_gpu.h 4415:44@
 submitGPUCommandBufferAndAcquireFence
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -6751,7 +6777,7 @@
 --                   The unsafe flavor is 'submitGPUCommandBufferAndAcquireFence'
 --                   .
 --
---     [C declaration]: @SDL_SubmitGPUCommandBufferAndAcquireFence@, defined at @SDL3\/SDL_gpu.h 4397:44@
+--     [C declaration]: @SDL_SubmitGPUCommandBufferAndAcquireFence@, defined at @SDL3\/SDL_gpu.h 4415:44@
 submitGPUCommandBufferAndAcquireFenceSafe
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -6786,7 +6812,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_CancelGPUCommandBuffer@, defined at @SDL3\/SDL_gpu.h 4422:34@
+--     [C declaration]: @SDL_CancelGPUCommandBuffer@, defined at @SDL3\/SDL_gpu.h 4440:34@
 cancelGPUCommandBuffer
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -6822,7 +6848,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_CancelGPUCommandBuffer@, defined at @SDL3\/SDL_gpu.h 4422:34@
+--     [C declaration]: @SDL_CancelGPUCommandBuffer@, defined at @SDL3\/SDL_gpu.h 4440:34@
 cancelGPUCommandBufferSafe
   :: BG.Ptr SDL_GPUCommandBuffer
   -- ^
@@ -6850,7 +6876,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_WaitForGPUIdle@, defined at @SDL3\/SDL_gpu.h 4436:34@
+--     [C declaration]: @SDL_WaitForGPUIdle@, defined at @SDL3\/SDL_gpu.h 4454:34@
 waitForGPUIdle
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -6878,7 +6904,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_WaitForGPUIdle@, defined at @SDL3\/SDL_gpu.h 4436:34@
+--     [C declaration]: @SDL_WaitForGPUIdle@, defined at @SDL3\/SDL_gpu.h 4454:34@
 waitForGPUIdleSafe
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -6906,7 +6932,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_WaitForGPUFences@, defined at @SDL3\/SDL_gpu.h 4455:34@
+--     [C declaration]: @SDL_WaitForGPUFences@, defined at @SDL3\/SDL_gpu.h 4473:34@
 waitForGPUFences
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -6949,7 +6975,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_WaitForGPUFences@, defined at @SDL3\/SDL_gpu.h 4455:34@
+--     [C declaration]: @SDL_WaitForGPUFences@, defined at @SDL3\/SDL_gpu.h 4473:34@
 waitForGPUFencesSafe
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -6992,7 +7018,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_QueryGPUFence@, defined at @SDL3\/SDL_gpu.h 4472:34@
+--     [C declaration]: @SDL_QueryGPUFence@, defined at @SDL3\/SDL_gpu.h 4490:34@
 queryGPUFence
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -7025,7 +7051,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_QueryGPUFence@, defined at @SDL3\/SDL_gpu.h 4472:34@
+--     [C declaration]: @SDL_QueryGPUFence@, defined at @SDL3\/SDL_gpu.h 4490:34@
 queryGPUFenceSafe
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -7055,7 +7081,7 @@
 --                   The safe flavor is 'releaseGPUFenceSafe'
 --                   .
 --
---     [C declaration]: @SDL_ReleaseGPUFence@, defined at @SDL3\/SDL_gpu.h 4488:34@
+--     [C declaration]: @SDL_ReleaseGPUFence@, defined at @SDL3\/SDL_gpu.h 4506:34@
 releaseGPUFence
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -7082,7 +7108,7 @@
 --                   The unsafe flavor is 'releaseGPUFence'
 --                   .
 --
---     [C declaration]: @SDL_ReleaseGPUFence@, defined at @SDL3\/SDL_gpu.h 4488:34@
+--     [C declaration]: @SDL_ReleaseGPUFence@, defined at @SDL3\/SDL_gpu.h 4506:34@
 releaseGPUFenceSafe
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -7112,7 +7138,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GPUTextureFormatTexelBlockSize@, defined at @SDL3\/SDL_gpu.h 4504:36@
+--     [C declaration]: @SDL_GPUTextureFormatTexelBlockSize@, defined at @SDL3\/SDL_gpu.h 4522:36@
 gpuTextureFormatTexelBlockSize
   :: SDL_GPUTextureFormat
   -- ^
@@ -7140,7 +7166,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GPUTextureFormatTexelBlockSize@, defined at @SDL3\/SDL_gpu.h 4504:36@
+--     [C declaration]: @SDL_GPUTextureFormatTexelBlockSize@, defined at @SDL3\/SDL_gpu.h 4522:36@
 gpuTextureFormatTexelBlockSizeSafe
   :: SDL_GPUTextureFormat
   -- ^
@@ -7166,7 +7192,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GPUTextureSupportsFormat@, defined at @SDL3\/SDL_gpu.h 4519:34@
+--     [C declaration]: @SDL_GPUTextureSupportsFormat@, defined at @SDL3\/SDL_gpu.h 4537:34@
 gpuTextureSupportsFormat
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -7207,7 +7233,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GPUTextureSupportsFormat@, defined at @SDL3\/SDL_gpu.h 4519:34@
+--     [C declaration]: @SDL_GPUTextureSupportsFormat@, defined at @SDL3\/SDL_gpu.h 4537:34@
 gpuTextureSupportsFormatSafe
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -7248,7 +7274,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GPUTextureSupportsSampleCount@, defined at @SDL3\/SDL_gpu.h 4535:34@
+--     [C declaration]: @SDL_GPUTextureSupportsSampleCount@, defined at @SDL3\/SDL_gpu.h 4553:34@
 gpuTextureSupportsSampleCount
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -7284,7 +7310,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_GPUTextureSupportsSampleCount@, defined at @SDL3\/SDL_gpu.h 4535:34@
+--     [C declaration]: @SDL_GPUTextureSupportsSampleCount@, defined at @SDL3\/SDL_gpu.h 4553:34@
 gpuTextureSupportsSampleCountSafe
   :: BG.Ptr SDL_GPUDevice
   -- ^
@@ -7320,7 +7346,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_CalculateGPUTextureFormatSize@, defined at @SDL3\/SDL_gpu.h 4551:36@
+--     [C declaration]: @SDL_CalculateGPUTextureFormatSize@, defined at @SDL3\/SDL_gpu.h 4569:36@
 calculateGPUTextureFormatSize
   :: SDL_GPUTextureFormat
   -- ^
@@ -7368,7 +7394,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_CalculateGPUTextureFormatSize@, defined at @SDL3\/SDL_gpu.h 4551:36@
+--     [C declaration]: @SDL_CalculateGPUTextureFormatSize@, defined at @SDL3\/SDL_gpu.h 4569:36@
 calculateGPUTextureFormatSizeSafe
   :: SDL_GPUTextureFormat
   -- ^
@@ -7413,7 +7439,7 @@
 --                   The safe flavor is 'getPixelFormatFromGPUTextureFormatSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetPixelFormatFromGPUTextureFormat@, defined at @SDL3\/SDL_gpu.h 4566:45@
+--     [C declaration]: @SDL_GetPixelFormatFromGPUTextureFormat@, defined at @SDL3\/SDL_gpu.h 4584:45@
 getPixelFormatFromGPUTextureFormat
   :: SDL_GPUTextureFormat
   -- ^
@@ -7435,7 +7461,7 @@
 --                   The unsafe flavor is 'getPixelFormatFromGPUTextureFormat'
 --                   .
 --
---     [C declaration]: @SDL_GetPixelFormatFromGPUTextureFormat@, defined at @SDL3\/SDL_gpu.h 4566:45@
+--     [C declaration]: @SDL_GetPixelFormatFromGPUTextureFormat@, defined at @SDL3\/SDL_gpu.h 4584:45@
 getPixelFormatFromGPUTextureFormatSafe
   :: SDL_GPUTextureFormat
   -- ^
@@ -7457,7 +7483,7 @@
 --                   The safe flavor is 'getGPUTextureFormatFromPixelFormatSafe'
 --                   .
 --
---     [C declaration]: @SDL_GetGPUTextureFormatFromPixelFormat@, defined at @SDL3\/SDL_gpu.h 4578:50@
+--     [C declaration]: @SDL_GetGPUTextureFormatFromPixelFormat@, defined at @SDL3\/SDL_gpu.h 4596:50@
 getGPUTextureFormatFromPixelFormat
   :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
   -- ^
@@ -7479,7 +7505,7 @@
 --                   The unsafe flavor is 'getGPUTextureFormatFromPixelFormat'
 --                   .
 --
---     [C declaration]: @SDL_GetGPUTextureFormatFromPixelFormat@, defined at @SDL3\/SDL_gpu.h 4578:50@
+--     [C declaration]: @SDL_GetGPUTextureFormatFromPixelFormat@, defined at @SDL3\/SDL_gpu.h 4596:50@
 getGPUTextureFormatFromPixelFormatSafe
   :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
   -- ^
diff --git a/src/SDL3/Sys/Guid.hs b/src/SDL3/Sys/Guid.hs
--- a/src/SDL3/Sys/Guid.hs
+++ b/src/SDL3/Sys/Guid.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | A GUID is a 128-bit value that represents something that is uniquely identifiable by this value: \"globally unique.\"
 --
 --     SDL provides functions to convert a GUID to\/from a string. An 'SDL_GUID' is a 128-bit identifier for an input device that identifies that device across runs of SDL programs on the same platform.
@@ -27,6 +29,7 @@
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (IO)
 
 import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
diff --git a/src/SDL3/Sys/Haptic.hs b/src/SDL3/Sys/Haptic.hs
--- a/src/SDL3/Sys/Haptic.hs
+++ b/src/SDL3/Sys/Haptic.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | The SDL haptic subsystem manages haptic (force feedback) devices.
 --
@@ -199,6 +200,7 @@
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (Bool, Float, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.LibC qualified
diff --git a/src/SDL3/Sys/Hidapi.hs b/src/SDL3/Sys/Hidapi.hs
--- a/src/SDL3/Sys/Hidapi.hs
+++ b/src/SDL3/Sys/Hidapi.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | Header file for SDL HIDAPI functions.
 --
 --     This is an adaptation of the original HIDAPI interface by Alan Ott, and includes source code licensed under the following license:
@@ -79,6 +81,7 @@
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (Bool, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.LibC qualified
diff --git a/src/SDL3/Sys/Hints.hs b/src/SDL3/Sys/Hints.hs
--- a/src/SDL3/Sys/Hints.hs
+++ b/src/SDL3/Sys/Hints.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | This file contains functions to set and get configuration hints, as well as listing each of them alphabetically.
 --
 --     The convention for naming hints is SDL_HINT_X, where \"SDL_X\" is the environment variable that can be used to override the default.
@@ -42,6 +44,8 @@
   SDL3.Sys.Hints.removeHintCallbackSafe,
 )
 where
+
+import Prelude (Bool, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
diff --git a/src/SDL3/Sys/Init.hs b/src/SDL3/Sys/Init.hs
--- a/src/SDL3/Sys/Init.hs
+++ b/src/SDL3/Sys/Init.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | All SDL programs need to initialize the library before starting to work with it.
 --
@@ -55,6 +56,8 @@
 )
 where
 
+import Prelude (Bool, IO, fmap)
+
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
@@ -594,7 +597,7 @@
 --
 --     These are the supported properties:
 --
---     * @'sDL_PROP_APP_METADATA_NAME_STRING'@: The human-readable name of the application, like \"My Game 2: Bad Guy\'s Revenge!\". This will show up anywhere the OS shows the name of the application separately from window titles, such as volume control applets, etc. This defaults to \"SDL Application\".
+--     * @'sDL_PROP_APP_METADATA_NAME_STRING'@: The human-readable name of the application, like \"My Game 2: Bad Guy\'s Revenge!\". This will show up anywhere the OS shows the name of the application separately from window titles, such as volume control applets, etc. If not provided by the app, SDL will attempt to pick a reasonable default (the app\'s binary\'s name if the platform can provide it, or \"SDL Application\" if all else fails).
 --
 --     * @'sDL_PROP_APP_METADATA_VERSION_STRING'@: The version of the app that is running; there are no rules on format, so \"1.0.3beta2\" and \"April 22nd, 2024\" and a git hash are all valid options. This has no default.
 --
@@ -625,7 +628,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_SetAppMetadataProperty@, defined at @SDL3\/SDL_init.h 468:34@
+--     [C declaration]: @SDL_SetAppMetadataProperty@, defined at @SDL3\/SDL_init.h 469:34@
 setAppMetadataProperty
   :: PtrConst.PtrConst BG.CChar
   -- ^
@@ -653,7 +656,7 @@
 --
 --     These are the supported properties:
 --
---     * @'sDL_PROP_APP_METADATA_NAME_STRING'@: The human-readable name of the application, like \"My Game 2: Bad Guy\'s Revenge!\". This will show up anywhere the OS shows the name of the application separately from window titles, such as volume control applets, etc. This defaults to \"SDL Application\".
+--     * @'sDL_PROP_APP_METADATA_NAME_STRING'@: The human-readable name of the application, like \"My Game 2: Bad Guy\'s Revenge!\". This will show up anywhere the OS shows the name of the application separately from window titles, such as volume control applets, etc. If not provided by the app, SDL will attempt to pick a reasonable default (the app\'s binary\'s name if the platform can provide it, or \"SDL Application\" if all else fails).
 --
 --     * @'sDL_PROP_APP_METADATA_VERSION_STRING'@: The version of the app that is running; there are no rules on format, so \"1.0.3beta2\" and \"April 22nd, 2024\" and a git hash are all valid options. This has no default.
 --
@@ -684,7 +687,7 @@
 --     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
 --                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
 --
---     [C declaration]: @SDL_SetAppMetadataProperty@, defined at @SDL3\/SDL_init.h 468:34@
+--     [C declaration]: @SDL_SetAppMetadataProperty@, defined at @SDL3\/SDL_init.h 469:34@
 setAppMetadataPropertySafe
   :: PtrConst.PtrConst BG.CChar
   -- ^
@@ -718,7 +721,7 @@
 --                   The safe flavor is 'getAppMetadataPropertySafe'
 --                   .
 --
---     [C declaration]: @SDL_GetAppMetadataProperty@, defined at @SDL3\/SDL_init.h 499:42@
+--     [C declaration]: @SDL_GetAppMetadataProperty@, defined at @SDL3\/SDL_init.h 500:42@
 getAppMetadataProperty
   :: PtrConst.PtrConst BG.CChar
   -- ^
@@ -746,7 +749,7 @@
 --                   The unsafe flavor is 'getAppMetadataProperty'
 --                   .
 --
---     [C declaration]: @SDL_GetAppMetadataProperty@, defined at @SDL3\/SDL_init.h 499:42@
+--     [C declaration]: @SDL_GetAppMetadataProperty@, defined at @SDL3\/SDL_init.h 500:42@
 getAppMetadataPropertySafe
   :: PtrConst.PtrConst BG.CChar
   -- ^
diff --git a/src/SDL3/Sys/Iostream.hs b/src/SDL3/Sys/Iostream.hs
--- a/src/SDL3/Sys/Iostream.hs
+++ b/src/SDL3/Sys/Iostream.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | SDL provides an abstract interface for reading and writing data streams. It offers implementations for files, memory, etc, and the app can provide their own implementations, too.
 --
 --     'SDL_IOStream' is not related to the standard C++ iostream class, other than both are abstract interfaces to read\/write data. 'SDL_IOStream' status, set by a read or write operation.
@@ -8,6 +10,8 @@
 --
 --     Unsuffixed aliases are __unsafe__ foreign imports; aliases suffixed @Safe@ are safe. Functions whose callbacks fire during the call export only the Safe alias (the genuine unsafe import stays reachable under @SDL3.Sys.Bindgen.Iostream.Unsafe@); functions curated unsafe-only export only the unsuffixed one. Each alias\'s documentation records its flavor and rationale.
 --
+--     The C shims are functions this package defines in C over what the FFI cannot call directly (variadic functions, function-like macros), each named after what it wraps; the same flavor rules apply. Their raw imports live under "SDL3.Sys.Bindgen.IostreamShims".
+--
 --     Full conventions: "SDL3.Sys".
 module SDL3.Sys.Iostream (
   module SDL3.Sys.Bindgen.Iostream,
@@ -105,18 +109,26 @@
   SDL3.Sys.Iostream.writeU64BESafe,
   SDL3.Sys.Iostream.writeS64BE,
   SDL3.Sys.Iostream.writeS64BESafe,
+
+  -- * C shims
+  SDL3.Sys.Iostream.ioPrintf,
+  SDL3.Sys.Iostream.ioPrintfSafe,
 )
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (Bool, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import SDL3.Sys.Bindgen.Iostream
+import SDL3.Sys.Bindgen.Iostream qualified
 import SDL3.Sys.Bindgen.Iostream.Safe qualified as Safe
 import SDL3.Sys.Bindgen.Iostream.Unsafe qualified as Unsafe
+import SDL3.Sys.Bindgen.IostreamShims.Safe qualified as Safe
+import SDL3.Sys.Bindgen.IostreamShims.Unsafe qualified as Unsafe
 import SDL3.Sys.Bindgen.Properties qualified
 import SDL3.Sys.Bindgen.Stdinc qualified
 
@@ -1076,7 +1088,7 @@
 --
 --     @since 3.2.0
 --
---     [See also]: @SDL_IOprintf@, 'readIO', 'seekIO', 'flushIO', 'getIOStatus'
+--     [See also]: @'ioPrintf'@, 'readIO', 'seekIO', 'flushIO', 'getIOStatus'
 --
 --     === __@sdl3-bindgen-sys@ notes__
 --
@@ -1124,7 +1136,7 @@
 --
 --     @since 3.2.0
 --
---     [See also]: @SDL_IOprintf@, 'readIO', 'seekIO', 'flushIO', 'getIOStatus'
+--     [See also]: @'ioPrintf'@, 'readIO', 'seekIO', 'flushIO', 'getIOStatus'
 --
 --     === __@sdl3-bindgen-sys@ notes__
 --
@@ -3537,3 +3549,77 @@
   \x00 ->
     \x11 ->
       fmap CBool.toBool (Safe.sDL_WriteS64BE x00 (Coerce.coerce x11))
+
+-- | Print a string to an SDL_IOStream data stream.
+--
+--     A fixed-arity shim over the variadic SDL_IOprintf: @str@ is written verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Returns]: the number of bytes written or 0 on failure; call 'SDL3.Sys.Error.getError' for more information.
+--
+--     [Thread safety]: Do not use the same SDL_IOStream from two threads at once.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'writeIO'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_IOprintf@.
+--                   The safe flavor is 'ioPrintfSafe'
+--                   : writes through the stream\'s SDL_IOStreamInterface, which may be implemented in Haskell.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_IOprintf@, defined at @sdl3-bindgen-sys\/SDL_iostream_shims.h 42:26@
+ioPrintf
+  :: BG.Ptr SDL3.Sys.Bindgen.Iostream.SDL_IOStream
+  -- ^
+  --
+  --           [@context@]: a pointer to an SDL_IOStream structure.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: the NUL-terminated string to write.
+  -> IO BG.Word64
+ioPrintf =
+  \x00 ->
+    \x11 ->
+      fmap Coerce.coerce (Unsafe.lithon_SDL_IOprintf x00 x11)
+
+-- | Print a string to an SDL_IOStream data stream.
+--
+--     A fixed-arity shim over the variadic SDL_IOprintf: @str@ is written verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Returns]: the number of bytes written or 0 on failure; call 'SDL3.Sys.Error.getError' for more information.
+--
+--     [Thread safety]: Do not use the same SDL_IOStream from two threads at once.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'writeIO'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Safe__ foreign import of @lithon_SDL_IOprintf@.
+--                   The unsafe flavor is 'ioPrintf'
+--                   : writes through the stream\'s SDL_IOStreamInterface, which may be implemented in Haskell.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_IOprintf@, defined at @sdl3-bindgen-sys\/SDL_iostream_shims.h 42:26@
+ioPrintfSafe
+  :: BG.Ptr SDL3.Sys.Bindgen.Iostream.SDL_IOStream
+  -- ^
+  --
+  --           [@context@]: a pointer to an SDL_IOStream structure.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: the NUL-terminated string to write.
+  -> IO BG.Word64
+ioPrintfSafe =
+  \x00 ->
+    \x11 ->
+      fmap Coerce.coerce (Safe.lithon_SDL_IOprintf x00 x11)
diff --git a/src/SDL3/Sys/Joystick.hs b/src/SDL3/Sys/Joystick.hs
--- a/src/SDL3/Sys/Joystick.hs
+++ b/src/SDL3/Sys/Joystick.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | SDL joystick support.
 --
 --     This is the lower-level joystick handling. If you want the simpler option, where what each button does is well-defined, you should use the gamepad API instead.
@@ -147,6 +149,7 @@
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (Bool, Float, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.LibC qualified
diff --git a/src/SDL3/Sys/Keyboard.hs b/src/SDL3/Sys/Keyboard.hs
--- a/src/SDL3/Sys/Keyboard.hs
+++ b/src/SDL3/Sys/Keyboard.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | SDL keyboard management.
 --
 --     Please refer to the Best Keyboard Practices document for details on how best to accept keyboard input in various types of programs:
@@ -71,6 +73,7 @@
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (Bool, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.LibC qualified
diff --git a/src/SDL3/Sys/Keycode.hs b/src/SDL3/Sys/Keycode.hs
--- a/src/SDL3/Sys/Keycode.hs
+++ b/src/SDL3/Sys/Keycode.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | Defines constants which identify keyboard keys and modifiers.
 --
diff --git a/src/SDL3/Sys/Loadso.hs b/src/SDL3/Sys/Loadso.hs
--- a/src/SDL3/Sys/Loadso.hs
+++ b/src/SDL3/Sys/Loadso.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | System-dependent library loading routines.
 --
 --     Shared objects are code that is programmatically loadable at runtime. Windows calls these \"DLLs\", Linux calls them \"shared libraries\", etc.
@@ -35,6 +37,8 @@
   SDL3.Sys.Loadso.unloadObjectSafe,
 )
 where
+
+import Prelude (IO)
 
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
diff --git a/src/SDL3/Sys/Locale.hs b/src/SDL3/Sys/Locale.hs
--- a/src/SDL3/Sys/Locale.hs
+++ b/src/SDL3/Sys/Locale.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | SDL locale services.
 --
 --     This provides a way to get a list of preferred locales (language plus country) for the user. There is exactly one function: @'getPreferredLocales'@, which handles all the heavy lifting, and offers documentation on all the strange ways humans might have configured their language settings. A struct to provide locale data.
@@ -21,6 +23,8 @@
   SDL3.Sys.Locale.getPreferredLocalesSafe,
 )
 where
+
+import Prelude (IO)
 
 import HsBindgen.Runtime.Support qualified as BG
 import SDL3.Sys.Bindgen.Locale
diff --git a/src/SDL3/Sys/Log.hs b/src/SDL3/Sys/Log.hs
--- a/src/SDL3/Sys/Log.hs
+++ b/src/SDL3/Sys/Log.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | Simple log messages with priorities and categories. A message\'s 'SDL_LogPriority' signifies how important the message is. A message\'s 'SDL_LogCategory' signifies from what domain it belongs to. Every category has a minimum priority specified: when a message belongs to that category, it will only be sent out if it has that minimum priority or higher.
 --
 --     SDL\'s own logs are sent below the default priority threshold, so they are quiet by default.
@@ -34,6 +36,8 @@
 --
 --     Unsuffixed aliases are __unsafe__ foreign imports; aliases suffixed @Safe@ are safe. Functions whose callbacks fire during the call export only the Safe alias (the genuine unsafe import stays reachable under @SDL3.Sys.Bindgen.Log.Unsafe@); functions curated unsafe-only export only the unsuffixed one. Each alias\'s documentation records its flavor and rationale.
 --
+--     The C shims are functions this package defines in C over what the FFI cannot call directly (variadic functions, function-like macros), each named after what it wraps; the same flavor rules apply. Their raw imports live under "SDL3.Sys.Bindgen.LogShims".
+--
 --     Full conventions: "SDL3.Sys".
 module SDL3.Sys.Log (
   module SDL3.Sys.Bindgen.Log,
@@ -55,18 +59,42 @@
   SDL3.Sys.Log.getLogOutputFunctionSafe,
   SDL3.Sys.Log.setLogOutputFunction,
   SDL3.Sys.Log.setLogOutputFunctionSafe,
+
+  -- * C shims
+  SDL3.Sys.Log.log,
+  SDL3.Sys.Log.logSafe,
+  SDL3.Sys.Log.logTrace,
+  SDL3.Sys.Log.logTraceSafe,
+  SDL3.Sys.Log.logVerbose,
+  SDL3.Sys.Log.logVerboseSafe,
+  SDL3.Sys.Log.logDebug,
+  SDL3.Sys.Log.logDebugSafe,
+  SDL3.Sys.Log.logInfo,
+  SDL3.Sys.Log.logInfoSafe,
+  SDL3.Sys.Log.logWarn,
+  SDL3.Sys.Log.logWarnSafe,
+  SDL3.Sys.Log.logError,
+  SDL3.Sys.Log.logErrorSafe,
+  SDL3.Sys.Log.logCritical,
+  SDL3.Sys.Log.logCriticalSafe,
+  SDL3.Sys.Log.logMessage,
+  SDL3.Sys.Log.logMessageSafe,
 )
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (Bool, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import SDL3.Sys.Bindgen.Log
+import SDL3.Sys.Bindgen.Log qualified
 import SDL3.Sys.Bindgen.Log.Safe qualified as Safe
 import SDL3.Sys.Bindgen.Log.Unsafe qualified as Unsafe
+import SDL3.Sys.Bindgen.LogShims.Safe qualified as Safe
+import SDL3.Sys.Bindgen.LogShims.Unsafe qualified as Unsafe
 
 -- | Set the priority of all log categories.
 --
@@ -509,3 +537,623 @@
   -> IO ()
 setLogOutputFunctionSafe =
   Safe.sDL_SetLogOutputFunction
+
+-- | Log a message with SDL_LOG_CATEGORY_APPLICATION and SDL_LOG_PRIORITY_INFO.
+--
+--     A fixed-arity shim over the variadic SDL_Log: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'logMessage'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_Log@.
+--                   The safe flavor is 'logSafe'
+--                   : invokes the log output function synchronously, which may be implemented in Haskell (SDL_SetLogOutputFunction).
+--
+--     [C declaration]: @lithon_SDL_Log@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 39:24@
+log
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+log = Unsafe.lithon_SDL_Log
+
+-- | Log a message with SDL_LOG_CATEGORY_APPLICATION and SDL_LOG_PRIORITY_INFO.
+--
+--     A fixed-arity shim over the variadic SDL_Log: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'logMessage'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Safe__ foreign import of @lithon_SDL_Log@.
+--                   The unsafe flavor is 'log'
+--                   : invokes the log output function synchronously, which may be implemented in Haskell (SDL_SetLogOutputFunction).
+--
+--     [C declaration]: @lithon_SDL_Log@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 39:24@
+logSafe
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+logSafe = Safe.lithon_SDL_Log
+
+-- | Log a message with SDL_LOG_PRIORITY_TRACE.
+--
+--     A fixed-arity shim over the variadic SDL_LogTrace: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'logMessage'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_LogTrace@.
+--                   The safe flavor is 'logTraceSafe'
+--                   : invokes the log output function synchronously, which may be implemented in Haskell (SDL_SetLogOutputFunction).
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_LogTrace@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 60:24@
+logTrace
+  :: BG.Int32
+  -- ^
+  --
+  --           [@category@]: the category of the message.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+logTrace =
+  \x00 ->
+    \x11 ->
+      Unsafe.lithon_SDL_LogTrace (Coerce.coerce x00) x11
+
+-- | Log a message with SDL_LOG_PRIORITY_TRACE.
+--
+--     A fixed-arity shim over the variadic SDL_LogTrace: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'logMessage'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Safe__ foreign import of @lithon_SDL_LogTrace@.
+--                   The unsafe flavor is 'logTrace'
+--                   : invokes the log output function synchronously, which may be implemented in Haskell (SDL_SetLogOutputFunction).
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_LogTrace@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 60:24@
+logTraceSafe
+  :: BG.Int32
+  -- ^
+  --
+  --           [@category@]: the category of the message.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+logTraceSafe =
+  \x00 ->
+    \x11 ->
+      Safe.lithon_SDL_LogTrace (Coerce.coerce x00) x11
+
+-- | Log a message with SDL_LOG_PRIORITY_VERBOSE.
+--
+--     A fixed-arity shim over the variadic SDL_LogVerbose: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'logMessage'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_LogVerbose@.
+--                   The safe flavor is 'logVerboseSafe'
+--                   : invokes the log output function synchronously, which may be implemented in Haskell (SDL_SetLogOutputFunction).
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_LogVerbose@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 81:24@
+logVerbose
+  :: BG.Int32
+  -- ^
+  --
+  --           [@category@]: the category of the message.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+logVerbose =
+  \x00 ->
+    \x11 ->
+      Unsafe.lithon_SDL_LogVerbose (Coerce.coerce x00) x11
+
+-- | Log a message with SDL_LOG_PRIORITY_VERBOSE.
+--
+--     A fixed-arity shim over the variadic SDL_LogVerbose: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'logMessage'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Safe__ foreign import of @lithon_SDL_LogVerbose@.
+--                   The unsafe flavor is 'logVerbose'
+--                   : invokes the log output function synchronously, which may be implemented in Haskell (SDL_SetLogOutputFunction).
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_LogVerbose@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 81:24@
+logVerboseSafe
+  :: BG.Int32
+  -- ^
+  --
+  --           [@category@]: the category of the message.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+logVerboseSafe =
+  \x00 ->
+    \x11 ->
+      Safe.lithon_SDL_LogVerbose (Coerce.coerce x00) x11
+
+-- | Log a message with SDL_LOG_PRIORITY_DEBUG.
+--
+--     A fixed-arity shim over the variadic SDL_LogDebug: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'logMessage'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_LogDebug@.
+--                   The safe flavor is 'logDebugSafe'
+--                   : invokes the log output function synchronously, which may be implemented in Haskell (SDL_SetLogOutputFunction).
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_LogDebug@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 102:24@
+logDebug
+  :: BG.Int32
+  -- ^
+  --
+  --           [@category@]: the category of the message.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+logDebug =
+  \x00 ->
+    \x11 ->
+      Unsafe.lithon_SDL_LogDebug (Coerce.coerce x00) x11
+
+-- | Log a message with SDL_LOG_PRIORITY_DEBUG.
+--
+--     A fixed-arity shim over the variadic SDL_LogDebug: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'logMessage'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Safe__ foreign import of @lithon_SDL_LogDebug@.
+--                   The unsafe flavor is 'logDebug'
+--                   : invokes the log output function synchronously, which may be implemented in Haskell (SDL_SetLogOutputFunction).
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_LogDebug@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 102:24@
+logDebugSafe
+  :: BG.Int32
+  -- ^
+  --
+  --           [@category@]: the category of the message.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+logDebugSafe =
+  \x00 ->
+    \x11 ->
+      Safe.lithon_SDL_LogDebug (Coerce.coerce x00) x11
+
+-- | Log a message with SDL_LOG_PRIORITY_INFO.
+--
+--     A fixed-arity shim over the variadic SDL_LogInfo: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'logMessage'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_LogInfo@.
+--                   The safe flavor is 'logInfoSafe'
+--                   : invokes the log output function synchronously, which may be implemented in Haskell (SDL_SetLogOutputFunction).
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_LogInfo@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 123:24@
+logInfo
+  :: BG.Int32
+  -- ^
+  --
+  --           [@category@]: the category of the message.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+logInfo =
+  \x00 ->
+    \x11 ->
+      Unsafe.lithon_SDL_LogInfo (Coerce.coerce x00) x11
+
+-- | Log a message with SDL_LOG_PRIORITY_INFO.
+--
+--     A fixed-arity shim over the variadic SDL_LogInfo: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'logMessage'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Safe__ foreign import of @lithon_SDL_LogInfo@.
+--                   The unsafe flavor is 'logInfo'
+--                   : invokes the log output function synchronously, which may be implemented in Haskell (SDL_SetLogOutputFunction).
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_LogInfo@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 123:24@
+logInfoSafe
+  :: BG.Int32
+  -- ^
+  --
+  --           [@category@]: the category of the message.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+logInfoSafe =
+  \x00 ->
+    \x11 ->
+      Safe.lithon_SDL_LogInfo (Coerce.coerce x00) x11
+
+-- | Log a message with SDL_LOG_PRIORITY_WARN.
+--
+--     A fixed-arity shim over the variadic SDL_LogWarn: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'logMessage'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_LogWarn@.
+--                   The safe flavor is 'logWarnSafe'
+--                   : invokes the log output function synchronously, which may be implemented in Haskell (SDL_SetLogOutputFunction).
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_LogWarn@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 144:24@
+logWarn
+  :: BG.Int32
+  -- ^
+  --
+  --           [@category@]: the category of the message.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+logWarn =
+  \x00 ->
+    \x11 ->
+      Unsafe.lithon_SDL_LogWarn (Coerce.coerce x00) x11
+
+-- | Log a message with SDL_LOG_PRIORITY_WARN.
+--
+--     A fixed-arity shim over the variadic SDL_LogWarn: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'logMessage'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Safe__ foreign import of @lithon_SDL_LogWarn@.
+--                   The unsafe flavor is 'logWarn'
+--                   : invokes the log output function synchronously, which may be implemented in Haskell (SDL_SetLogOutputFunction).
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_LogWarn@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 144:24@
+logWarnSafe
+  :: BG.Int32
+  -- ^
+  --
+  --           [@category@]: the category of the message.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+logWarnSafe =
+  \x00 ->
+    \x11 ->
+      Safe.lithon_SDL_LogWarn (Coerce.coerce x00) x11
+
+-- | Log a message with SDL_LOG_PRIORITY_ERROR.
+--
+--     A fixed-arity shim over the variadic SDL_LogError: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'logMessage'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_LogError@.
+--                   The safe flavor is 'logErrorSafe'
+--                   : invokes the log output function synchronously, which may be implemented in Haskell (SDL_SetLogOutputFunction).
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_LogError@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 165:24@
+logError
+  :: BG.Int32
+  -- ^
+  --
+  --           [@category@]: the category of the message.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+logError =
+  \x00 ->
+    \x11 ->
+      Unsafe.lithon_SDL_LogError (Coerce.coerce x00) x11
+
+-- | Log a message with SDL_LOG_PRIORITY_ERROR.
+--
+--     A fixed-arity shim over the variadic SDL_LogError: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'logMessage'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Safe__ foreign import of @lithon_SDL_LogError@.
+--                   The unsafe flavor is 'logError'
+--                   : invokes the log output function synchronously, which may be implemented in Haskell (SDL_SetLogOutputFunction).
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_LogError@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 165:24@
+logErrorSafe
+  :: BG.Int32
+  -- ^
+  --
+  --           [@category@]: the category of the message.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+logErrorSafe =
+  \x00 ->
+    \x11 ->
+      Safe.lithon_SDL_LogError (Coerce.coerce x00) x11
+
+-- | Log a message with SDL_LOG_PRIORITY_CRITICAL.
+--
+--     A fixed-arity shim over the variadic SDL_LogCritical: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'logMessage'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_LogCritical@.
+--                   The safe flavor is 'logCriticalSafe'
+--                   : invokes the log output function synchronously, which may be implemented in Haskell (SDL_SetLogOutputFunction).
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_LogCritical@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 186:24@
+logCritical
+  :: BG.Int32
+  -- ^
+  --
+  --           [@category@]: the category of the message.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+logCritical =
+  \x00 ->
+    \x11 ->
+      Unsafe.lithon_SDL_LogCritical (Coerce.coerce x00) x11
+
+-- | Log a message with SDL_LOG_PRIORITY_CRITICAL.
+--
+--     A fixed-arity shim over the variadic SDL_LogCritical: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'logMessage'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Safe__ foreign import of @lithon_SDL_LogCritical@.
+--                   The unsafe flavor is 'logCritical'
+--                   : invokes the log output function synchronously, which may be implemented in Haskell (SDL_SetLogOutputFunction).
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_LogCritical@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 186:24@
+logCriticalSafe
+  :: BG.Int32
+  -- ^
+  --
+  --           [@category@]: the category of the message.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+logCriticalSafe =
+  \x00 ->
+    \x11 ->
+      Safe.lithon_SDL_LogCritical (Coerce.coerce x00) x11
+
+-- | Log a message with the specified category and priority.
+--
+--     A fixed-arity shim over the variadic SDL_LogMessage: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'setLogOutputFunction', 'setLogPriority'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_LogMessage@.
+--                   The safe flavor is 'logMessageSafe'
+--                   : invokes the log output function synchronously, which may be implemented in Haskell (SDL_SetLogOutputFunction).
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_LogMessage@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 209:24@
+logMessage
+  :: BG.Int32
+  -- ^
+  --
+  --           [@category@]: the category of the message.
+  -> SDL3.Sys.Bindgen.Log.SDL_LogPriority
+  -- ^
+  --
+  --           [@priority@]: the priority of the message.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+logMessage =
+  \x00 ->
+    \x11 ->
+      \x22 ->
+        Unsafe.lithon_SDL_LogMessage (Coerce.coerce x00) x11 x22
+
+-- | Log a message with the specified category and priority.
+--
+--     A fixed-arity shim over the variadic SDL_LogMessage: @message@ is logged verbatim. It is never parsed as a printf-style format string, so a percent sign in it needs no escaping.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'setLogOutputFunction', 'setLogPriority'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Safe__ foreign import of @lithon_SDL_LogMessage@.
+--                   The unsafe flavor is 'logMessage'
+--                   : invokes the log output function synchronously, which may be implemented in Haskell (SDL_SetLogOutputFunction).
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_LogMessage@, defined at @sdl3-bindgen-sys\/SDL_log_shims.h 209:24@
+logMessageSafe
+  :: BG.Int32
+  -- ^
+  --
+  --           [@category@]: the category of the message.
+  -> SDL3.Sys.Bindgen.Log.SDL_LogPriority
+  -- ^
+  --
+  --           [@priority@]: the priority of the message.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@message@]: the message to log, in UTF-8.
+  -> IO ()
+logMessageSafe =
+  \x00 ->
+    \x11 ->
+      \x22 ->
+        Safe.lithon_SDL_LogMessage (Coerce.coerce x00) x11 x22
diff --git a/src/SDL3/Sys/Main.hs b/src/SDL3/Sys/Main.hs
--- a/src/SDL3/Sys/Main.hs
+++ b/src/SDL3/Sys/Main.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | App entry-point handling; SDL_main is not bound here.
 --
 --     == FFI conventions
@@ -19,6 +21,7 @@
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (IO, fmap)
 
 import HsBindgen.Runtime.IncompleteArray qualified as IA
 import HsBindgen.Runtime.IsArray qualified as IsA
diff --git a/src/SDL3/Sys/Messagebox.hs b/src/SDL3/Sys/Messagebox.hs
--- a/src/SDL3/Sys/Messagebox.hs
+++ b/src/SDL3/Sys/Messagebox.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | SDL offers a simple message box API, which is useful for simple alerts, such as informing the user when something fatal happens at startup without the need to build a UI for it (or informing the user /before/ your UI is ready).
 --
@@ -34,6 +35,8 @@
   SDL3.Sys.Messagebox.showSimpleMessageBoxSafe,
 )
 where
+
+import Prelude (Bool, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
diff --git a/src/SDL3/Sys/Metal.hs b/src/SDL3/Sys/Metal.hs
--- a/src/SDL3/Sys/Metal.hs
+++ b/src/SDL3/Sys/Metal.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | Functions to creating Metal layers and views on SDL windows.
 --
 --     This provides some platform-specific glue for Apple platforms. Most macOS and iOS apps can use SDL without these functions, but this API they can be useful for specific OS-level integration tasks. A handle to a CAMetalLayer-backed NSView (macOS) or UIView (iOS\/tvOS).
@@ -21,6 +23,8 @@
   SDL3.Sys.Metal.metalGetLayerSafe,
 )
 where
+
+import Prelude (IO)
 
 import HsBindgen.Runtime.Support qualified as BG
 import SDL3.Sys.Bindgen.Metal
diff --git a/src/SDL3/Sys/Misc.hs b/src/SDL3/Sys/Misc.hs
--- a/src/SDL3/Sys/Misc.hs
+++ b/src/SDL3/Sys/Misc.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | SDL API functions that don\'t fit elsewhere. Open a URL\/URI in the browser or other appropriate external application.
 --
 --     Open a URL in a separate, system-provided application. How this works will vary wildly depending on the platform. This will likely launch what makes sense to handle a specific URL\'s protocol (a web browser for @[http:\/\/](http://)@, etc), but it might also be able to launch file managers for directories and other things.
@@ -27,6 +29,8 @@
   SDL3.Sys.Misc.openURLSafe,
 )
 where
+
+import Prelude (Bool, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
diff --git a/src/SDL3/Sys/Mouse.hs b/src/SDL3/Sys/Mouse.hs
--- a/src/SDL3/Sys/Mouse.hs
+++ b/src/SDL3/Sys/Mouse.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | Any GUI application has to deal with the mouse, and SDL provides functions to manage mouse input and the displayed cursor.
 --
@@ -32,6 +33,8 @@
   pattern SDL3.Sys.Mouse.SDL_BUTTON_RMASK,
   pattern SDL3.Sys.Mouse.SDL_BUTTON_X1MASK,
   pattern SDL3.Sys.Mouse.SDL_BUTTON_X2MASK,
+  pattern SDL3.Sys.Mouse.SDL_TOUCH_MOUSEID,
+  pattern SDL3.Sys.Mouse.SDL_PEN_MOUSEID,
 
   -- * Function aliases
   SDL3.Sys.Mouse.hasMouse,
@@ -86,6 +89,7 @@
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (Bool, Float, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.LibC qualified
@@ -1730,3 +1734,11 @@
 -- | Typed constant for macro @SDL_BUTTON_X2MASK@. Combine with @.|.@ from "Data.Bits".
 pattern SDL_BUTTON_X2MASK :: SDL_MouseButtonFlags
 pattern SDL_BUTTON_X2MASK = SDL_MouseButtonFlags 0x00000010
+
+-- | Typed constant for macro @SDL_TOUCH_MOUSEID@ (declared in @SDL_touch.h@).
+pattern SDL_TOUCH_MOUSEID :: SDL_MouseID
+pattern SDL_TOUCH_MOUSEID = SDL_MouseID 4294967295
+
+-- | Typed constant for macro @SDL_PEN_MOUSEID@ (declared in @SDL_pen.h@).
+pattern SDL_PEN_MOUSEID :: SDL_MouseID
+pattern SDL_PEN_MOUSEID = SDL_MouseID 4294967294
diff --git a/src/SDL3/Sys/Mutex.hs b/src/SDL3/Sys/Mutex.hs
--- a/src/SDL3/Sys/Mutex.hs
+++ b/src/SDL3/Sys/Mutex.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | Thread synchronization primitives: mutexes, semaphores, condition variables, and read\/write locks.
 --
 --     == FFI conventions
@@ -69,6 +71,7 @@
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (Bool, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.Support qualified as BG
diff --git a/src/SDL3/Sys/Pen.hs b/src/SDL3/Sys/Pen.hs
--- a/src/SDL3/Sys/Pen.hs
+++ b/src/SDL3/Sys/Pen.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | SDL pen event handling.
 --
@@ -53,6 +54,8 @@
   SDL3.Sys.Pen.getPenDeviceTypeSafe,
 )
 where
+
+import Prelude (IO)
 
 import SDL3.Sys.Bindgen.Pen
 import SDL3.Sys.Bindgen.Pen.Safe qualified as Safe
diff --git a/src/SDL3/Sys/Pixels.hs b/src/SDL3/Sys/Pixels.hs
--- a/src/SDL3/Sys/Pixels.hs
+++ b/src/SDL3/Sys/Pixels.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | SDL offers facilities for pixel management.
 --
 --     Largely these facilities deal with pixel /format/: what does this set of bits represent?
@@ -40,6 +42,8 @@
 --
 --     Unsuffixed aliases are __unsafe__ foreign imports; aliases suffixed @Safe@ are safe. Functions whose callbacks fire during the call export only the Safe alias (the genuine unsafe import stays reachable under @SDL3.Sys.Bindgen.Pixels.Unsafe@); functions curated unsafe-only export only the unsuffixed one. Each alias\'s documentation records its flavor and rationale.
 --
+--     The C shims are functions this package defines in C over what the FFI cannot call directly (variadic functions, function-like macros), each named after what it wraps; the same flavor rules apply. Their raw imports live under "SDL3.Sys.Bindgen.PixelsShims".
+--
 --     Full conventions: "SDL3.Sys".
 module SDL3.Sys.Pixels (
   module SDL3.Sys.Bindgen.Pixels,
@@ -67,18 +71,45 @@
   SDL3.Sys.Pixels.getRGBSafe,
   SDL3.Sys.Pixels.getRGBA,
   SDL3.Sys.Pixels.getRGBASafe,
+
+  -- * C shims
+  SDL3.Sys.Pixels.definePixelFourCC,
+  SDL3.Sys.Pixels.bitsPerPixel,
+  SDL3.Sys.Pixels.bytesPerPixel,
+  SDL3.Sys.Pixels.isPixelFormatIndexed,
+  SDL3.Sys.Pixels.isPixelFormatPacked,
+  SDL3.Sys.Pixels.isPixelFormatArray,
+  SDL3.Sys.Pixels.isPixelFormat10Bit,
+  SDL3.Sys.Pixels.isPixelFormatFloat,
+  SDL3.Sys.Pixels.isPixelFormatAlpha,
+  SDL3.Sys.Pixels.isPixelFormatFourCC,
+  SDL3.Sys.Pixels.defineColorspace,
+  SDL3.Sys.Pixels.colorspaceType,
+  SDL3.Sys.Pixels.colorspaceRange,
+  SDL3.Sys.Pixels.colorspaceChroma,
+  SDL3.Sys.Pixels.colorspacePrimaries,
+  SDL3.Sys.Pixels.colorspaceTransfer,
+  SDL3.Sys.Pixels.colorspaceMatrix,
+  SDL3.Sys.Pixels.isColorspaceMatrixBT601,
+  SDL3.Sys.Pixels.isColorspaceMatrixBT709,
+  SDL3.Sys.Pixels.isColorspaceMatrixBT2020NCL,
+  SDL3.Sys.Pixels.isColorspaceLimitedRange,
+  SDL3.Sys.Pixels.isColorspaceFullRange,
 )
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (Bool, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import SDL3.Sys.Bindgen.Pixels
+import SDL3.Sys.Bindgen.Pixels qualified
 import SDL3.Sys.Bindgen.Pixels.Safe qualified as Safe
 import SDL3.Sys.Bindgen.Pixels.Unsafe qualified as Unsafe
+import SDL3.Sys.Bindgen.PixelsShims.Unsafe qualified as Unsafe
 import SDL3.Sys.Bindgen.Stdinc qualified
 
 -- | Get the human readable name of a pixel format.
@@ -1094,3 +1125,676 @@
             \x55 ->
               \x66 ->
                 Safe.sDL_GetRGBA (Coerce.coerce x00) x11 x22 x33 x44 x55 x66
+
+-- | Define a custom FourCC pixel format.
+--
+--     The SDL_DEFINE_PIXELFOURCC macro as a function. SDL_PIXELFORMAT_YV12, for example, is the code of the characters Y, V, 1, 2.
+--
+--     [Returns]: a format value in the style of SDL_PixelFormat.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'SDL3.Sys.Stdinc.fourCC'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_DEFINE_PIXELFOURCC@.
+--                   The safe import is not exported
+--                   : pure bit manipulation on immediate values; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_DEFINE_PIXELFOURCC@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 42:35@
+definePixelFourCC
+  :: BG.Word8
+  -- ^
+  --
+  --           [@a@]: the first character of the FourCC code.
+  -> BG.Word8
+  -- ^
+  --
+  --           [@b@]: the second character of the FourCC code.
+  -> BG.Word8
+  -- ^
+  --
+  --           [@c@]: the third character of the FourCC code.
+  -> BG.Word8
+  -- ^
+  --
+  --           [@d@]: the fourth character of the FourCC code.
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+definePixelFourCC =
+  \x00 ->
+    \x11 ->
+      \x22 ->
+        \x33 ->
+          Unsafe.lithon_SDL_DEFINE_PIXELFOURCC
+            (Coerce.coerce x00)
+            (Coerce.coerce x11)
+            (Coerce.coerce x22)
+            (Coerce.coerce x33)
+
+-- | Determine an SDL_PixelFormat\'s bits per pixel.
+--
+--     The SDL_BITSPERPIXEL macro as a function. FourCC formats report zero here, as it rarely makes sense to measure them per-pixel.
+--
+--     [Returns]: the bits-per-pixel of @format@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'bytesPerPixel'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_BITSPERPIXEL@.
+--                   The safe import is not exported
+--                   : pure bit manipulation on immediate values; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_BITSPERPIXEL@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 62:23@
+bitsPerPixel
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -- ^
+  --
+  --           [@format@]: an SDL_PixelFormat to check.
+  -> IO BG.Int32
+bitsPerPixel =
+  \x00 ->
+    fmap Coerce.coerce (Unsafe.lithon_SDL_BITSPERPIXEL x00)
+
+-- | Determine an SDL_PixelFormat\'s bytes per pixel.
+--
+--     The SDL_BYTESPERPIXEL macro as a function. FourCC formats do their best here, but many of them don\'t have a meaningful measurement of bytes per pixel.
+--
+--     [Returns]: the bytes-per-pixel of @format@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'bitsPerPixel'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_BYTESPERPIXEL@.
+--                   The safe import is not exported
+--                   : pure bit manipulation on immediate values; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_BYTESPERPIXEL@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 83:23@
+bytesPerPixel
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -- ^
+  --
+  --           [@format@]: an SDL_PixelFormat to check.
+  -> IO BG.Int32
+bytesPerPixel =
+  \x00 ->
+    fmap Coerce.coerce (Unsafe.lithon_SDL_BYTESPERPIXEL x00)
+
+-- | Determine if an SDL_PixelFormat is an indexed format.
+--
+--     The SDL_ISPIXELFORMAT_INDEXED macro as a function.
+--
+--     [Returns]: true if the format is indexed, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_ISPIXELFORMAT_INDEXED@.
+--                   The safe import is not exported
+--                   : pure bit manipulation on immediate values; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_ISPIXELFORMAT_INDEXED@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 100:24@
+isPixelFormatIndexed
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -- ^
+  --
+  --           [@format@]: an SDL_PixelFormat to check.
+  -> IO Bool
+isPixelFormatIndexed =
+  \x00 ->
+    fmap CBool.toBool (Unsafe.lithon_SDL_ISPIXELFORMAT_INDEXED x00)
+
+-- | Determine if an SDL_PixelFormat is a packed format.
+--
+--     The SDL_ISPIXELFORMAT_PACKED macro as a function.
+--
+--     [Returns]: true if the format is packed, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_ISPIXELFORMAT_PACKED@.
+--                   The safe import is not exported
+--                   : pure bit manipulation on immediate values; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_ISPIXELFORMAT_PACKED@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 117:24@
+isPixelFormatPacked
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -- ^
+  --
+  --           [@format@]: an SDL_PixelFormat to check.
+  -> IO Bool
+isPixelFormatPacked =
+  \x00 ->
+    fmap CBool.toBool (Unsafe.lithon_SDL_ISPIXELFORMAT_PACKED x00)
+
+-- | Determine if an SDL_PixelFormat is an array format.
+--
+--     The SDL_ISPIXELFORMAT_ARRAY macro as a function.
+--
+--     [Returns]: true if the format is an array, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_ISPIXELFORMAT_ARRAY@.
+--                   The safe import is not exported
+--                   : pure bit manipulation on immediate values; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_ISPIXELFORMAT_ARRAY@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 134:24@
+isPixelFormatArray
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -- ^
+  --
+  --           [@format@]: an SDL_PixelFormat to check.
+  -> IO Bool
+isPixelFormatArray =
+  \x00 ->
+    fmap CBool.toBool (Unsafe.lithon_SDL_ISPIXELFORMAT_ARRAY x00)
+
+-- | Determine if an SDL_PixelFormat is a 10-bit format.
+--
+--     The SDL_ISPIXELFORMAT_10BIT macro as a function.
+--
+--     [Returns]: true if the format is 10-bit, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_ISPIXELFORMAT_10BIT@.
+--                   The safe import is not exported
+--                   : pure bit manipulation on immediate values; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_ISPIXELFORMAT_10BIT@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 151:24@
+isPixelFormat10Bit
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -- ^
+  --
+  --           [@format@]: an SDL_PixelFormat to check.
+  -> IO Bool
+isPixelFormat10Bit =
+  \x00 ->
+    fmap CBool.toBool (Unsafe.lithon_SDL_ISPIXELFORMAT_10BIT x00)
+
+-- | Determine if an SDL_PixelFormat is a floating point format.
+--
+--     The SDL_ISPIXELFORMAT_FLOAT macro as a function.
+--
+--     [Returns]: true if the format is a floating point, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_ISPIXELFORMAT_FLOAT@.
+--                   The safe import is not exported
+--                   : pure bit manipulation on immediate values; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_ISPIXELFORMAT_FLOAT@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 168:24@
+isPixelFormatFloat
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -- ^
+  --
+  --           [@format@]: an SDL_PixelFormat to check.
+  -> IO Bool
+isPixelFormatFloat =
+  \x00 ->
+    fmap CBool.toBool (Unsafe.lithon_SDL_ISPIXELFORMAT_FLOAT x00)
+
+-- | Determine if an SDL_PixelFormat has an alpha channel.
+--
+--     The SDL_ISPIXELFORMAT_ALPHA macro as a function.
+--
+--     [Returns]: true if the format has alpha, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_ISPIXELFORMAT_ALPHA@.
+--                   The safe import is not exported
+--                   : pure bit manipulation on immediate values; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_ISPIXELFORMAT_ALPHA@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 185:24@
+isPixelFormatAlpha
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -- ^
+  --
+  --           [@format@]: an SDL_PixelFormat to check.
+  -> IO Bool
+isPixelFormatAlpha =
+  \x00 ->
+    fmap CBool.toBool (Unsafe.lithon_SDL_ISPIXELFORMAT_ALPHA x00)
+
+-- | Determine if an SDL_PixelFormat is a \"FourCC\" format.
+--
+--     The SDL_ISPIXELFORMAT_FOURCC macro as a function. This covers custom and other unusual formats.
+--
+--     [Returns]: true if the format is a FourCC format, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_ISPIXELFORMAT_FOURCC@.
+--                   The safe import is not exported
+--                   : pure bit manipulation on immediate values; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_ISPIXELFORMAT_FOURCC@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 202:24@
+isPixelFormatFourCC
+  :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
+  -- ^
+  --
+  --           [@format@]: an SDL_PixelFormat to check.
+  -> IO Bool
+isPixelFormatFourCC =
+  \x00 ->
+    fmap CBool.toBool (Unsafe.lithon_SDL_ISPIXELFORMAT_FOURCC x00)
+
+-- | Define a custom colorspace.
+--
+--     The SDL_DEFINE_COLORSPACE macro as a function.
+--
+--     [Returns]: a format value in the style of SDL_Colorspace.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_DEFINE_COLORSPACE@.
+--                   The safe import is not exported
+--                   : pure bit manipulation on immediate values; cannot block, lock, or call back.
+--
+--     [C declaration]: @lithon_SDL_DEFINE_COLORSPACE@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 224:34@
+defineColorspace
+  :: SDL3.Sys.Bindgen.Pixels.SDL_ColorType
+  -- ^
+  --
+  --           [@type@]: the type of the new format.
+  -> SDL3.Sys.Bindgen.Pixels.SDL_ColorRange
+  -- ^
+  --
+  --           [@range@]: the range of the new format.
+  -> SDL3.Sys.Bindgen.Pixels.SDL_ColorPrimaries
+  -- ^
+  --
+  --           [@primaries@]: the primaries of the new format.
+  -> SDL3.Sys.Bindgen.Pixels.SDL_TransferCharacteristics
+  -- ^
+  --
+  --           [@transfer@]: the transfer characteristics of the new format.
+  -> SDL3.Sys.Bindgen.Pixels.SDL_MatrixCoefficients
+  -- ^
+  --
+  --           [@matrix@]: the matrix coefficients of the new format.
+  -> SDL3.Sys.Bindgen.Pixels.SDL_ChromaLocation
+  -- ^
+  --
+  --           [@chroma@]: the chroma sample location of the new format.
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+defineColorspace =
+  Unsafe.lithon_SDL_DEFINE_COLORSPACE
+
+-- | Retrieve the type of an SDL_Colorspace.
+--
+--     The SDL_COLORSPACETYPE macro as a function.
+--
+--     [Returns]: the SDL_ColorType of @cspace@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_COLORSPACETYPE@.
+--                   The safe import is not exported
+--                   : pure bit manipulation on immediate values; cannot block, lock, or call back.
+--
+--     [C declaration]: @lithon_SDL_COLORSPACETYPE@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 241:33@
+colorspaceType
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -- ^
+  --
+  --           [@cspace@]: an SDL_Colorspace to check.
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_ColorType
+colorspaceType = Unsafe.lithon_SDL_COLORSPACETYPE
+
+-- | Retrieve the range of an SDL_Colorspace.
+--
+--     The SDL_COLORSPACERANGE macro as a function.
+--
+--     [Returns]: the SDL_ColorRange of @cspace@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_COLORSPACERANGE@.
+--                   The safe import is not exported
+--                   : pure bit manipulation on immediate values; cannot block, lock, or call back.
+--
+--     [C declaration]: @lithon_SDL_COLORSPACERANGE@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 258:34@
+colorspaceRange
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -- ^
+  --
+  --           [@cspace@]: an SDL_Colorspace to check.
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_ColorRange
+colorspaceRange = Unsafe.lithon_SDL_COLORSPACERANGE
+
+-- | Retrieve the chroma sample location of an SDL_Colorspace.
+--
+--     The SDL_COLORSPACECHROMA macro as a function.
+--
+--     [Returns]: the SDL_ChromaLocation of @cspace@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_COLORSPACECHROMA@.
+--                   The safe import is not exported
+--                   : pure bit manipulation on immediate values; cannot block, lock, or call back.
+--
+--     [C declaration]: @lithon_SDL_COLORSPACECHROMA@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 275:38@
+colorspaceChroma
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -- ^
+  --
+  --           [@cspace@]: an SDL_Colorspace to check.
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_ChromaLocation
+colorspaceChroma = Unsafe.lithon_SDL_COLORSPACECHROMA
+
+-- | Retrieve the primaries of an SDL_Colorspace.
+--
+--     The SDL_COLORSPACEPRIMARIES macro as a function.
+--
+--     [Returns]: the SDL_ColorPrimaries of @cspace@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_COLORSPACEPRIMARIES@.
+--                   The safe import is not exported
+--                   : pure bit manipulation on immediate values; cannot block, lock, or call back.
+--
+--     [C declaration]: @lithon_SDL_COLORSPACEPRIMARIES@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 292:38@
+colorspacePrimaries
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -- ^
+  --
+  --           [@cspace@]: an SDL_Colorspace to check.
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_ColorPrimaries
+colorspacePrimaries =
+  Unsafe.lithon_SDL_COLORSPACEPRIMARIES
+
+-- | Retrieve the transfer characteristics of an SDL_Colorspace.
+--
+--     The SDL_COLORSPACETRANSFER macro as a function.
+--
+--     [Returns]: the SDL_TransferCharacteristics of @cspace@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_COLORSPACETRANSFER@.
+--                   The safe import is not exported
+--                   : pure bit manipulation on immediate values; cannot block, lock, or call back.
+--
+--     [C declaration]: @lithon_SDL_COLORSPACETRANSFER@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 309:47@
+colorspaceTransfer
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -- ^
+  --
+  --           [@cspace@]: an SDL_Colorspace to check.
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_TransferCharacteristics
+colorspaceTransfer =
+  Unsafe.lithon_SDL_COLORSPACETRANSFER
+
+-- | Retrieve the matrix coefficients of an SDL_Colorspace.
+--
+--     The SDL_COLORSPACEMATRIX macro as a function.
+--
+--     [Returns]: the SDL_MatrixCoefficients of @cspace@.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_COLORSPACEMATRIX@.
+--                   The safe import is not exported
+--                   : pure bit manipulation on immediate values; cannot block, lock, or call back.
+--
+--     [C declaration]: @lithon_SDL_COLORSPACEMATRIX@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 326:42@
+colorspaceMatrix
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -- ^
+  --
+  --           [@cspace@]: an SDL_Colorspace to check.
+  -> IO SDL3.Sys.Bindgen.Pixels.SDL_MatrixCoefficients
+colorspaceMatrix = Unsafe.lithon_SDL_COLORSPACEMATRIX
+
+-- | Determine if an SDL_Colorspace uses BT601 (or BT470BG) matrix coefficients.
+--
+--     The SDL_ISCOLORSPACE_MATRIX_BT601 macro as a function.
+--
+--     [Returns]: true if BT601 or BT470BG, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_ISCOLORSPACE_MATRIX_BT601@.
+--                   The safe import is not exported
+--                   : pure bit manipulation on immediate values; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_ISCOLORSPACE_MATRIX_BT601@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 343:24@
+isColorspaceMatrixBT601
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -- ^
+  --
+  --           [@cspace@]: an SDL_Colorspace to check.
+  -> IO Bool
+isColorspaceMatrixBT601 =
+  \x00 ->
+    fmap CBool.toBool (Unsafe.lithon_SDL_ISCOLORSPACE_MATRIX_BT601 x00)
+
+-- | Determine if an SDL_Colorspace uses BT709 matrix coefficients.
+--
+--     The SDL_ISCOLORSPACE_MATRIX_BT709 macro as a function.
+--
+--     [Returns]: true if BT709, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_ISCOLORSPACE_MATRIX_BT709@.
+--                   The safe import is not exported
+--                   : pure bit manipulation on immediate values; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_ISCOLORSPACE_MATRIX_BT709@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 360:24@
+isColorspaceMatrixBT709
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -- ^
+  --
+  --           [@cspace@]: an SDL_Colorspace to check.
+  -> IO Bool
+isColorspaceMatrixBT709 =
+  \x00 ->
+    fmap CBool.toBool (Unsafe.lithon_SDL_ISCOLORSPACE_MATRIX_BT709 x00)
+
+-- | Determine if an SDL_Colorspace uses BT2020_NCL matrix coefficients.
+--
+--     The SDL_ISCOLORSPACE_MATRIX_BT2020_NCL macro as a function.
+--
+--     [Returns]: true if BT2020_NCL, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_ISCOLORSPACE_MATRIX_BT2020_NCL@.
+--                   The safe import is not exported
+--                   : pure bit manipulation on immediate values; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_ISCOLORSPACE_MATRIX_BT2020_NCL@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 377:24@
+isColorspaceMatrixBT2020NCL
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -- ^
+  --
+  --           [@cspace@]: an SDL_Colorspace to check.
+  -> IO Bool
+isColorspaceMatrixBT2020NCL =
+  \x00 ->
+    fmap CBool.toBool (Unsafe.lithon_SDL_ISCOLORSPACE_MATRIX_BT2020_NCL x00)
+
+-- | Determine if an SDL_Colorspace has a limited range.
+--
+--     The SDL_ISCOLORSPACE_LIMITED_RANGE macro as a function.
+--
+--     [Returns]: true if limited range, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_ISCOLORSPACE_LIMITED_RANGE@.
+--                   The safe import is not exported
+--                   : pure bit manipulation on immediate values; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_ISCOLORSPACE_LIMITED_RANGE@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 394:24@
+isColorspaceLimitedRange
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -- ^
+  --
+  --           [@cspace@]: an SDL_Colorspace to check.
+  -> IO Bool
+isColorspaceLimitedRange =
+  \x00 ->
+    fmap CBool.toBool (Unsafe.lithon_SDL_ISCOLORSPACE_LIMITED_RANGE x00)
+
+-- | Determine if an SDL_Colorspace has a full range.
+--
+--     The SDL_ISCOLORSPACE_FULL_RANGE macro as a function.
+--
+--     [Returns]: true if full range, false otherwise.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_ISCOLORSPACE_FULL_RANGE@.
+--                   The safe import is not exported
+--                   : pure bit manipulation on immediate values; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_ISCOLORSPACE_FULL_RANGE@, defined at @sdl3-bindgen-sys\/SDL_pixels_shims.h 411:24@
+isColorspaceFullRange
+  :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
+  -- ^
+  --
+  --           [@cspace@]: an SDL_Colorspace to check.
+  -> IO Bool
+isColorspaceFullRange =
+  \x00 ->
+    fmap CBool.toBool (Unsafe.lithon_SDL_ISCOLORSPACE_FULL_RANGE x00)
diff --git a/src/SDL3/Sys/Platform.hs b/src/SDL3/Sys/Platform.hs
--- a/src/SDL3/Sys/Platform.hs
+++ b/src/SDL3/Sys/Platform.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | SDL provides a means to identify the app\'s platform, both at compile time and runtime. Get the name of the platform.
 --
 --     Here are the names returned for some (but not all) supported platforms:
@@ -28,6 +30,8 @@
   SDL3.Sys.Platform.getPlatform,
 )
 where
+
+import Prelude (IO)
 
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
diff --git a/src/SDL3/Sys/PlatformDefines.hs b/src/SDL3/Sys/PlatformDefines.hs
--- a/src/SDL3/Sys/PlatformDefines.hs
+++ b/src/SDL3/Sys/PlatformDefines.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | Platform-detection defines, baked at generation time.
 --
 --     == FFI conventions
diff --git a/src/SDL3/Sys/Power.hs b/src/SDL3/Sys/Power.hs
--- a/src/SDL3/Sys/Power.hs
+++ b/src/SDL3/Sys/Power.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | SDL power management routines.
 --
 --     There is a single function in this category: @'getPowerInfo'@.
@@ -21,6 +23,8 @@
   SDL3.Sys.Power.getPowerInfoSafe,
 )
 where
+
+import Prelude (IO)
 
 import HsBindgen.Runtime.Support qualified as BG
 import SDL3.Sys.Bindgen.Power
diff --git a/src/SDL3/Sys/Process.hs b/src/SDL3/Sys/Process.hs
--- a/src/SDL3/Sys/Process.hs
+++ b/src/SDL3/Sys/Process.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | Process control support.
 --
 --     These functions provide a cross-platform way to spawn and manage OS-level processes.
@@ -41,6 +43,8 @@
   SDL3.Sys.Process.destroyProcessSafe,
 )
 where
+
+import Prelude (Bool, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.LibC qualified
diff --git a/src/SDL3/Sys/Properties.hs b/src/SDL3/Sys/Properties.hs
--- a/src/SDL3/Sys/Properties.hs
+++ b/src/SDL3/Sys/Properties.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | A property is a variable that can be created and retrieved by name at runtime.
 --
 --     All properties are part of a property group ('SDL_PropertiesID'). A property group can be created with the 'createProperties' function and destroyed with the 'destroyProperties' function.
@@ -71,6 +73,7 @@
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (Bool, Float, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.LibC qualified
diff --git a/src/SDL3/Sys/Rect.hs b/src/SDL3/Sys/Rect.hs
--- a/src/SDL3/Sys/Rect.hs
+++ b/src/SDL3/Sys/Rect.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | Some helper functions for managing rectangles and 2D points, in both integer and floating point versions. The structure that defines a point (using integers).
 --
 --     @since 3.2.0
@@ -35,6 +37,7 @@
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (Bool, Float, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.LibC qualified
diff --git a/src/SDL3/Sys/Render.hs b/src/SDL3/Sys/Render.hs
--- a/src/SDL3/Sys/Render.hs
+++ b/src/SDL3/Sys/Render.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | Header file for SDL 2D rendering functions.
 --
 --     This API supports the following features:
@@ -237,6 +239,7 @@
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (Bool, Double, Float, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.LibC qualified
diff --git a/src/SDL3/Sys/Scancode.hs b/src/SDL3/Sys/Scancode.hs
--- a/src/SDL3/Sys/Scancode.hs
+++ b/src/SDL3/Sys/Scancode.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | Defines keyboard scancodes.
 --
 --     Please refer to the Best Keyboard Practices document for details on what this information means and how best to use it.
diff --git a/src/SDL3/Sys/Sensor.hs b/src/SDL3/Sys/Sensor.hs
--- a/src/SDL3/Sys/Sensor.hs
+++ b/src/SDL3/Sys/Sensor.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | SDL sensor management.
 --
 --     These APIs grant access to gyros and accelerometers on various platforms.
@@ -47,6 +49,7 @@
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (Bool, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.LibC qualified
diff --git a/src/SDL3/Sys/Stdinc.hs b/src/SDL3/Sys/Stdinc.hs
--- a/src/SDL3/Sys/Stdinc.hs
+++ b/src/SDL3/Sys/Stdinc.hs
@@ -1,7336 +1,1578 @@
--- | SDL\'s C-library replacements: memory, strings, math, and conversions.
---
---     == FFI conventions
---
---     Unsuffixed aliases are __unsafe__ foreign imports; aliases suffixed @Safe@ are safe. Functions whose callbacks fire during the call export only the Safe alias (the genuine unsafe import stays reachable under @SDL3.Sys.Bindgen.Stdinc.Unsafe@); functions curated unsafe-only export only the unsuffixed one. Each alias\'s documentation records its flavor and rationale.
---
---     Full conventions: "SDL3.Sys".
-module SDL3.Sys.Stdinc (
-  module SDL3.Sys.Bindgen.Stdinc,
-
-  -- * Function aliases
-  SDL3.Sys.Stdinc.malloc,
-  SDL3.Sys.Stdinc.mallocSafe,
-  SDL3.Sys.Stdinc.calloc,
-  SDL3.Sys.Stdinc.callocSafe,
-  SDL3.Sys.Stdinc.realloc,
-  SDL3.Sys.Stdinc.reallocSafe,
-  SDL3.Sys.Stdinc.free,
-  SDL3.Sys.Stdinc.freeSafe,
-  SDL3.Sys.Stdinc.getOriginalMemoryFunctions,
-  SDL3.Sys.Stdinc.getOriginalMemoryFunctionsSafe,
-  SDL3.Sys.Stdinc.getMemoryFunctions,
-  SDL3.Sys.Stdinc.getMemoryFunctionsSafe,
-  SDL3.Sys.Stdinc.setMemoryFunctions,
-  SDL3.Sys.Stdinc.setMemoryFunctionsSafe,
-  SDL3.Sys.Stdinc.alignedAlloc,
-  SDL3.Sys.Stdinc.alignedAllocSafe,
-  SDL3.Sys.Stdinc.alignedFree,
-  SDL3.Sys.Stdinc.alignedFreeSafe,
-  SDL3.Sys.Stdinc.getNumAllocations,
-  SDL3.Sys.Stdinc.getNumAllocationsSafe,
-  SDL3.Sys.Stdinc.getEnvironment,
-  SDL3.Sys.Stdinc.getEnvironmentSafe,
-  SDL3.Sys.Stdinc.createEnvironment,
-  SDL3.Sys.Stdinc.createEnvironmentSafe,
-  SDL3.Sys.Stdinc.getEnvironmentVariable,
-  SDL3.Sys.Stdinc.getEnvironmentVariableSafe,
-  SDL3.Sys.Stdinc.getEnvironmentVariables,
-  SDL3.Sys.Stdinc.getEnvironmentVariablesSafe,
-  SDL3.Sys.Stdinc.setEnvironmentVariable,
-  SDL3.Sys.Stdinc.setEnvironmentVariableSafe,
-  SDL3.Sys.Stdinc.unsetEnvironmentVariable,
-  SDL3.Sys.Stdinc.unsetEnvironmentVariableSafe,
-  SDL3.Sys.Stdinc.destroyEnvironment,
-  SDL3.Sys.Stdinc.destroyEnvironmentSafe,
-  SDL3.Sys.Stdinc.getenv,
-  SDL3.Sys.Stdinc.getenvSafe,
-  SDL3.Sys.Stdinc.getenvUnsafe,
-  SDL3.Sys.Stdinc.getenvUnsafeSafe,
-  SDL3.Sys.Stdinc.setenvUnsafe,
-  SDL3.Sys.Stdinc.setenvUnsafeSafe,
-  SDL3.Sys.Stdinc.unsetenvUnsafe,
-  SDL3.Sys.Stdinc.unsetenvUnsafeSafe,
-  SDL3.Sys.Stdinc.qsortSafe,
-  SDL3.Sys.Stdinc.bsearchSafe,
-  SDL3.Sys.Stdinc.qsortRSafe,
-  SDL3.Sys.Stdinc.bsearchRSafe,
-  SDL3.Sys.Stdinc.abs,
-  SDL3.Sys.Stdinc.isalpha,
-  SDL3.Sys.Stdinc.isalnum,
-  SDL3.Sys.Stdinc.isblank,
-  SDL3.Sys.Stdinc.iscntrl,
-  SDL3.Sys.Stdinc.isdigit,
-  SDL3.Sys.Stdinc.isxdigit,
-  SDL3.Sys.Stdinc.ispunct,
-  SDL3.Sys.Stdinc.isspace,
-  SDL3.Sys.Stdinc.isupper,
-  SDL3.Sys.Stdinc.islower,
-  SDL3.Sys.Stdinc.isprint,
-  SDL3.Sys.Stdinc.isgraph,
-  SDL3.Sys.Stdinc.toupper,
-  SDL3.Sys.Stdinc.tolower,
-  SDL3.Sys.Stdinc.crc16,
-  SDL3.Sys.Stdinc.crc16Safe,
-  SDL3.Sys.Stdinc.crc32,
-  SDL3.Sys.Stdinc.crc32Safe,
-  SDL3.Sys.Stdinc.murmur3_32,
-  SDL3.Sys.Stdinc.murmur3_32Safe,
-  SDL3.Sys.Stdinc.memset4,
-  SDL3.Sys.Stdinc.memset4Safe,
-  SDL3.Sys.Stdinc.memcmp,
-  SDL3.Sys.Stdinc.memcmpSafe,
-  SDL3.Sys.Stdinc.wcslen,
-  SDL3.Sys.Stdinc.wcsnlen,
-  SDL3.Sys.Stdinc.wcslcpy,
-  SDL3.Sys.Stdinc.wcslcat,
-  SDL3.Sys.Stdinc.wcsdup,
-  SDL3.Sys.Stdinc.wcsdupSafe,
-  SDL3.Sys.Stdinc.wcsstr,
-  SDL3.Sys.Stdinc.wcsnstr,
-  SDL3.Sys.Stdinc.wcscmp,
-  SDL3.Sys.Stdinc.wcsncmp,
-  SDL3.Sys.Stdinc.wcscasecmp,
-  SDL3.Sys.Stdinc.wcsncasecmp,
-  SDL3.Sys.Stdinc.strlen,
-  SDL3.Sys.Stdinc.strnlen,
-  SDL3.Sys.Stdinc.strlcpy,
-  SDL3.Sys.Stdinc.utf8strlcpy,
-  SDL3.Sys.Stdinc.strlcat,
-  SDL3.Sys.Stdinc.strdup,
-  SDL3.Sys.Stdinc.strdupSafe,
-  SDL3.Sys.Stdinc.strndup,
-  SDL3.Sys.Stdinc.strndupSafe,
-  SDL3.Sys.Stdinc.strrev,
-  SDL3.Sys.Stdinc.strupr,
-  SDL3.Sys.Stdinc.strlwr,
-  SDL3.Sys.Stdinc.strchr,
-  SDL3.Sys.Stdinc.strrchr,
-  SDL3.Sys.Stdinc.strstr,
-  SDL3.Sys.Stdinc.strnstr,
-  SDL3.Sys.Stdinc.strcasestr,
-  SDL3.Sys.Stdinc.strtokR,
-  SDL3.Sys.Stdinc.utf8strlen,
-  SDL3.Sys.Stdinc.utf8strnlen,
-  SDL3.Sys.Stdinc.itoa,
-  SDL3.Sys.Stdinc.uitoa,
-  SDL3.Sys.Stdinc.lltoa,
-  SDL3.Sys.Stdinc.ulltoa,
-  SDL3.Sys.Stdinc.atoi,
-  SDL3.Sys.Stdinc.atof,
-  SDL3.Sys.Stdinc.strtoll,
-  SDL3.Sys.Stdinc.strtoull,
-  SDL3.Sys.Stdinc.strtod,
-  SDL3.Sys.Stdinc.strcmp,
-  SDL3.Sys.Stdinc.strncmp,
-  SDL3.Sys.Stdinc.strcasecmp,
-  SDL3.Sys.Stdinc.strncasecmp,
-  SDL3.Sys.Stdinc.strpbrk,
-  SDL3.Sys.Stdinc.stepUTF8,
-  SDL3.Sys.Stdinc.stepBackUTF8,
-  SDL3.Sys.Stdinc.ucs4ToUTF8,
-  SDL3.Sys.Stdinc.srand,
-  SDL3.Sys.Stdinc.srandSafe,
-  SDL3.Sys.Stdinc.rand,
-  SDL3.Sys.Stdinc.randSafe,
-  SDL3.Sys.Stdinc.randf,
-  SDL3.Sys.Stdinc.randfSafe,
-  SDL3.Sys.Stdinc.randBits,
-  SDL3.Sys.Stdinc.randBitsSafe,
-  SDL3.Sys.Stdinc.randR,
-  SDL3.Sys.Stdinc.randRSafe,
-  SDL3.Sys.Stdinc.randfR,
-  SDL3.Sys.Stdinc.randfRSafe,
-  SDL3.Sys.Stdinc.randBitsR,
-  SDL3.Sys.Stdinc.randBitsRSafe,
-  SDL3.Sys.Stdinc.acos,
-  SDL3.Sys.Stdinc.acosf,
-  SDL3.Sys.Stdinc.asin,
-  SDL3.Sys.Stdinc.asinf,
-  SDL3.Sys.Stdinc.atan,
-  SDL3.Sys.Stdinc.atanf,
-  SDL3.Sys.Stdinc.atan2,
-  SDL3.Sys.Stdinc.atan2f,
-  SDL3.Sys.Stdinc.ceil,
-  SDL3.Sys.Stdinc.ceilf,
-  SDL3.Sys.Stdinc.copysign,
-  SDL3.Sys.Stdinc.copysignf,
-  SDL3.Sys.Stdinc.cos,
-  SDL3.Sys.Stdinc.cosf,
-  SDL3.Sys.Stdinc.exp,
-  SDL3.Sys.Stdinc.expf,
-  SDL3.Sys.Stdinc.fabs,
-  SDL3.Sys.Stdinc.fabsf,
-  SDL3.Sys.Stdinc.floor,
-  SDL3.Sys.Stdinc.floorf,
-  SDL3.Sys.Stdinc.trunc,
-  SDL3.Sys.Stdinc.truncf,
-  SDL3.Sys.Stdinc.fmod,
-  SDL3.Sys.Stdinc.fmodf,
-  SDL3.Sys.Stdinc.isinf,
-  SDL3.Sys.Stdinc.isinff,
-  SDL3.Sys.Stdinc.isnan,
-  SDL3.Sys.Stdinc.isnanf,
-  SDL3.Sys.Stdinc.log,
-  SDL3.Sys.Stdinc.logf,
-  SDL3.Sys.Stdinc.log10,
-  SDL3.Sys.Stdinc.log10f,
-  SDL3.Sys.Stdinc.modf,
-  SDL3.Sys.Stdinc.modff,
-  SDL3.Sys.Stdinc.pow,
-  SDL3.Sys.Stdinc.powf,
-  SDL3.Sys.Stdinc.round,
-  SDL3.Sys.Stdinc.roundf,
-  SDL3.Sys.Stdinc.scalbn,
-  SDL3.Sys.Stdinc.scalbnf,
-  SDL3.Sys.Stdinc.sin,
-  SDL3.Sys.Stdinc.sinf,
-  SDL3.Sys.Stdinc.sqrt,
-  SDL3.Sys.Stdinc.sqrtf,
-  SDL3.Sys.Stdinc.tan,
-  SDL3.Sys.Stdinc.tanf,
-  SDL3.Sys.Stdinc.iconvOpen,
-  SDL3.Sys.Stdinc.iconvOpenSafe,
-  SDL3.Sys.Stdinc.iconvClose,
-  SDL3.Sys.Stdinc.iconvCloseSafe,
-  SDL3.Sys.Stdinc.iconv,
-  SDL3.Sys.Stdinc.iconvSafe,
-  SDL3.Sys.Stdinc.iconvString,
-  SDL3.Sys.Stdinc.iconvStringSafe,
-  SDL3.Sys.Stdinc.sizeMulCheckOverflowBuiltin,
-  SDL3.Sys.Stdinc.sizeMulCheckOverflowBuiltinSafe,
-  SDL3.Sys.Stdinc.sizeAddCheckOverflowBuiltin,
-  SDL3.Sys.Stdinc.sizeAddCheckOverflowBuiltinSafe,
-)
-where
-
-import Data.Coerce qualified as Coerce
-
-import HsBindgen.Runtime.CBool qualified as CBool
-import HsBindgen.Runtime.LibC qualified
-import HsBindgen.Runtime.PtrConst qualified as PtrConst
-import HsBindgen.Runtime.Support qualified as BG
-import SDL3.Sys.Bindgen.Stdinc
-import SDL3.Sys.Bindgen.Stdinc.Safe qualified as Safe
-import SDL3.Sys.Bindgen.Stdinc.Unsafe qualified as Unsafe
-
--- | Allocate uninitialized memory.
---
---     The allocated memory returned by this function must be freed with @'free'@.
---
---     If @size@ is 0, it will be set to 1.
---
---     If the allocation is successful, the returned pointer is guaranteed to be aligned to either the /fundamental alignment/ (@alignof(max_align_t)@ in C11 and later) or @2 * sizeof(void *)@, whichever is smaller. Use @'alignedAlloc'@ if you need to allocate memory aligned to an alignment greater than this guarantee.
---
---     [Returns]: a pointer to the allocated memory, or NULL if allocation failed.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'free', 'calloc', 'realloc', 'alignedAlloc'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_malloc@.
---                   The safe flavor is 'mallocSafe'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_malloc@, defined at @SDL3\/SDL_stdinc.h 1342:47@
-malloc
-  :: BG.Word64
-  -- ^
-  --
-  --           [@size@]: the size to allocate.
-  -> IO (BG.Ptr BG.Void)
-malloc =
-  \x00 -> Unsafe.sDL_malloc (Coerce.coerce x00)
-
--- | Allocate uninitialized memory.
---
---     The allocated memory returned by this function must be freed with @'free'@.
---
---     If @size@ is 0, it will be set to 1.
---
---     If the allocation is successful, the returned pointer is guaranteed to be aligned to either the /fundamental alignment/ (@alignof(max_align_t)@ in C11 and later) or @2 * sizeof(void *)@, whichever is smaller. Use @'alignedAlloc'@ if you need to allocate memory aligned to an alignment greater than this guarantee.
---
---     [Returns]: a pointer to the allocated memory, or NULL if allocation failed.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'free', 'calloc', 'realloc', 'alignedAlloc'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_malloc@.
---                   The unsafe flavor is 'malloc'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_malloc@, defined at @SDL3\/SDL_stdinc.h 1342:47@
-mallocSafe
-  :: BG.Word64
-  -- ^
-  --
-  --           [@size@]: the size to allocate.
-  -> IO (BG.Ptr BG.Void)
-mallocSafe =
-  \x00 -> Safe.sDL_malloc (Coerce.coerce x00)
-
--- |
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_calloc@.
---                   The safe flavor is 'callocSafe'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_calloc@, defined at @SDL3\/SDL_stdinc.h 1367:69@
-calloc
-  :: BG.Word64
-  -- ^ [C declaration]: @nmemb@
-  -> BG.Word64
-  -- ^ [C declaration]: @size@
-  -> IO (BG.Ptr BG.Void)
-calloc =
-  \x00 ->
-    \x11 ->
-      Unsafe.sDL_calloc (Coerce.coerce x00) (Coerce.coerce x11)
-
--- |
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_calloc@.
---                   The unsafe flavor is 'calloc'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_calloc@, defined at @SDL3\/SDL_stdinc.h 1367:69@
-callocSafe
-  :: BG.Word64
-  -- ^ [C declaration]: @nmemb@
-  -> BG.Word64
-  -- ^ [C declaration]: @size@
-  -> IO (BG.Ptr BG.Void)
-callocSafe =
-  \x00 ->
-    \x11 ->
-      Safe.sDL_calloc (Coerce.coerce x00) (Coerce.coerce x11)
-
--- |
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_realloc@.
---                   The safe flavor is 'reallocSafe'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_realloc@, defined at @SDL3\/SDL_stdinc.h 1407:54@
-realloc
-  :: BG.Ptr BG.Void
-  -- ^ [C declaration]: @mem@
-  -> BG.Word64
-  -- ^ [C declaration]: @size@
-  -> IO (BG.Ptr BG.Void)
-realloc =
-  \x00 ->
-    \x11 -> Unsafe.sDL_realloc x00 (Coerce.coerce x11)
-
--- |
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_realloc@.
---                   The unsafe flavor is 'realloc'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_realloc@, defined at @SDL3\/SDL_stdinc.h 1407:54@
-reallocSafe
-  :: BG.Ptr BG.Void
-  -- ^ [C declaration]: @mem@
-  -> BG.Word64
-  -- ^ [C declaration]: @size@
-  -> IO (BG.Ptr BG.Void)
-reallocSafe =
-  \x00 ->
-    \x11 -> Safe.sDL_realloc x00 (Coerce.coerce x11)
-
--- | Free allocated memory.
---
---     The pointer is no longer valid after this call and cannot be dereferenced anymore.
---
---     If @mem@ is NULL, this function does nothing.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'malloc', 'calloc', 'realloc'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_free@.
---                   The safe flavor is 'freeSafe'
---                   .
---
---     [C declaration]: @SDL_free@, defined at @SDL3\/SDL_stdinc.h 1427:34@
-free
-  :: BG.Ptr BG.Void
-  -- ^
-  --
-  --           [@mem@]: a pointer to allocated memory, or NULL.
-  -> IO ()
-free = Unsafe.sDL_free
-
--- | Free allocated memory.
---
---     The pointer is no longer valid after this call and cannot be dereferenced anymore.
---
---     If @mem@ is NULL, this function does nothing.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'malloc', 'calloc', 'realloc'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_free@.
---                   The unsafe flavor is 'free'
---                   .
---
---     [C declaration]: @SDL_free@, defined at @SDL3\/SDL_stdinc.h 1427:34@
-freeSafe
-  :: BG.Ptr BG.Void
-  -- ^
-  --
-  --           [@mem@]: a pointer to allocated memory, or NULL.
-  -> IO ()
-freeSafe = Safe.sDL_free
-
--- | Get the original set of SDL memory functions.
---
---     This is what 'malloc' and friends will use by default, if there has been no call to 'setMemoryFunctions'. This is not necessarily using the C runtime\'s @malloc@ functions behind the scenes! Different platforms and build configurations might do any number of unexpected things.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_GetOriginalMemoryFunctions@.
---                   The safe flavor is 'getOriginalMemoryFunctionsSafe'
---                   .
---
---     [C declaration]: @SDL_GetOriginalMemoryFunctions@, defined at @SDL3\/SDL_stdinc.h 1525:34@
-getOriginalMemoryFunctions
-  :: BG.Ptr SDL_malloc_func
-  -- ^
-  --
-  --           [@malloc_func@]: filled with malloc function.
-  -> BG.Ptr SDL_calloc_func
-  -- ^
-  --
-  --           [@calloc_func@]: filled with calloc function.
-  -> BG.Ptr SDL_realloc_func
-  -- ^
-  --
-  --           [@realloc_func@]: filled with realloc function.
-  -> BG.Ptr SDL_free_func
-  -- ^
-  --
-  --           [@free_func@]: filled with free function.
-  -> IO ()
-getOriginalMemoryFunctions =
-  Unsafe.sDL_GetOriginalMemoryFunctions
-
--- | Get the original set of SDL memory functions.
---
---     This is what 'malloc' and friends will use by default, if there has been no call to 'setMemoryFunctions'. This is not necessarily using the C runtime\'s @malloc@ functions behind the scenes! Different platforms and build configurations might do any number of unexpected things.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_GetOriginalMemoryFunctions@.
---                   The unsafe flavor is 'getOriginalMemoryFunctions'
---                   .
---
---     [C declaration]: @SDL_GetOriginalMemoryFunctions@, defined at @SDL3\/SDL_stdinc.h 1525:34@
-getOriginalMemoryFunctionsSafe
-  :: BG.Ptr SDL_malloc_func
-  -- ^
-  --
-  --           [@malloc_func@]: filled with malloc function.
-  -> BG.Ptr SDL_calloc_func
-  -- ^
-  --
-  --           [@calloc_func@]: filled with calloc function.
-  -> BG.Ptr SDL_realloc_func
-  -- ^
-  --
-  --           [@realloc_func@]: filled with realloc function.
-  -> BG.Ptr SDL_free_func
-  -- ^
-  --
-  --           [@free_func@]: filled with free function.
-  -> IO ()
-getOriginalMemoryFunctionsSafe =
-  Safe.sDL_GetOriginalMemoryFunctions
-
--- | Get the current set of SDL memory functions.
---
---     [Thread safety]: This does not hold a lock, so do not call this in the unlikely event of a background thread calling 'setMemoryFunctions' simultaneously.
---
---     @since 3.2.0
---
---     [See also]: 'setMemoryFunctions', 'getOriginalMemoryFunctions'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_GetMemoryFunctions@.
---                   The safe flavor is 'getMemoryFunctionsSafe'
---                   .
---
---     [C declaration]: @SDL_GetMemoryFunctions@, defined at @SDL3\/SDL_stdinc.h 1547:34@
-getMemoryFunctions
-  :: BG.Ptr SDL_malloc_func
-  -- ^
-  --
-  --           [@malloc_func@]: filled with malloc function.
-  -> BG.Ptr SDL_calloc_func
-  -- ^
-  --
-  --           [@calloc_func@]: filled with calloc function.
-  -> BG.Ptr SDL_realloc_func
-  -- ^
-  --
-  --           [@realloc_func@]: filled with realloc function.
-  -> BG.Ptr SDL_free_func
-  -- ^
-  --
-  --           [@free_func@]: filled with free function.
-  -> IO ()
-getMemoryFunctions = Unsafe.sDL_GetMemoryFunctions
-
--- | Get the current set of SDL memory functions.
---
---     [Thread safety]: This does not hold a lock, so do not call this in the unlikely event of a background thread calling 'setMemoryFunctions' simultaneously.
---
---     @since 3.2.0
---
---     [See also]: 'setMemoryFunctions', 'getOriginalMemoryFunctions'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_GetMemoryFunctions@.
---                   The unsafe flavor is 'getMemoryFunctions'
---                   .
---
---     [C declaration]: @SDL_GetMemoryFunctions@, defined at @SDL3\/SDL_stdinc.h 1547:34@
-getMemoryFunctionsSafe
-  :: BG.Ptr SDL_malloc_func
-  -- ^
-  --
-  --           [@malloc_func@]: filled with malloc function.
-  -> BG.Ptr SDL_calloc_func
-  -- ^
-  --
-  --           [@calloc_func@]: filled with calloc function.
-  -> BG.Ptr SDL_realloc_func
-  -- ^
-  --
-  --           [@realloc_func@]: filled with realloc function.
-  -> BG.Ptr SDL_free_func
-  -- ^
-  --
-  --           [@free_func@]: filled with free function.
-  -> IO ()
-getMemoryFunctionsSafe = Safe.sDL_GetMemoryFunctions
-
--- | Replace SDL\'s memory allocation functions with a custom set.
---
---     It is not safe to call this function once any allocations have been made, as future calls to 'free' will use the new allocator, even if they came from an 'malloc' made with the old one!
---
---     If used, usually this needs to be the first call made into the SDL library, if not the very first thing done at program startup time.
---
---     [Returns]: true on success or false on failure; call 'SDL3.Sys.Error.getError' for more information.
---
---     [Thread safety]: It is safe to call this function from any thread, but one should not replace the memory functions once any allocations are made!
---
---     @since 3.2.0
---
---     [See also]: 'getMemoryFunctions', 'getOriginalMemoryFunctions'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_SetMemoryFunctions@.
---                   The safe flavor is 'setMemoryFunctionsSafe'
---                   : registration; replacement allocators run inside every later SDL call.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_SetMemoryFunctions@, defined at @SDL3\/SDL_stdinc.h 1578:34@
-setMemoryFunctions
-  :: SDL_malloc_func
-  -- ^
-  --
-  --           [@malloc_func@]: custom malloc function.
-  -> SDL_calloc_func
-  -- ^
-  --
-  --           [@calloc_func@]: custom calloc function.
-  -> SDL_realloc_func
-  -- ^
-  --
-  --           [@realloc_func@]: custom realloc function.
-  -> SDL_free_func
-  -- ^
-  --
-  --           [@free_func@]: custom free function.
-  -> IO Bool
-setMemoryFunctions =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        \x33 ->
-          fmap CBool.toBool (Unsafe.sDL_SetMemoryFunctions x00 x11 x22 x33)
-
--- | Replace SDL\'s memory allocation functions with a custom set.
---
---     It is not safe to call this function once any allocations have been made, as future calls to 'free' will use the new allocator, even if they came from an 'malloc' made with the old one!
---
---     If used, usually this needs to be the first call made into the SDL library, if not the very first thing done at program startup time.
---
---     [Returns]: true on success or false on failure; call 'SDL3.Sys.Error.getError' for more information.
---
---     [Thread safety]: It is safe to call this function from any thread, but one should not replace the memory functions once any allocations are made!
---
---     @since 3.2.0
---
---     [See also]: 'getMemoryFunctions', 'getOriginalMemoryFunctions'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_SetMemoryFunctions@.
---                   The unsafe flavor is 'setMemoryFunctions'
---                   : registration; replacement allocators run inside every later SDL call.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_SetMemoryFunctions@, defined at @SDL3\/SDL_stdinc.h 1578:34@
-setMemoryFunctionsSafe
-  :: SDL_malloc_func
-  -- ^
-  --
-  --           [@malloc_func@]: custom malloc function.
-  -> SDL_calloc_func
-  -- ^
-  --
-  --           [@calloc_func@]: custom calloc function.
-  -> SDL_realloc_func
-  -- ^
-  --
-  --           [@realloc_func@]: custom realloc function.
-  -> SDL_free_func
-  -- ^
-  --
-  --           [@free_func@]: custom free function.
-  -> IO Bool
-setMemoryFunctionsSafe =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        \x33 ->
-          fmap CBool.toBool (Safe.sDL_SetMemoryFunctions x00 x11 x22 x33)
-
--- | Allocate memory aligned to a specific alignment.
---
---     The memory returned by this function must be freed with @'alignedFree'@, /not/ @'free'@.
---
---     If @alignment@ is less than the size of @void *@, it will be increased to match that.
---
---     The returned memory address will be a multiple of the alignment value, and the size of the memory allocated will be a multiple of the alignment value.
---
---     [Returns]: a pointer to the aligned memory, or NULL if allocation failed.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'alignedFree'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_aligned_alloc@.
---                   The safe flavor is 'alignedAllocSafe'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_aligned_alloc@, defined at @SDL3\/SDL_stdinc.h 1605:47@
-alignedAlloc
-  :: BG.Word64
-  -- ^
-  --
-  --           [@alignment@]: the alignment of the memory.
-  -> BG.Word64
-  -- ^
-  --
-  --           [@size@]: the size to allocate.
-  -> IO (BG.Ptr BG.Void)
-alignedAlloc =
-  \x00 ->
-    \x11 ->
-      Unsafe.sDL_aligned_alloc (Coerce.coerce x00) (Coerce.coerce x11)
-
--- | Allocate memory aligned to a specific alignment.
---
---     The memory returned by this function must be freed with @'alignedFree'@, /not/ @'free'@.
---
---     If @alignment@ is less than the size of @void *@, it will be increased to match that.
---
---     The returned memory address will be a multiple of the alignment value, and the size of the memory allocated will be a multiple of the alignment value.
---
---     [Returns]: a pointer to the aligned memory, or NULL if allocation failed.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'alignedFree'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_aligned_alloc@.
---                   The unsafe flavor is 'alignedAlloc'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_aligned_alloc@, defined at @SDL3\/SDL_stdinc.h 1605:47@
-alignedAllocSafe
-  :: BG.Word64
-  -- ^
-  --
-  --           [@alignment@]: the alignment of the memory.
-  -> BG.Word64
-  -- ^
-  --
-  --           [@size@]: the size to allocate.
-  -> IO (BG.Ptr BG.Void)
-alignedAllocSafe =
-  \x00 ->
-    \x11 ->
-      Safe.sDL_aligned_alloc (Coerce.coerce x00) (Coerce.coerce x11)
-
--- | Free memory allocated by @'alignedAlloc'@.
---
---     The pointer is no longer valid after this call and cannot be dereferenced anymore.
---
---     If @mem@ is NULL, this function does nothing.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'alignedAlloc'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_aligned_free@.
---                   The safe flavor is 'alignedFreeSafe'
---                   .
---
---     [C declaration]: @SDL_aligned_free@, defined at @SDL3\/SDL_stdinc.h 1623:34@
-alignedFree
-  :: BG.Ptr BG.Void
-  -- ^
-  --
-  --           [@mem@]: a pointer previously returned by @'alignedAlloc'@, or NULL.
-  -> IO ()
-alignedFree = Unsafe.sDL_aligned_free
-
--- | Free memory allocated by @'alignedAlloc'@.
---
---     The pointer is no longer valid after this call and cannot be dereferenced anymore.
---
---     If @mem@ is NULL, this function does nothing.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'alignedAlloc'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_aligned_free@.
---                   The unsafe flavor is 'alignedFree'
---                   .
---
---     [C declaration]: @SDL_aligned_free@, defined at @SDL3\/SDL_stdinc.h 1623:34@
-alignedFreeSafe
-  :: BG.Ptr BG.Void
-  -- ^
-  --
-  --           [@mem@]: a pointer previously returned by @'alignedAlloc'@, or NULL.
-  -> IO ()
-alignedFreeSafe = Safe.sDL_aligned_free
-
--- | Get the number of outstanding (unfreed) allocations.
---
---     [Returns]: the number of allocations or -1 if allocation counting is disabled.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_GetNumAllocations@.
---                   The safe flavor is 'getNumAllocationsSafe'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_GetNumAllocations@, defined at @SDL3\/SDL_stdinc.h 1635:33@
-getNumAllocations :: IO BG.Int32
-getNumAllocations =
-  fmap Coerce.coerce Unsafe.sDL_GetNumAllocations
-
--- | Get the number of outstanding (unfreed) allocations.
---
---     [Returns]: the number of allocations or -1 if allocation counting is disabled.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_GetNumAllocations@.
---                   The unsafe flavor is 'getNumAllocations'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_GetNumAllocations@, defined at @SDL3\/SDL_stdinc.h 1635:33@
-getNumAllocationsSafe :: IO BG.Int32
-getNumAllocationsSafe =
-  fmap Coerce.coerce Safe.sDL_GetNumAllocations
-
--- | Get the process environment.
---
---     This is initialized at application start and is not affected by setenv() and unsetenv() calls after that point. Use @'setEnvironmentVariable'@ and @'unsetEnvironmentVariable'@ if you want to modify this environment, or @'setenvUnsafe'@ or @'unsetenvUnsafe'@ if you want changes to persist in the C runtime environment after 'SDL3.Sys.Init.quit'.
---
---     [Returns]: a pointer to the environment for the process or NULL on failure; call 'SDL3.Sys.Error.getError' for more information.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'getEnvironmentVariable', 'getEnvironmentVariables', 'setEnvironmentVariable', 'unsetEnvironmentVariable'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_GetEnvironment@.
---                   The safe flavor is 'getEnvironmentSafe'
---                   .
---
---     [C declaration]: @SDL_GetEnvironment@, defined at @SDL3\/SDL_stdinc.h 1673:47@
-getEnvironment :: IO (BG.Ptr SDL_Environment)
-getEnvironment = Unsafe.sDL_GetEnvironment
-
--- | Get the process environment.
---
---     This is initialized at application start and is not affected by setenv() and unsetenv() calls after that point. Use @'setEnvironmentVariable'@ and @'unsetEnvironmentVariable'@ if you want to modify this environment, or @'setenvUnsafe'@ or @'unsetenvUnsafe'@ if you want changes to persist in the C runtime environment after 'SDL3.Sys.Init.quit'.
---
---     [Returns]: a pointer to the environment for the process or NULL on failure; call 'SDL3.Sys.Error.getError' for more information.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'getEnvironmentVariable', 'getEnvironmentVariables', 'setEnvironmentVariable', 'unsetEnvironmentVariable'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_GetEnvironment@.
---                   The unsafe flavor is 'getEnvironment'
---                   .
---
---     [C declaration]: @SDL_GetEnvironment@, defined at @SDL3\/SDL_stdinc.h 1673:47@
-getEnvironmentSafe :: IO (BG.Ptr SDL_Environment)
-getEnvironmentSafe = Safe.sDL_GetEnvironment
-
--- | Create a set of environment variables
---
---     [Returns]: a pointer to the new environment or NULL on failure; call 'SDL3.Sys.Error.getError' for more information.
---
---     [Thread safety]: If @populated@ is false, it is safe to call this function from any thread, otherwise it is safe if no other threads are calling setenv() or unsetenv()
---
---     @since 3.2.0
---
---     [See also]: 'getEnvironmentVariable', 'getEnvironmentVariables', 'setEnvironmentVariable', 'unsetEnvironmentVariable', 'destroyEnvironment'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_CreateEnvironment@.
---                   The safe flavor is 'createEnvironmentSafe'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_CreateEnvironment@, defined at @SDL3\/SDL_stdinc.h 1695:47@
-createEnvironment
-  :: Bool
-  -- ^
-  --
-  --           [@populated@]: true to initialize it from the C runtime environment, false to create an empty environment.
-  -> IO (BG.Ptr SDL_Environment)
-createEnvironment =
-  \x00 ->
-    Unsafe.sDL_CreateEnvironment (CBool.fromBool x00)
-
--- | Create a set of environment variables
---
---     [Returns]: a pointer to the new environment or NULL on failure; call 'SDL3.Sys.Error.getError' for more information.
---
---     [Thread safety]: If @populated@ is false, it is safe to call this function from any thread, otherwise it is safe if no other threads are calling setenv() or unsetenv()
---
---     @since 3.2.0
---
---     [See also]: 'getEnvironmentVariable', 'getEnvironmentVariables', 'setEnvironmentVariable', 'unsetEnvironmentVariable', 'destroyEnvironment'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_CreateEnvironment@.
---                   The unsafe flavor is 'createEnvironment'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_CreateEnvironment@, defined at @SDL3\/SDL_stdinc.h 1695:47@
-createEnvironmentSafe
-  :: Bool
-  -- ^
-  --
-  --           [@populated@]: true to initialize it from the C runtime environment, false to create an empty environment.
-  -> IO (BG.Ptr SDL_Environment)
-createEnvironmentSafe =
-  \x00 ->
-    Safe.sDL_CreateEnvironment (CBool.fromBool x00)
-
--- | Get the value of a variable in the environment.
---
---     [Returns]: a pointer to the value of the variable or NULL if it can\'t be found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'getEnvironment', 'createEnvironment', 'getEnvironmentVariables', 'setEnvironmentVariable', 'unsetEnvironmentVariable'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_GetEnvironmentVariable@.
---                   The safe flavor is 'getEnvironmentVariableSafe'
---                   .
---
---     [C declaration]: @SDL_GetEnvironmentVariable@, defined at @SDL3\/SDL_stdinc.h 1715:42@
-getEnvironmentVariable
-  :: BG.Ptr SDL_Environment
-  -- ^
-  --
-  --           [@env@]: the environment to query.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@name@]: the name of the variable to get.
-  -> IO (PtrConst.PtrConst BG.CChar)
-getEnvironmentVariable =
-  Unsafe.sDL_GetEnvironmentVariable
-
--- | Get the value of a variable in the environment.
---
---     [Returns]: a pointer to the value of the variable or NULL if it can\'t be found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'getEnvironment', 'createEnvironment', 'getEnvironmentVariables', 'setEnvironmentVariable', 'unsetEnvironmentVariable'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_GetEnvironmentVariable@.
---                   The unsafe flavor is 'getEnvironmentVariable'
---                   .
---
---     [C declaration]: @SDL_GetEnvironmentVariable@, defined at @SDL3\/SDL_stdinc.h 1715:42@
-getEnvironmentVariableSafe
-  :: BG.Ptr SDL_Environment
-  -- ^
-  --
-  --           [@env@]: the environment to query.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@name@]: the name of the variable to get.
-  -> IO (PtrConst.PtrConst BG.CChar)
-getEnvironmentVariableSafe =
-  Safe.sDL_GetEnvironmentVariable
-
--- | Get all variables in the environment.
---
---     [Returns]: a NULL terminated array of pointers to environment variables in the form \"variable=value\" or NULL on failure; call 'SDL3.Sys.Error.getError' for more information. This is a single allocation that should be freed with @'free'@ when it is no longer needed.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'getEnvironment', 'createEnvironment', 'getEnvironmentVariables', 'setEnvironmentVariable', 'unsetEnvironmentVariable'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_GetEnvironmentVariables@.
---                   The safe flavor is 'getEnvironmentVariablesSafe'
---                   .
---
---     [C declaration]: @SDL_GetEnvironmentVariables@, defined at @SDL3\/SDL_stdinc.h 1736:37@
-getEnvironmentVariables
-  :: BG.Ptr SDL_Environment
-  -- ^
-  --
-  --           [@env@]: the environment to query.
-  -> IO (BG.Ptr (BG.Ptr BG.CChar))
-getEnvironmentVariables =
-  Unsafe.sDL_GetEnvironmentVariables
-
--- | Get all variables in the environment.
---
---     [Returns]: a NULL terminated array of pointers to environment variables in the form \"variable=value\" or NULL on failure; call 'SDL3.Sys.Error.getError' for more information. This is a single allocation that should be freed with @'free'@ when it is no longer needed.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'getEnvironment', 'createEnvironment', 'getEnvironmentVariables', 'setEnvironmentVariable', 'unsetEnvironmentVariable'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_GetEnvironmentVariables@.
---                   The unsafe flavor is 'getEnvironmentVariables'
---                   .
---
---     [C declaration]: @SDL_GetEnvironmentVariables@, defined at @SDL3\/SDL_stdinc.h 1736:37@
-getEnvironmentVariablesSafe
-  :: BG.Ptr SDL_Environment
-  -- ^
-  --
-  --           [@env@]: the environment to query.
-  -> IO (BG.Ptr (BG.Ptr BG.CChar))
-getEnvironmentVariablesSafe =
-  Safe.sDL_GetEnvironmentVariables
-
--- | Set the value of a variable in the environment.
---
---     [Returns]: true on success or false on failure; call 'SDL3.Sys.Error.getError' for more information.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'getEnvironment', 'createEnvironment', 'getEnvironmentVariable', 'getEnvironmentVariables', 'unsetEnvironmentVariable'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_SetEnvironmentVariable@.
---                   The safe flavor is 'setEnvironmentVariableSafe'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_SetEnvironmentVariable@, defined at @SDL3\/SDL_stdinc.h 1760:34@
-setEnvironmentVariable
-  :: BG.Ptr SDL_Environment
-  -- ^
-  --
-  --           [@env@]: the environment to modify.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@name@]: the name of the variable to set.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@value@]: the value of the variable to set.
-  -> Bool
-  -- ^
-  --
-  --           [@overwrite@]: true to overwrite the variable if it exists, false to return success without setting the variable if it already exists.
-  -> IO Bool
-setEnvironmentVariable =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        \x33 ->
-          fmap CBool.toBool (Unsafe.sDL_SetEnvironmentVariable x00 x11 x22 (CBool.fromBool x33))
-
--- | Set the value of a variable in the environment.
---
---     [Returns]: true on success or false on failure; call 'SDL3.Sys.Error.getError' for more information.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'getEnvironment', 'createEnvironment', 'getEnvironmentVariable', 'getEnvironmentVariables', 'unsetEnvironmentVariable'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_SetEnvironmentVariable@.
---                   The unsafe flavor is 'setEnvironmentVariable'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_SetEnvironmentVariable@, defined at @SDL3\/SDL_stdinc.h 1760:34@
-setEnvironmentVariableSafe
-  :: BG.Ptr SDL_Environment
-  -- ^
-  --
-  --           [@env@]: the environment to modify.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@name@]: the name of the variable to set.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@value@]: the value of the variable to set.
-  -> Bool
-  -- ^
-  --
-  --           [@overwrite@]: true to overwrite the variable if it exists, false to return success without setting the variable if it already exists.
-  -> IO Bool
-setEnvironmentVariableSafe =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        \x33 ->
-          fmap CBool.toBool (Safe.sDL_SetEnvironmentVariable x00 x11 x22 (CBool.fromBool x33))
-
--- | Clear a variable from the environment.
---
---     [Returns]: true on success or false on failure; call 'SDL3.Sys.Error.getError' for more information.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'getEnvironment', 'createEnvironment', 'getEnvironmentVariable', 'getEnvironmentVariables', 'setEnvironmentVariable', 'unsetEnvironmentVariable'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_UnsetEnvironmentVariable@.
---                   The safe flavor is 'unsetEnvironmentVariableSafe'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_UnsetEnvironmentVariable@, defined at @SDL3\/SDL_stdinc.h 1781:34@
-unsetEnvironmentVariable
-  :: BG.Ptr SDL_Environment
-  -- ^
-  --
-  --           [@env@]: the environment to modify.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@name@]: the name of the variable to unset.
-  -> IO Bool
-unsetEnvironmentVariable =
-  \x00 ->
-    \x11 ->
-      fmap CBool.toBool (Unsafe.sDL_UnsetEnvironmentVariable x00 x11)
-
--- | Clear a variable from the environment.
---
---     [Returns]: true on success or false on failure; call 'SDL3.Sys.Error.getError' for more information.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'getEnvironment', 'createEnvironment', 'getEnvironmentVariable', 'getEnvironmentVariables', 'setEnvironmentVariable', 'unsetEnvironmentVariable'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_UnsetEnvironmentVariable@.
---                   The unsafe flavor is 'unsetEnvironmentVariable'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_UnsetEnvironmentVariable@, defined at @SDL3\/SDL_stdinc.h 1781:34@
-unsetEnvironmentVariableSafe
-  :: BG.Ptr SDL_Environment
-  -- ^
-  --
-  --           [@env@]: the environment to modify.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@name@]: the name of the variable to unset.
-  -> IO Bool
-unsetEnvironmentVariableSafe =
-  \x00 ->
-    \x11 ->
-      fmap CBool.toBool (Safe.sDL_UnsetEnvironmentVariable x00 x11)
-
--- | Destroy a set of environment variables.
---
---     [Thread safety]: It is safe to call this function from any thread, as long as the environment is no longer in use.
---
---     @since 3.2.0
---
---     [See also]: 'createEnvironment'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_DestroyEnvironment@.
---                   The safe flavor is 'destroyEnvironmentSafe'
---                   .
---
---     [C declaration]: @SDL_DestroyEnvironment@, defined at @SDL3\/SDL_stdinc.h 1795:34@
-destroyEnvironment
-  :: BG.Ptr SDL_Environment
-  -- ^
-  --
-  --           [@env@]: the environment to destroy.
-  -> IO ()
-destroyEnvironment = Unsafe.sDL_DestroyEnvironment
-
--- | Destroy a set of environment variables.
---
---     [Thread safety]: It is safe to call this function from any thread, as long as the environment is no longer in use.
---
---     @since 3.2.0
---
---     [See also]: 'createEnvironment'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_DestroyEnvironment@.
---                   The unsafe flavor is 'destroyEnvironment'
---                   .
---
---     [C declaration]: @SDL_DestroyEnvironment@, defined at @SDL3\/SDL_stdinc.h 1795:34@
-destroyEnvironmentSafe
-  :: BG.Ptr SDL_Environment
-  -- ^
-  --
-  --           [@env@]: the environment to destroy.
-  -> IO ()
-destroyEnvironmentSafe = Safe.sDL_DestroyEnvironment
-
--- | Get the value of a variable in the environment.
---
---     The name of the variable is case sensitive on all platforms.
---
---     This function uses SDL\'s cached copy of the environment and is thread-safe.
---
---     [Returns]: a pointer to the value of the variable or NULL if it can\'t be found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_getenv@.
---                   The safe flavor is 'getenvSafe'
---                   .
---
---     [C declaration]: @SDL_getenv@, defined at @SDL3\/SDL_stdinc.h 1812:42@
-getenv
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@name@]: the name of the variable to get.
-  -> IO (PtrConst.PtrConst BG.CChar)
-getenv = Unsafe.sDL_getenv
-
--- | Get the value of a variable in the environment.
---
---     The name of the variable is case sensitive on all platforms.
---
---     This function uses SDL\'s cached copy of the environment and is thread-safe.
---
---     [Returns]: a pointer to the value of the variable or NULL if it can\'t be found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_getenv@.
---                   The unsafe flavor is 'getenv'
---                   .
---
---     [C declaration]: @SDL_getenv@, defined at @SDL3\/SDL_stdinc.h 1812:42@
-getenvSafe
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@name@]: the name of the variable to get.
-  -> IO (PtrConst.PtrConst BG.CChar)
-getenvSafe = Safe.sDL_getenv
-
--- | Get the value of a variable in the environment.
---
---     This function bypasses SDL\'s cached copy of the environment and is not thread-safe.
---
---     On some platforms, this may make case-insensitive matches, while other platforms are case-sensitive. It is best to be precise with strings used for queries through this interface. 'getenv' is always case-sensitive, however.
---
---     [Returns]: a pointer to the value of the variable or NULL if it can\'t be found.
---
---     [Thread safety]: This function is not thread safe, consider using @'getenv'@ instead.
---
---     @since 3.2.0
---
---     [See also]: 'getenv'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_getenv_unsafe@.
---                   The safe flavor is 'getenvUnsafeSafe'
---                   .
---
---     [C declaration]: @SDL_getenv_unsafe@, defined at @SDL3\/SDL_stdinc.h 1836:42@
-getenvUnsafe
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@name@]: the name of the variable to get.
-  -> IO (PtrConst.PtrConst BG.CChar)
-getenvUnsafe = Unsafe.sDL_getenv_unsafe
-
--- | Get the value of a variable in the environment.
---
---     This function bypasses SDL\'s cached copy of the environment and is not thread-safe.
---
---     On some platforms, this may make case-insensitive matches, while other platforms are case-sensitive. It is best to be precise with strings used for queries through this interface. 'getenv' is always case-sensitive, however.
---
---     [Returns]: a pointer to the value of the variable or NULL if it can\'t be found.
---
---     [Thread safety]: This function is not thread safe, consider using @'getenv'@ instead.
---
---     @since 3.2.0
---
---     [See also]: 'getenv'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_getenv_unsafe@.
---                   The unsafe flavor is 'getenvUnsafe'
---                   .
---
---     [C declaration]: @SDL_getenv_unsafe@, defined at @SDL3\/SDL_stdinc.h 1836:42@
-getenvUnsafeSafe
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@name@]: the name of the variable to get.
-  -> IO (PtrConst.PtrConst BG.CChar)
-getenvUnsafeSafe = Safe.sDL_getenv_unsafe
-
--- | Set the value of a variable in the environment.
---
---     [Returns]: 0 on success, -1 on error.
---
---     [Thread safety]: This function is not thread safe, consider using @'setEnvironmentVariable'@ instead.
---
---     @since 3.2.0
---
---     [See also]: 'setEnvironmentVariable'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_setenv_unsafe@.
---                   The safe flavor is 'setenvUnsafeSafe'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_setenv_unsafe@, defined at @SDL3\/SDL_stdinc.h 1854:33@
-setenvUnsafe
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@name@]: the name of the variable to set.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@value@]: the value of the variable to set.
-  -> BG.Int32
-  -- ^
-  --
-  --           [@overwrite@]: 1 to overwrite the variable if it exists, 0 to return success without setting the variable if it already exists.
-  -> IO BG.Int32
-setenvUnsafe =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        fmap Coerce.coerce (Unsafe.sDL_setenv_unsafe x00 x11 (Coerce.coerce x22))
-
--- | Set the value of a variable in the environment.
---
---     [Returns]: 0 on success, -1 on error.
---
---     [Thread safety]: This function is not thread safe, consider using @'setEnvironmentVariable'@ instead.
---
---     @since 3.2.0
---
---     [See also]: 'setEnvironmentVariable'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_setenv_unsafe@.
---                   The unsafe flavor is 'setenvUnsafe'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_setenv_unsafe@, defined at @SDL3\/SDL_stdinc.h 1854:33@
-setenvUnsafeSafe
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@name@]: the name of the variable to set.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@value@]: the value of the variable to set.
-  -> BG.Int32
-  -- ^
-  --
-  --           [@overwrite@]: 1 to overwrite the variable if it exists, 0 to return success without setting the variable if it already exists.
-  -> IO BG.Int32
-setenvUnsafeSafe =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        fmap Coerce.coerce (Safe.sDL_setenv_unsafe x00 x11 (Coerce.coerce x22))
-
--- | Clear a variable from the environment.
---
---     [Returns]: 0 on success, -1 on error.
---
---     [Thread safety]: This function is not thread safe, consider using @'unsetEnvironmentVariable'@ instead.
---
---     @since 3.2.0
---
---     [See also]: 'unsetEnvironmentVariable'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_unsetenv_unsafe@.
---                   The safe flavor is 'unsetenvUnsafeSafe'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_unsetenv_unsafe@, defined at @SDL3\/SDL_stdinc.h 1869:33@
-unsetenvUnsafe
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@name@]: the name of the variable to unset.
-  -> IO BG.Int32
-unsetenvUnsafe =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_unsetenv_unsafe x00)
-
--- | Clear a variable from the environment.
---
---     [Returns]: 0 on success, -1 on error.
---
---     [Thread safety]: This function is not thread safe, consider using @'unsetEnvironmentVariable'@ instead.
---
---     @since 3.2.0
---
---     [See also]: 'unsetEnvironmentVariable'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_unsetenv_unsafe@.
---                   The unsafe flavor is 'unsetenvUnsafe'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_unsetenv_unsafe@, defined at @SDL3\/SDL_stdinc.h 1869:33@
-unsetenvUnsafeSafe
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@name@]: the name of the variable to unset.
-  -> IO BG.Int32
-unsetenvUnsafeSafe =
-  \x00 ->
-    fmap Coerce.coerce (Safe.sDL_unsetenv_unsafe x00)
-
--- | Sort an array.
---
---     For example:
---
---     @
---     typedef struct {
---         int key;
---         const char *string;
---     } data;
---
---     int SDLCALL compare(const void *a, const void *b)
---     {
---         const data *A = (const data *)a;
---         const data *B = (const data *)b;
---
---         if (A->n \< B->n) {
---             return -1;
---         } else if (B->n \< A->n) {
---             return 1;
---         } else {
---             return 0;
---         }
---     }
---
---     data values[] = {
---         { 3, \"third\" }, { 1, \"first\" }, { 2, \"second\" }
---     };
---
---     SDL_qsort(values, SDL_arraysize(values), sizeof(values[0]), compare);
---     @
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'bsearchSafe', 'qsortRSafe'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_qsort@.
---                   The unsafe import is not exported
---                   : invokes the comparator synchronously.
---                   If your callback is a non-Haskell function pointer that never
--- re-enters the Haskell runtime, the unsafe import remains available as @SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_qsort@.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_qsort@, defined at @SDL3\/SDL_stdinc.h 1931:34@
-qsortSafe
-  :: BG.Ptr BG.Void
-  -- ^
-  --
-  --           [@base@]: a pointer to the start of the array.
-  -> BG.Word64
-  -- ^
-  --
-  --           [@nmemb@]: the number of elements in the array.
-  -> BG.Word64
-  -- ^
-  --
-  --           [@size@]: the size of the elements in the array.
-  -> SDL_CompareCallback
-  -- ^
-  --
-  --           [@compare@]: a function used to compare elements in the array.
-  -> IO ()
-qsortSafe =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        \x33 ->
-          Safe.sDL_qsort x00 (Coerce.coerce x11) (Coerce.coerce x22) x33
-
--- | Perform a binary search on a previously sorted array.
---
---     For example:
---
---     @
---     typedef struct {
---         int key;
---         const char *string;
---     } data;
---
---     int SDLCALL compare(const void *a, const void *b)
---     {
---         const data *A = (const data *)a;
---         const data *B = (const data *)b;
---
---         if (A->n \< B->n) {
---             return -1;
---         } else if (B->n \< A->n) {
---             return 1;
---         } else {
---             return 0;
---         }
---     }
---
---     data values[] = {
---         { 1, \"first\" }, { 2, \"second\" }, { 3, \"third\" }
---     };
---     data key = { 2, NULL };
---
---     data *result = SDL_bsearch(&key, values, SDL_arraysize(values), sizeof(values[0]), compare);
---     @
---
---     [Returns]: a pointer to the matching element in the array, or NULL if not found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'bsearchRSafe', 'qsortSafe'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_bsearch@.
---                   The unsafe import is not exported
---                   : invokes the comparator synchronously.
---                   If your callback is a non-Haskell function pointer that never
--- re-enters the Haskell runtime, the unsafe import remains available as @SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_bsearch@.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_bsearch@, defined at @SDL3\/SDL_stdinc.h 1981:36@
-bsearchSafe
-  :: PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@key@]: a pointer to a key equal to the element being searched for.
-  -> PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@base@]: a pointer to the start of the array.
-  -> BG.Word64
-  -- ^
-  --
-  --           [@nmemb@]: the number of elements in the array.
-  -> BG.Word64
-  -- ^
-  --
-  --           [@size@]: the size of the elements in the array.
-  -> SDL_CompareCallback
-  -- ^
-  --
-  --           [@compare@]: a function used to compare elements in the array.
-  -> IO (BG.Ptr BG.Void)
-bsearchSafe =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        \x33 ->
-          \x44 ->
-            Safe.sDL_bsearch x00 x11 (Coerce.coerce x22) (Coerce.coerce x33) x44
-
--- | Sort an array, passing a userdata pointer to the compare function.
---
---     For example:
---
---     @
---     typedef enum {
---         sort_increasing,
---         sort_decreasing,
---     } sort_method;
---
---     typedef struct {
---         int key;
---         const char *string;
---     } data;
---
---     int SDLCALL compare(const void *userdata, const void *a, const void *b)
---     {
---         sort_method method = (sort_method)(uintptr_t)userdata;
---         const data *A = (const data *)a;
---         const data *B = (const data *)b;
---
---         if (A->key \< B->key) {
---             return (method == sort_increasing) ? -1 : 1;
---         } else if (B->key \< A->key) {
---             return (method == sort_increasing) ? 1 : -1;
---         } else {
---             return 0;
---         }
---     }
---
---     data values[] = {
---         { 3, \"third\" }, { 1, \"first\" }, { 2, \"second\" }
---     };
---
---     SDL_qsort_r(values, SDL_arraysize(values), sizeof(values[0]), compare, (const void *)(uintptr_t)sort_increasing);
---     @
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'bsearchRSafe', 'qsortSafe'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_qsort_r@.
---                   The unsafe import is not exported
---                   : invokes the comparator synchronously.
---                   If your callback is a non-Haskell function pointer that never
--- re-enters the Haskell runtime, the unsafe import remains available as @SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_qsort_r@.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_qsort_r@, defined at @SDL3\/SDL_stdinc.h 2051:34@
-qsortRSafe
-  :: BG.Ptr BG.Void
-  -- ^
-  --
-  --           [@base@]: a pointer to the start of the array.
-  -> BG.Word64
-  -- ^
-  --
-  --           [@nmemb@]: the number of elements in the array.
-  -> BG.Word64
-  -- ^
-  --
-  --           [@size@]: the size of the elements in the array.
-  -> SDL_CompareCallback_r
-  -- ^
-  --
-  --           [@compare@]: a function used to compare elements in the array.
-  -> BG.Ptr BG.Void
-  -- ^
-  --
-  --           [@userdata@]: a pointer to pass to the compare function.
-  -> IO ()
-qsortRSafe =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        \x33 ->
-          \x44 ->
-            Safe.sDL_qsort_r x00 (Coerce.coerce x11) (Coerce.coerce x22) x33 x44
-
--- | Perform a binary search on a previously sorted array, passing a userdata pointer to the compare function.
---
---     For example:
---
---     @
---     typedef enum {
---         sort_increasing,
---         sort_decreasing,
---     } sort_method;
---
---     typedef struct {
---         int key;
---         const char *string;
---     } data;
---
---     int SDLCALL compare(const void *userdata, const void *a, const void *b)
---     {
---         sort_method method = (sort_method)(uintptr_t)userdata;
---         const data *A = (const data *)a;
---         const data *B = (const data *)b;
---
---         if (A->key \< B->key) {
---             return (method == sort_increasing) ? -1 : 1;
---         } else if (B->key \< A->key) {
---             return (method == sort_increasing) ? 1 : -1;
---         } else {
---             return 0;
---         }
---     }
---
---     data values[] = {
---         { 1, \"first\" }, { 2, \"second\" }, { 3, \"third\" }
---     };
---     data key = { 2, NULL };
---
---     data *result = SDL_bsearch_r(&key, values, SDL_arraysize(values), sizeof(values[0]), compare, (const void *)(uintptr_t)sort_increasing);
---     @
---
---     [Returns]: a pointer to the matching element in the array, or NULL if not found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'bsearchSafe', 'qsortRSafe'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_bsearch_r@.
---                   The unsafe import is not exported
---                   : invokes the comparator synchronously.
---                   If your callback is a non-Haskell function pointer that never
--- re-enters the Haskell runtime, the unsafe import remains available as @SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_bsearch_r@.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_bsearch_r@, defined at @SDL3\/SDL_stdinc.h 2109:36@
-bsearchRSafe
-  :: PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@key@]: a pointer to a key equal to the element being searched for.
-  -> PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@base@]: a pointer to the start of the array.
-  -> BG.Word64
-  -- ^
-  --
-  --           [@nmemb@]: the number of elements in the array.
-  -> BG.Word64
-  -- ^
-  --
-  --           [@size@]: the size of the elements in the array.
-  -> SDL_CompareCallback_r
-  -- ^
-  --
-  --           [@compare@]: a function used to compare elements in the array.
-  -> BG.Ptr BG.Void
-  -- ^
-  --
-  --           [@userdata@]: a pointer to pass to the compare function.
-  -> IO (BG.Ptr BG.Void)
-bsearchRSafe =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        \x33 ->
-          \x44 ->
-            \x55 ->
-              Safe.sDL_bsearch_r x00 x11 (Coerce.coerce x22) (Coerce.coerce x33) x44 x55
-
--- | Compute the absolute value of @x@.
---
---     [Returns]: the absolute value of x.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_abs@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_abs@, defined at @SDL3\/SDL_stdinc.h 2121:33@
-abs
-  :: BG.Int32
-  -- ^
-  --
-  --           [@x@]: an integer value.
-  -> IO BG.Int32
-abs =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_abs (Coerce.coerce x00))
-
--- | Query if a character is alphabetic (a letter).
---
---     __WARNING__: Regardless of system locale, this will only treat ASCII values for English \'a-z\' and \'A-Z\' as true.
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_isalpha@.
---                   The safe import is not exported
---                   : locale-independent ASCII character classification; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_isalpha@, defined at @SDL3\/SDL_stdinc.h 2196:33@
-isalpha
-  :: BG.Int32
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.Int32
-isalpha =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_isalpha (Coerce.coerce x00))
-
--- | Query if a character is alphabetic (a letter) or a number.
---
---     __WARNING__: Regardless of system locale, this will only treat ASCII values for English \'a-z\', \'A-Z\', and \'0-9\' as true.
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_isalnum@.
---                   The safe import is not exported
---                   : locale-independent ASCII character classification; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_isalnum@, defined at @SDL3\/SDL_stdinc.h 2211:33@
-isalnum
-  :: BG.Int32
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.Int32
-isalnum =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_isalnum (Coerce.coerce x00))
-
--- | Report if a character is blank (a space or tab).
---
---     __WARNING__: Regardless of system locale, this will only treat ASCII values 0x20 (space) or 0x9 (tab) as true.
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_isblank@.
---                   The safe import is not exported
---                   : locale-independent ASCII character classification; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_isblank@, defined at @SDL3\/SDL_stdinc.h 2226:33@
-isblank
-  :: BG.Int32
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.Int32
-isblank =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_isblank (Coerce.coerce x00))
-
--- | Report if a character is a control character.
---
---     __WARNING__: Regardless of system locale, this will only treat ASCII values 0 through 0x1F, and 0x7F, as true.
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_iscntrl@.
---                   The safe import is not exported
---                   : locale-independent ASCII character classification; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_iscntrl@, defined at @SDL3\/SDL_stdinc.h 2241:33@
-iscntrl
-  :: BG.Int32
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.Int32
-iscntrl =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_iscntrl (Coerce.coerce x00))
-
--- | Report if a character is a numeric digit.
---
---     __WARNING__: Regardless of system locale, this will only treat ASCII values \'0\' (0x30) through \'9\' (0x39), as true.
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_isdigit@.
---                   The safe import is not exported
---                   : locale-independent ASCII character classification; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_isdigit@, defined at @SDL3\/SDL_stdinc.h 2256:33@
-isdigit
-  :: BG.Int32
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.Int32
-isdigit =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_isdigit (Coerce.coerce x00))
-
--- | Report if a character is a hexadecimal digit.
---
---     __WARNING__: Regardless of system locale, this will only treat ASCII values \'A\' through \'F\', \'a\' through \'f\', and \'0\' through \'9\', as true.
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_isxdigit@.
---                   The safe import is not exported
---                   : locale-independent ASCII character classification; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_isxdigit@, defined at @SDL3\/SDL_stdinc.h 2271:33@
-isxdigit
-  :: BG.Int32
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.Int32
-isxdigit =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_isxdigit (Coerce.coerce x00))
-
--- | Report if a character is a punctuation mark.
---
---     __WARNING__: Regardless of system locale, this is equivalent to @((SDL_isgraph(x)) && (!SDL_isalnum(x)))@.
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'isgraph', 'isalnum'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_ispunct@.
---                   The safe import is not exported
---                   : locale-independent ASCII character classification; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_ispunct@, defined at @SDL3\/SDL_stdinc.h 2289:33@
-ispunct
-  :: BG.Int32
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.Int32
-ispunct =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_ispunct (Coerce.coerce x00))
-
--- | Report if a character is whitespace.
---
---     __WARNING__: Regardless of system locale, this will only treat the following ASCII values as true:
---
---     * space (0x20)
---
---     * tab (0x09)
---
---     * newline (0x0A)
---
---     * vertical tab (0x0B)
---
---     * form feed (0x0C)
---
---     * return (0x0D)
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_isspace@.
---                   The safe import is not exported
---                   : locale-independent ASCII character classification; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_isspace@, defined at @SDL3\/SDL_stdinc.h 2311:33@
-isspace
-  :: BG.Int32
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.Int32
-isspace =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_isspace (Coerce.coerce x00))
-
--- | Report if a character is upper case.
---
---     __WARNING__: Regardless of system locale, this will only treat ASCII values \'A\' through \'Z\' as true.
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_isupper@.
---                   The safe import is not exported
---                   : locale-independent ASCII character classification; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_isupper@, defined at @SDL3\/SDL_stdinc.h 2326:33@
-isupper
-  :: BG.Int32
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.Int32
-isupper =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_isupper (Coerce.coerce x00))
-
--- | Report if a character is lower case.
---
---     __WARNING__: Regardless of system locale, this will only treat ASCII values \'a\' through \'z\' as true.
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_islower@.
---                   The safe import is not exported
---                   : locale-independent ASCII character classification; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_islower@, defined at @SDL3\/SDL_stdinc.h 2341:33@
-islower
-  :: BG.Int32
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.Int32
-islower =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_islower (Coerce.coerce x00))
-
--- | Report if a character is \"printable\".
---
---     Be advised that \"printable\" has a definition that goes back to text terminals from the dawn of computing, making this a sort of special case function that is not suitable for Unicode (or most any) text management.
---
---     __WARNING__: Regardless of system locale, this will only treat ASCII values \' \' (0x20) through \'~\' (0x7E) as true.
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_isprint@.
---                   The safe import is not exported
---                   : locale-independent ASCII character classification; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_isprint@, defined at @SDL3\/SDL_stdinc.h 2360:33@
-isprint
-  :: BG.Int32
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.Int32
-isprint =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_isprint (Coerce.coerce x00))
-
--- | Report if a character is any \"printable\" except space.
---
---     Be advised that \"printable\" has a definition that goes back to text terminals from the dawn of computing, making this a sort of special case function that is not suitable for Unicode (or most any) text management.
---
---     __WARNING__: Regardless of system locale, this is equivalent to @(SDL_isprint(x)) && ((x) != \' \')@.
---
---     [Returns]: non-zero if x falls within the character class, zero otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'isprint'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_isgraph@.
---                   The safe import is not exported
---                   : locale-independent ASCII character classification; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_isgraph@, defined at @SDL3\/SDL_stdinc.h 2381:33@
-isgraph
-  :: BG.Int32
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.Int32
-isgraph =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_isgraph (Coerce.coerce x00))
-
--- | Convert low-ASCII English letters to uppercase.
---
---     __WARNING__: Regardless of system locale, this will only convert ASCII values \'a\' through \'z\' to uppercase.
---
---     This function returns the uppercase equivalent of @x@. If a character cannot be converted, or is already uppercase, this function returns @x@.
---
---     [Returns]: capitalized version of x, or x if no conversion available.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_toupper@.
---                   The safe import is not exported
---                   : locale-independent ASCII character classification; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_toupper@, defined at @SDL3\/SDL_stdinc.h 2399:33@
-toupper
-  :: BG.Int32
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.Int32
-toupper =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_toupper (Coerce.coerce x00))
-
--- | Convert low-ASCII English letters to lowercase.
---
---     __WARNING__: Regardless of system locale, this will only convert ASCII values \'A\' through \'Z\' to lowercase.
---
---     This function returns the lowercase equivalent of @x@. If a character cannot be converted, or is already lowercase, this function returns @x@.
---
---     [Returns]: lowercase version of x, or x if no conversion available.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_tolower@.
---                   The safe import is not exported
---                   : locale-independent ASCII character classification; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_tolower@, defined at @SDL3\/SDL_stdinc.h 2417:33@
-tolower
-  :: BG.Int32
-  -- ^
-  --
-  --           [@x@]: character value to check.
-  -> IO BG.Int32
-tolower =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_tolower (Coerce.coerce x00))
-
--- | Calculate a CRC-16 value.
---
---     [https:\/\/en.wikipedia.org\/wiki\/Cyclic_redundancy_check](https://en.wikipedia.org/wiki/Cyclic_redundancy_check)
---
---     This function can be called multiple times, to stream data to be checksummed in blocks. Each call must provide the previous CRC-16 return value to be updated with the next block. The first call to this function for a set of blocks should pass in a zero CRC value.
---
---     [Returns]: a CRC-16 checksum value of all blocks in the data set.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_crc16@.
---                   The safe flavor is 'crc16Safe'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_crc16@, defined at @SDL3\/SDL_stdinc.h 2438:36@
-crc16
-  :: BG.Word16
-  -- ^
-  --
-  --           [@crc@]: the current checksum for this data set, or 0 for a new data set.
-  -> PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@data@]: a new block of data to add to the checksum.
-  -> BG.Word64
-  -- ^
-  --
-  --           [@len@]: the size, in bytes, of the new block of data.
-  -> IO BG.Word16
-crc16 =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        fmap Coerce.coerce (Unsafe.sDL_crc16 (Coerce.coerce x00) x11 (Coerce.coerce x22))
-
--- | Calculate a CRC-16 value.
---
---     [https:\/\/en.wikipedia.org\/wiki\/Cyclic_redundancy_check](https://en.wikipedia.org/wiki/Cyclic_redundancy_check)
---
---     This function can be called multiple times, to stream data to be checksummed in blocks. Each call must provide the previous CRC-16 return value to be updated with the next block. The first call to this function for a set of blocks should pass in a zero CRC value.
---
---     [Returns]: a CRC-16 checksum value of all blocks in the data set.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_crc16@.
---                   The unsafe flavor is 'crc16'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_crc16@, defined at @SDL3\/SDL_stdinc.h 2438:36@
-crc16Safe
-  :: BG.Word16
-  -- ^
-  --
-  --           [@crc@]: the current checksum for this data set, or 0 for a new data set.
-  -> PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@data@]: a new block of data to add to the checksum.
-  -> BG.Word64
-  -- ^
-  --
-  --           [@len@]: the size, in bytes, of the new block of data.
-  -> IO BG.Word16
-crc16Safe =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        fmap Coerce.coerce (Safe.sDL_crc16 (Coerce.coerce x00) x11 (Coerce.coerce x22))
-
--- | Calculate a CRC-32 value.
---
---     [https:\/\/en.wikipedia.org\/wiki\/Cyclic_redundancy_check](https://en.wikipedia.org/wiki/Cyclic_redundancy_check)
---
---     This function can be called multiple times, to stream data to be checksummed in blocks. Each call must provide the previous CRC-32 return value to be updated with the next block. The first call to this function for a set of blocks should pass in a zero CRC value.
---
---     [Returns]: a CRC-32 checksum value of all blocks in the data set.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_crc32@.
---                   The safe flavor is 'crc32Safe'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_crc32@, defined at @SDL3\/SDL_stdinc.h 2459:36@
-crc32
-  :: BG.Word32
-  -- ^
-  --
-  --           [@crc@]: the current checksum for this data set, or 0 for a new data set.
-  -> PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@data@]: a new block of data to add to the checksum.
-  -> BG.Word64
-  -- ^
-  --
-  --           [@len@]: the size, in bytes, of the new block of data.
-  -> IO BG.Word32
-crc32 =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        fmap Coerce.coerce (Unsafe.sDL_crc32 (Coerce.coerce x00) x11 (Coerce.coerce x22))
-
--- | Calculate a CRC-32 value.
---
---     [https:\/\/en.wikipedia.org\/wiki\/Cyclic_redundancy_check](https://en.wikipedia.org/wiki/Cyclic_redundancy_check)
---
---     This function can be called multiple times, to stream data to be checksummed in blocks. Each call must provide the previous CRC-32 return value to be updated with the next block. The first call to this function for a set of blocks should pass in a zero CRC value.
---
---     [Returns]: a CRC-32 checksum value of all blocks in the data set.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_crc32@.
---                   The unsafe flavor is 'crc32'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_crc32@, defined at @SDL3\/SDL_stdinc.h 2459:36@
-crc32Safe
-  :: BG.Word32
-  -- ^
-  --
-  --           [@crc@]: the current checksum for this data set, or 0 for a new data set.
-  -> PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@data@]: a new block of data to add to the checksum.
-  -> BG.Word64
-  -- ^
-  --
-  --           [@len@]: the size, in bytes, of the new block of data.
-  -> IO BG.Word32
-crc32Safe =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        fmap Coerce.coerce (Safe.sDL_crc32 (Coerce.coerce x00) x11 (Coerce.coerce x22))
-
--- | Calculate a 32-bit MurmurHash3 value for a block of data.
---
---     [https:\/\/en.wikipedia.org\/wiki\/MurmurHash](https://en.wikipedia.org/wiki/MurmurHash)
---
---     A seed may be specified, which changes the final results consistently, but this does not work like 'crc16' and 'crc32': you can\'t feed a previous result from this function back into itself as the next seed value to calculate a hash in chunks; it won\'t produce the same hash as it would if the same data was provided in a single call.
---
---     If you aren\'t sure what to provide for a seed, zero is fine. Murmur3 is not cryptographically secure, so it shouldn\'t be used for hashing top-secret data.
---
---     [Returns]: a Murmur3 32-bit hash value.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_murmur3_32@.
---                   The safe flavor is 'murmur3_32Safe'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_murmur3_32@, defined at @SDL3\/SDL_stdinc.h 2485:36@
-murmur3_32
-  :: PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@data@]: the data to be hashed.
-  -> BG.Word64
-  -- ^
-  --
-  --           [@len@]: the size of data, in bytes.
-  -> BG.Word32
-  -- ^
-  --
-  --           [@seed@]: a value that alters the final hash value.
-  -> IO BG.Word32
-murmur3_32 =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        fmap Coerce.coerce (Unsafe.sDL_murmur3_32 x00 (Coerce.coerce x11) (Coerce.coerce x22))
-
--- | Calculate a 32-bit MurmurHash3 value for a block of data.
---
---     [https:\/\/en.wikipedia.org\/wiki\/MurmurHash](https://en.wikipedia.org/wiki/MurmurHash)
---
---     A seed may be specified, which changes the final results consistently, but this does not work like 'crc16' and 'crc32': you can\'t feed a previous result from this function back into itself as the next seed value to calculate a hash in chunks; it won\'t produce the same hash as it would if the same data was provided in a single call.
---
---     If you aren\'t sure what to provide for a seed, zero is fine. Murmur3 is not cryptographically secure, so it shouldn\'t be used for hashing top-secret data.
---
---     [Returns]: a Murmur3 32-bit hash value.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_murmur3_32@.
---                   The unsafe flavor is 'murmur3_32'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_murmur3_32@, defined at @SDL3\/SDL_stdinc.h 2485:36@
-murmur3_32Safe
-  :: PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@data@]: the data to be hashed.
-  -> BG.Word64
-  -- ^
-  --
-  --           [@len@]: the size of data, in bytes.
-  -> BG.Word32
-  -- ^
-  --
-  --           [@seed@]: a value that alters the final hash value.
-  -> IO BG.Word32
-murmur3_32Safe =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        fmap Coerce.coerce (Safe.sDL_murmur3_32 x00 (Coerce.coerce x11) (Coerce.coerce x22))
-
--- | Initialize all 32-bit words of buffer of memory to a specific value.
---
---     This function will set a buffer of @dwords@ 'Uint32' values, pointed to by @dst@, to the value specified in @val@.
---
---     Unlike SDL_memset, this sets 32-bit values, not bytes, so it\'s not limited to a range of 0-255.
---
---     [Returns]: @dst@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_memset4@.
---                   The safe flavor is 'memset4Safe'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_memset4@, defined at @SDL3\/SDL_stdinc.h 2609:36@
-memset4
-  :: BG.Ptr BG.Void
-  -- ^
-  --
-  --           [@dst@]: the destination memory region. Must not be NULL.
-  -> BG.Word32
-  -- ^
-  --
-  --           [@val@]: the 'Uint32' value to set.
-  -> BG.Word64
-  -- ^
-  --
-  --           [@dwords@]: the number of 'Uint32' values to set in @dst@.
-  -> IO (BG.Ptr BG.Void)
-memset4 =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        Unsafe.sDL_memset4 x00 (Coerce.coerce x11) (Coerce.coerce x22)
-
--- | Initialize all 32-bit words of buffer of memory to a specific value.
---
---     This function will set a buffer of @dwords@ 'Uint32' values, pointed to by @dst@, to the value specified in @val@.
---
---     Unlike SDL_memset, this sets 32-bit values, not bytes, so it\'s not limited to a range of 0-255.
---
---     [Returns]: @dst@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_memset4@.
---                   The unsafe flavor is 'memset4'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_memset4@, defined at @SDL3\/SDL_stdinc.h 2609:36@
-memset4Safe
-  :: BG.Ptr BG.Void
-  -- ^
-  --
-  --           [@dst@]: the destination memory region. Must not be NULL.
-  -> BG.Word32
-  -- ^
-  --
-  --           [@val@]: the 'Uint32' value to set.
-  -> BG.Word64
-  -- ^
-  --
-  --           [@dwords@]: the number of 'Uint32' values to set in @dst@.
-  -> IO (BG.Ptr BG.Void)
-memset4Safe =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        Safe.sDL_memset4 x00 (Coerce.coerce x11) (Coerce.coerce x22)
-
--- | Compare two buffers of memory.
---
---     [Returns]: less than zero if s1 is \"less than\" s2, greater than zero if s1 is \"greater than\" s2, and zero if the buffers match exactly for @len@ bytes.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_memcmp@.
---                   The safe flavor is 'memcmpSafe'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_memcmp@, defined at @SDL3\/SDL_stdinc.h 2691:33@
-memcmp
-  :: PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@s1@]: the first buffer to compare. NULL is not permitted!
-  -> PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@s2@]: the second buffer to compare. NULL is not permitted!
-  -> BG.Word64
-  -- ^
-  --
-  --           [@len@]: the number of bytes to compare between the buffers.
-  -> IO BG.Int32
-memcmp =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        fmap Coerce.coerce (Unsafe.sDL_memcmp x00 x11 (Coerce.coerce x22))
-
--- | Compare two buffers of memory.
---
---     [Returns]: less than zero if s1 is \"less than\" s2, greater than zero if s1 is \"greater than\" s2, and zero if the buffers match exactly for @len@ bytes.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_memcmp@.
---                   The unsafe flavor is 'memcmp'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_memcmp@, defined at @SDL3\/SDL_stdinc.h 2691:33@
-memcmpSafe
-  :: PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@s1@]: the first buffer to compare. NULL is not permitted!
-  -> PtrConst.PtrConst BG.Void
-  -- ^
-  --
-  --           [@s2@]: the second buffer to compare. NULL is not permitted!
-  -> BG.Word64
-  -- ^
-  --
-  --           [@len@]: the number of bytes to compare between the buffers.
-  -> IO BG.Int32
-memcmpSafe =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        fmap Coerce.coerce (Safe.sDL_memcmp x00 x11 (Coerce.coerce x22))
-
--- | This works exactly like wcslen() but doesn\'t require access to a C runtime.
---
---     Counts the number of wchar_t values in @wstr@, excluding the null terminator.
---
---     Like 'strlen' only counts bytes and not codepoints in a UTF-8 string, this counts wchar_t values in a string, even if the string\'s encoding is of variable width, like UTF-16.
---
---     Also be aware that wchar_t is different sizes on different platforms (4 bytes on Linux, 2 on Windows, etc).
---
---     [Returns]: the length (in wchar_t values, excluding the null terminator) of @wstr@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'wcsnlen', 'utf8strlen', 'utf8strnlen'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_wcslen@.
---                   The safe import is not exported
---                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_wcslen@, defined at @SDL3\/SDL_stdinc.h 2718:36@
-wcslen
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@wstr@]: The null-terminated wide string to read. Must not be NULL.
-  -> IO BG.Word64
-wcslen =
-  \x00 -> fmap Coerce.coerce (Unsafe.sDL_wcslen x00)
-
--- | This works exactly like wcsnlen() but doesn\'t require access to a C runtime.
---
---     Counts up to a maximum of @maxlen@ wchar_t values in @wstr@, excluding the null terminator.
---
---     Like 'strnlen' only counts bytes and not codepoints in a UTF-8 string, this counts wchar_t values in a string, even if the string\'s encoding is of variable width, like UTF-16.
---
---     Also be aware that wchar_t is different sizes on different platforms (4 bytes on Linux, 2 on Windows, etc).
---
---     Also, @maxlen@ is a count of wide characters, not bytes!
---
---     [Returns]: the length (in wide characters, excluding the null terminator) of @wstr@ but never more than @maxlen@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'wcslen', 'utf8strlen', 'utf8strnlen'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_wcsnlen@.
---                   The safe import is not exported
---                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_wcsnlen@, defined at @SDL3\/SDL_stdinc.h 2749:36@
-wcsnlen
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@wstr@]: The null-terminated wide string to read. Must not be NULL.
-  -> BG.Word64
-  -- ^
-  --
-  --           [@maxlen@]: The maximum amount of wide characters to count.
-  -> IO BG.Word64
-wcsnlen =
-  \x00 ->
-    \x11 ->
-      fmap Coerce.coerce (Unsafe.sDL_wcsnlen x00 (Coerce.coerce x11))
-
--- | Copy a wide string.
---
---     This function copies @maxlen@ - 1 wide characters from @src@ to @dst@, then appends a null terminator.
---
---     @src@ and @dst@ must not overlap.
---
---     If @maxlen@ is 0, no wide characters are copied and no null terminator is written.
---
---     [Returns]: the length (in wide characters, excluding the null terminator) of @src@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'wcslcat'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_wcslcpy@.
---                   The safe import is not exported
---                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_wcslcpy@, defined at @SDL3\/SDL_stdinc.h 2776:36@
-wcslcpy
-  :: BG.Ptr HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@dst@]: The destination buffer. Must not be NULL, and must not overlap with @src@.
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@src@]: The null-terminated wide string to copy. Must not be NULL, and must not overlap with @dst@.
-  -> BG.Word64
-  -- ^
-  --
-  --           [@maxlen@]: The length (in wide characters) of the destination buffer.
-  -> IO BG.Word64
-wcslcpy =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        fmap Coerce.coerce (Unsafe.sDL_wcslcpy x00 x11 (Coerce.coerce x22))
-
--- | Concatenate wide strings.
---
---     This function appends up to @maxlen@ - SDL_wcslen(dst) - 1 wide characters from @src@ to the end of the wide string in @dst@, then appends a null terminator.
---
---     @src@ and @dst@ must not overlap.
---
---     If @maxlen@ - SDL_wcslen(dst) - 1 is less than or equal to 0, then @dst@ is unmodified.
---
---     [Returns]: the length (in wide characters, excluding the null terminator) of the string in @dst@ plus the length of @src@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'wcslcpy'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_wcslcat@.
---                   The safe import is not exported
---                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_wcslcat@, defined at @SDL3\/SDL_stdinc.h 2805:36@
-wcslcat
-  :: BG.Ptr HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@dst@]: The destination buffer already containing the first null-terminated wide string. Must not be NULL and must not overlap with @src@.
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@src@]: The second null-terminated wide string. Must not be NULL, and must not overlap with @dst@.
-  -> BG.Word64
-  -- ^
-  --
-  --           [@maxlen@]: The length (in wide characters) of the destination buffer.
-  -> IO BG.Word64
-wcslcat =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        fmap Coerce.coerce (Unsafe.sDL_wcslcat x00 x11 (Coerce.coerce x22))
-
--- | Allocate a copy of a wide string.
---
---     This allocates enough space for a null-terminated copy of @wstr@, using 'malloc', and then makes a copy of the string into this space.
---
---     The returned string is owned by the caller, and should be passed to 'free' when no longer needed.
---
---     [Returns]: a pointer to the newly-allocated wide string.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_wcsdup@.
---                   The safe flavor is 'wcsdupSafe'
---                   .
---
---     [C declaration]: @SDL_wcsdup@, defined at @SDL3\/SDL_stdinc.h 2823:39@
-wcsdup
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@wstr@]: the string to copy.
-  -> IO (BG.Ptr HsBindgen.Runtime.LibC.CWchar)
-wcsdup = Unsafe.sDL_wcsdup
-
--- | Allocate a copy of a wide string.
---
---     This allocates enough space for a null-terminated copy of @wstr@, using 'malloc', and then makes a copy of the string into this space.
---
---     The returned string is owned by the caller, and should be passed to 'free' when no longer needed.
---
---     [Returns]: a pointer to the newly-allocated wide string.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_wcsdup@.
---                   The unsafe flavor is 'wcsdup'
---                   .
---
---     [C declaration]: @SDL_wcsdup@, defined at @SDL3\/SDL_stdinc.h 2823:39@
-wcsdupSafe
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@wstr@]: the string to copy.
-  -> IO (BG.Ptr HsBindgen.Runtime.LibC.CWchar)
-wcsdupSafe = Safe.sDL_wcsdup
-
--- | Search a wide string for the first instance of a specific substring.
---
---     The search ends once it finds the requested substring, or a null terminator byte to end the string.
---
---     Note that this looks for strings of /wide characters/, not /codepoints/, so it\'s legal to search for malformed and incomplete UTF-16 sequences.
---
---     [Returns]: a pointer to the first instance of @needle@ in the string, or NULL if not found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_wcsstr@.
---                   The safe import is not exported
---                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
---
---     [C declaration]: @SDL_wcsstr@, defined at @SDL3\/SDL_stdinc.h 2843:39@
-wcsstr
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@haystack@]: the wide string to search. Must not be NULL.
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@needle@]: the wide string to search for. Must not be NULL.
-  -> IO (BG.Ptr HsBindgen.Runtime.LibC.CWchar)
-wcsstr = Unsafe.sDL_wcsstr
-
--- | Search a wide string, up to n wide chars, for the first instance of a specific substring.
---
---     The search ends once it finds the requested substring, or a null terminator value to end the string, or @maxlen@ wide character have been examined. It is possible to use this function on a wide string without a null terminator.
---
---     Note that this looks for strings of /wide characters/, not /codepoints/, so it\'s legal to search for malformed and incomplete UTF-16 sequences.
---
---     [Returns]: a pointer to the first instance of @needle@ in the string, or NULL if not found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_wcsnstr@.
---                   The safe import is not exported
---                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_wcsnstr@, defined at @SDL3\/SDL_stdinc.h 2868:39@
-wcsnstr
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@haystack@]: the wide string to search. Must not be NULL.
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@needle@]: the wide string to search for. Must not be NULL.
-  -> BG.Word64
-  -- ^
-  --
-  --           [@maxlen@]: the maximum number of wide characters to search in @haystack@.
-  -> IO (BG.Ptr HsBindgen.Runtime.LibC.CWchar)
-wcsnstr =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        Unsafe.sDL_wcsnstr x00 x11 (Coerce.coerce x22)
-
--- | Compare two null-terminated wide strings.
---
---     This only compares wchar_t values until it hits a null-terminating character; it does not care if the string is well-formed UTF-16 (or UTF-32, depending on your platform\'s wchar_t size), or uses valid Unicode values.
---
---     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_wcscmp@.
---                   The safe import is not exported
---                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_wcscmp@, defined at @SDL3\/SDL_stdinc.h 2887:33@
-wcscmp
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@str1@]: the first string to compare. NULL is not permitted!
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@str2@]: the second string to compare. NULL is not permitted!
-  -> IO BG.Int32
-wcscmp =
-  \x00 ->
-    \x11 ->
-      fmap Coerce.coerce (Unsafe.sDL_wcscmp x00 x11)
-
--- | Compare two wide strings up to a number of wchar_t values.
---
---     This only compares wchar_t values; it does not care if the string is well-formed UTF-16 (or UTF-32, depending on your platform\'s wchar_t size), or uses valid Unicode values.
---
---     Note that while this function is intended to be used with UTF-16 (or UTF-32, depending on your platform\'s definition of wchar_t), it is comparing raw wchar_t values and not Unicode codepoints: @maxlen@ specifies a wchar_t limit! If the limit lands in the middle of a multi-wchar UTF-16 sequence, it will only compare a portion of the final character.
---
---     @maxlen@ specifies a maximum number of wchar_t to compare; if the strings match to this number of wide chars (or both have matched to a null-terminator character before this count), they will be considered equal.
---
---     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_wcsncmp@.
---                   The safe import is not exported
---                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_wcsncmp@, defined at @SDL3\/SDL_stdinc.h 2918:33@
-wcsncmp
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@str1@]: the first string to compare. NULL is not permitted!
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@str2@]: the second string to compare. NULL is not permitted!
-  -> BG.Word64
-  -- ^
-  --
-  --           [@maxlen@]: the maximum number of wchar_t to compare.
-  -> IO BG.Int32
-wcsncmp =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        fmap Coerce.coerce (Unsafe.sDL_wcsncmp x00 x11 (Coerce.coerce x22))
-
--- | Compare two null-terminated wide strings, case-insensitively.
---
---     This will work with Unicode strings, using a technique called \"case-folding\" to handle the vast majority of case-sensitive human languages regardless of system locale. It can deal with expanding values: a German Eszett character can compare against two ASCII \'s\' chars and be considered a match, for example. A notable exception: it does not handle the Turkish \'i\' character; human language is complicated!
---
---     Depending on your platform, \"wchar_t\" might be 2 bytes, and expected to be UTF-16 encoded (like Windows), or 4 bytes in UTF-32 format. Since this handles Unicode, it expects the string to be well-formed and not a null-terminated string of arbitrary bytes. Characters that are not valid UTF-16 (or UTF-32) are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), which is to say two strings of random bits may turn out to match if they convert to the same amount of replacement characters.
---
---     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_wcscasecmp@.
---                   The safe import is not exported
---                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_wcscasecmp@, defined at @SDL3\/SDL_stdinc.h 2948:33@
-wcscasecmp
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@str1@]: the first string to compare. NULL is not permitted!
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@str2@]: the second string to compare. NULL is not permitted!
-  -> IO BG.Int32
-wcscasecmp =
-  \x00 ->
-    \x11 ->
-      fmap Coerce.coerce (Unsafe.sDL_wcscasecmp x00 x11)
-
--- | Compare two wide strings, case-insensitively, up to a number of wchar_t.
---
---     This will work with Unicode strings, using a technique called \"case-folding\" to handle the vast majority of case-sensitive human languages regardless of system locale. It can deal with expanding values: a German Eszett character can compare against two ASCII \'s\' chars and be considered a match, for example. A notable exception: it does not handle the Turkish \'i\' character; human language is complicated!
---
---     Depending on your platform, \"wchar_t\" might be 2 bytes, and expected to be UTF-16 encoded (like Windows), or 4 bytes in UTF-32 format. Since this handles Unicode, it expects the string to be well-formed and not a null-terminated string of arbitrary bytes. Characters that are not valid UTF-16 (or UTF-32) are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), which is to say two strings of random bits may turn out to match if they convert to the same amount of replacement characters.
---
---     Note that while this function might deal with variable-sized characters, @maxlen@ specifies a /wchar/ limit! If the limit lands in the middle of a multi-byte UTF-16 sequence, it may convert a portion of the final character to one or more Unicode character U+FFFD (REPLACEMENT CHARACTER) so as not to overflow a buffer.
---
---     @maxlen@ specifies a maximum number of wchar_t values to compare; if the strings match to this number of wchar_t (or both have matched to a null-terminator character before this number of bytes), they will be considered equal.
---
---     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_wcsncasecmp@.
---                   The safe import is not exported
---                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_wcsncasecmp@, defined at @SDL3\/SDL_stdinc.h 2990:33@
-wcsncasecmp
-  :: PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@str1@]: the first string to compare. NULL is not permitted!
-  -> PtrConst.PtrConst HsBindgen.Runtime.LibC.CWchar
-  -- ^
-  --
-  --           [@str2@]: the second string to compare. NULL is not permitted!
-  -> BG.Word64
-  -- ^
-  --
-  --           [@maxlen@]: the maximum number of wchar_t values to compare.
-  -> IO BG.Int32
-wcsncasecmp =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        fmap Coerce.coerce (Unsafe.sDL_wcsncasecmp x00 x11 (Coerce.coerce x22))
-
--- | This works exactly like strlen() but doesn\'t require access to a C runtime.
---
---     Counts the bytes in @str@, excluding the null terminator.
---
---     If you need the length of a UTF-8 string, consider using @'utf8strlen'@.
---
---     [Returns]: the length (in bytes, excluding the null terminator) of @src@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'strnlen', 'utf8strlen', 'utf8strnlen'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_strlen@.
---                   The safe import is not exported
---                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_strlen@, defined at @SDL3\/SDL_stdinc.h 3037:36@
-strlen
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: The null-terminated string to read. Must not be NULL.
-  -> IO BG.Word64
-strlen =
-  \x00 -> fmap Coerce.coerce (Unsafe.sDL_strlen x00)
-
--- | This works exactly like strnlen() but doesn\'t require access to a C runtime.
---
---     Counts up to a maximum of @maxlen@ bytes in @str@, excluding the null terminator.
---
---     If you need the length of a UTF-8 string, consider using @'utf8strnlen'@.
---
---     [Returns]: the length (in bytes, excluding the null terminator) of @src@ but never more than @maxlen@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'strlen', 'utf8strlen', 'utf8strnlen'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_strnlen@.
---                   The safe import is not exported
---                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_strnlen@, defined at @SDL3\/SDL_stdinc.h 3061:36@
-strnlen
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: The null-terminated string to read. Must not be NULL.
-  -> BG.Word64
-  -- ^
-  --
-  --           [@maxlen@]: The maximum amount of bytes to count.
-  -> IO BG.Word64
-strnlen =
-  \x00 ->
-    \x11 ->
-      fmap Coerce.coerce (Unsafe.sDL_strnlen x00 (Coerce.coerce x11))
-
--- | Copy a string.
---
---     This function copies up to @maxlen@ - 1 characters from @src@ to @dst@, then appends a null terminator.
---
---     If @maxlen@ is 0, no characters are copied and no null terminator is written.
---
---     If you want to copy an UTF-8 string but need to ensure that multi-byte sequences are not truncated, consider using @'utf8strlcpy'@.
---
---     [Returns]: the length (in characters, excluding the null terminator) of @src@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'strlcat', 'utf8strlcpy'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_strlcpy@.
---                   The safe import is not exported
---                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_strlcpy@, defined at @SDL3\/SDL_stdinc.h 3090:36@
-strlcpy
-  :: BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@dst@]: The destination buffer. Must not be NULL, and must not overlap with @src@.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@src@]: The null-terminated string to copy. Must not be NULL, and must not overlap with @dst@.
-  -> BG.Word64
-  -- ^
-  --
-  --           [@maxlen@]: The length (in characters) of the destination buffer.
-  -> IO BG.Word64
-strlcpy =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        fmap Coerce.coerce (Unsafe.sDL_strlcpy x00 x11 (Coerce.coerce x22))
-
--- | Copy an UTF-8 string.
---
---     This function copies up to @dst_bytes@ - 1 bytes from @src@ to @dst@ while also ensuring that the string written to @dst@ does not end in a truncated multi-byte sequence. Finally, it appends a null terminator.
---
---     @src@ and @dst@ must not overlap.
---
---     Note that unlike @'strlcpy'@, this function returns the number of bytes written, not the length of @src@.
---
---     [Returns]: the number of bytes written, excluding the null terminator.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'strlcpy'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_utf8strlcpy@.
---                   The safe import is not exported
---                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_utf8strlcpy@, defined at @SDL3\/SDL_stdinc.h 3118:36@
-utf8strlcpy
-  :: BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@dst@]: The destination buffer. Must not be NULL, and must not overlap with @src@.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@src@]: The null-terminated UTF-8 string to copy. Must not be NULL, and must not overlap with @dst@.
-  -> BG.Word64
-  -- ^
-  --
-  --           [@dst_bytes@]: The length (in bytes) of the destination buffer. Must not be 0.
-  -> IO BG.Word64
-utf8strlcpy =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        fmap Coerce.coerce (Unsafe.sDL_utf8strlcpy x00 x11 (Coerce.coerce x22))
-
--- | Concatenate strings.
---
---     This function appends up to @maxlen@ - SDL_strlen(dst) - 1 characters from @src@ to the end of the string in @dst@, then appends a null terminator.
---
---     @src@ and @dst@ must not overlap.
---
---     If @maxlen@ - SDL_strlen(dst) - 1 is less than or equal to 0, then @dst@ is unmodified.
---
---     [Returns]: the length (in characters, excluding the null terminator) of the string in @dst@ plus the length of @src@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'strlcpy'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_strlcat@.
---                   The safe import is not exported
---                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_strlcat@, defined at @SDL3\/SDL_stdinc.h 3146:36@
-strlcat
-  :: BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@dst@]: The destination buffer already containing the first null-terminated string. Must not be NULL and must not overlap with @src@.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@src@]: The second null-terminated string. Must not be NULL, and must not overlap with @dst@.
-  -> BG.Word64
-  -- ^
-  --
-  --           [@maxlen@]: The length (in characters) of the destination buffer.
-  -> IO BG.Word64
-strlcat =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        fmap Coerce.coerce (Unsafe.sDL_strlcat x00 x11 (Coerce.coerce x22))
-
--- | Allocate a copy of a string.
---
---     This allocates enough space for a null-terminated copy of @str@, using 'malloc', and then makes a copy of the string into this space.
---
---     The returned string is owned by the caller, and should be passed to 'free' when no longer needed.
---
---     [Returns]: a pointer to the newly-allocated string.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_strdup@.
---                   The safe flavor is 'strdupSafe'
---                   .
---
---     [C declaration]: @SDL_strdup@, defined at @SDL3\/SDL_stdinc.h 3164:47@
-strdup
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: the string to copy.
-  -> IO (BG.Ptr BG.CChar)
-strdup = Unsafe.sDL_strdup
-
--- | Allocate a copy of a string.
---
---     This allocates enough space for a null-terminated copy of @str@, using 'malloc', and then makes a copy of the string into this space.
---
---     The returned string is owned by the caller, and should be passed to 'free' when no longer needed.
---
---     [Returns]: a pointer to the newly-allocated string.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_strdup@.
---                   The unsafe flavor is 'strdup'
---                   .
---
---     [C declaration]: @SDL_strdup@, defined at @SDL3\/SDL_stdinc.h 3164:47@
-strdupSafe
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: the string to copy.
-  -> IO (BG.Ptr BG.CChar)
-strdupSafe = Safe.sDL_strdup
-
--- | Allocate a copy of a string, up to n characters.
---
---     This allocates enough space for a null-terminated copy of @str@, up to @maxlen@ bytes, using 'malloc', and then makes a copy of the string into this space.
---
---     If the string is longer than @maxlen@ bytes, the returned string will be @maxlen@ bytes long, plus a null-terminator character that isn\'t included in the count.
---
---     The returned string is owned by the caller, and should be passed to 'free' when no longer needed.
---
---     [Returns]: a pointer to the newly-allocated string.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_strndup@.
---                   The safe flavor is 'strndupSafe'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_strndup@, defined at @SDL3\/SDL_stdinc.h 3189:47@
-strndup
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: the string to copy.
-  -> BG.Word64
-  -- ^
-  --
-  --           [@maxlen@]: the maximum length of the copied string, not counting the null-terminator character.
-  -> IO (BG.Ptr BG.CChar)
-strndup =
-  \x00 ->
-    \x11 -> Unsafe.sDL_strndup x00 (Coerce.coerce x11)
-
--- | Allocate a copy of a string, up to n characters.
---
---     This allocates enough space for a null-terminated copy of @str@, up to @maxlen@ bytes, using 'malloc', and then makes a copy of the string into this space.
---
---     If the string is longer than @maxlen@ bytes, the returned string will be @maxlen@ bytes long, plus a null-terminator character that isn\'t included in the count.
---
---     The returned string is owned by the caller, and should be passed to 'free' when no longer needed.
---
---     [Returns]: a pointer to the newly-allocated string.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_strndup@.
---                   The unsafe flavor is 'strndup'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_strndup@, defined at @SDL3\/SDL_stdinc.h 3189:47@
-strndupSafe
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: the string to copy.
-  -> BG.Word64
-  -- ^
-  --
-  --           [@maxlen@]: the maximum length of the copied string, not counting the null-terminator character.
-  -> IO (BG.Ptr BG.CChar)
-strndupSafe =
-  \x00 ->
-    \x11 -> Safe.sDL_strndup x00 (Coerce.coerce x11)
-
--- | Reverse a string\'s contents.
---
---     This reverses a null-terminated string in-place. Only the content of the string is reversed; the null-terminator character remains at the end of the reversed string.
---
---     __WARNING__: This function reverses the /bytes/ of the string, not the codepoints. If @str@ is a UTF-8 string with Unicode codepoints > 127, this will ruin the string data. You should only use this function on strings that are completely comprised of low ASCII characters.
---
---     [Returns]: @str@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_strrev@.
---                   The safe import is not exported
---                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
---
---     [C declaration]: @SDL_strrev@, defined at @SDL3\/SDL_stdinc.h 3210:36@
-strrev
-  :: BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@str@]: the string to reverse.
-  -> IO (BG.Ptr BG.CChar)
-strrev = Unsafe.sDL_strrev
-
--- | Convert a string to uppercase.
---
---     __WARNING__: Regardless of system locale, this will only convert ASCII values \'A\' through \'Z\' to uppercase.
---
---     This function operates on a null-terminated string of bytes even if it is malformed UTF-8! and converts ASCII characters \'a\' through \'z\' to their uppercase equivalents in-place, returning the original @str@ pointer.
---
---     [Returns]: the @str@ pointer passed into this function.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'strlwr'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_strupr@.
---                   The safe import is not exported
---                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
---
---     [C declaration]: @SDL_strupr@, defined at @SDL3\/SDL_stdinc.h 3231:36@
-strupr
-  :: BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@str@]: the string to convert in-place. Can not be NULL.
-  -> IO (BG.Ptr BG.CChar)
-strupr = Unsafe.sDL_strupr
-
--- | Convert a string to lowercase.
---
---     __WARNING__: Regardless of system locale, this will only convert ASCII values \'A\' through \'Z\' to lowercase.
---
---     This function operates on a null-terminated string of bytes even if it is malformed UTF-8! and converts ASCII characters \'A\' through \'Z\' to their lowercase equivalents in-place, returning the original @str@ pointer.
---
---     [Returns]: the @str@ pointer passed into this function.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'strupr'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_strlwr@.
---                   The safe import is not exported
---                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
---
---     [C declaration]: @SDL_strlwr@, defined at @SDL3\/SDL_stdinc.h 3252:36@
-strlwr
-  :: BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@str@]: the string to convert in-place. Can not be NULL.
-  -> IO (BG.Ptr BG.CChar)
-strlwr = Unsafe.sDL_strlwr
-
--- | Search a string for the first instance of a specific byte.
---
---     The search ends once it finds the requested byte value, or a null terminator byte to end the string.
---
---     Note that this looks for /bytes/, not /characters/, so you cannot match against a Unicode codepoint > 255, regardless of character encoding.
---
---     [Returns]: a pointer to the first instance of @c@ in the string, or NULL if not found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_strchr@.
---                   The safe import is not exported
---                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_strchr@, defined at @SDL3\/SDL_stdinc.h 3272:36@
-strchr
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: the string to search. Must not be NULL.
-  -> BG.Int32
-  -- ^
-  --
-  --           [@c@]: the byte value to search for.
-  -> IO (BG.Ptr BG.CChar)
-strchr =
-  \x00 ->
-    \x11 -> Unsafe.sDL_strchr x00 (Coerce.coerce x11)
-
--- | Search a string for the last instance of a specific byte.
---
---     The search must go until it finds a null terminator byte to end the string.
---
---     Note that this looks for /bytes/, not /characters/, so you cannot match against a Unicode codepoint > 255, regardless of character encoding.
---
---     [Returns]: a pointer to the last instance of @c@ in the string, or NULL if not found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_strrchr@.
---                   The safe import is not exported
---                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_strrchr@, defined at @SDL3\/SDL_stdinc.h 3291:36@
-strrchr
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: the string to search. Must not be NULL.
-  -> BG.Int32
-  -- ^
-  --
-  --           [@c@]: the byte value to search for.
-  -> IO (BG.Ptr BG.CChar)
-strrchr =
-  \x00 ->
-    \x11 -> Unsafe.sDL_strrchr x00 (Coerce.coerce x11)
-
--- | Search a string for the first instance of a specific substring.
---
---     The search ends once it finds the requested substring, or a null terminator byte to end the string.
---
---     Note that this looks for strings of /bytes/, not /characters/, so it\'s legal to search for malformed and incomplete UTF-8 sequences.
---
---     [Returns]: a pointer to the first instance of @needle@ in the string, or NULL if not found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_strstr@.
---                   The safe import is not exported
---                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
---
---     [C declaration]: @SDL_strstr@, defined at @SDL3\/SDL_stdinc.h 3311:36@
-strstr
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@haystack@]: the string to search. Must not be NULL.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@needle@]: the string to search for. Must not be NULL.
-  -> IO (BG.Ptr BG.CChar)
-strstr = Unsafe.sDL_strstr
-
--- | Search a string, up to n bytes, for the first instance of a specific substring.
---
---     The search ends once it finds the requested substring, or a null terminator byte to end the string, or @maxlen@ bytes have been examined. It is possible to use this function on a string without a null terminator.
---
---     Note that this looks for strings of /bytes/, not /characters/, so it\'s legal to search for malformed and incomplete UTF-8 sequences.
---
---     [Returns]: a pointer to the first instance of @needle@ in the string, or NULL if not found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_strnstr@.
---                   The safe import is not exported
---                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_strnstr@, defined at @SDL3\/SDL_stdinc.h 3334:36@
-strnstr
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@haystack@]: the string to search. Must not be NULL.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@needle@]: the string to search for. Must not be NULL.
-  -> BG.Word64
-  -- ^
-  --
-  --           [@maxlen@]: the maximum number of bytes to search in @haystack@.
-  -> IO (BG.Ptr BG.CChar)
-strnstr =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        Unsafe.sDL_strnstr x00 x11 (Coerce.coerce x22)
-
--- | Search a UTF-8 string for the first instance of a specific substring, case-insensitively.
---
---     This will work with Unicode strings, using a technique called \"case-folding\" to handle the vast majority of case-sensitive human languages regardless of system locale. It can deal with expanding values: a German Eszett character can compare against two ASCII \'s\' chars and be considered a match, for example. A notable exception: it does not handle the Turkish \'i\' character; human language is complicated!
---
---     Since this handles Unicode, it expects the strings to be well-formed UTF-8 and not a null-terminated string of arbitrary bytes. Bytes that are not valid UTF-8 are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), which is to say two strings of random bits may turn out to match if they convert to the same amount of replacement characters.
---
---     [Returns]: a pointer to the first instance of @needle@ in the string, or NULL if not found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_strcasestr@.
---                   The safe import is not exported
---                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
---
---     [C declaration]: @SDL_strcasestr@, defined at @SDL3\/SDL_stdinc.h 3362:36@
-strcasestr
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@haystack@]: the string to search. Must not be NULL.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@needle@]: the string to search for. Must not be NULL.
-  -> IO (BG.Ptr BG.CChar)
-strcasestr = Unsafe.sDL_strcasestr
-
--- | This works exactly like strtok_r() but doesn\'t require access to a C runtime.
---
---     Break a string up into a series of tokens.
---
---     To start tokenizing a new string, @str@ should be the non-NULL address of the string to start tokenizing. Future calls to get the next token from the same string should specify a NULL.
---
---     Note that this function will overwrite pieces of @str@ with null chars to split it into tokens. This function cannot be used with const\/read-only strings!
---
---     @saveptr@ just needs to point to a @char *@ that can be overwritten; SDL will use this to save tokenizing state between calls. It is initialized if @str@ is non-NULL, and used to resume tokenizing when @str@ is NULL.
---
---     [Returns]: A pointer to the next token, or NULL if no tokens remain.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_strtok_r@.
---                   The safe import is not exported
---                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
---
---     [C declaration]: @SDL_strtok_r@, defined at @SDL3\/SDL_stdinc.h 3391:36@
-strtokR
-  :: BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@str@]: the string to tokenize, or NULL to continue tokenizing.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@delim@]: the delimiter string that separates tokens.
-  -> BG.Ptr (BG.Ptr BG.CChar)
-  -- ^
-  --
-  --           [@saveptr@]: pointer to a char *, used for ongoing state.
-  -> IO (BG.Ptr BG.CChar)
-strtokR = Unsafe.sDL_strtok_r
-
--- | Count the number of codepoints in a UTF-8 string.
---
---     Counts the /codepoints/, not /bytes/, in @str@, excluding the null terminator.
---
---     If you need to count the bytes in a string instead, consider using @'strlen'@.
---
---     Since this handles Unicode, it expects the strings to be well-formed UTF-8 and not a null-terminated string of arbitrary bytes. Bytes that are not valid UTF-8 are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), so a malformed or incomplete UTF-8 sequence might increase the count by several replacement characters.
---
---     [Returns]: The length (in codepoints, excluding the null terminator) of @src@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'utf8strnlen', 'strlen'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_utf8strlen@.
---                   The safe import is not exported
---                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_utf8strlen@, defined at @SDL3\/SDL_stdinc.h 3419:36@
-utf8strlen
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: The null-terminated UTF-8 string to read. Must not be NULL.
-  -> IO BG.Word64
-utf8strlen =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_utf8strlen x00)
-
--- | Count the number of codepoints in a UTF-8 string, up to n bytes.
---
---     Counts the /codepoints/, not /bytes/, in @str@, excluding the null terminator.
---
---     If you need to count the bytes in a string instead, consider using @'strnlen'@.
---
---     The counting stops at @bytes@ bytes (not codepoints!). This seems counterintuitive, but makes it easy to express the total size of the string\'s buffer.
---
---     Since this handles Unicode, it expects the strings to be well-formed UTF-8 and not a null-terminated string of arbitrary bytes. Bytes that are not valid UTF-8 are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), so a malformed or incomplete UTF-8 sequence might increase the count by several replacement characters.
---
---     [Returns]: The length (in codepoints, excluding the null terminator) of @src@ but never more than @maxlen@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'utf8strlen', 'strnlen'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_utf8strnlen@.
---                   The safe import is not exported
---                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_utf8strnlen@, defined at @SDL3\/SDL_stdinc.h 3452:36@
-utf8strnlen
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: The null-terminated UTF-8 string to read. Must not be NULL.
-  -> BG.Word64
-  -- ^
-  --
-  --           [@bytes@]: The maximum amount of bytes to count.
-  -> IO BG.Word64
-utf8strnlen =
-  \x00 ->
-    \x11 ->
-      fmap Coerce.coerce (Unsafe.sDL_utf8strnlen x00 (Coerce.coerce x11))
-
--- | Convert an integer into a string.
---
---     This requires a radix to specified for string format. Specifying 10 produces a decimal number, 16 hexadecimal, etc. Must be in the range of 2 to 36.
---
---     Note that this function will overflow a buffer if @str@ is not large enough to hold the output! It may be safer to use SDL_snprintf to clamp output, or SDL_asprintf to allocate a buffer. Otherwise, it doesn\'t hurt to allocate much more space than you expect to use (and don\'t forget possible negative signs, null terminator bytes, etc).
---
---     [Returns]: @str@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'uitoa', @SDL_ltoa@, 'lltoa'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_itoa@.
---                   The safe import is not exported
---                   : pure numeric conversion over a short caller buffer; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_itoa@, defined at @SDL3\/SDL_stdinc.h 3480:36@
-itoa
-  :: BG.Int32
-  -- ^
-  --
-  --           [@value@]: the integer to convert.
-  -> BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@str@]: the buffer to write the string into.
-  -> BG.Int32
-  -- ^
-  --
-  --           [@radix@]: the radix to use for string generation.
-  -> IO (BG.Ptr BG.CChar)
-itoa =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        Unsafe.sDL_itoa (Coerce.coerce x00) x11 (Coerce.coerce x22)
-
--- | Convert an unsigned integer into a string.
---
---     This requires a radix to specified for string format. Specifying 10 produces a decimal number, 16 hexadecimal, etc. Must be in the range of 2 to 36.
---
---     Note that this function will overflow a buffer if @str@ is not large enough to hold the output! It may be safer to use SDL_snprintf to clamp output, or SDL_asprintf to allocate a buffer. Otherwise, it doesn\'t hurt to allocate much more space than you expect to use (and don\'t forget null terminator bytes, etc).
---
---     [Returns]: @str@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'itoa', @SDL_ultoa@, 'ulltoa'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_uitoa@.
---                   The safe import is not exported
---                   : pure numeric conversion over a short caller buffer; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_uitoa@, defined at @SDL3\/SDL_stdinc.h 3508:36@
-uitoa
-  :: BG.Word32
-  -- ^
-  --
-  --           [@value@]: the unsigned integer to convert.
-  -> BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@str@]: the buffer to write the string into.
-  -> BG.Int32
-  -- ^
-  --
-  --           [@radix@]: the radix to use for string generation.
-  -> IO (BG.Ptr BG.CChar)
-uitoa =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        Unsafe.sDL_uitoa (Coerce.coerce x00) x11 (Coerce.coerce x22)
-
--- | Convert a long long integer into a string.
---
---     This requires a radix to specified for string format. Specifying 10 produces a decimal number, 16 hexadecimal, etc. Must be in the range of 2 to 36.
---
---     Note that this function will overflow a buffer if @str@ is not large enough to hold the output! It may be safer to use SDL_snprintf to clamp output, or SDL_asprintf to allocate a buffer. Otherwise, it doesn\'t hurt to allocate much more space than you expect to use (and don\'t forget possible negative signs, null terminator bytes, etc).
---
---     [Returns]: @str@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'ulltoa', 'itoa', @SDL_ltoa@
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_lltoa@.
---                   The safe import is not exported
---                   : pure numeric conversion over a short caller buffer; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_lltoa@, defined at @SDL3\/SDL_stdinc.h 3594:36@
-lltoa
-  :: BG.Int64
-  -- ^
-  --
-  --           [@value@]: the long long integer to convert.
-  -> BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@str@]: the buffer to write the string into.
-  -> BG.Int32
-  -- ^
-  --
-  --           [@radix@]: the radix to use for string generation.
-  -> IO (BG.Ptr BG.CChar)
-lltoa =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        Unsafe.sDL_lltoa (Coerce.coerce x00) x11 (Coerce.coerce x22)
-
--- | Convert an unsigned long long integer into a string.
---
---     This requires a radix to specified for string format. Specifying 10 produces a decimal number, 16 hexadecimal, etc. Must be in the range of 2 to 36.
---
---     Note that this function will overflow a buffer if @str@ is not large enough to hold the output! It may be safer to use SDL_snprintf to clamp output, or SDL_asprintf to allocate a buffer. Otherwise, it doesn\'t hurt to allocate much more space than you expect to use (and don\'t forget null terminator bytes, etc).
---
---     [Returns]: @str@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'lltoa', 'uitoa', @SDL_ultoa@
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_ulltoa@.
---                   The safe import is not exported
---                   : pure numeric conversion over a short caller buffer; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_ulltoa@, defined at @SDL3\/SDL_stdinc.h 3622:36@
-ulltoa
-  :: BG.Word64
-  -- ^
-  --
-  --           [@value@]: the unsigned long long integer to convert.
-  -> BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@str@]: the buffer to write the string into.
-  -> BG.Int32
-  -- ^
-  --
-  --           [@radix@]: the radix to use for string generation.
-  -> IO (BG.Ptr BG.CChar)
-ulltoa =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        Unsafe.sDL_ulltoa (Coerce.coerce x00) x11 (Coerce.coerce x22)
-
--- | Parse an @int@ from a string.
---
---     The result of calling @SDL_atoi(str)@ is equivalent to @(int)SDL_strtol(str, NULL, 10)@.
---
---     [Returns]: the parsed @int@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'atof', @SDL_strtol@, @SDL_strtoul@, 'strtoll', 'strtoull', 'strtod', 'itoa'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_atoi@.
---                   The safe import is not exported
---                   : pure numeric conversion over a short caller buffer; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_atoi@, defined at @SDL3\/SDL_stdinc.h 3646:33@
-atoi
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: The null-terminated string to read. Must not be NULL.
-  -> IO BG.Int32
-atoi =
-  \x00 -> fmap Coerce.coerce (Unsafe.sDL_atoi x00)
-
--- | Parse a @double@ from a string.
---
---     The result of calling @SDL_atof(str)@ is equivalent to @SDL_strtod(str, NULL)@.
---
---     [Returns]: the parsed @double@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'atoi', @SDL_strtol@, @SDL_strtoul@, 'strtoll', 'strtoull', 'strtod'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_atof@.
---                   The safe import is not exported
---                   : pure numeric conversion over a short caller buffer; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_atof@, defined at @SDL3\/SDL_stdinc.h 3668:36@
-atof
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: The null-terminated string to read. Must not be NULL.
-  -> IO Double
-atof =
-  \x00 -> fmap Coerce.coerce (Unsafe.sDL_atof x00)
-
--- | Parse a @long long@ from a string.
---
---     If @str@ starts with whitespace, then those whitespace characters are skipped before attempting to parse the number.
---
---     If the parsed number does not fit inside a @long long@, the result is clamped to the minimum and maximum representable @long long@ values.
---
---     [Returns]: the parsed @long long@, or 0 if no number could be parsed.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'atoi', 'atof', @SDL_strtol@, @SDL_strtoul@, 'strtoull', 'strtod', 'lltoa'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_strtoll@.
---                   The safe import is not exported
---                   : pure numeric conversion over a short caller buffer; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_strtoll@, defined at @SDL3\/SDL_stdinc.h 3770:39@
-strtoll
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: The null-terminated string to read. Must not be NULL.
-  -> BG.Ptr (BG.Ptr BG.CChar)
-  -- ^
-  --
-  --           [@endp@]: If not NULL, the address of the first invalid character (i.e. the next character after the parsed number) will be written to this pointer.
-  -> BG.Int32
-  -- ^
-  --
-  --           [@base@]: The base of the integer to read. Supported values are 0 and 2 to 36 inclusive. If 0, the base will be inferred from the number\'s prefix (0x for hexadecimal, 0 for octal, decimal otherwise).
-  -> IO BG.Int64
-strtoll =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        fmap Coerce.coerce (Unsafe.sDL_strtoll x00 x11 (Coerce.coerce x22))
-
--- | Parse an @unsigned long long@ from a string.
---
---     If @str@ starts with whitespace, then those whitespace characters are skipped before attempting to parse the number.
---
---     If the parsed number does not fit inside an @unsigned long long@, the result is clamped to the maximum representable @unsigned long long@ value.
---
---     [Returns]: the parsed @unsigned long long@, or 0 if no number could be parsed.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'atoi', 'atof', @SDL_strtol@, 'strtoll', @SDL_strtoul@, 'strtod', 'ulltoa'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_strtoull@.
---                   The safe import is not exported
---                   : pure numeric conversion over a short caller buffer; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_strtoull@, defined at @SDL3\/SDL_stdinc.h 3804:48@
-strtoull
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: The null-terminated string to read. Must not be NULL.
-  -> BG.Ptr (BG.Ptr BG.CChar)
-  -- ^
-  --
-  --           [@endp@]: If not NULL, the address of the first invalid character (i.e. the next character after the parsed number) will be written to this pointer.
-  -> BG.Int32
-  -- ^
-  --
-  --           [@base@]: The base of the integer to read. Supported values are 0 and 2 to 36 inclusive. If 0, the base will be inferred from the number\'s prefix (0x for hexadecimal, 0 for octal, decimal otherwise).
-  -> IO BG.Word64
-strtoull =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        fmap Coerce.coerce (Unsafe.sDL_strtoull x00 x11 (Coerce.coerce x22))
-
--- | Parse a @double@ from a string.
---
---     This function makes fewer guarantees than the C runtime @strtod@:
---
---     * Only decimal notation is guaranteed to be supported. The handling of scientific and hexadecimal notation is unspecified.
---
---     * Whether or not INF and NAN can be parsed is unspecified.
---
---     * The precision of the result is unspecified.
---
---     [Returns]: the parsed @double@, or 0 if no number could be parsed.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'atoi', 'atof', @SDL_strtol@, 'strtoll', @SDL_strtoul@, 'strtoull'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_strtod@.
---                   The safe import is not exported
---                   : pure numeric conversion over a short caller buffer; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_strtod@, defined at @SDL3\/SDL_stdinc.h 3834:36@
-strtod
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: the null-terminated string to read. Must not be NULL.
-  -> BG.Ptr (BG.Ptr BG.CChar)
-  -- ^
-  --
-  --           [@endp@]: if not NULL, the address of the first invalid character (i.e. the next character after the parsed number) will be written to this pointer.
-  -> IO Double
-strtod =
-  \x00 ->
-    \x11 ->
-      fmap Coerce.coerce (Unsafe.sDL_strtod x00 x11)
-
--- | Compare two null-terminated UTF-8 strings.
---
---     Due to the nature of UTF-8 encoding, this will work with Unicode strings, since effectively this function just compares bytes until it hits a null-terminating character. Also due to the nature of UTF-8, this can be used with @'qsortSafe'@ to put strings in (roughly) alphabetical order.
---
---     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_strcmp@.
---                   The safe import is not exported
---                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_strcmp@, defined at @SDL3\/SDL_stdinc.h 3854:33@
-strcmp
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str1@]: the first string to compare. NULL is not permitted!
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str2@]: the second string to compare. NULL is not permitted!
-  -> IO BG.Int32
-strcmp =
-  \x00 ->
-    \x11 ->
-      fmap Coerce.coerce (Unsafe.sDL_strcmp x00 x11)
-
--- | Compare two UTF-8 strings up to a number of bytes.
---
---     Due to the nature of UTF-8 encoding, this will work with Unicode strings, since effectively this function just compares bytes until it hits a null-terminating character. Also due to the nature of UTF-8, this can be used with @'qsortSafe'@ to put strings in (roughly) alphabetical order.
---
---     Note that while this function is intended to be used with UTF-8, it is doing a bytewise comparison, and @maxlen@ specifies a /byte/ limit! If the limit lands in the middle of a multi-byte UTF-8 sequence, it will only compare a portion of the final character.
---
---     @maxlen@ specifies a maximum number of bytes to compare; if the strings match to this number of bytes (or both have matched to a null-terminator character before this number of bytes), they will be considered equal.
---
---     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_strncmp@.
---                   The safe import is not exported
---                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_strncmp@, defined at @SDL3\/SDL_stdinc.h 3884:33@
-strncmp
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str1@]: the first string to compare. NULL is not permitted!
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str2@]: the second string to compare. NULL is not permitted!
-  -> BG.Word64
-  -- ^
-  --
-  --           [@maxlen@]: the maximum number of /bytes/ to compare.
-  -> IO BG.Int32
-strncmp =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        fmap Coerce.coerce (Unsafe.sDL_strncmp x00 x11 (Coerce.coerce x22))
-
--- | Compare two null-terminated UTF-8 strings, case-insensitively.
---
---     This will work with Unicode strings, using a technique called \"case-folding\" to handle the vast majority of case-sensitive human languages regardless of system locale. It can deal with expanding values: a German Eszett character can compare against two ASCII \'s\' chars and be considered a match, for example. A notable exception: it does not handle the Turkish \'i\' character; human language is complicated!
---
---     Since this handles Unicode, it expects the string to be well-formed UTF-8 and not a null-terminated string of arbitrary bytes. Bytes that are not valid UTF-8 are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), which is to say two strings of random bits may turn out to match if they convert to the same amount of replacement characters.
---
---     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_strcasecmp@.
---                   The safe import is not exported
---                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_strcasecmp@, defined at @SDL3\/SDL_stdinc.h 3912:33@
-strcasecmp
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str1@]: the first string to compare. NULL is not permitted!
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str2@]: the second string to compare. NULL is not permitted!
-  -> IO BG.Int32
-strcasecmp =
-  \x00 ->
-    \x11 ->
-      fmap Coerce.coerce (Unsafe.sDL_strcasecmp x00 x11)
-
--- | Compare two UTF-8 strings, case-insensitively, up to a number of bytes.
---
---     This will work with Unicode strings, using a technique called \"case-folding\" to handle the vast majority of case-sensitive human languages regardless of system locale. It can deal with expanding values: a German Eszett character can compare against two ASCII \'s\' chars and be considered a match, for example. A notable exception: it does not handle the Turkish \'i\' character; human language is complicated!
---
---     Since this handles Unicode, it expects the string to be well-formed UTF-8 and not a null-terminated string of arbitrary bytes. Bytes that are not valid UTF-8 are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), which is to say two strings of random bits may turn out to match if they convert to the same amount of replacement characters.
---
---     Note that while this function is intended to be used with UTF-8, @maxlen@ specifies a /byte/ limit! If the limit lands in the middle of a multi-byte UTF-8 sequence, it may convert a portion of the final character to one or more Unicode character U+FFFD (REPLACEMENT CHARACTER) so as not to overflow a buffer.
---
---     @maxlen@ specifies a maximum number of bytes to compare; if the strings match to this number of bytes (or both have matched to a null-terminator character before this number of bytes), they will be considered equal.
---
---     [Returns]: less than zero if str1 is \"less than\" str2, greater than zero if str1 is \"greater than\" str2, and zero if the strings match exactly.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_strncasecmp@.
---                   The safe import is not exported
---                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_strncasecmp@, defined at @SDL3\/SDL_stdinc.h 3952:33@
-strncasecmp
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str1@]: the first string to compare. NULL is not permitted!
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str2@]: the second string to compare. NULL is not permitted!
-  -> BG.Word64
-  -- ^
-  --
-  --           [@maxlen@]: the maximum number of bytes to compare.
-  -> IO BG.Int32
-strncasecmp =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        fmap Coerce.coerce (Unsafe.sDL_strncasecmp x00 x11 (Coerce.coerce x22))
-
--- | Searches a string for the first occurrence of any character contained in a breakset, and returns a pointer from the string to that character.
---
---     [Returns]: A pointer to the location, in str, of the first occurrence of a character present in the breakset, or NULL if none is found.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_strpbrk@.
---                   The safe import is not exported
---                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
---
---     [C declaration]: @SDL_strpbrk@, defined at @SDL3\/SDL_stdinc.h 3970:36@
-strpbrk
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@str@]: The null-terminated string to be searched. Must not be NULL, and must not overlap with @breakset@.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@breakset@]: A null-terminated string containing the list of characters to look for. Must not be NULL, and must not overlap with @str@.
-  -> IO (BG.Ptr BG.CChar)
-strpbrk = Unsafe.sDL_strpbrk
-
--- | Decode a UTF-8 string, one Unicode codepoint at a time.
---
---     This will return the first Unicode codepoint in the UTF-8 encoded string in @*pstr@, and then advance @*pstr@ past any consumed bytes before returning.
---
---     It will not access more than @*pslen@ bytes from the string. @*pslen@ will be adjusted, as well, subtracting the number of bytes consumed.
---
---     @pslen@ is allowed to be NULL, in which case the string /must/ be NULL-terminated, as the function will blindly read until it sees the NULL char.
---
---     if @*pslen@ is zero, it assumes the end of string is reached and returns a zero codepoint regardless of the contents of the string buffer.
---
---     If the resulting codepoint is zero (a NULL terminator), or @*pslen@ is zero, it will not advance @*pstr@ or @*pslen@ at all.
---
---     Generally this function is called in a loop until it returns zero, adjusting its parameters each iteration.
---
---     If an invalid UTF-8 sequence is encountered, this function returns SDL_INVALID_UNICODE_CODEPOINT and advances the string\/length by one byte (which is to say, a multibyte sequence might produce several SDL_INVALID_UNICODE_CODEPOINT returns before it syncs to the next valid UTF-8 sequence).
---
---     Several things can generate invalid UTF-8 sequences, including overlong encodings, the use of UTF-16 surrogate values, and truncated data. Please refer to [RFC3629](https://www.ietf.org/rfc/rfc3629.txt) for details.
---
---     [Returns]: the first Unicode codepoint in the string.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_StepUTF8@.
---                   The safe import is not exported
---                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_StepUTF8@, defined at @SDL3\/SDL_stdinc.h 4030:36@
-stepUTF8
-  :: BG.Ptr (PtrConst.PtrConst BG.CChar)
-  -- ^
-  --
-  --           [@pstr@]: a pointer to a UTF-8 string pointer to be read and adjusted.
-  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@pslen@]: a pointer to the number of bytes in the string, to be read and adjusted. NULL is allowed.
-  -> IO BG.Word32
-stepUTF8 =
-  \x00 ->
-    \x11 ->
-      fmap Coerce.coerce (Unsafe.sDL_StepUTF8 x00 x11)
-
--- | Decode a UTF-8 string in reverse, one Unicode codepoint at a time.
---
---     This will go to the start of the previous Unicode codepoint in the string, move @*pstr@ to that location and return that codepoint.
---
---     If @*pstr@ is already at the start of the string), it will not advance @*pstr@ at all.
---
---     Generally this function is called in a loop until it returns zero, adjusting its parameter each iteration.
---
---     If an invalid UTF-8 sequence is encountered, this function returns SDL_INVALID_UNICODE_CODEPOINT.
---
---     Several things can generate invalid UTF-8 sequences, including overlong encodings, the use of UTF-16 surrogate values, and truncated data. Please refer to [RFC3629](https://www.ietf.org/rfc/rfc3629.txt) for details.
---
---     [Returns]: the previous Unicode codepoint in the string.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_StepBackUTF8@.
---                   The safe import is not exported
---                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_StepBackUTF8@, defined at @SDL3\/SDL_stdinc.h 4061:36@
-stepBackUTF8
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@start@]: a pointer to the beginning of the UTF-8 string.
-  -> BG.Ptr (PtrConst.PtrConst BG.CChar)
-  -- ^
-  --
-  --           [@pstr@]: a pointer to a UTF-8 string pointer to be read and adjusted.
-  -> IO BG.Word32
-stepBackUTF8 =
-  \x00 ->
-    \x11 ->
-      fmap Coerce.coerce (Unsafe.sDL_StepBackUTF8 x00 x11)
-
--- | Convert a single Unicode codepoint to UTF-8.
---
---     The buffer pointed to by @dst@ must be at least 4 bytes long, as this function may generate between 1 and 4 bytes of output.
---
---     This function returns the first byte /after/ the newly-written UTF-8 sequence, which is useful for encoding multiple codepoints in a loop, or knowing where to write a NULL-terminator character to end the string (in either case, plan to have a buffer of /more/ than 4 bytes!).
---
---     If @codepoint@ is an invalid value (outside the Unicode range, or a UTF-16 surrogate value, etc), this will use U+FFFD (REPLACEMENT CHARACTER) for the codepoint instead, and not set an error.
---
---     If @dst@ is NULL, this returns NULL immediately without writing to the pointer and without setting an error.
---
---     [Returns]: the first byte past the newly-written UTF-8 sequence.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_UCS4ToUTF8@.
---                   The safe import is not exported
---                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_UCS4ToUTF8@, defined at @SDL3\/SDL_stdinc.h 4090:36@
-ucs4ToUTF8
-  :: BG.Word32
-  -- ^
-  --
-  --           [@codepoint@]: a Unicode codepoint to convert to UTF-8.
-  -> BG.Ptr BG.CChar
-  -- ^
-  --
-  --           [@dst@]: the location to write the encoded UTF-8. Must point to at least 4 bytes!
-  -> IO (BG.Ptr BG.CChar)
-ucs4ToUTF8 =
-  \x00 ->
-    \x11 -> Unsafe.sDL_UCS4ToUTF8 (Coerce.coerce x00) x11
-
--- | Seeds the pseudo-random number generator.
---
---     Reusing the seed number will cause @'rand'@ to repeat the same stream of \'random\' numbers.
---
---     [Thread safety]: This should be called on the same thread that calls @'rand'@
---
---     @since 3.2.0
---
---     [See also]: 'rand', 'randBits', 'randf'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_srand@.
---                   The safe flavor is 'srandSafe'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_srand@, defined at @SDL3\/SDL_stdinc.h 4302:34@
-srand
-  :: BG.Word64
-  -- ^
-  --
-  --           [@seed@]: the value to use as a random number seed, or 0 to use 'SDL3.Sys.Timer.getPerformanceCounter'.
-  -> IO ()
-srand = \x00 -> Unsafe.sDL_srand (Coerce.coerce x00)
-
--- | Seeds the pseudo-random number generator.
---
---     Reusing the seed number will cause @'rand'@ to repeat the same stream of \'random\' numbers.
---
---     [Thread safety]: This should be called on the same thread that calls @'rand'@
---
---     @since 3.2.0
---
---     [See also]: 'rand', 'randBits', 'randf'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_srand@.
---                   The unsafe flavor is 'srand'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_srand@, defined at @SDL3\/SDL_stdinc.h 4302:34@
-srandSafe
-  :: BG.Word64
-  -- ^
-  --
-  --           [@seed@]: the value to use as a random number seed, or 0 to use 'SDL3.Sys.Timer.getPerformanceCounter'.
-  -> IO ()
-srandSafe =
-  \x00 -> Safe.sDL_srand (Coerce.coerce x00)
-
--- | Generate a pseudo-random number less than n for positive n
---
---     The method used is faster and of better quality than @rand() % n@. Odds are roughly 99.9% even for n = 1 million. Evenness is better for smaller n, and much worse as n gets bigger.
---
---     Example: to simulate a d6 use @SDL_rand(6) + 1@ The +1 converts 0..5 to 1..6
---
---     If you want to generate a pseudo-random number in the full range of 'Sint32', you should use: ('Sint32') @'randBits'@
---
---     If you want reproducible output, be sure to initialize with @'srand'@ first.
---
---     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
---
---     [Returns]: a random value in the range of [0 .. n-1].
---
---     [Thread safety]: All calls should be made from a single thread
---
---     @since 3.2.0
---
---     [See also]: 'srand', 'randf'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_rand@.
---                   The safe flavor is 'randSafe'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_rand@, defined at @SDL3\/SDL_stdinc.h 4336:36@
-rand
-  :: BG.Int32
-  -- ^
-  --
-  --           [@n@]: the number of possible outcomes. n must be positive.
-  -> IO BG.Int32
-rand =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_rand (Coerce.coerce x00))
-
--- | Generate a pseudo-random number less than n for positive n
---
---     The method used is faster and of better quality than @rand() % n@. Odds are roughly 99.9% even for n = 1 million. Evenness is better for smaller n, and much worse as n gets bigger.
---
---     Example: to simulate a d6 use @SDL_rand(6) + 1@ The +1 converts 0..5 to 1..6
---
---     If you want to generate a pseudo-random number in the full range of 'Sint32', you should use: ('Sint32') @'randBits'@
---
---     If you want reproducible output, be sure to initialize with @'srand'@ first.
---
---     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
---
---     [Returns]: a random value in the range of [0 .. n-1].
---
---     [Thread safety]: All calls should be made from a single thread
---
---     @since 3.2.0
---
---     [See also]: 'srand', 'randf'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_rand@.
---                   The unsafe flavor is 'rand'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_rand@, defined at @SDL3\/SDL_stdinc.h 4336:36@
-randSafe
-  :: BG.Int32
-  -- ^
-  --
-  --           [@n@]: the number of possible outcomes. n must be positive.
-  -> IO BG.Int32
-randSafe =
-  \x00 ->
-    fmap Coerce.coerce (Safe.sDL_rand (Coerce.coerce x00))
-
--- | Generate a uniform pseudo-random floating point number less than 1.0
---
---     If you want reproducible output, be sure to initialize with @'srand'@ first.
---
---     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
---
---     [Returns]: a random value in the range of [0.0, 1.0).
---
---     [Thread safety]: All calls should be made from a single thread
---
---     @since 3.2.0
---
---     [See also]: 'srand', 'rand'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_randf@.
---                   The safe flavor is 'randfSafe'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_randf@, defined at @SDL3\/SDL_stdinc.h 4359:35@
-randf :: IO Float
-randf = fmap Coerce.coerce Unsafe.sDL_randf
-
--- | Generate a uniform pseudo-random floating point number less than 1.0
---
---     If you want reproducible output, be sure to initialize with @'srand'@ first.
---
---     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
---
---     [Returns]: a random value in the range of [0.0, 1.0).
---
---     [Thread safety]: All calls should be made from a single thread
---
---     @since 3.2.0
---
---     [See also]: 'srand', 'rand'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_randf@.
---                   The unsafe flavor is 'randf'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_randf@, defined at @SDL3\/SDL_stdinc.h 4359:35@
-randfSafe :: IO Float
-randfSafe = fmap Coerce.coerce Safe.sDL_randf
-
--- | Generate 32 pseudo-random bits.
---
---     You likely want to use @'rand'@ to get a psuedo-random number instead.
---
---     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
---
---     [Returns]: a random value in the range of [0-SDL_MAX_UINT32].
---
---     [Thread safety]: All calls should be made from a single thread
---
---     @since 3.2.0
---
---     [See also]: 'rand', 'randf', 'srand'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_rand_bits@.
---                   The safe flavor is 'randBitsSafe'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_rand_bits@, defined at @SDL3\/SDL_stdinc.h 4382:36@
-randBits :: IO BG.Word32
-randBits = fmap Coerce.coerce Unsafe.sDL_rand_bits
-
--- | Generate 32 pseudo-random bits.
---
---     You likely want to use @'rand'@ to get a psuedo-random number instead.
---
---     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
---
---     [Returns]: a random value in the range of [0-SDL_MAX_UINT32].
---
---     [Thread safety]: All calls should be made from a single thread
---
---     @since 3.2.0
---
---     [See also]: 'rand', 'randf', 'srand'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_rand_bits@.
---                   The unsafe flavor is 'randBits'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_rand_bits@, defined at @SDL3\/SDL_stdinc.h 4382:36@
-randBitsSafe :: IO BG.Word32
-randBitsSafe = fmap Coerce.coerce Safe.sDL_rand_bits
-
--- | Generate a pseudo-random number less than n for positive n
---
---     The method used is faster and of better quality than @rand() % n@. Odds are roughly 99.9% even for n = 1 million. Evenness is better for smaller n, and much worse as n gets bigger.
---
---     Example: to simulate a d6 use @SDL_rand_r(state, 6) + 1@ The +1 converts 0..5 to 1..6
---
---     If you want to generate a pseudo-random number in the full range of 'Sint32', you should use: ('Sint32')SDL_rand_bits_r(state)
---
---     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
---
---     [Returns]: a random value in the range of [0 .. n-1].
---
---     [Thread safety]: This function is thread-safe, as long as the state pointer isn\'t shared between threads.
---
---     @since 3.2.0
---
---     [See also]: 'rand', 'randBitsR', 'randfR'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_rand_r@.
---                   The safe flavor is 'randRSafe'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_rand_r@, defined at @SDL3\/SDL_stdinc.h 4417:36@
-randR
-  :: BG.Ptr Uint64
-  -- ^
-  --
-  --           [@state@]: a pointer to the current random number state, this may not be NULL.
-  -> BG.Int32
-  -- ^
-  --
-  --           [@n@]: the number of possible outcomes. n must be positive.
-  -> IO BG.Int32
-randR =
-  \x00 ->
-    \x11 ->
-      fmap Coerce.coerce (Unsafe.sDL_rand_r x00 (Coerce.coerce x11))
-
--- | Generate a pseudo-random number less than n for positive n
---
---     The method used is faster and of better quality than @rand() % n@. Odds are roughly 99.9% even for n = 1 million. Evenness is better for smaller n, and much worse as n gets bigger.
---
---     Example: to simulate a d6 use @SDL_rand_r(state, 6) + 1@ The +1 converts 0..5 to 1..6
---
---     If you want to generate a pseudo-random number in the full range of 'Sint32', you should use: ('Sint32')SDL_rand_bits_r(state)
---
---     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
---
---     [Returns]: a random value in the range of [0 .. n-1].
---
---     [Thread safety]: This function is thread-safe, as long as the state pointer isn\'t shared between threads.
---
---     @since 3.2.0
---
---     [See also]: 'rand', 'randBitsR', 'randfR'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_rand_r@.
---                   The unsafe flavor is 'randR'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_rand_r@, defined at @SDL3\/SDL_stdinc.h 4417:36@
-randRSafe
-  :: BG.Ptr Uint64
-  -- ^
-  --
-  --           [@state@]: a pointer to the current random number state, this may not be NULL.
-  -> BG.Int32
-  -- ^
-  --
-  --           [@n@]: the number of possible outcomes. n must be positive.
-  -> IO BG.Int32
-randRSafe =
-  \x00 ->
-    \x11 ->
-      fmap Coerce.coerce (Safe.sDL_rand_r x00 (Coerce.coerce x11))
-
--- | Generate a uniform pseudo-random floating point number less than 1.0
---
---     If you want reproducible output, be sure to initialize with @'srand'@ first.
---
---     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
---
---     [Returns]: a random value in the range of [0.0, 1.0).
---
---     [Thread safety]: This function is thread-safe, as long as the state pointer isn\'t shared between threads.
---
---     @since 3.2.0
---
---     [See also]: 'randBitsR', 'randR', 'randf'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_randf_r@.
---                   The safe flavor is 'randfRSafe'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_randf_r@, defined at @SDL3\/SDL_stdinc.h 4444:35@
-randfR
-  :: BG.Ptr Uint64
-  -- ^
-  --
-  --           [@state@]: a pointer to the current random number state, this may not be NULL.
-  -> IO Float
-randfR =
-  \x00 -> fmap Coerce.coerce (Unsafe.sDL_randf_r x00)
-
--- | Generate a uniform pseudo-random floating point number less than 1.0
---
---     If you want reproducible output, be sure to initialize with @'srand'@ first.
---
---     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
---
---     [Returns]: a random value in the range of [0.0, 1.0).
---
---     [Thread safety]: This function is thread-safe, as long as the state pointer isn\'t shared between threads.
---
---     @since 3.2.0
---
---     [See also]: 'randBitsR', 'randR', 'randf'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_randf_r@.
---                   The unsafe flavor is 'randfR'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_randf_r@, defined at @SDL3\/SDL_stdinc.h 4444:35@
-randfRSafe
-  :: BG.Ptr Uint64
-  -- ^
-  --
-  --           [@state@]: a pointer to the current random number state, this may not be NULL.
-  -> IO Float
-randfRSafe =
-  \x00 -> fmap Coerce.coerce (Safe.sDL_randf_r x00)
-
--- | Generate 32 pseudo-random bits.
---
---     You likely want to use @'randR'@ to get a psuedo-random number instead.
---
---     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
---
---     [Returns]: a random value in the range of [0-SDL_MAX_UINT32].
---
---     [Thread safety]: This function is thread-safe, as long as the state pointer isn\'t shared between threads.
---
---     @since 3.2.0
---
---     [See also]: 'randR', 'randfR'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_rand_bits_r@.
---                   The safe flavor is 'randBitsRSafe'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_rand_bits_r@, defined at @SDL3\/SDL_stdinc.h 4469:36@
-randBitsR
-  :: BG.Ptr Uint64
-  -- ^
-  --
-  --           [@state@]: a pointer to the current random number state, this may not be NULL.
-  -> IO BG.Word32
-randBitsR =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_rand_bits_r x00)
-
--- | Generate 32 pseudo-random bits.
---
---     You likely want to use @'randR'@ to get a psuedo-random number instead.
---
---     There are no guarantees as to the quality of the random sequence produced, and this should not be used for security (cryptography, passwords) or where money is on the line (loot-boxes, casinos). There are many random number libraries available with different characteristics and you should pick one of those to meet any serious needs.
---
---     [Returns]: a random value in the range of [0-SDL_MAX_UINT32].
---
---     [Thread safety]: This function is thread-safe, as long as the state pointer isn\'t shared between threads.
---
---     @since 3.2.0
---
---     [See also]: 'randR', 'randfR'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_rand_bits_r@.
---                   The unsafe flavor is 'randBitsR'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_rand_bits_r@, defined at @SDL3\/SDL_stdinc.h 4469:36@
-randBitsRSafe
-  :: BG.Ptr Uint64
-  -- ^
-  --
-  --           [@state@]: a pointer to the current random number state, this may not be NULL.
-  -> IO BG.Word32
-randBitsRSafe =
-  \x00 -> fmap Coerce.coerce (Safe.sDL_rand_bits_r x00)
-
--- | Compute the arc cosine of @x@.
---
---     The definition of @y = acos(x)@ is @x = cos(y)@.
---
---     Domain: @-1 \<= x \<= 1@
---
---     Range: @0 \<= y \<= Pi@
---
---     This function operates on double-precision floating point values, use 'acosf' for single-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: arc cosine of @x@, in radians.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'acosf', 'asin', 'cos'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_acos@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_acos@, defined at @SDL3\/SDL_stdinc.h 4523:36@
-acos
-  :: Double
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO Double
-acos =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_acos (Coerce.coerce x00))
-
--- | Compute the arc cosine of @x@.
---
---     The definition of @y = acos(x)@ is @x = cos(y)@.
---
---     Domain: @-1 \<= x \<= 1@
---
---     Range: @0 \<= y \<= Pi@
---
---     This function operates on single-precision floating point values, use 'acos' for double-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: arc cosine of @x@, in radians.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'acos', 'asinf', 'cosf'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_acosf@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_acosf@, defined at @SDL3\/SDL_stdinc.h 4553:35@
-acosf
-  :: Float
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO Float
-acosf =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_acosf (Coerce.coerce x00))
-
--- | Compute the arc sine of @x@.
---
---     The definition of @y = asin(x)@ is @x = sin(y)@.
---
---     Domain: @-1 \<= x \<= 1@
---
---     Range: @-Pi\/2 \<= y \<= Pi\/2@
---
---     This function operates on double-precision floating point values, use 'asinf' for single-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: arc sine of @x@, in radians.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'asinf', 'acos', 'sin'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_asin@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_asin@, defined at @SDL3\/SDL_stdinc.h 4583:36@
-asin
-  :: Double
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO Double
-asin =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_asin (Coerce.coerce x00))
-
--- | Compute the arc sine of @x@.
---
---     The definition of @y = asin(x)@ is @x = sin(y)@.
---
---     Domain: @-1 \<= x \<= 1@
---
---     Range: @-Pi\/2 \<= y \<= Pi\/2@
---
---     This function operates on single-precision floating point values, use 'asin' for double-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: arc sine of @x@, in radians.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'asin', 'acosf', 'sinf'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_asinf@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_asinf@, defined at @SDL3\/SDL_stdinc.h 4613:35@
-asinf
-  :: Float
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO Float
-asinf =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_asinf (Coerce.coerce x00))
-
--- | Compute the arc tangent of @x@.
---
---     The definition of @y = atan(x)@ is @x = tan(y)@.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-Pi\/2 \<= y \<= Pi\/2@
---
---     This function operates on double-precision floating point values, use 'atanf' for single-precision floats.
---
---     To calculate the arc tangent of y \/ x, use 'atan2'.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: arc tangent of of @x@ in radians, or 0 if @x = 0@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'atanf', 'atan2', 'tan'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_atan@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_atan@, defined at @SDL3\/SDL_stdinc.h 4645:36@
-atan
-  :: Double
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO Double
-atan =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_atan (Coerce.coerce x00))
-
--- | Compute the arc tangent of @x@.
---
---     The definition of @y = atan(x)@ is @x = tan(y)@.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-Pi\/2 \<= y \<= Pi\/2@
---
---     This function operates on single-precision floating point values, use 'atan' for dboule-precision floats.
---
---     To calculate the arc tangent of y \/ x, use 'atan2f'.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: arc tangent of of @x@ in radians, or 0 if @x = 0@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'atan', 'atan2f', 'tanf'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_atanf@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_atanf@, defined at @SDL3\/SDL_stdinc.h 4677:35@
-atanf
-  :: Float
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO Float
-atanf =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_atanf (Coerce.coerce x00))
-
--- | Compute the arc tangent of @y \/ x@, using the signs of x and y to adjust the result\'s quadrant.
---
---     The definition of @z = atan2(x, y)@ is @y = x tan(z)@, where the quadrant of z is determined based on the signs of x and y.
---
---     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= INF@
---
---     Range: @-Pi \<= y \<= Pi@
---
---     This function operates on double-precision floating point values, use 'atan2f' for single-precision floats.
---
---     To calculate the arc tangent of a single value, use 'atan'.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: arc tangent of of @y \/ x@ in radians, or, if @x = 0@, either @-Pi\/2@, @0@, or @Pi\/2@, depending on the value of @y@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'atan2f', 'atan', 'tan'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_atan2@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_atan2@, defined at @SDL3\/SDL_stdinc.h 4713:36@
-atan2
-  :: Double
-  -- ^
-  --
-  --           [@y@]: floating point value of the numerator (y coordinate).
-  -> Double
-  -- ^
-  --
-  --           [@x@]: floating point value of the denominator (x coordinate).
-  -> IO Double
-atan2 =
-  \x00 ->
-    \x11 ->
-      fmap Coerce.coerce (Unsafe.sDL_atan2 (Coerce.coerce x00) (Coerce.coerce x11))
-
--- | Compute the arc tangent of @y \/ x@, using the signs of x and y to adjust the result\'s quadrant.
---
---     The definition of @z = atan2(x, y)@ is @y = x tan(z)@, where the quadrant of z is determined based on the signs of x and y.
---
---     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= INF@
---
---     Range: @-Pi \<= y \<= Pi@
---
---     This function operates on single-precision floating point values, use 'atan2' for double-precision floats.
---
---     To calculate the arc tangent of a single value, use 'atanf'.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: arc tangent of of @y \/ x@ in radians, or, if @x = 0@, either @-Pi\/2@, @0@, or @Pi\/2@, depending on the value of @y@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'atan2', 'atan', 'tan'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_atan2f@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_atan2f@, defined at @SDL3\/SDL_stdinc.h 4749:35@
-atan2f
-  :: Float
-  -- ^
-  --
-  --           [@y@]: floating point value of the numerator (y coordinate).
-  -> Float
-  -- ^
-  --
-  --           [@x@]: floating point value of the denominator (x coordinate).
-  -> IO Float
-atan2f =
-  \x00 ->
-    \x11 ->
-      fmap Coerce.coerce (Unsafe.sDL_atan2f (Coerce.coerce x00) (Coerce.coerce x11))
-
--- | Compute the ceiling of @x@.
---
---     The ceiling of @x@ is the smallest integer @y@ such that @y >= x@, i.e @x@ rounded up to the nearest integer.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-INF \<= y \<= INF@, y integer
---
---     This function operates on double-precision floating point values, use 'ceilf' for single-precision floats.
---
---     [Returns]: the ceiling of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'ceilf', 'floor', 'trunc', 'round', @SDL_lround@
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_ceil@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_ceil@, defined at @SDL3\/SDL_stdinc.h 4777:36@
-ceil
-  :: Double
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO Double
-ceil =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_ceil (Coerce.coerce x00))
-
--- | Compute the ceiling of @x@.
---
---     The ceiling of @x@ is the smallest integer @y@ such that @y >= x@, i.e @x@ rounded up to the nearest integer.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-INF \<= y \<= INF@, y integer
---
---     This function operates on single-precision floating point values, use 'ceil' for double-precision floats.
---
---     [Returns]: the ceiling of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'ceil', 'floorf', 'truncf', 'roundf', @SDL_lroundf@
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_ceilf@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_ceilf@, defined at @SDL3\/SDL_stdinc.h 4805:35@
-ceilf
-  :: Float
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO Float
-ceilf =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_ceilf (Coerce.coerce x00))
-
--- | Copy the sign of one floating-point value to another.
---
---     The definition of copysign is that @copysign(x, y) = abs(x) * sign(y)@.
---
---     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= f@
---
---     Range: @-INF \<= z \<= INF@
---
---     This function operates on double-precision floating point values, use 'copysignf' for single-precision floats.
---
---     [Returns]: the floating point value with the sign of y and the magnitude of x.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'copysignf', 'fabs'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_copysign@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_copysign@, defined at @SDL3\/SDL_stdinc.h 4831:36@
-copysign
-  :: Double
-  -- ^
-  --
-  --           [@x@]: floating point value to use as the magnitude.
-  -> Double
-  -- ^
-  --
-  --           [@y@]: floating point value to use as the sign.
-  -> IO Double
-copysign =
-  \x00 ->
-    \x11 ->
-      fmap Coerce.coerce (Unsafe.sDL_copysign (Coerce.coerce x00) (Coerce.coerce x11))
-
--- | Copy the sign of one floating-point value to another.
---
---     The definition of copysign is that @copysign(x, y) = abs(x) * sign(y)@.
---
---     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= f@
---
---     Range: @-INF \<= z \<= INF@
---
---     This function operates on single-precision floating point values, use 'copysign' for double-precision floats.
---
---     [Returns]: the floating point value with the sign of y and the magnitude of x.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'copysign', 'fabsf'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_copysignf@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_copysignf@, defined at @SDL3\/SDL_stdinc.h 4857:35@
-copysignf
-  :: Float
-  -- ^
-  --
-  --           [@x@]: floating point value to use as the magnitude.
-  -> Float
-  -- ^
-  --
-  --           [@y@]: floating point value to use as the sign.
-  -> IO Float
-copysignf =
-  \x00 ->
-    \x11 ->
-      fmap Coerce.coerce (Unsafe.sDL_copysignf (Coerce.coerce x00) (Coerce.coerce x11))
-
--- | Compute the cosine of @x@.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-1 \<= y \<= 1@
---
---     This function operates on double-precision floating point values, use 'cosf' for single-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: cosine of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'cosf', 'acos', 'sin'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_cos@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_cos@, defined at @SDL3\/SDL_stdinc.h 4885:36@
-cos
-  :: Double
-  -- ^
-  --
-  --           [@x@]: floating point value, in radians.
-  -> IO Double
-cos =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_cos (Coerce.coerce x00))
-
--- | Compute the cosine of @x@.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-1 \<= y \<= 1@
---
---     This function operates on single-precision floating point values, use 'cos' for double-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: cosine of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'cos', 'acosf', 'sinf'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_cosf@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_cosf@, defined at @SDL3\/SDL_stdinc.h 4913:35@
-cosf
-  :: Float
-  -- ^
-  --
-  --           [@x@]: floating point value, in radians.
-  -> IO Float
-cosf =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_cosf (Coerce.coerce x00))
-
--- | Compute the exponential of @x@.
---
---     The definition of @y = exp(x)@ is @y = e^x@, where @e@ is the base of the natural logarithm. The inverse is the natural logarithm, 'log'.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @0 \<= y \<= INF@
---
---     The output will overflow if @exp(x)@ is too large to be represented.
---
---     This function operates on double-precision floating point values, use 'expf' for single-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: value of @e^x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'expf', 'log'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_exp@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_exp@, defined at @SDL3\/SDL_stdinc.h 4945:36@
-exp
-  :: Double
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO Double
-exp =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_exp (Coerce.coerce x00))
-
--- | Compute the exponential of @x@.
---
---     The definition of @y = exp(x)@ is @y = e^x@, where @e@ is the base of the natural logarithm. The inverse is the natural logarithm, 'logf'.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @0 \<= y \<= INF@
---
---     The output will overflow if @exp(x)@ is too large to be represented.
---
---     This function operates on single-precision floating point values, use 'exp' for double-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: value of @e^x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'exp', 'logf'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_expf@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_expf@, defined at @SDL3\/SDL_stdinc.h 4977:35@
-expf
-  :: Float
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO Float
-expf =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_expf (Coerce.coerce x00))
-
--- | Compute the absolute value of @x@
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @0 \<= y \<= INF@
---
---     This function operates on double-precision floating point values, use 'fabsf' for single-precision floats.
---
---     [Returns]: the absolute value of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'fabsf'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_fabs@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_fabs@, defined at @SDL3\/SDL_stdinc.h 4998:36@
-fabs
-  :: Double
-  -- ^
-  --
-  --           [@x@]: floating point value to use as the magnitude.
-  -> IO Double
-fabs =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_fabs (Coerce.coerce x00))
-
--- | Compute the absolute value of @x@
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @0 \<= y \<= INF@
---
---     This function operates on single-precision floating point values, use 'fabs' for double-precision floats.
---
---     [Returns]: the absolute value of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'fabs'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_fabsf@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_fabsf@, defined at @SDL3\/SDL_stdinc.h 5019:35@
-fabsf
-  :: Float
-  -- ^
-  --
-  --           [@x@]: floating point value to use as the magnitude.
-  -> IO Float
-fabsf =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_fabsf (Coerce.coerce x00))
-
--- | Compute the floor of @x@.
---
---     The floor of @x@ is the largest integer @y@ such that @y \<= x@, i.e @x@ rounded down to the nearest integer.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-INF \<= y \<= INF@, y integer
---
---     This function operates on double-precision floating point values, use 'floorf' for single-precision floats.
---
---     [Returns]: the floor of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'floorf', 'ceil', 'trunc', 'round', @SDL_lround@
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_floor@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_floor@, defined at @SDL3\/SDL_stdinc.h 5047:36@
-floor
-  :: Double
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO Double
-floor =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_floor (Coerce.coerce x00))
-
--- | Compute the floor of @x@.
---
---     The floor of @x@ is the largest integer @y@ such that @y \<= x@, i.e @x@ rounded down to the nearest integer.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-INF \<= y \<= INF@, y integer
---
---     This function operates on single-precision floating point values, use 'floor' for double-precision floats.
---
---     [Returns]: the floor of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'floor', 'ceilf', 'truncf', 'roundf', @SDL_lroundf@
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_floorf@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_floorf@, defined at @SDL3\/SDL_stdinc.h 5075:35@
-floorf
-  :: Float
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO Float
-floorf =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_floorf (Coerce.coerce x00))
-
--- | Truncate @x@ to an integer.
---
---     Rounds @x@ to the next closest integer to 0. This is equivalent to removing the fractional part of @x@, leaving only the integer part.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-INF \<= y \<= INF@, y integer
---
---     This function operates on double-precision floating point values, use 'truncf' for single-precision floats.
---
---     [Returns]: @x@ truncated to an integer.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'truncf', 'fmod', 'ceil', 'floor', 'round', @SDL_lround@
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_trunc@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_trunc@, defined at @SDL3\/SDL_stdinc.h 5104:36@
-trunc
-  :: Double
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO Double
-trunc =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_trunc (Coerce.coerce x00))
-
--- | Truncate @x@ to an integer.
---
---     Rounds @x@ to the next closest integer to 0. This is equivalent to removing the fractional part of @x@, leaving only the integer part.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-INF \<= y \<= INF@, y integer
---
---     This function operates on single-precision floating point values, use 'trunc' for double-precision floats.
---
---     [Returns]: @x@ truncated to an integer.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'trunc', 'fmodf', 'ceilf', 'floorf', 'roundf', @SDL_lroundf@
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_truncf@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_truncf@, defined at @SDL3\/SDL_stdinc.h 5133:35@
-truncf
-  :: Float
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO Float
-truncf =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_truncf (Coerce.coerce x00))
-
--- | Return the floating-point remainder of @x \/ y@
---
---     Divides @x@ by @y@, and returns the remainder.
---
---     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= INF@, @y != 0@
---
---     Range: @-y \<= z \<= y@
---
---     This function operates on double-precision floating point values, use 'fmodf' for single-precision floats.
---
---     [Returns]: the remainder of @x \/ y@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'fmodf', 'modf', 'trunc', 'ceil', 'floor', 'round', @SDL_lround@
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_fmod@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_fmod@, defined at @SDL3\/SDL_stdinc.h 5163:36@
-fmod
-  :: Double
-  -- ^
-  --
-  --           [@x@]: the numerator.
-  -> Double
-  -- ^
-  --
-  --           [@y@]: the denominator. Must not be 0.
-  -> IO Double
-fmod =
-  \x00 ->
-    \x11 ->
-      fmap Coerce.coerce (Unsafe.sDL_fmod (Coerce.coerce x00) (Coerce.coerce x11))
-
--- | Return the floating-point remainder of @x \/ y@
---
---     Divides @x@ by @y@, and returns the remainder.
---
---     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= INF@, @y != 0@
---
---     Range: @-y \<= z \<= y@
---
---     This function operates on single-precision floating point values, use 'fmod' for double-precision floats.
---
---     [Returns]: the remainder of @x \/ y@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'fmod', 'truncf', 'modff', 'ceilf', 'floorf', 'roundf', @SDL_lroundf@
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_fmodf@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_fmodf@, defined at @SDL3\/SDL_stdinc.h 5193:35@
-fmodf
-  :: Float
-  -- ^
-  --
-  --           [@x@]: the numerator.
-  -> Float
-  -- ^
-  --
-  --           [@y@]: the denominator. Must not be 0.
-  -> IO Float
-fmodf =
-  \x00 ->
-    \x11 ->
-      fmap Coerce.coerce (Unsafe.sDL_fmodf (Coerce.coerce x00) (Coerce.coerce x11))
-
--- | Return whether the value is infinity.
---
---     [Returns]: non-zero if the value is infinity, 0 otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'isinff'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_isinf@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_isinf@, defined at @SDL3\/SDL_stdinc.h 5207:33@
-isinf
-  :: Double
-  -- ^
-  --
-  --           [@x@]: double-precision floating point value.
-  -> IO BG.Int32
-isinf =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_isinf (Coerce.coerce x00))
-
--- | Return whether the value is infinity.
---
---     [Returns]: non-zero if the value is infinity, 0 otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'isinf'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_isinff@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_isinff@, defined at @SDL3\/SDL_stdinc.h 5221:33@
-isinff
-  :: Float
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.Int32
-isinff =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_isinff (Coerce.coerce x00))
-
--- | Return whether the value is NaN.
---
---     [Returns]: non-zero if the value is NaN, 0 otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'isnanf'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_isnan@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_isnan@, defined at @SDL3\/SDL_stdinc.h 5235:33@
-isnan
-  :: Double
-  -- ^
-  --
-  --           [@x@]: double-precision floating point value.
-  -> IO BG.Int32
-isnan =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_isnan (Coerce.coerce x00))
-
--- | Return whether the value is NaN.
---
---     [Returns]: non-zero if the value is NaN, 0 otherwise.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'isnan'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_isnanf@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_isnanf@, defined at @SDL3\/SDL_stdinc.h 5249:33@
-isnanf
-  :: Float
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO BG.Int32
-isnanf =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_isnanf (Coerce.coerce x00))
-
--- | Compute the natural logarithm of @x@.
---
---     Domain: @0 \< x \<= INF@
---
---     Range: @-INF \<= y \<= INF@
---
---     It is an error for @x@ to be less than or equal to 0.
---
---     This function operates on double-precision floating point values, use 'logf' for single-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: the natural logarithm of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'logf', 'log10', 'exp'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_log@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_log@, defined at @SDL3\/SDL_stdinc.h 5279:36@
-log
-  :: Double
-  -- ^
-  --
-  --           [@x@]: floating point value. Must be greater than 0.
-  -> IO Double
-log =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_log (Coerce.coerce x00))
-
--- | Compute the natural logarithm of @x@.
---
---     Domain: @0 \< x \<= INF@
---
---     Range: @-INF \<= y \<= INF@
---
---     It is an error for @x@ to be less than or equal to 0.
---
---     This function operates on single-precision floating point values, use 'log' for double-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: the natural logarithm of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'log', 'expf'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_logf@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_logf@, defined at @SDL3\/SDL_stdinc.h 5308:35@
-logf
-  :: Float
-  -- ^
-  --
-  --           [@x@]: floating point value. Must be greater than 0.
-  -> IO Float
-logf =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_logf (Coerce.coerce x00))
-
--- | Compute the base-10 logarithm of @x@.
---
---     Domain: @0 \< x \<= INF@
---
---     Range: @-INF \<= y \<= INF@
---
---     It is an error for @x@ to be less than or equal to 0.
---
---     This function operates on double-precision floating point values, use 'log10f' for single-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: the logarithm of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'log10f', 'log', 'pow'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_log10@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_log10@, defined at @SDL3\/SDL_stdinc.h 5338:36@
-log10
-  :: Double
-  -- ^
-  --
-  --           [@x@]: floating point value. Must be greater than 0.
-  -> IO Double
-log10 =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_log10 (Coerce.coerce x00))
-
--- | Compute the base-10 logarithm of @x@.
---
---     Domain: @0 \< x \<= INF@
---
---     Range: @-INF \<= y \<= INF@
---
---     It is an error for @x@ to be less than or equal to 0.
---
---     This function operates on single-precision floating point values, use 'log10' for double-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: the logarithm of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'log10', 'logf', 'powf'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_log10f@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_log10f@, defined at @SDL3\/SDL_stdinc.h 5368:35@
-log10f
-  :: Float
-  -- ^
-  --
-  --           [@x@]: floating point value. Must be greater than 0.
-  -> IO Float
-log10f =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_log10f (Coerce.coerce x00))
-
--- | Split @x@ into integer and fractional parts
---
---     This function operates on double-precision floating point values, use 'modff' for single-precision floats.
---
---     [Returns]: the fractional part of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'modff', 'trunc', 'fmod'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_modf@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_modf@, defined at @SDL3\/SDL_stdinc.h 5388:36@
-modf
-  :: Double
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> BG.Ptr BG.CDouble
-  -- ^
-  --
-  --           [@y@]: output pointer to store the integer part of @x@.
-  -> IO Double
-modf =
-  \x00 ->
-    \x11 ->
-      fmap Coerce.coerce (Unsafe.sDL_modf (Coerce.coerce x00) x11)
-
--- | Split @x@ into integer and fractional parts
---
---     This function operates on single-precision floating point values, use 'modf' for double-precision floats.
---
---     [Returns]: the fractional part of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'modf', 'truncf', 'fmodf'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_modff@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_modff@, defined at @SDL3\/SDL_stdinc.h 5408:35@
-modff
-  :: Float
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> BG.Ptr BG.CFloat
-  -- ^
-  --
-  --           [@y@]: output pointer to store the integer part of @x@.
-  -> IO Float
-modff =
-  \x00 ->
-    \x11 ->
-      fmap Coerce.coerce (Unsafe.sDL_modff (Coerce.coerce x00) x11)
-
--- | Raise @x@ to the power @y@
---
---     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= INF@
---
---     Range: @-INF \<= z \<= INF@
---
---     If @y@ is the base of the natural logarithm (e), consider using 'exp' instead.
---
---     This function operates on double-precision floating point values, use 'powf' for single-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: @x@ raised to the power @y@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'powf', 'exp', 'log'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_pow@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_pow@, defined at @SDL3\/SDL_stdinc.h 5440:36@
-pow
-  :: Double
-  -- ^
-  --
-  --           [@x@]: the base.
-  -> Double
-  -- ^
-  --
-  --           [@y@]: the exponent.
-  -> IO Double
-pow =
-  \x00 ->
-    \x11 ->
-      fmap Coerce.coerce (Unsafe.sDL_pow (Coerce.coerce x00) (Coerce.coerce x11))
-
--- | Raise @x@ to the power @y@
---
---     Domain: @-INF \<= x \<= INF@, @-INF \<= y \<= INF@
---
---     Range: @-INF \<= z \<= INF@
---
---     If @y@ is the base of the natural logarithm (e), consider using 'exp' instead.
---
---     This function operates on single-precision floating point values, use 'pow' for double-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: @x@ raised to the power @y@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'pow', 'expf', 'logf'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_powf@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_powf@, defined at @SDL3\/SDL_stdinc.h 5472:35@
-powf
-  :: Float
-  -- ^
-  --
-  --           [@x@]: the base.
-  -> Float
-  -- ^
-  --
-  --           [@y@]: the exponent.
-  -> IO Float
-powf =
-  \x00 ->
-    \x11 ->
-      fmap Coerce.coerce (Unsafe.sDL_powf (Coerce.coerce x00) (Coerce.coerce x11))
-
--- | Round @x@ to the nearest integer.
---
---     Rounds @x@ to the nearest integer. Values halfway between integers will be rounded away from zero.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-INF \<= y \<= INF@, y integer
---
---     This function operates on double-precision floating point values, use 'roundf' for single-precision floats. To get the result as an integer type, use SDL_lround.
---
---     [Returns]: the nearest integer to @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'roundf', @SDL_lround@, 'floor', 'ceil', 'trunc'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_round@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_round@, defined at @SDL3\/SDL_stdinc.h 5501:36@
-round
-  :: Double
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO Double
-round =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_round (Coerce.coerce x00))
-
--- | Round @x@ to the nearest integer.
---
---     Rounds @x@ to the nearest integer. Values halfway between integers will be rounded away from zero.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-INF \<= y \<= INF@, y integer
---
---     This function operates on single-precision floating point values, use 'round' for double-precision floats. To get the result as an integer type, use SDL_lroundf.
---
---     [Returns]: the nearest integer to @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'round', @SDL_lroundf@, 'floorf', 'ceilf', 'truncf'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_roundf@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_roundf@, defined at @SDL3\/SDL_stdinc.h 5530:35@
-roundf
-  :: Float
-  -- ^
-  --
-  --           [@x@]: floating point value.
-  -> IO Float
-roundf =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_roundf (Coerce.coerce x00))
-
--- | Scale @x@ by an integer power of two.
---
---     Multiplies @x@ by the @n@ th power of the floating point radix (always 2).
---
---     Domain: @-INF \<= x \<= INF@, @n@ integer
---
---     Range: @-INF \<= y \<= INF@
---
---     This function operates on double-precision floating point values, use 'scalbnf' for single-precision floats.
---
---     [Returns]: @x * 2^n@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'scalbnf', 'pow'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_scalbn@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_scalbn@, defined at @SDL3\/SDL_stdinc.h 5613:36@
-scalbn
-  :: Double
-  -- ^
-  --
-  --           [@x@]: floating point value to be scaled.
-  -> BG.Int32
-  -- ^
-  --
-  --           [@n@]: integer exponent.
-  -> IO Double
-scalbn =
-  \x00 ->
-    \x11 ->
-      fmap Coerce.coerce (Unsafe.sDL_scalbn (Coerce.coerce x00) (Coerce.coerce x11))
-
--- | Scale @x@ by an integer power of two.
---
---     Multiplies @x@ by the @n@ th power of the floating point radix (always 2).
---
---     Domain: @-INF \<= x \<= INF@, @n@ integer
---
---     Range: @-INF \<= y \<= INF@
---
---     This function operates on single-precision floating point values, use 'scalbn' for double-precision floats.
---
---     [Returns]: @x * 2^n@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'scalbn', 'powf'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_scalbnf@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_scalbnf@, defined at @SDL3\/SDL_stdinc.h 5638:35@
-scalbnf
-  :: Float
-  -- ^
-  --
-  --           [@x@]: floating point value to be scaled.
-  -> BG.Int32
-  -- ^
-  --
-  --           [@n@]: integer exponent.
-  -> IO Float
-scalbnf =
-  \x00 ->
-    \x11 ->
-      fmap Coerce.coerce (Unsafe.sDL_scalbnf (Coerce.coerce x00) (Coerce.coerce x11))
-
--- | Compute the sine of @x@.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-1 \<= y \<= 1@
---
---     This function operates on double-precision floating point values, use 'sinf' for single-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: sine of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sinf', 'asin', 'cos'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_sin@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_sin@, defined at @SDL3\/SDL_stdinc.h 5666:36@
-sin
-  :: Double
-  -- ^
-  --
-  --           [@x@]: floating point value, in radians.
-  -> IO Double
-sin =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_sin (Coerce.coerce x00))
-
--- | Compute the sine of @x@.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-1 \<= y \<= 1@
---
---     This function operates on single-precision floating point values, use 'sin' for double-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: sine of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sin', 'asinf', 'cosf'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_sinf@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_sinf@, defined at @SDL3\/SDL_stdinc.h 5694:35@
-sinf
-  :: Float
-  -- ^
-  --
-  --           [@x@]: floating point value, in radians.
-  -> IO Float
-sinf =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_sinf (Coerce.coerce x00))
-
--- | Compute the square root of @x@.
---
---     Domain: @0 \<= x \<= INF@
---
---     Range: @0 \<= y \<= INF@
---
---     This function operates on double-precision floating point values, use 'sqrtf' for single-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: square root of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sqrtf'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_sqrt@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_sqrt@, defined at @SDL3\/SDL_stdinc.h 5720:36@
-sqrt
-  :: Double
-  -- ^
-  --
-  --           [@x@]: floating point value. Must be greater than or equal to 0.
-  -> IO Double
-sqrt =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_sqrt (Coerce.coerce x00))
-
--- | Compute the square root of @x@.
---
---     Domain: @0 \<= x \<= INF@
---
---     Range: @0 \<= y \<= INF@
---
---     This function operates on single-precision floating point values, use 'sqrt' for double-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: square root of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'sqrt'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_sqrtf@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_sqrtf@, defined at @SDL3\/SDL_stdinc.h 5746:35@
-sqrtf
-  :: Float
-  -- ^
-  --
-  --           [@x@]: floating point value. Must be greater than or equal to 0.
-  -> IO Float
-sqrtf =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_sqrtf (Coerce.coerce x00))
-
--- | Compute the tangent of @x@.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-INF \<= y \<= INF@
---
---     This function operates on double-precision floating point values, use 'tanf' for single-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: tangent of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'tanf', 'sin', 'cos', 'atan', 'atan2'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_tan@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_tan@, defined at @SDL3\/SDL_stdinc.h 5776:36@
-tan
-  :: Double
-  -- ^
-  --
-  --           [@x@]: floating point value, in radians.
-  -> IO Double
-tan =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_tan (Coerce.coerce x00))
-
--- | Compute the tangent of @x@.
---
---     Domain: @-INF \<= x \<= INF@
---
---     Range: @-INF \<= y \<= INF@
---
---     This function operates on single-precision floating point values, use 'tan' for double-precision floats.
---
---     This function may use a different approximation across different versions, platforms and configurations. i.e, it can return a different value given the same input on different machines or operating systems, or if SDL is updated.
---
---     [Returns]: tangent of @x@.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'tan', 'sinf', 'cosf', 'atanf', 'atan2f'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_tanf@.
---                   The safe import is not exported
---                   : pure math on immediate values; cannot block, lock, or call back.
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_tanf@, defined at @SDL3\/SDL_stdinc.h 5806:35@
-tanf
-  :: Float
-  -- ^
-  --
-  --           [@x@]: floating point value, in radians.
-  -> IO Float
-tanf =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_tanf (Coerce.coerce x00))
-
--- | This function allocates a context for the specified character set conversion.
---
---     [Returns]: a handle that must be freed with 'iconvClose', or SDL_ICONV_ERROR on failure.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'iconv', 'iconvClose', 'iconvString'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_iconv_open@.
---                   The safe flavor is 'iconvOpenSafe'
---                   .
---
---     [C declaration]: @SDL_iconv_open@, defined at @SDL3\/SDL_stdinc.h 5834:41@
-iconvOpen
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@tocode@]: The target character encoding, must not be NULL.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@fromcode@]: The source character encoding, must not be NULL.
-  -> IO SDL_iconv_t
-iconvOpen = Unsafe.sDL_iconv_open
-
--- | This function allocates a context for the specified character set conversion.
---
---     [Returns]: a handle that must be freed with 'iconvClose', or SDL_ICONV_ERROR on failure.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'iconv', 'iconvClose', 'iconvString'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_iconv_open@.
---                   The unsafe flavor is 'iconvOpen'
---                   .
---
---     [C declaration]: @SDL_iconv_open@, defined at @SDL3\/SDL_stdinc.h 5834:41@
-iconvOpenSafe
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@tocode@]: The target character encoding, must not be NULL.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@fromcode@]: The source character encoding, must not be NULL.
-  -> IO SDL_iconv_t
-iconvOpenSafe = Safe.sDL_iconv_open
-
--- | This function frees a context used for character set conversion.
---
---     [Returns]: 0 on success, or -1 on failure.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'iconv', 'iconvOpen', 'iconvString'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_iconv_close@.
---                   The safe flavor is 'iconvCloseSafe'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_iconv_close@, defined at @SDL3\/SDL_stdinc.h 5851:33@
-iconvClose
-  :: SDL_iconv_t
-  -- ^
-  --
-  --           [@cd@]: The character set conversion handle.
-  -> IO BG.Int32
-iconvClose =
-  \x00 ->
-    fmap Coerce.coerce (Unsafe.sDL_iconv_close x00)
-
--- | This function frees a context used for character set conversion.
---
---     [Returns]: 0 on success, or -1 on failure.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'iconv', 'iconvOpen', 'iconvString'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_iconv_close@.
---                   The unsafe flavor is 'iconvClose'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_iconv_close@, defined at @SDL3\/SDL_stdinc.h 5851:33@
-iconvCloseSafe
-  :: SDL_iconv_t
-  -- ^
-  --
-  --           [@cd@]: The character set conversion handle.
-  -> IO BG.Int32
-iconvCloseSafe =
-  \x00 -> fmap Coerce.coerce (Safe.sDL_iconv_close x00)
-
--- | This function converts text between encodings, reading from and writing to a buffer.
---
---     It returns the number of successful conversions on success. On error, SDL_ICONV_E2BIG is returned when the output buffer is too small, or SDL_ICONV_EILSEQ is returned when an invalid input sequence is encountered, or SDL_ICONV_EINVAL is returned when an incomplete input sequence is encountered.
---
---     On exit:
---
---     * inbuf will point to the beginning of the next multibyte sequence. On error, this is the location of the problematic input sequence. On success, this is the end of the input sequence.
---
---     * inbytesleft will be set to the number of bytes left to convert, which will be 0 on success.
---
---     * outbuf will point to the location where to store the next output byte.
---
---     * outbytesleft will be set to the number of bytes left in the output buffer.
---
---     [Returns]: the number of conversions on success, or a negative error code.
---
---     [Thread safety]: Do not use the same 'SDL_iconv_t' from two threads at once.
---
---     @since 3.2.0
---
---     [See also]: 'iconvOpen', 'iconvClose', 'iconvString'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_iconv@.
---                   The safe flavor is 'iconvSafe'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_iconv@, defined at @SDL3\/SDL_stdinc.h 5891:36@
-iconv
-  :: SDL_iconv_t
-  -- ^
-  --
-  --           [@cd@]: The character set conversion context, created in @'iconvOpen'@.
-  -> BG.Ptr (PtrConst.PtrConst BG.CChar)
-  -- ^
-  --
-  --           [@inbuf@]: Address of variable that points to the first character of the input sequence.
-  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@inbytesleft@]: The number of bytes in the input buffer.
-  -> BG.Ptr (BG.Ptr BG.CChar)
-  -- ^
-  --
-  --           [@outbuf@]: Address of variable that points to the output buffer.
-  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@outbytesleft@]: The number of bytes in the output buffer.
-  -> IO BG.Word64
-iconv =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        \x33 ->
-          \x44 ->
-            fmap Coerce.coerce (Unsafe.sDL_iconv x00 x11 x22 x33 x44)
-
--- | This function converts text between encodings, reading from and writing to a buffer.
---
---     It returns the number of successful conversions on success. On error, SDL_ICONV_E2BIG is returned when the output buffer is too small, or SDL_ICONV_EILSEQ is returned when an invalid input sequence is encountered, or SDL_ICONV_EINVAL is returned when an incomplete input sequence is encountered.
---
---     On exit:
---
---     * inbuf will point to the beginning of the next multibyte sequence. On error, this is the location of the problematic input sequence. On success, this is the end of the input sequence.
---
---     * inbytesleft will be set to the number of bytes left to convert, which will be 0 on success.
---
---     * outbuf will point to the location where to store the next output byte.
---
---     * outbytesleft will be set to the number of bytes left in the output buffer.
---
---     [Returns]: the number of conversions on success, or a negative error code.
---
---     [Thread safety]: Do not use the same 'SDL_iconv_t' from two threads at once.
---
---     @since 3.2.0
---
---     [See also]: 'iconvOpen', 'iconvClose', 'iconvString'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_iconv@.
---                   The unsafe flavor is 'iconv'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_iconv@, defined at @SDL3\/SDL_stdinc.h 5891:36@
-iconvSafe
-  :: SDL_iconv_t
-  -- ^
-  --
-  --           [@cd@]: The character set conversion context, created in @'iconvOpen'@.
-  -> BG.Ptr (PtrConst.PtrConst BG.CChar)
-  -- ^
-  --
-  --           [@inbuf@]: Address of variable that points to the first character of the input sequence.
-  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@inbytesleft@]: The number of bytes in the input buffer.
-  -> BG.Ptr (BG.Ptr BG.CChar)
-  -- ^
-  --
-  --           [@outbuf@]: Address of variable that points to the output buffer.
-  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
-  -- ^
-  --
-  --           [@outbytesleft@]: The number of bytes in the output buffer.
-  -> IO BG.Word64
-iconvSafe =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        \x33 ->
-          \x44 ->
-            fmap Coerce.coerce (Safe.sDL_iconv x00 x11 x22 x33 x44)
-
--- | Helper function to convert a string\'s encoding in one call.
---
---     This function converts a buffer or string between encodings in one pass.
---
---     The string does not need to be NULL-terminated; this function operates on the number of bytes specified in @inbytesleft@ whether there is a NULL character anywhere in the buffer.
---
---     The returned string is owned by the caller, and should be passed to 'free' when no longer needed.
---
---     [Returns]: a new string, converted to the new encoding, or NULL on error.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'iconvOpen', 'iconvClose', 'iconv'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_iconv_string@.
---                   The safe flavor is 'iconvStringSafe'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_iconv_string@, defined at @SDL3\/SDL_stdinc.h 5928:36@
-iconvString
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@tocode@]: the character encoding of the output string. Examples are \"UTF-8\", \"UCS-4\", etc.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@fromcode@]: the character encoding of data in @inbuf@.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@inbuf@]: the string to convert to a different encoding.
-  -> BG.Word64
-  -- ^
-  --
-  --           [@inbytesleft@]: the size of the input string /in bytes/.
-  -> IO (BG.Ptr BG.CChar)
-iconvString =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        \x33 ->
-          Unsafe.sDL_iconv_string x00 x11 x22 (Coerce.coerce x33)
-
--- | Helper function to convert a string\'s encoding in one call.
---
---     This function converts a buffer or string between encodings in one pass.
---
---     The string does not need to be NULL-terminated; this function operates on the number of bytes specified in @inbytesleft@ whether there is a NULL character anywhere in the buffer.
---
---     The returned string is owned by the caller, and should be passed to 'free' when no longer needed.
---
---     [Returns]: a new string, converted to the new encoding, or NULL on error.
---
---     [Thread safety]: It is safe to call this function from any thread.
---
---     @since 3.2.0
---
---     [See also]: 'iconvOpen', 'iconvClose', 'iconv'
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_iconv_string@.
---                   The unsafe flavor is 'iconvString'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_iconv_string@, defined at @SDL3\/SDL_stdinc.h 5928:36@
-iconvStringSafe
-  :: PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@tocode@]: the character encoding of the output string. Examples are \"UTF-8\", \"UCS-4\", etc.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@fromcode@]: the character encoding of data in @inbuf@.
-  -> PtrConst.PtrConst BG.CChar
-  -- ^
-  --
-  --           [@inbuf@]: the string to convert to a different encoding.
-  -> BG.Word64
-  -- ^
-  --
-  --           [@inbytesleft@]: the size of the input string /in bytes/.
-  -> IO (BG.Ptr BG.CChar)
-iconvStringSafe =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        \x33 ->
-          Safe.sDL_iconv_string x00 x11 x22 (Coerce.coerce x33)
-
--- |
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_size_mul_check_overflow_builtin@.
---                   The safe flavor is 'sizeMulCheckOverflowBuiltinSafe'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_size_mul_check_overflow_builtin@, defined at @SDL3\/SDL_stdinc.h 6109:23@
-sizeMulCheckOverflowBuiltin
-  :: BG.Word64
-  -- ^ [C declaration]: @a@
-  -> BG.Word64
-  -- ^ [C declaration]: @b@
-  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
-  -- ^ [C declaration]: @ret@
-  -> IO Bool
-sizeMulCheckOverflowBuiltin =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        fmap
-          CBool.toBool
-          (Unsafe.sDL_size_mul_check_overflow_builtin (Coerce.coerce x00) (Coerce.coerce x11) x22)
-
--- |
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_size_mul_check_overflow_builtin@.
---                   The unsafe flavor is 'sizeMulCheckOverflowBuiltin'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_size_mul_check_overflow_builtin@, defined at @SDL3\/SDL_stdinc.h 6109:23@
-sizeMulCheckOverflowBuiltinSafe
-  :: BG.Word64
-  -- ^ [C declaration]: @a@
-  -> BG.Word64
-  -- ^ [C declaration]: @b@
-  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
-  -- ^ [C declaration]: @ret@
-  -> IO Bool
-sizeMulCheckOverflowBuiltinSafe =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        fmap
-          CBool.toBool
-          (Safe.sDL_size_mul_check_overflow_builtin (Coerce.coerce x00) (Coerce.coerce x11) x22)
-
--- |
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Unsafe__ foreign import of @SDL_size_add_check_overflow_builtin@.
---                   The safe flavor is 'sizeAddCheckOverflowBuiltinSafe'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_size_add_check_overflow_builtin@, defined at @SDL3\/SDL_stdinc.h 6147:23@
-sizeAddCheckOverflowBuiltin
-  :: BG.Word64
-  -- ^ [C declaration]: @a@
-  -> BG.Word64
-  -- ^ [C declaration]: @b@
-  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
-  -- ^ [C declaration]: @ret@
-  -> IO Bool
-sizeAddCheckOverflowBuiltin =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        fmap
-          CBool.toBool
-          (Unsafe.sDL_size_add_check_overflow_builtin (Coerce.coerce x00) (Coerce.coerce x11) x22)
-
--- |
---
---     === __@sdl3-bindgen-sys@ notes__
---
---     [FFI safety]: __Safe__ foreign import of @SDL_size_add_check_overflow_builtin@.
---                   The unsafe flavor is 'sizeAddCheckOverflowBuiltin'
---                   .
---
---     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
---                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
---
---     [C declaration]: @SDL_size_add_check_overflow_builtin@, defined at @SDL3\/SDL_stdinc.h 6147:23@
-sizeAddCheckOverflowBuiltinSafe
-  :: BG.Word64
-  -- ^ [C declaration]: @a@
-  -> BG.Word64
-  -- ^ [C declaration]: @b@
-  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
-  -- ^ [C declaration]: @ret@
-  -> IO Bool
-sizeAddCheckOverflowBuiltinSafe =
-  \x00 ->
-    \x11 ->
-      \x22 ->
-        fmap
-          CBool.toBool
-          (Safe.sDL_size_add_check_overflow_builtin (Coerce.coerce x00) (Coerce.coerce x11) x22)
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+
+-- | SDL\'s C-library replacements: memory, strings, math, and conversions; this module aliases the allocator and SDL\'s own API.
+--
+--     == FFI conventions
+--
+--     Unsuffixed aliases are __unsafe__ foreign imports; aliases suffixed @Safe@ are safe. Functions whose callbacks fire during the call export only the Safe alias (the genuine unsafe import stays reachable under @SDL3.Sys.Bindgen.Stdinc.Unsafe@); functions curated unsafe-only export only the unsuffixed one. Each alias\'s documentation records its flavor and rationale.
+--
+--     This module aliases only the functions of @SDL_stdinc.h@ that the registry allowlists. The header\'s other functions are raw-only: "SDL3.Sys.Bindgen.Stdinc.Unsafe" and "SDL3.Sys.Bindgen.Stdinc.Safe" export them.
+--
+--     The C shims are functions this package defines in C over what the FFI cannot call directly (variadic functions, function-like macros), each named after what it wraps; the same flavor rules apply. Their raw imports live under "SDL3.Sys.Bindgen.StdincShims".
+--
+--     Full conventions: "SDL3.Sys".
+--
+--     == Allowlist
+--
+--     The aliases are SDL\'s own API in this header (environments, the memory-function hooks and allocation count, UTF-8 stepping) and the allocator family, since memory SDL frees, or hands you to free, must come from SDL\'s allocator: 'malloc', 'free', 'strdup', and their kin. The rest of the header serves C programs without a portable C library: strings, character classes, math, sorting, random numbers, checksums, @iconv@, @memcpy@. Haskell has its own, so they stay raw-only.
+module SDL3.Sys.Stdinc (
+  module SDL3.Sys.Bindgen.Stdinc,
+
+  -- * Typed constants
+  pattern SDL3.Sys.Stdinc.SDL_MAX_TIME,
+  pattern SDL3.Sys.Stdinc.SDL_MIN_TIME,
+  pattern SDL3.Sys.Stdinc.SDL_MAX_SINT16,
+  pattern SDL3.Sys.Stdinc.SDL_MIN_SINT16,
+  pattern SDL3.Sys.Stdinc.SDL_MAX_SINT32,
+  pattern SDL3.Sys.Stdinc.SDL_MIN_SINT32,
+  pattern SDL3.Sys.Stdinc.SDL_MAX_SINT64,
+  pattern SDL3.Sys.Stdinc.SDL_MIN_SINT64,
+  pattern SDL3.Sys.Stdinc.SDL_MAX_SINT8,
+  pattern SDL3.Sys.Stdinc.SDL_MIN_SINT8,
+  pattern SDL3.Sys.Stdinc.SDL_MAX_UINT16,
+  pattern SDL3.Sys.Stdinc.SDL_MIN_UINT16,
+  pattern SDL3.Sys.Stdinc.SDL_MAX_UINT32,
+  pattern SDL3.Sys.Stdinc.SDL_MIN_UINT32,
+  pattern SDL3.Sys.Stdinc.SDL_MAX_UINT64,
+  pattern SDL3.Sys.Stdinc.SDL_MIN_UINT64,
+  pattern SDL3.Sys.Stdinc.SDL_MAX_UINT8,
+  pattern SDL3.Sys.Stdinc.SDL_MIN_UINT8,
+  pattern SDL3.Sys.Stdinc.SDL_SIZE_MAX,
+  pattern SDL3.Sys.Stdinc.SDL_ICONV_ERROR,
+  pattern SDL3.Sys.Stdinc.SDL_ICONV_E2BIG,
+  pattern SDL3.Sys.Stdinc.SDL_ICONV_EILSEQ,
+  pattern SDL3.Sys.Stdinc.SDL_ICONV_EINVAL,
+
+  -- * Function aliases
+  SDL3.Sys.Stdinc.malloc,
+  SDL3.Sys.Stdinc.mallocSafe,
+  SDL3.Sys.Stdinc.calloc,
+  SDL3.Sys.Stdinc.callocSafe,
+  SDL3.Sys.Stdinc.realloc,
+  SDL3.Sys.Stdinc.reallocSafe,
+  SDL3.Sys.Stdinc.free,
+  SDL3.Sys.Stdinc.freeSafe,
+  SDL3.Sys.Stdinc.getOriginalMemoryFunctions,
+  SDL3.Sys.Stdinc.getOriginalMemoryFunctionsSafe,
+  SDL3.Sys.Stdinc.getMemoryFunctions,
+  SDL3.Sys.Stdinc.getMemoryFunctionsSafe,
+  SDL3.Sys.Stdinc.setMemoryFunctions,
+  SDL3.Sys.Stdinc.setMemoryFunctionsSafe,
+  SDL3.Sys.Stdinc.alignedAlloc,
+  SDL3.Sys.Stdinc.alignedAllocSafe,
+  SDL3.Sys.Stdinc.alignedFree,
+  SDL3.Sys.Stdinc.alignedFreeSafe,
+  SDL3.Sys.Stdinc.getNumAllocations,
+  SDL3.Sys.Stdinc.getNumAllocationsSafe,
+  SDL3.Sys.Stdinc.getEnvironment,
+  SDL3.Sys.Stdinc.getEnvironmentSafe,
+  SDL3.Sys.Stdinc.createEnvironment,
+  SDL3.Sys.Stdinc.createEnvironmentSafe,
+  SDL3.Sys.Stdinc.getEnvironmentVariable,
+  SDL3.Sys.Stdinc.getEnvironmentVariableSafe,
+  SDL3.Sys.Stdinc.getEnvironmentVariables,
+  SDL3.Sys.Stdinc.getEnvironmentVariablesSafe,
+  SDL3.Sys.Stdinc.setEnvironmentVariable,
+  SDL3.Sys.Stdinc.setEnvironmentVariableSafe,
+  SDL3.Sys.Stdinc.unsetEnvironmentVariable,
+  SDL3.Sys.Stdinc.unsetEnvironmentVariableSafe,
+  SDL3.Sys.Stdinc.destroyEnvironment,
+  SDL3.Sys.Stdinc.destroyEnvironmentSafe,
+  SDL3.Sys.Stdinc.strdup,
+  SDL3.Sys.Stdinc.strdupSafe,
+  SDL3.Sys.Stdinc.strndup,
+  SDL3.Sys.Stdinc.strndupSafe,
+  SDL3.Sys.Stdinc.stepUTF8,
+  SDL3.Sys.Stdinc.stepBackUTF8,
+  SDL3.Sys.Stdinc.ucs4ToUTF8,
+
+  -- * C shims
+  SDL3.Sys.Stdinc.fourCC,
+)
+where
+
+import Data.Coerce qualified as Coerce
+import Prelude (Bool, IO, fmap)
+
+import HsBindgen.Runtime.CBool qualified as CBool
+import HsBindgen.Runtime.LibC qualified
+import HsBindgen.Runtime.PtrConst qualified as PtrConst
+import HsBindgen.Runtime.Support qualified as BG
+import SDL3.Sys.Bindgen.Stdinc
+import SDL3.Sys.Bindgen.Stdinc qualified
+import SDL3.Sys.Bindgen.Stdinc.Safe qualified as Safe
+import SDL3.Sys.Bindgen.Stdinc.Unsafe qualified as Unsafe
+import SDL3.Sys.Bindgen.StdincShims.Unsafe qualified as Unsafe
+
+-- | Allocate uninitialized memory.
+--
+--     The allocated memory returned by this function must be freed with @'free'@.
+--
+--     If @size@ is 0, it will be set to 1.
+--
+--     If the allocation is successful, the returned pointer is guaranteed to be aligned to either the /fundamental alignment/ (@alignof(max_align_t)@ in C11 and later) or @2 * sizeof(void *)@, whichever is smaller. Use @'alignedAlloc'@ if you need to allocate memory aligned to an alignment greater than this guarantee.
+--
+--     [Returns]: a pointer to the allocated memory, or NULL if allocation failed.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'free', 'calloc', 'realloc', 'alignedAlloc'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @SDL_malloc@.
+--                   The safe flavor is 'mallocSafe'
+--                   .
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @SDL_malloc@, defined at @SDL3\/SDL_stdinc.h 1342:47@
+malloc
+  :: BG.Word64
+  -- ^
+  --
+  --           [@size@]: the size to allocate.
+  -> IO (BG.Ptr BG.Void)
+malloc =
+  \x00 -> Unsafe.sDL_malloc (Coerce.coerce x00)
+
+-- | Allocate uninitialized memory.
+--
+--     The allocated memory returned by this function must be freed with @'free'@.
+--
+--     If @size@ is 0, it will be set to 1.
+--
+--     If the allocation is successful, the returned pointer is guaranteed to be aligned to either the /fundamental alignment/ (@alignof(max_align_t)@ in C11 and later) or @2 * sizeof(void *)@, whichever is smaller. Use @'alignedAlloc'@ if you need to allocate memory aligned to an alignment greater than this guarantee.
+--
+--     [Returns]: a pointer to the allocated memory, or NULL if allocation failed.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'free', 'calloc', 'realloc', 'alignedAlloc'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Safe__ foreign import of @SDL_malloc@.
+--                   The unsafe flavor is 'malloc'
+--                   .
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @SDL_malloc@, defined at @SDL3\/SDL_stdinc.h 1342:47@
+mallocSafe
+  :: BG.Word64
+  -- ^
+  --
+  --           [@size@]: the size to allocate.
+  -> IO (BG.Ptr BG.Void)
+mallocSafe =
+  \x00 -> Safe.sDL_malloc (Coerce.coerce x00)
+
+-- |
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @SDL_calloc@.
+--                   The safe flavor is 'callocSafe'
+--                   .
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @SDL_calloc@, defined at @SDL3\/SDL_stdinc.h 1367:69@
+calloc
+  :: BG.Word64
+  -- ^ [C declaration]: @nmemb@
+  -> BG.Word64
+  -- ^ [C declaration]: @size@
+  -> IO (BG.Ptr BG.Void)
+calloc =
+  \x00 ->
+    \x11 ->
+      Unsafe.sDL_calloc (Coerce.coerce x00) (Coerce.coerce x11)
+
+-- |
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Safe__ foreign import of @SDL_calloc@.
+--                   The unsafe flavor is 'calloc'
+--                   .
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @SDL_calloc@, defined at @SDL3\/SDL_stdinc.h 1367:69@
+callocSafe
+  :: BG.Word64
+  -- ^ [C declaration]: @nmemb@
+  -> BG.Word64
+  -- ^ [C declaration]: @size@
+  -> IO (BG.Ptr BG.Void)
+callocSafe =
+  \x00 ->
+    \x11 ->
+      Safe.sDL_calloc (Coerce.coerce x00) (Coerce.coerce x11)
+
+-- |
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @SDL_realloc@.
+--                   The safe flavor is 'reallocSafe'
+--                   .
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @SDL_realloc@, defined at @SDL3\/SDL_stdinc.h 1407:54@
+realloc
+  :: BG.Ptr BG.Void
+  -- ^ [C declaration]: @mem@
+  -> BG.Word64
+  -- ^ [C declaration]: @size@
+  -> IO (BG.Ptr BG.Void)
+realloc =
+  \x00 ->
+    \x11 -> Unsafe.sDL_realloc x00 (Coerce.coerce x11)
+
+-- |
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Safe__ foreign import of @SDL_realloc@.
+--                   The unsafe flavor is 'realloc'
+--                   .
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @SDL_realloc@, defined at @SDL3\/SDL_stdinc.h 1407:54@
+reallocSafe
+  :: BG.Ptr BG.Void
+  -- ^ [C declaration]: @mem@
+  -> BG.Word64
+  -- ^ [C declaration]: @size@
+  -> IO (BG.Ptr BG.Void)
+reallocSafe =
+  \x00 ->
+    \x11 -> Safe.sDL_realloc x00 (Coerce.coerce x11)
+
+-- | Free allocated memory.
+--
+--     The pointer is no longer valid after this call and cannot be dereferenced anymore.
+--
+--     If @mem@ is NULL, this function does nothing.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'malloc', 'calloc', 'realloc'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @SDL_free@.
+--                   The safe flavor is 'freeSafe'
+--                   .
+--
+--     [C declaration]: @SDL_free@, defined at @SDL3\/SDL_stdinc.h 1427:34@
+free
+  :: BG.Ptr BG.Void
+  -- ^
+  --
+  --           [@mem@]: a pointer to allocated memory, or NULL.
+  -> IO ()
+free = Unsafe.sDL_free
+
+-- | Free allocated memory.
+--
+--     The pointer is no longer valid after this call and cannot be dereferenced anymore.
+--
+--     If @mem@ is NULL, this function does nothing.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'malloc', 'calloc', 'realloc'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Safe__ foreign import of @SDL_free@.
+--                   The unsafe flavor is 'free'
+--                   .
+--
+--     [C declaration]: @SDL_free@, defined at @SDL3\/SDL_stdinc.h 1427:34@
+freeSafe
+  :: BG.Ptr BG.Void
+  -- ^
+  --
+  --           [@mem@]: a pointer to allocated memory, or NULL.
+  -> IO ()
+freeSafe = Safe.sDL_free
+
+-- | Get the original set of SDL memory functions.
+--
+--     This is what 'malloc' and friends will use by default, if there has been no call to 'setMemoryFunctions'. This is not necessarily using the C runtime\'s @malloc@ functions behind the scenes! Different platforms and build configurations might do any number of unexpected things.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @SDL_GetOriginalMemoryFunctions@.
+--                   The safe flavor is 'getOriginalMemoryFunctionsSafe'
+--                   .
+--
+--     [C declaration]: @SDL_GetOriginalMemoryFunctions@, defined at @SDL3\/SDL_stdinc.h 1525:34@
+getOriginalMemoryFunctions
+  :: BG.Ptr SDL_malloc_func
+  -- ^
+  --
+  --           [@malloc_func@]: filled with malloc function.
+  -> BG.Ptr SDL_calloc_func
+  -- ^
+  --
+  --           [@calloc_func@]: filled with calloc function.
+  -> BG.Ptr SDL_realloc_func
+  -- ^
+  --
+  --           [@realloc_func@]: filled with realloc function.
+  -> BG.Ptr SDL_free_func
+  -- ^
+  --
+  --           [@free_func@]: filled with free function.
+  -> IO ()
+getOriginalMemoryFunctions =
+  Unsafe.sDL_GetOriginalMemoryFunctions
+
+-- | Get the original set of SDL memory functions.
+--
+--     This is what 'malloc' and friends will use by default, if there has been no call to 'setMemoryFunctions'. This is not necessarily using the C runtime\'s @malloc@ functions behind the scenes! Different platforms and build configurations might do any number of unexpected things.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Safe__ foreign import of @SDL_GetOriginalMemoryFunctions@.
+--                   The unsafe flavor is 'getOriginalMemoryFunctions'
+--                   .
+--
+--     [C declaration]: @SDL_GetOriginalMemoryFunctions@, defined at @SDL3\/SDL_stdinc.h 1525:34@
+getOriginalMemoryFunctionsSafe
+  :: BG.Ptr SDL_malloc_func
+  -- ^
+  --
+  --           [@malloc_func@]: filled with malloc function.
+  -> BG.Ptr SDL_calloc_func
+  -- ^
+  --
+  --           [@calloc_func@]: filled with calloc function.
+  -> BG.Ptr SDL_realloc_func
+  -- ^
+  --
+  --           [@realloc_func@]: filled with realloc function.
+  -> BG.Ptr SDL_free_func
+  -- ^
+  --
+  --           [@free_func@]: filled with free function.
+  -> IO ()
+getOriginalMemoryFunctionsSafe =
+  Safe.sDL_GetOriginalMemoryFunctions
+
+-- | Get the current set of SDL memory functions.
+--
+--     [Thread safety]: This does not hold a lock, so do not call this in the unlikely event of a background thread calling 'setMemoryFunctions' simultaneously.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'setMemoryFunctions', 'getOriginalMemoryFunctions'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @SDL_GetMemoryFunctions@.
+--                   The safe flavor is 'getMemoryFunctionsSafe'
+--                   .
+--
+--     [C declaration]: @SDL_GetMemoryFunctions@, defined at @SDL3\/SDL_stdinc.h 1547:34@
+getMemoryFunctions
+  :: BG.Ptr SDL_malloc_func
+  -- ^
+  --
+  --           [@malloc_func@]: filled with malloc function.
+  -> BG.Ptr SDL_calloc_func
+  -- ^
+  --
+  --           [@calloc_func@]: filled with calloc function.
+  -> BG.Ptr SDL_realloc_func
+  -- ^
+  --
+  --           [@realloc_func@]: filled with realloc function.
+  -> BG.Ptr SDL_free_func
+  -- ^
+  --
+  --           [@free_func@]: filled with free function.
+  -> IO ()
+getMemoryFunctions = Unsafe.sDL_GetMemoryFunctions
+
+-- | Get the current set of SDL memory functions.
+--
+--     [Thread safety]: This does not hold a lock, so do not call this in the unlikely event of a background thread calling 'setMemoryFunctions' simultaneously.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'setMemoryFunctions', 'getOriginalMemoryFunctions'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Safe__ foreign import of @SDL_GetMemoryFunctions@.
+--                   The unsafe flavor is 'getMemoryFunctions'
+--                   .
+--
+--     [C declaration]: @SDL_GetMemoryFunctions@, defined at @SDL3\/SDL_stdinc.h 1547:34@
+getMemoryFunctionsSafe
+  :: BG.Ptr SDL_malloc_func
+  -- ^
+  --
+  --           [@malloc_func@]: filled with malloc function.
+  -> BG.Ptr SDL_calloc_func
+  -- ^
+  --
+  --           [@calloc_func@]: filled with calloc function.
+  -> BG.Ptr SDL_realloc_func
+  -- ^
+  --
+  --           [@realloc_func@]: filled with realloc function.
+  -> BG.Ptr SDL_free_func
+  -- ^
+  --
+  --           [@free_func@]: filled with free function.
+  -> IO ()
+getMemoryFunctionsSafe = Safe.sDL_GetMemoryFunctions
+
+-- | Replace SDL\'s memory allocation functions with a custom set.
+--
+--     It is not safe to call this function once any allocations have been made, as future calls to 'free' will use the new allocator, even if they came from an 'malloc' made with the old one!
+--
+--     If used, usually this needs to be the first call made into the SDL library, if not the very first thing done at program startup time.
+--
+--     [Returns]: true on success or false on failure; call 'SDL3.Sys.Error.getError' for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread, but one should not replace the memory functions once any allocations are made!
+--
+--     @since 3.2.0
+--
+--     [See also]: 'getMemoryFunctions', 'getOriginalMemoryFunctions'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @SDL_SetMemoryFunctions@.
+--                   The safe flavor is 'setMemoryFunctionsSafe'
+--                   : registration; replacement allocators run inside every later SDL call.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @SDL_SetMemoryFunctions@, defined at @SDL3\/SDL_stdinc.h 1578:34@
+setMemoryFunctions
+  :: SDL_malloc_func
+  -- ^
+  --
+  --           [@malloc_func@]: custom malloc function.
+  -> SDL_calloc_func
+  -- ^
+  --
+  --           [@calloc_func@]: custom calloc function.
+  -> SDL_realloc_func
+  -- ^
+  --
+  --           [@realloc_func@]: custom realloc function.
+  -> SDL_free_func
+  -- ^
+  --
+  --           [@free_func@]: custom free function.
+  -> IO Bool
+setMemoryFunctions =
+  \x00 ->
+    \x11 ->
+      \x22 ->
+        \x33 ->
+          fmap CBool.toBool (Unsafe.sDL_SetMemoryFunctions x00 x11 x22 x33)
+
+-- | Replace SDL\'s memory allocation functions with a custom set.
+--
+--     It is not safe to call this function once any allocations have been made, as future calls to 'free' will use the new allocator, even if they came from an 'malloc' made with the old one!
+--
+--     If used, usually this needs to be the first call made into the SDL library, if not the very first thing done at program startup time.
+--
+--     [Returns]: true on success or false on failure; call 'SDL3.Sys.Error.getError' for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread, but one should not replace the memory functions once any allocations are made!
+--
+--     @since 3.2.0
+--
+--     [See also]: 'getMemoryFunctions', 'getOriginalMemoryFunctions'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Safe__ foreign import of @SDL_SetMemoryFunctions@.
+--                   The unsafe flavor is 'setMemoryFunctions'
+--                   : registration; replacement allocators run inside every later SDL call.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @SDL_SetMemoryFunctions@, defined at @SDL3\/SDL_stdinc.h 1578:34@
+setMemoryFunctionsSafe
+  :: SDL_malloc_func
+  -- ^
+  --
+  --           [@malloc_func@]: custom malloc function.
+  -> SDL_calloc_func
+  -- ^
+  --
+  --           [@calloc_func@]: custom calloc function.
+  -> SDL_realloc_func
+  -- ^
+  --
+  --           [@realloc_func@]: custom realloc function.
+  -> SDL_free_func
+  -- ^
+  --
+  --           [@free_func@]: custom free function.
+  -> IO Bool
+setMemoryFunctionsSafe =
+  \x00 ->
+    \x11 ->
+      \x22 ->
+        \x33 ->
+          fmap CBool.toBool (Safe.sDL_SetMemoryFunctions x00 x11 x22 x33)
+
+-- | Allocate memory aligned to a specific alignment.
+--
+--     The memory returned by this function must be freed with @'alignedFree'@, /not/ @'free'@.
+--
+--     If @alignment@ is less than the size of @void *@, it will be increased to match that.
+--
+--     The returned memory address will be a multiple of the alignment value, and the size of the memory allocated will be a multiple of the alignment value.
+--
+--     [Returns]: a pointer to the aligned memory, or NULL if allocation failed.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'alignedFree'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @SDL_aligned_alloc@.
+--                   The safe flavor is 'alignedAllocSafe'
+--                   .
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @SDL_aligned_alloc@, defined at @SDL3\/SDL_stdinc.h 1605:47@
+alignedAlloc
+  :: BG.Word64
+  -- ^
+  --
+  --           [@alignment@]: the alignment of the memory.
+  -> BG.Word64
+  -- ^
+  --
+  --           [@size@]: the size to allocate.
+  -> IO (BG.Ptr BG.Void)
+alignedAlloc =
+  \x00 ->
+    \x11 ->
+      Unsafe.sDL_aligned_alloc (Coerce.coerce x00) (Coerce.coerce x11)
+
+-- | Allocate memory aligned to a specific alignment.
+--
+--     The memory returned by this function must be freed with @'alignedFree'@, /not/ @'free'@.
+--
+--     If @alignment@ is less than the size of @void *@, it will be increased to match that.
+--
+--     The returned memory address will be a multiple of the alignment value, and the size of the memory allocated will be a multiple of the alignment value.
+--
+--     [Returns]: a pointer to the aligned memory, or NULL if allocation failed.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'alignedFree'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Safe__ foreign import of @SDL_aligned_alloc@.
+--                   The unsafe flavor is 'alignedAlloc'
+--                   .
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @SDL_aligned_alloc@, defined at @SDL3\/SDL_stdinc.h 1605:47@
+alignedAllocSafe
+  :: BG.Word64
+  -- ^
+  --
+  --           [@alignment@]: the alignment of the memory.
+  -> BG.Word64
+  -- ^
+  --
+  --           [@size@]: the size to allocate.
+  -> IO (BG.Ptr BG.Void)
+alignedAllocSafe =
+  \x00 ->
+    \x11 ->
+      Safe.sDL_aligned_alloc (Coerce.coerce x00) (Coerce.coerce x11)
+
+-- | Free memory allocated by @'alignedAlloc'@.
+--
+--     The pointer is no longer valid after this call and cannot be dereferenced anymore.
+--
+--     If @mem@ is NULL, this function does nothing.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'alignedAlloc'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @SDL_aligned_free@.
+--                   The safe flavor is 'alignedFreeSafe'
+--                   .
+--
+--     [C declaration]: @SDL_aligned_free@, defined at @SDL3\/SDL_stdinc.h 1623:34@
+alignedFree
+  :: BG.Ptr BG.Void
+  -- ^
+  --
+  --           [@mem@]: a pointer previously returned by @'alignedAlloc'@, or NULL.
+  -> IO ()
+alignedFree = Unsafe.sDL_aligned_free
+
+-- | Free memory allocated by @'alignedAlloc'@.
+--
+--     The pointer is no longer valid after this call and cannot be dereferenced anymore.
+--
+--     If @mem@ is NULL, this function does nothing.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'alignedAlloc'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Safe__ foreign import of @SDL_aligned_free@.
+--                   The unsafe flavor is 'alignedFree'
+--                   .
+--
+--     [C declaration]: @SDL_aligned_free@, defined at @SDL3\/SDL_stdinc.h 1623:34@
+alignedFreeSafe
+  :: BG.Ptr BG.Void
+  -- ^
+  --
+  --           [@mem@]: a pointer previously returned by @'alignedAlloc'@, or NULL.
+  -> IO ()
+alignedFreeSafe = Safe.sDL_aligned_free
+
+-- | Get the number of outstanding (unfreed) allocations.
+--
+--     [Returns]: the number of allocations or -1 if allocation counting is disabled.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @SDL_GetNumAllocations@.
+--                   The safe flavor is 'getNumAllocationsSafe'
+--                   .
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @SDL_GetNumAllocations@, defined at @SDL3\/SDL_stdinc.h 1635:33@
+getNumAllocations :: IO BG.Int32
+getNumAllocations =
+  fmap Coerce.coerce Unsafe.sDL_GetNumAllocations
+
+-- | Get the number of outstanding (unfreed) allocations.
+--
+--     [Returns]: the number of allocations or -1 if allocation counting is disabled.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Safe__ foreign import of @SDL_GetNumAllocations@.
+--                   The unsafe flavor is 'getNumAllocations'
+--                   .
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @SDL_GetNumAllocations@, defined at @SDL3\/SDL_stdinc.h 1635:33@
+getNumAllocationsSafe :: IO BG.Int32
+getNumAllocationsSafe =
+  fmap Coerce.coerce Safe.sDL_GetNumAllocations
+
+-- | Get the process environment.
+--
+--     This is initialized at application start and is not affected by setenv() and unsetenv() calls after that point. Use @'setEnvironmentVariable'@ and @'unsetEnvironmentVariable'@ if you want to modify this environment, or @'SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_setenv_unsafe'@ or @'SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_unsetenv_unsafe'@ if you want changes to persist in the C runtime environment after 'SDL3.Sys.Init.quit'.
+--
+--     [Returns]: a pointer to the environment for the process or NULL on failure; call 'SDL3.Sys.Error.getError' for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'getEnvironmentVariable', 'getEnvironmentVariables', 'setEnvironmentVariable', 'unsetEnvironmentVariable'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @SDL_GetEnvironment@.
+--                   The safe flavor is 'getEnvironmentSafe'
+--                   .
+--
+--     [C declaration]: @SDL_GetEnvironment@, defined at @SDL3\/SDL_stdinc.h 1673:47@
+getEnvironment :: IO (BG.Ptr SDL_Environment)
+getEnvironment = Unsafe.sDL_GetEnvironment
+
+-- | Get the process environment.
+--
+--     This is initialized at application start and is not affected by setenv() and unsetenv() calls after that point. Use @'setEnvironmentVariable'@ and @'unsetEnvironmentVariable'@ if you want to modify this environment, or @'SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_setenv_unsafe'@ or @'SDL3.Sys.Bindgen.Stdinc.Unsafe.sDL_unsetenv_unsafe'@ if you want changes to persist in the C runtime environment after 'SDL3.Sys.Init.quit'.
+--
+--     [Returns]: a pointer to the environment for the process or NULL on failure; call 'SDL3.Sys.Error.getError' for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'getEnvironmentVariable', 'getEnvironmentVariables', 'setEnvironmentVariable', 'unsetEnvironmentVariable'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Safe__ foreign import of @SDL_GetEnvironment@.
+--                   The unsafe flavor is 'getEnvironment'
+--                   .
+--
+--     [C declaration]: @SDL_GetEnvironment@, defined at @SDL3\/SDL_stdinc.h 1673:47@
+getEnvironmentSafe :: IO (BG.Ptr SDL_Environment)
+getEnvironmentSafe = Safe.sDL_GetEnvironment
+
+-- | Create a set of environment variables
+--
+--     [Returns]: a pointer to the new environment or NULL on failure; call 'SDL3.Sys.Error.getError' for more information.
+--
+--     [Thread safety]: If @populated@ is false, it is safe to call this function from any thread, otherwise it is safe if no other threads are calling setenv() or unsetenv()
+--
+--     @since 3.2.0
+--
+--     [See also]: 'getEnvironmentVariable', 'getEnvironmentVariables', 'setEnvironmentVariable', 'unsetEnvironmentVariable', 'destroyEnvironment'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @SDL_CreateEnvironment@.
+--                   The safe flavor is 'createEnvironmentSafe'
+--                   .
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @SDL_CreateEnvironment@, defined at @SDL3\/SDL_stdinc.h 1695:47@
+createEnvironment
+  :: Bool
+  -- ^
+  --
+  --           [@populated@]: true to initialize it from the C runtime environment, false to create an empty environment.
+  -> IO (BG.Ptr SDL_Environment)
+createEnvironment =
+  \x00 ->
+    Unsafe.sDL_CreateEnvironment (CBool.fromBool x00)
+
+-- | Create a set of environment variables
+--
+--     [Returns]: a pointer to the new environment or NULL on failure; call 'SDL3.Sys.Error.getError' for more information.
+--
+--     [Thread safety]: If @populated@ is false, it is safe to call this function from any thread, otherwise it is safe if no other threads are calling setenv() or unsetenv()
+--
+--     @since 3.2.0
+--
+--     [See also]: 'getEnvironmentVariable', 'getEnvironmentVariables', 'setEnvironmentVariable', 'unsetEnvironmentVariable', 'destroyEnvironment'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Safe__ foreign import of @SDL_CreateEnvironment@.
+--                   The unsafe flavor is 'createEnvironment'
+--                   .
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @SDL_CreateEnvironment@, defined at @SDL3\/SDL_stdinc.h 1695:47@
+createEnvironmentSafe
+  :: Bool
+  -- ^
+  --
+  --           [@populated@]: true to initialize it from the C runtime environment, false to create an empty environment.
+  -> IO (BG.Ptr SDL_Environment)
+createEnvironmentSafe =
+  \x00 ->
+    Safe.sDL_CreateEnvironment (CBool.fromBool x00)
+
+-- | Get the value of a variable in the environment.
+--
+--     [Returns]: a pointer to the value of the variable or NULL if it can\'t be found.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'getEnvironment', 'createEnvironment', 'getEnvironmentVariables', 'setEnvironmentVariable', 'unsetEnvironmentVariable'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @SDL_GetEnvironmentVariable@.
+--                   The safe flavor is 'getEnvironmentVariableSafe'
+--                   .
+--
+--     [C declaration]: @SDL_GetEnvironmentVariable@, defined at @SDL3\/SDL_stdinc.h 1715:42@
+getEnvironmentVariable
+  :: BG.Ptr SDL_Environment
+  -- ^
+  --
+  --           [@env@]: the environment to query.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@name@]: the name of the variable to get.
+  -> IO (PtrConst.PtrConst BG.CChar)
+getEnvironmentVariable =
+  Unsafe.sDL_GetEnvironmentVariable
+
+-- | Get the value of a variable in the environment.
+--
+--     [Returns]: a pointer to the value of the variable or NULL if it can\'t be found.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'getEnvironment', 'createEnvironment', 'getEnvironmentVariables', 'setEnvironmentVariable', 'unsetEnvironmentVariable'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Safe__ foreign import of @SDL_GetEnvironmentVariable@.
+--                   The unsafe flavor is 'getEnvironmentVariable'
+--                   .
+--
+--     [C declaration]: @SDL_GetEnvironmentVariable@, defined at @SDL3\/SDL_stdinc.h 1715:42@
+getEnvironmentVariableSafe
+  :: BG.Ptr SDL_Environment
+  -- ^
+  --
+  --           [@env@]: the environment to query.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@name@]: the name of the variable to get.
+  -> IO (PtrConst.PtrConst BG.CChar)
+getEnvironmentVariableSafe =
+  Safe.sDL_GetEnvironmentVariable
+
+-- | Get all variables in the environment.
+--
+--     [Returns]: a NULL terminated array of pointers to environment variables in the form \"variable=value\" or NULL on failure; call 'SDL3.Sys.Error.getError' for more information. This is a single allocation that should be freed with @'free'@ when it is no longer needed.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'getEnvironment', 'createEnvironment', 'getEnvironmentVariables', 'setEnvironmentVariable', 'unsetEnvironmentVariable'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @SDL_GetEnvironmentVariables@.
+--                   The safe flavor is 'getEnvironmentVariablesSafe'
+--                   .
+--
+--     [C declaration]: @SDL_GetEnvironmentVariables@, defined at @SDL3\/SDL_stdinc.h 1736:37@
+getEnvironmentVariables
+  :: BG.Ptr SDL_Environment
+  -- ^
+  --
+  --           [@env@]: the environment to query.
+  -> IO (BG.Ptr (BG.Ptr BG.CChar))
+getEnvironmentVariables =
+  Unsafe.sDL_GetEnvironmentVariables
+
+-- | Get all variables in the environment.
+--
+--     [Returns]: a NULL terminated array of pointers to environment variables in the form \"variable=value\" or NULL on failure; call 'SDL3.Sys.Error.getError' for more information. This is a single allocation that should be freed with @'free'@ when it is no longer needed.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'getEnvironment', 'createEnvironment', 'getEnvironmentVariables', 'setEnvironmentVariable', 'unsetEnvironmentVariable'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Safe__ foreign import of @SDL_GetEnvironmentVariables@.
+--                   The unsafe flavor is 'getEnvironmentVariables'
+--                   .
+--
+--     [C declaration]: @SDL_GetEnvironmentVariables@, defined at @SDL3\/SDL_stdinc.h 1736:37@
+getEnvironmentVariablesSafe
+  :: BG.Ptr SDL_Environment
+  -- ^
+  --
+  --           [@env@]: the environment to query.
+  -> IO (BG.Ptr (BG.Ptr BG.CChar))
+getEnvironmentVariablesSafe =
+  Safe.sDL_GetEnvironmentVariables
+
+-- | Set the value of a variable in the environment.
+--
+--     [Returns]: true on success or false on failure; call 'SDL3.Sys.Error.getError' for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'getEnvironment', 'createEnvironment', 'getEnvironmentVariable', 'getEnvironmentVariables', 'unsetEnvironmentVariable'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @SDL_SetEnvironmentVariable@.
+--                   The safe flavor is 'setEnvironmentVariableSafe'
+--                   .
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @SDL_SetEnvironmentVariable@, defined at @SDL3\/SDL_stdinc.h 1760:34@
+setEnvironmentVariable
+  :: BG.Ptr SDL_Environment
+  -- ^
+  --
+  --           [@env@]: the environment to modify.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@name@]: the name of the variable to set.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@value@]: the value of the variable to set.
+  -> Bool
+  -- ^
+  --
+  --           [@overwrite@]: true to overwrite the variable if it exists, false to return success without setting the variable if it already exists.
+  -> IO Bool
+setEnvironmentVariable =
+  \x00 ->
+    \x11 ->
+      \x22 ->
+        \x33 ->
+          fmap CBool.toBool (Unsafe.sDL_SetEnvironmentVariable x00 x11 x22 (CBool.fromBool x33))
+
+-- | Set the value of a variable in the environment.
+--
+--     [Returns]: true on success or false on failure; call 'SDL3.Sys.Error.getError' for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'getEnvironment', 'createEnvironment', 'getEnvironmentVariable', 'getEnvironmentVariables', 'unsetEnvironmentVariable'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Safe__ foreign import of @SDL_SetEnvironmentVariable@.
+--                   The unsafe flavor is 'setEnvironmentVariable'
+--                   .
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @SDL_SetEnvironmentVariable@, defined at @SDL3\/SDL_stdinc.h 1760:34@
+setEnvironmentVariableSafe
+  :: BG.Ptr SDL_Environment
+  -- ^
+  --
+  --           [@env@]: the environment to modify.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@name@]: the name of the variable to set.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@value@]: the value of the variable to set.
+  -> Bool
+  -- ^
+  --
+  --           [@overwrite@]: true to overwrite the variable if it exists, false to return success without setting the variable if it already exists.
+  -> IO Bool
+setEnvironmentVariableSafe =
+  \x00 ->
+    \x11 ->
+      \x22 ->
+        \x33 ->
+          fmap CBool.toBool (Safe.sDL_SetEnvironmentVariable x00 x11 x22 (CBool.fromBool x33))
+
+-- | Clear a variable from the environment.
+--
+--     [Returns]: true on success or false on failure; call 'SDL3.Sys.Error.getError' for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'getEnvironment', 'createEnvironment', 'getEnvironmentVariable', 'getEnvironmentVariables', 'setEnvironmentVariable', 'unsetEnvironmentVariable'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @SDL_UnsetEnvironmentVariable@.
+--                   The safe flavor is 'unsetEnvironmentVariableSafe'
+--                   .
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @SDL_UnsetEnvironmentVariable@, defined at @SDL3\/SDL_stdinc.h 1781:34@
+unsetEnvironmentVariable
+  :: BG.Ptr SDL_Environment
+  -- ^
+  --
+  --           [@env@]: the environment to modify.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@name@]: the name of the variable to unset.
+  -> IO Bool
+unsetEnvironmentVariable =
+  \x00 ->
+    \x11 ->
+      fmap CBool.toBool (Unsafe.sDL_UnsetEnvironmentVariable x00 x11)
+
+-- | Clear a variable from the environment.
+--
+--     [Returns]: true on success or false on failure; call 'SDL3.Sys.Error.getError' for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'getEnvironment', 'createEnvironment', 'getEnvironmentVariable', 'getEnvironmentVariables', 'setEnvironmentVariable', 'unsetEnvironmentVariable'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Safe__ foreign import of @SDL_UnsetEnvironmentVariable@.
+--                   The unsafe flavor is 'unsetEnvironmentVariable'
+--                   .
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @SDL_UnsetEnvironmentVariable@, defined at @SDL3\/SDL_stdinc.h 1781:34@
+unsetEnvironmentVariableSafe
+  :: BG.Ptr SDL_Environment
+  -- ^
+  --
+  --           [@env@]: the environment to modify.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@name@]: the name of the variable to unset.
+  -> IO Bool
+unsetEnvironmentVariableSafe =
+  \x00 ->
+    \x11 ->
+      fmap CBool.toBool (Safe.sDL_UnsetEnvironmentVariable x00 x11)
+
+-- | Destroy a set of environment variables.
+--
+--     [Thread safety]: It is safe to call this function from any thread, as long as the environment is no longer in use.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'createEnvironment'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @SDL_DestroyEnvironment@.
+--                   The safe flavor is 'destroyEnvironmentSafe'
+--                   .
+--
+--     [C declaration]: @SDL_DestroyEnvironment@, defined at @SDL3\/SDL_stdinc.h 1795:34@
+destroyEnvironment
+  :: BG.Ptr SDL_Environment
+  -- ^
+  --
+  --           [@env@]: the environment to destroy.
+  -> IO ()
+destroyEnvironment = Unsafe.sDL_DestroyEnvironment
+
+-- | Destroy a set of environment variables.
+--
+--     [Thread safety]: It is safe to call this function from any thread, as long as the environment is no longer in use.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'createEnvironment'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Safe__ foreign import of @SDL_DestroyEnvironment@.
+--                   The unsafe flavor is 'destroyEnvironment'
+--                   .
+--
+--     [C declaration]: @SDL_DestroyEnvironment@, defined at @SDL3\/SDL_stdinc.h 1795:34@
+destroyEnvironmentSafe
+  :: BG.Ptr SDL_Environment
+  -- ^
+  --
+  --           [@env@]: the environment to destroy.
+  -> IO ()
+destroyEnvironmentSafe = Safe.sDL_DestroyEnvironment
+
+-- | Allocate a copy of a string.
+--
+--     This allocates enough space for a null-terminated copy of @str@, using 'malloc', and then makes a copy of the string into this space.
+--
+--     The returned string is owned by the caller, and should be passed to 'free' when no longer needed.
+--
+--     [Returns]: a pointer to the newly-allocated string.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @SDL_strdup@.
+--                   The safe flavor is 'strdupSafe'
+--                   .
+--
+--     [C declaration]: @SDL_strdup@, defined at @SDL3\/SDL_stdinc.h 3164:47@
+strdup
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: the string to copy.
+  -> IO (BG.Ptr BG.CChar)
+strdup = Unsafe.sDL_strdup
+
+-- | Allocate a copy of a string.
+--
+--     This allocates enough space for a null-terminated copy of @str@, using 'malloc', and then makes a copy of the string into this space.
+--
+--     The returned string is owned by the caller, and should be passed to 'free' when no longer needed.
+--
+--     [Returns]: a pointer to the newly-allocated string.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Safe__ foreign import of @SDL_strdup@.
+--                   The unsafe flavor is 'strdup'
+--                   .
+--
+--     [C declaration]: @SDL_strdup@, defined at @SDL3\/SDL_stdinc.h 3164:47@
+strdupSafe
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: the string to copy.
+  -> IO (BG.Ptr BG.CChar)
+strdupSafe = Safe.sDL_strdup
+
+-- | Allocate a copy of a string, up to n characters.
+--
+--     This allocates enough space for a null-terminated copy of @str@, up to @maxlen@ bytes, using 'malloc', and then makes a copy of the string into this space.
+--
+--     If the string is longer than @maxlen@ bytes, the returned string will be @maxlen@ bytes long, plus a null-terminator character that isn\'t included in the count.
+--
+--     The returned string is owned by the caller, and should be passed to 'free' when no longer needed.
+--
+--     [Returns]: a pointer to the newly-allocated string.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @SDL_strndup@.
+--                   The safe flavor is 'strndupSafe'
+--                   .
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @SDL_strndup@, defined at @SDL3\/SDL_stdinc.h 3189:47@
+strndup
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: the string to copy.
+  -> BG.Word64
+  -- ^
+  --
+  --           [@maxlen@]: the maximum length of the copied string, not counting the null-terminator character.
+  -> IO (BG.Ptr BG.CChar)
+strndup =
+  \x00 ->
+    \x11 -> Unsafe.sDL_strndup x00 (Coerce.coerce x11)
+
+-- | Allocate a copy of a string, up to n characters.
+--
+--     This allocates enough space for a null-terminated copy of @str@, up to @maxlen@ bytes, using 'malloc', and then makes a copy of the string into this space.
+--
+--     If the string is longer than @maxlen@ bytes, the returned string will be @maxlen@ bytes long, plus a null-terminator character that isn\'t included in the count.
+--
+--     The returned string is owned by the caller, and should be passed to 'free' when no longer needed.
+--
+--     [Returns]: a pointer to the newly-allocated string.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Safe__ foreign import of @SDL_strndup@.
+--                   The unsafe flavor is 'strndup'
+--                   .
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @SDL_strndup@, defined at @SDL3\/SDL_stdinc.h 3189:47@
+strndupSafe
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@str@]: the string to copy.
+  -> BG.Word64
+  -- ^
+  --
+  --           [@maxlen@]: the maximum length of the copied string, not counting the null-terminator character.
+  -> IO (BG.Ptr BG.CChar)
+strndupSafe =
+  \x00 ->
+    \x11 -> Safe.sDL_strndup x00 (Coerce.coerce x11)
+
+-- | Decode a UTF-8 string, one Unicode codepoint at a time.
+--
+--     This will return the first Unicode codepoint in the UTF-8 encoded string in @*pstr@, and then advance @*pstr@ past any consumed bytes before returning.
+--
+--     It will not access more than @*pslen@ bytes from the string. @*pslen@ will be adjusted, as well, subtracting the number of bytes consumed.
+--
+--     @pslen@ is allowed to be NULL, in which case the string /must/ be NULL-terminated, as the function will blindly read until it sees the NULL char.
+--
+--     if @*pslen@ is zero, it assumes the end of string is reached and returns a zero codepoint regardless of the contents of the string buffer.
+--
+--     If the resulting codepoint is zero (a NULL terminator), or @*pslen@ is zero, it will not advance @*pstr@ or @*pslen@ at all.
+--
+--     Generally this function is called in a loop until it returns zero, adjusting its parameters each iteration.
+--
+--     If an invalid UTF-8 sequence is encountered, this function returns SDL_INVALID_UNICODE_CODEPOINT and advances the string\/length by one byte (which is to say, a multibyte sequence might produce several SDL_INVALID_UNICODE_CODEPOINT returns before it syncs to the next valid UTF-8 sequence).
+--
+--     Several things can generate invalid UTF-8 sequences, including overlong encodings, the use of UTF-16 surrogate values, and truncated data. Please refer to [RFC3629](https://www.ietf.org/rfc/rfc3629.txt) for details.
+--
+--     [Returns]: the first Unicode codepoint in the string.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @SDL_StepUTF8@.
+--                   The safe import is not exported
+--                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @SDL_StepUTF8@, defined at @SDL3\/SDL_stdinc.h 4030:36@
+stepUTF8
+  :: BG.Ptr (PtrConst.PtrConst BG.CChar)
+  -- ^
+  --
+  --           [@pstr@]: a pointer to a UTF-8 string pointer to be read and adjusted.
+  -> BG.Ptr HsBindgen.Runtime.LibC.CSize
+  -- ^
+  --
+  --           [@pslen@]: a pointer to the number of bytes in the string, to be read and adjusted. NULL is allowed.
+  -> IO BG.Word32
+stepUTF8 =
+  \x00 ->
+    \x11 ->
+      fmap Coerce.coerce (Unsafe.sDL_StepUTF8 x00 x11)
+
+-- | Decode a UTF-8 string in reverse, one Unicode codepoint at a time.
+--
+--     This will go to the start of the previous Unicode codepoint in the string, move @*pstr@ to that location and return that codepoint.
+--
+--     If @*pstr@ is already at the start of the string), it will not advance @*pstr@ at all.
+--
+--     Generally this function is called in a loop until it returns zero, adjusting its parameter each iteration.
+--
+--     If an invalid UTF-8 sequence is encountered, this function returns SDL_INVALID_UNICODE_CODEPOINT.
+--
+--     Several things can generate invalid UTF-8 sequences, including overlong encodings, the use of UTF-16 surrogate values, and truncated data. Please refer to [RFC3629](https://www.ietf.org/rfc/rfc3629.txt) for details.
+--
+--     [Returns]: the previous Unicode codepoint in the string.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @SDL_StepBackUTF8@.
+--                   The safe import is not exported
+--                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @SDL_StepBackUTF8@, defined at @SDL3\/SDL_stdinc.h 4061:36@
+stepBackUTF8
+  :: PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@start@]: a pointer to the beginning of the UTF-8 string.
+  -> BG.Ptr (PtrConst.PtrConst BG.CChar)
+  -- ^
+  --
+  --           [@pstr@]: a pointer to a UTF-8 string pointer to be read and adjusted.
+  -> IO BG.Word32
+stepBackUTF8 =
+  \x00 ->
+    \x11 ->
+      fmap Coerce.coerce (Unsafe.sDL_StepBackUTF8 x00 x11)
+
+-- | Convert a single Unicode codepoint to UTF-8.
+--
+--     The buffer pointed to by @dst@ must be at least 4 bytes long, as this function may generate between 1 and 4 bytes of output.
+--
+--     This function returns the first byte /after/ the newly-written UTF-8 sequence, which is useful for encoding multiple codepoints in a loop, or knowing where to write a NULL-terminator character to end the string (in either case, plan to have a buffer of /more/ than 4 bytes!).
+--
+--     If @codepoint@ is an invalid value (outside the Unicode range, or a UTF-16 surrogate value, etc), this will use U+FFFD (REPLACEMENT CHARACTER) for the codepoint instead, and not set an error.
+--
+--     If @dst@ is NULL, this returns NULL immediately without writing to the pointer and without setting an error.
+--
+--     [Returns]: the first byte past the newly-written UTF-8 sequence.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @SDL_UCS4ToUTF8@.
+--                   The safe import is not exported
+--                   : string computation over caller memory with no allocation; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @SDL_UCS4ToUTF8@, defined at @SDL3\/SDL_stdinc.h 4090:36@
+ucs4ToUTF8
+  :: BG.Word32
+  -- ^
+  --
+  --           [@codepoint@]: a Unicode codepoint to convert to UTF-8.
+  -> BG.Ptr BG.CChar
+  -- ^
+  --
+  --           [@dst@]: the location to write the encoded UTF-8. Must point to at least 4 bytes!
+  -> IO (BG.Ptr BG.CChar)
+ucs4ToUTF8 =
+  \x00 ->
+    \x11 -> Unsafe.sDL_UCS4ToUTF8 (Coerce.coerce x00) x11
+
+-- | Define a four character code as a Uint32.
+--
+--     The SDL_FOURCC macro as a function.
+--
+--     [Returns]: the four characters converted into a Uint32, one character per-byte.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_FOURCC@.
+--                   The safe import is not exported
+--                   : pure bit manipulation on immediate values; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_FOURCC@, defined at @sdl3-bindgen-sys\/SDL_stdinc_shims.h 40:26@
+fourCC
+  :: BG.Word8
+  -- ^
+  --
+  --           [@a@]: the first ASCII character.
+  -> BG.Word8
+  -- ^
+  --
+  --           [@b@]: the second ASCII character.
+  -> BG.Word8
+  -- ^
+  --
+  --           [@c@]: the third ASCII character.
+  -> BG.Word8
+  -- ^
+  --
+  --           [@d@]: the fourth ASCII character.
+  -> IO BG.Word32
+fourCC =
+  \x00 ->
+    \x11 ->
+      \x22 ->
+        \x33 ->
+          fmap
+            Coerce.coerce
+            ( Unsafe.lithon_SDL_FOURCC
+                (Coerce.coerce x00)
+                (Coerce.coerce x11)
+                (Coerce.coerce x22)
+                (Coerce.coerce x33)
+            )
+
+-- | Typed constant for macro @SDL_MAX_TIME@.
+pattern SDL_MAX_TIME :: SDL_Time
+pattern SDL_MAX_TIME = SDL_Time 9223372036854775807
+
+-- | Typed constant for macro @SDL_MIN_TIME@.
+pattern SDL_MIN_TIME :: SDL_Time
+pattern SDL_MIN_TIME <- SDL_Time (-9223372036854775808)
+ where
+  SDL_MIN_TIME = SDL_Time (-9223372036854775808)
+
+-- | Typed constant for macro @SDL_MAX_SINT16@.
+pattern SDL_MAX_SINT16 :: Sint16
+pattern SDL_MAX_SINT16 = Sint16 32767
+
+-- | Typed constant for macro @SDL_MIN_SINT16@.
+pattern SDL_MIN_SINT16 :: Sint16
+pattern SDL_MIN_SINT16 <- Sint16 (-32768)
+ where
+  SDL_MIN_SINT16 = Sint16 (-32768)
+
+-- | Typed constant for macro @SDL_MAX_SINT32@.
+pattern SDL_MAX_SINT32 :: Sint32
+pattern SDL_MAX_SINT32 = Sint32 2147483647
+
+-- | Typed constant for macro @SDL_MIN_SINT32@.
+pattern SDL_MIN_SINT32 :: Sint32
+pattern SDL_MIN_SINT32 <- Sint32 (-2147483648)
+ where
+  SDL_MIN_SINT32 = Sint32 (-2147483648)
+
+-- | Typed constant for macro @SDL_MAX_SINT64@.
+pattern SDL_MAX_SINT64 :: Sint64
+pattern SDL_MAX_SINT64 = Sint64 9223372036854775807
+
+-- | Typed constant for macro @SDL_MIN_SINT64@.
+pattern SDL_MIN_SINT64 :: Sint64
+pattern SDL_MIN_SINT64 <- Sint64 (-9223372036854775808)
+ where
+  SDL_MIN_SINT64 = Sint64 (-9223372036854775808)
+
+-- | Typed constant for macro @SDL_MAX_SINT8@.
+pattern SDL_MAX_SINT8 :: Sint8
+pattern SDL_MAX_SINT8 = Sint8 127
+
+-- | Typed constant for macro @SDL_MIN_SINT8@.
+pattern SDL_MIN_SINT8 :: Sint8
+pattern SDL_MIN_SINT8 <- Sint8 (-128)
+ where
+  SDL_MIN_SINT8 = Sint8 (-128)
+
+-- | Typed constant for macro @SDL_MAX_UINT16@.
+pattern SDL_MAX_UINT16 :: Uint16
+pattern SDL_MAX_UINT16 = Uint16 65535
+
+-- | Typed constant for macro @SDL_MIN_UINT16@.
+pattern SDL_MIN_UINT16 :: Uint16
+pattern SDL_MIN_UINT16 = Uint16 0
+
+-- | Typed constant for macro @SDL_MAX_UINT32@.
+pattern SDL_MAX_UINT32 :: Uint32
+pattern SDL_MAX_UINT32 = Uint32 4294967295
+
+-- | Typed constant for macro @SDL_MIN_UINT32@.
+pattern SDL_MIN_UINT32 :: Uint32
+pattern SDL_MIN_UINT32 = Uint32 0
+
+-- | Typed constant for macro @SDL_MAX_UINT64@.
+pattern SDL_MAX_UINT64 :: Uint64
+pattern SDL_MAX_UINT64 = Uint64 18446744073709551615
+
+-- | Typed constant for macro @SDL_MIN_UINT64@.
+pattern SDL_MIN_UINT64 :: Uint64
+pattern SDL_MIN_UINT64 = Uint64 0
+
+-- | Typed constant for macro @SDL_MAX_UINT8@.
+pattern SDL_MAX_UINT8 :: Uint8
+pattern SDL_MAX_UINT8 = Uint8 255
+
+-- | Typed constant for macro @SDL_MIN_UINT8@.
+pattern SDL_MIN_UINT8 :: Uint8
+pattern SDL_MIN_UINT8 = Uint8 0
+
+-- | Typed constant for macro @SDL_SIZE_MAX@ (C type @size_t@).
+pattern SDL_SIZE_MAX :: BG.Word64
+pattern SDL_SIZE_MAX = 18446744073709551615
+
+-- | Typed constant for macro @SDL_ICONV_ERROR@ (C type @size_t@).
+pattern SDL_ICONV_ERROR :: BG.Word64
+pattern SDL_ICONV_ERROR = 18446744073709551615
+
+-- | Typed constant for macro @SDL_ICONV_E2BIG@ (C type @size_t@).
+pattern SDL_ICONV_E2BIG :: BG.Word64
+pattern SDL_ICONV_E2BIG = 18446744073709551614
+
+-- | Typed constant for macro @SDL_ICONV_EILSEQ@ (C type @size_t@).
+pattern SDL_ICONV_EILSEQ :: BG.Word64
+pattern SDL_ICONV_EILSEQ = 18446744073709551613
+
+-- | Typed constant for macro @SDL_ICONV_EINVAL@ (C type @size_t@).
+pattern SDL_ICONV_EINVAL :: BG.Word64
+pattern SDL_ICONV_EINVAL = 18446744073709551612
diff --git a/src/SDL3/Sys/Storage.hs b/src/SDL3/Sys/Storage.hs
--- a/src/SDL3/Sys/Storage.hs
+++ b/src/SDL3/Sys/Storage.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | The storage API is a high-level API designed to abstract away the portability issues that come up when using something lower-level (in SDL\'s case, this sits on top of the [Filesystem](https:\/\/wiki.libsdl.org\/SDL3\/CategoryFilesystem) and [IOStream](https:\/\/wiki.libsdl.org\/SDL3\/CategoryIOStream) subsystems). It is significantly more restrictive than a typical filesystem API, for a number of reasons:
 --
 --     1. __What to Access:__ A common pitfall with existing filesystem APIs is the assumption that all storage is monolithic. However, many other platforms (game consoles in particular) are more strict about what /type/ of filesystem is being accessed; for example, game content and user data are usually two separate storage devices with entirely different characteristics (and possibly different low-level APIs altogether!).
@@ -221,6 +223,7 @@
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (Bool, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
diff --git a/src/SDL3/Sys/Surface.hs b/src/SDL3/Sys/Surface.hs
--- a/src/SDL3/Sys/Surface.hs
+++ b/src/SDL3/Sys/Surface.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | SDL surfaces are buffers of pixels in system RAM. These are useful for passing around and manipulating images that are not stored in GPU memory.
 --
@@ -14,6 +15,8 @@
 --
 --     Unsuffixed aliases are __unsafe__ foreign imports; aliases suffixed @Safe@ are safe. Functions whose callbacks fire during the call export only the Safe alias (the genuine unsafe import stays reachable under @SDL3.Sys.Bindgen.Surface.Unsafe@); functions curated unsafe-only export only the unsuffixed one. Each alias\'s documentation records its flavor and rationale.
 --
+--     The C shims are functions this package defines in C over what the FFI cannot call directly (variadic functions, function-like macros), each named after what it wraps; the same flavor rules apply. Their raw imports live under "SDL3.Sys.Bindgen.SurfaceShims".
+--
 --     Full conventions: "SDL3.Sys".
 module SDL3.Sys.Surface (
   module SDL3.Sys.Bindgen.Surface,
@@ -155,10 +158,14 @@
   SDL3.Sys.Surface.writeSurfacePixelSafe,
   SDL3.Sys.Surface.writeSurfacePixelFloat,
   SDL3.Sys.Surface.writeSurfacePixelFloatSafe,
+
+  -- * C shims
+  SDL3.Sys.Surface.mustLock,
 )
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (Bool, Float, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.LibC qualified
@@ -171,8 +178,10 @@
 import SDL3.Sys.Bindgen.Rect qualified
 import SDL3.Sys.Bindgen.Stdinc qualified
 import SDL3.Sys.Bindgen.Surface
+import SDL3.Sys.Bindgen.Surface qualified
 import SDL3.Sys.Bindgen.Surface.Safe qualified as Safe
 import SDL3.Sys.Bindgen.Surface.Unsafe qualified as Unsafe
+import SDL3.Sys.Bindgen.SurfaceShims.Unsafe qualified as Unsafe
 
 -- | Allocate a new surface with a specific pixel format.
 --
@@ -1088,7 +1097,7 @@
 --
 --     @since 3.2.0
 --
---     [See also]: @SDL_MUSTLOCK@, 'unlockSurface'
+--     [See also]: @'mustLock'@, 'unlockSurface'
 --
 --     === __@sdl3-bindgen-sys@ notes__
 --
@@ -1122,7 +1131,7 @@
 --
 --     @since 3.2.0
 --
---     [See also]: @SDL_MUSTLOCK@, 'unlockSurface'
+--     [See also]: @'mustLock'@, 'unlockSurface'
 --
 --     === __@sdl3-bindgen-sys@ notes__
 --
@@ -5984,6 +5993,36 @@
                       (Coerce.coerce x55)
                       (Coerce.coerce x66)
                   )
+
+-- | Determine whether a surface needs to be locked before its pixels are accessed.
+--
+--     The SDL_MUSTLOCK macro as a function.
+--
+--     [Returns]: true if the surface must be locked with 'lockSurface' before its pixels are read or written, false otherwise.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'lockSurface', 'unlockSurface'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_MUSTLOCK@.
+--                   The safe import is not exported
+--                   : reads one field of the caller\'s surface; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_MUSTLOCK@, defined at @sdl3-bindgen-sys\/SDL_surface_shims.h 39:24@
+mustLock
+  :: BG.Ptr SDL3.Sys.Bindgen.Surface.SDL_Surface
+  -- ^
+  --
+  --           [@surface@]: the SDL_Surface to check.
+  -> IO Bool
+mustLock =
+  \x00 ->
+    fmap CBool.toBool (Unsafe.lithon_SDL_MUSTLOCK x00)
 
 -- | Typed constant for macro @SDL_SURFACE_PREALLOCATED@. Combine with @.|.@ from "Data.Bits".
 pattern SDL_SURFACE_PREALLOCATED :: SDL_SurfaceFlags
diff --git a/src/SDL3/Sys/System.hs b/src/SDL3/Sys/System.hs
--- a/src/SDL3/Sys/System.hs
+++ b/src/SDL3/Sys/System.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | Platform-specific SDL API functions.
 --
 --     == FFI conventions
@@ -37,6 +39,7 @@
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (Bool, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.LibC qualified
diff --git a/src/SDL3/Sys/Thread.hs b/src/SDL3/Sys/Thread.hs
--- a/src/SDL3/Sys/Thread.hs
+++ b/src/SDL3/Sys/Thread.hs
@@ -1,8 +1,10 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | SDL offers cross-platform thread management functions. These are mostly concerned with starting threads, setting their priority, and dealing with their termination.
 --
 --     In addition, there is support for Thread Local Storage (data that is unique to each thread, but accessed from a single key).
 --
---     On platforms without thread support (such as Emscripten when built without pthreads), these functions still exist, but things like @SDL_CreateThread()@ will report failure without doing anything.
+--     On platforms without thread support (such as Emscripten when built without pthreads), these functions still exist, but things like @'createThread'@ will report failure without doing anything.
 --
 --     If you\'re going to work with threads, you almost certainly need to have a good understanding of thread safety measures: locking and synchronization mechanisms are handled by the functions in SDL_mutex.h. The SDL thread object.
 --
@@ -10,12 +12,14 @@
 --
 --     @since 3.2.0
 --
---     [See also]: @SDL_CreateThread@, 'waitThread'
+--     [See also]: @'createThread'@, 'waitThread'
 --
 --     == FFI conventions
 --
 --     Unsuffixed aliases are __unsafe__ foreign imports; aliases suffixed @Safe@ are safe. Functions whose callbacks fire during the call export only the Safe alias (the genuine unsafe import stays reachable under @SDL3.Sys.Bindgen.Thread.Unsafe@); functions curated unsafe-only export only the unsuffixed one. Each alias\'s documentation records its flavor and rationale.
 --
+--     The C shims are functions this package defines in C over what the FFI cannot call directly (variadic functions, function-like macros), each named after what it wraps; the same flavor rules apply. Their raw imports live under "SDL3.Sys.Bindgen.ThreadShims".
+--
 --     Full conventions: "SDL3.Sys".
 module SDL3.Sys.Thread (
   module SDL3.Sys.Bindgen.Thread,
@@ -45,19 +49,30 @@
   SDL3.Sys.Thread.setTLSSafe,
   SDL3.Sys.Thread.cleanupTLS,
   SDL3.Sys.Thread.cleanupTLSSafe,
+
+  -- * C shims
+  SDL3.Sys.Thread.createThread,
+  SDL3.Sys.Thread.createThreadSafe,
+  SDL3.Sys.Thread.createThreadWithProperties,
+  SDL3.Sys.Thread.createThreadWithPropertiesSafe,
 )
 where
 
+import Prelude (Bool, IO, fmap)
+
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import SDL3.Sys.Bindgen.Properties qualified
 import SDL3.Sys.Bindgen.Stdinc qualified
 import SDL3.Sys.Bindgen.Thread
+import SDL3.Sys.Bindgen.Thread qualified
 import SDL3.Sys.Bindgen.Thread.Safe qualified as Safe
 import SDL3.Sys.Bindgen.Thread.Unsafe qualified as Unsafe
+import SDL3.Sys.Bindgen.ThreadShims.Safe qualified as Safe
+import SDL3.Sys.Bindgen.ThreadShims.Unsafe qualified as Unsafe
 
--- | The actual entry point for SDL_CreateThread.
+-- | The actual entry point for 'createThread'.
 --
 --     [Returns]: an opaque pointer to the new thread object on success, NULL if the new thread could not be created; call 'SDL3.Sys.Error.getError' for more information.
 --
@@ -96,7 +111,7 @@
   -> IO (BG.Ptr SDL_Thread)
 createThreadRuntime = Unsafe.sDL_CreateThreadRuntime
 
--- | The actual entry point for SDL_CreateThread.
+-- | The actual entry point for 'createThread'.
 --
 --     [Returns]: an opaque pointer to the new thread object on success, NULL if the new thread could not be created; call 'SDL3.Sys.Error.getError' for more information.
 --
@@ -136,7 +151,7 @@
 createThreadRuntimeSafe =
   Safe.sDL_CreateThreadRuntime
 
--- | The actual entry point for SDL_CreateThreadWithProperties.
+-- | The actual entry point for 'createThreadWithProperties'.
 --
 --     [Returns]: an opaque pointer to the new thread object on success, NULL if the new thread could not be created; call 'SDL3.Sys.Error.getError' for more information.
 --
@@ -168,7 +183,7 @@
 createThreadWithPropertiesRuntime =
   Unsafe.sDL_CreateThreadWithPropertiesRuntime
 
--- | The actual entry point for SDL_CreateThreadWithProperties.
+-- | The actual entry point for 'createThreadWithProperties'.
 --
 --     [Returns]: an opaque pointer to the new thread object on success, NULL if the new thread could not be created; call 'SDL3.Sys.Error.getError' for more information.
 --
@@ -200,7 +215,7 @@
 createThreadWithPropertiesRuntimeSafe =
   Safe.sDL_CreateThreadWithPropertiesRuntime
 
--- | Get the thread name as it was specified in @SDL_CreateThread()@.
+-- | Get the thread name as it was specified in @'createThread'@.
 --
 --     [Returns]: a pointer to a UTF-8 string that names the specified thread, or NULL if it doesn\'t have a name.
 --
@@ -223,7 +238,7 @@
   -> IO (PtrConst.PtrConst BG.CChar)
 getThreadName = Unsafe.sDL_GetThreadName
 
--- | Get the thread name as it was specified in @SDL_CreateThread()@.
+-- | Get the thread name as it was specified in @'createThread'@.
 --
 --     [Returns]: a pointer to a UTF-8 string that names the specified thread, or NULL if it doesn\'t have a name.
 --
@@ -426,7 +441,7 @@
 --
 --     @since 3.2.0
 --
---     [See also]: @SDL_CreateThread@, 'detachThread'
+--     [See also]: @'createThread'@, 'detachThread'
 --
 --     === __@sdl3-bindgen-sys@ notes__
 --
@@ -439,7 +454,7 @@
   :: BG.Ptr SDL_Thread
   -- ^
   --
-  --           [@thread@]: the 'SDL_Thread' pointer that was returned from the @SDL_CreateThread()@ call that started this thread.
+  --           [@thread@]: the 'SDL_Thread' pointer that was returned from the @'createThread'@ call that started this thread.
   -> BG.Ptr BG.CInt
   -- ^
   --
@@ -465,7 +480,7 @@
 --
 --     @since 3.2.0
 --
---     [See also]: @SDL_CreateThread@, 'detachThread'
+--     [See also]: @'createThread'@, 'detachThread'
 --
 --     === __@sdl3-bindgen-sys@ notes__
 --
@@ -478,7 +493,7 @@
   :: BG.Ptr SDL_Thread
   -- ^
   --
-  --           [@thread@]: the 'SDL_Thread' pointer that was returned from the @SDL_CreateThread()@ call that started this thread.
+  --           [@thread@]: the 'SDL_Thread' pointer that was returned from the @'createThread'@ call that started this thread.
   -> BG.Ptr BG.CInt
   -- ^
   --
@@ -554,7 +569,7 @@
 --
 --     @since 3.2.0
 --
---     [See also]: @SDL_CreateThread@, 'waitThread'
+--     [See also]: @'createThread'@, 'waitThread'
 --
 --     === __@sdl3-bindgen-sys@ notes__
 --
@@ -567,7 +582,7 @@
   :: BG.Ptr SDL_Thread
   -- ^
   --
-  --           [@thread@]: the 'SDL_Thread' pointer that was returned from the @SDL_CreateThread()@ call that started this thread.
+  --           [@thread@]: the 'SDL_Thread' pointer that was returned from the @'createThread'@ call that started this thread.
   -> IO ()
 detachThread = Unsafe.sDL_DetachThread
 
@@ -589,7 +604,7 @@
 --
 --     @since 3.2.0
 --
---     [See also]: @SDL_CreateThread@, 'waitThread'
+--     [See also]: @'createThread'@, 'waitThread'
 --
 --     === __@sdl3-bindgen-sys@ notes__
 --
@@ -602,7 +617,7 @@
   :: BG.Ptr SDL_Thread
   -- ^
   --
-  --           [@thread@]: the 'SDL_Thread' pointer that was returned from the @SDL_CreateThread()@ call that started this thread.
+  --           [@thread@]: the 'SDL_Thread' pointer that was returned from the @'createThread'@ call that started this thread.
   -> IO ()
 detachThreadSafe = Safe.sDL_DetachThread
 
@@ -783,3 +798,165 @@
 --     [C declaration]: @SDL_CleanupTLS@, defined at @SDL3\/SDL_thread.h 594:34@
 cleanupTLSSafe :: IO ()
 cleanupTLSSafe = Safe.sDL_CleanupTLS
+
+-- | Create a new thread with a default stack size.
+--
+--     The SDL_CreateThread macro as a function. Like the macro, it calls 'createThreadRuntime' with the C runtime\'s thread entry and exit functions for the platform it is compiled on (@_beginthreadex@ and @_endthreadex@ on Windows, NULL elsewhere), so prefer it to calling 'createThreadRuntime' directly.
+--
+--     This is equivalent to calling 'createThreadWithProperties' with the following properties set:
+--
+--     * @SDL_PROP_THREAD_CREATE_ENTRY_FUNCTION_POINTER@: @fn@
+--
+--     * @SDL_PROP_THREAD_CREATE_NAME_STRING@: @name@
+--
+--     * @SDL_PROP_THREAD_CREATE_USERDATA_POINTER@: @data@
+--
+--     [Returns]: an opaque pointer to the new thread object on success, NULL if the new thread could not be created; call 'SDL3.Sys.Error.getError' for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'createThreadWithProperties', 'waitThread'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_CreateThread@.
+--                   The safe flavor is 'createThreadSafe'
+--                   : the entry function runs on the spawned thread, not during the call.
+--
+--     [C declaration]: @lithon_SDL_CreateThread@, defined at @sdl3-bindgen-sys\/SDL_thread_shims.h 54:31@
+createThread
+  :: SDL3.Sys.Bindgen.Thread.SDL_ThreadFunction
+  -- ^
+  --
+  --           [@fn@]: the SDL_ThreadFunction function to call in the new thread.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@name@]: the name of the thread.
+  -> BG.Ptr BG.Void
+  -- ^
+  --
+  --           [@data@]: a pointer that is passed to @fn@.
+  -> IO (BG.Ptr SDL3.Sys.Bindgen.Thread.SDL_Thread)
+createThread = Unsafe.lithon_SDL_CreateThread
+
+-- | Create a new thread with a default stack size.
+--
+--     The SDL_CreateThread macro as a function. Like the macro, it calls 'createThreadRuntime' with the C runtime\'s thread entry and exit functions for the platform it is compiled on (@_beginthreadex@ and @_endthreadex@ on Windows, NULL elsewhere), so prefer it to calling 'createThreadRuntime' directly.
+--
+--     This is equivalent to calling 'createThreadWithProperties' with the following properties set:
+--
+--     * @SDL_PROP_THREAD_CREATE_ENTRY_FUNCTION_POINTER@: @fn@
+--
+--     * @SDL_PROP_THREAD_CREATE_NAME_STRING@: @name@
+--
+--     * @SDL_PROP_THREAD_CREATE_USERDATA_POINTER@: @data@
+--
+--     [Returns]: an opaque pointer to the new thread object on success, NULL if the new thread could not be created; call 'SDL3.Sys.Error.getError' for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'createThreadWithProperties', 'waitThread'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Safe__ foreign import of @lithon_SDL_CreateThread@.
+--                   The unsafe flavor is 'createThread'
+--                   : the entry function runs on the spawned thread, not during the call.
+--
+--     [C declaration]: @lithon_SDL_CreateThread@, defined at @sdl3-bindgen-sys\/SDL_thread_shims.h 54:31@
+createThreadSafe
+  :: SDL3.Sys.Bindgen.Thread.SDL_ThreadFunction
+  -- ^
+  --
+  --           [@fn@]: the SDL_ThreadFunction function to call in the new thread.
+  -> PtrConst.PtrConst BG.CChar
+  -- ^
+  --
+  --           [@name@]: the name of the thread.
+  -> BG.Ptr BG.Void
+  -- ^
+  --
+  --           [@data@]: a pointer that is passed to @fn@.
+  -> IO (BG.Ptr SDL3.Sys.Bindgen.Thread.SDL_Thread)
+createThreadSafe = Safe.lithon_SDL_CreateThread
+
+-- | Create a new thread with the specified properties.
+--
+--     The SDL_CreateThreadWithProperties macro as a function, passing the C runtime\'s thread entry and exit functions like 'createThread' does.
+--
+--     These are the supported properties:
+--
+--     * @SDL_PROP_THREAD_CREATE_ENTRY_FUNCTION_POINTER@: an SDL_ThreadFunction value that will be called at the start of the new thread\'s life. Required.
+--
+--     * @SDL_PROP_THREAD_CREATE_NAME_STRING@: the name of the new thread, which might be available to debuggers. Optional, defaults to NULL.
+--
+--     * @SDL_PROP_THREAD_CREATE_USERDATA_POINTER@: an arbitrary app-defined pointer, which is passed to the entry function on the new thread, as its only parameter. Optional, defaults to NULL.
+--
+--     * @SDL_PROP_THREAD_CREATE_STACKSIZE_NUMBER@: the size, in bytes, of the new thread\'s stack. Optional, defaults to 0 (system-defined default).
+--
+--     [Returns]: an opaque pointer to the new thread object on success, NULL if the new thread could not be created; call 'SDL3.Sys.Error.getError' for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'createThread', 'waitThread'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_CreateThreadWithProperties@.
+--                   The safe flavor is 'createThreadWithPropertiesSafe'
+--                   : the entry function runs on the spawned thread, not during the call.
+--
+--     [C declaration]: @lithon_SDL_CreateThreadWithProperties@, defined at @sdl3-bindgen-sys\/SDL_thread_shims.h 90:31@
+createThreadWithProperties
+  :: SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
+  -- ^
+  --
+  --           [@props@]: the properties to use.
+  -> IO (BG.Ptr SDL3.Sys.Bindgen.Thread.SDL_Thread)
+createThreadWithProperties =
+  Unsafe.lithon_SDL_CreateThreadWithProperties
+
+-- | Create a new thread with the specified properties.
+--
+--     The SDL_CreateThreadWithProperties macro as a function, passing the C runtime\'s thread entry and exit functions like 'createThread' does.
+--
+--     These are the supported properties:
+--
+--     * @SDL_PROP_THREAD_CREATE_ENTRY_FUNCTION_POINTER@: an SDL_ThreadFunction value that will be called at the start of the new thread\'s life. Required.
+--
+--     * @SDL_PROP_THREAD_CREATE_NAME_STRING@: the name of the new thread, which might be available to debuggers. Optional, defaults to NULL.
+--
+--     * @SDL_PROP_THREAD_CREATE_USERDATA_POINTER@: an arbitrary app-defined pointer, which is passed to the entry function on the new thread, as its only parameter. Optional, defaults to NULL.
+--
+--     * @SDL_PROP_THREAD_CREATE_STACKSIZE_NUMBER@: the size, in bytes, of the new thread\'s stack. Optional, defaults to 0 (system-defined default).
+--
+--     [Returns]: an opaque pointer to the new thread object on success, NULL if the new thread could not be created; call 'SDL3.Sys.Error.getError' for more information.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     [See also]: 'createThread', 'waitThread'
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Safe__ foreign import of @lithon_SDL_CreateThreadWithProperties@.
+--                   The unsafe flavor is 'createThreadWithProperties'
+--                   : the entry function runs on the spawned thread, not during the call.
+--
+--     [C declaration]: @lithon_SDL_CreateThreadWithProperties@, defined at @sdl3-bindgen-sys\/SDL_thread_shims.h 90:31@
+createThreadWithPropertiesSafe
+  :: SDL3.Sys.Bindgen.Properties.SDL_PropertiesID
+  -- ^
+  --
+  --           [@props@]: the properties to use.
+  -> IO (BG.Ptr SDL3.Sys.Bindgen.Thread.SDL_Thread)
+createThreadWithPropertiesSafe =
+  Safe.lithon_SDL_CreateThreadWithProperties
diff --git a/src/SDL3/Sys/Time.hs b/src/SDL3/Sys/Time.hs
--- a/src/SDL3/Sys/Time.hs
+++ b/src/SDL3/Sys/Time.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | SDL realtime clock and date\/time routines.
 --
 --     There are two data types that are used in this category: SDL_Time, which represents the nanoseconds since a specific moment (an \"epoch\"), and 'SDL_DateTime', which breaks time down into human-understandable components: years, months, days, hours, etc.
@@ -37,6 +39,7 @@
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (Bool, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.LibC qualified
diff --git a/src/SDL3/Sys/Timer.hs b/src/SDL3/Sys/Timer.hs
--- a/src/SDL3/Sys/Timer.hs
+++ b/src/SDL3/Sys/Timer.hs
@@ -1,10 +1,12 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | SDL provides time management functionality. It is useful for dealing with (usually) small durations of time.
 --
 --     This is not to be confused with /calendar time/ management, which is provided by [CategoryTime](https:\/\/wiki.libsdl.org\/SDL3\/CategoryTime).
 --
 --     This category covers measuring time elapsed (@'getTicks'@, @'getPerformanceCounter'@), putting a thread to sleep for a certain amount of time (@'delay'@, @'delayNS'@, @'delayPrecise'@), and firing a callback function after a certain amount of time has elapsed (@'addTimer'@, etc).
 --
---     There are also useful macros to convert between time units, like @SDL_SECONDS_TO_NS()@ and such. Number of milliseconds in a second.
+--     There are also useful macros to convert between time units, like @'secondsToNs'@ and such. Number of milliseconds in a second.
 --
 --     This is always 1000.
 --
@@ -14,6 +16,8 @@
 --
 --     Unsuffixed aliases are __unsafe__ foreign imports; aliases suffixed @Safe@ are safe. Functions whose callbacks fire during the call export only the Safe alias (the genuine unsafe import stays reachable under @SDL3.Sys.Bindgen.Timer.Unsafe@); functions curated unsafe-only export only the unsuffixed one. Each alias\'s documentation records its flavor and rationale.
 --
+--     The C shims are functions this package defines in C over what the FFI cannot call directly (variadic functions, function-like macros), each named after what it wraps; the same flavor rules apply. Their raw imports live under "SDL3.Sys.Bindgen.TimerShims".
+--
 --     Full conventions: "SDL3.Sys".
 module SDL3.Sys.Timer (
   module SDL3.Sys.Bindgen.Timer,
@@ -35,10 +39,16 @@
   SDL3.Sys.Timer.addTimerNSSafe,
   SDL3.Sys.Timer.removeTimer,
   SDL3.Sys.Timer.removeTimerSafe,
+
+  -- * C shims
+  SDL3.Sys.Timer.secondsToNs,
+  SDL3.Sys.Timer.msToNs,
+  SDL3.Sys.Timer.usToNs,
 )
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (Bool, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.Support qualified as BG
@@ -46,6 +56,7 @@
 import SDL3.Sys.Bindgen.Timer
 import SDL3.Sys.Bindgen.Timer.Safe qualified as Safe
 import SDL3.Sys.Bindgen.Timer.Unsafe qualified as Unsafe
+import SDL3.Sys.Bindgen.TimerShims.Unsafe qualified as Unsafe
 
 -- | Get the number of milliseconds that have elapsed since the SDL library initialization.
 --
@@ -565,3 +576,93 @@
   -> IO Bool
 removeTimerSafe =
   \x00 -> fmap CBool.toBool (Safe.sDL_RemoveTimer x00)
+
+-- | Convert seconds to nanoseconds.
+--
+--     The SDL_SECONDS_TO_NS macro as a function. This only converts whole numbers, not fractional seconds.
+--
+--     [Returns]: @s@, expressed in nanoseconds.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_SECONDS_TO_NS@.
+--                   The safe import is not exported
+--                   : pure math on immediate values; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_SECONDS_TO_NS@, defined at @sdl3-bindgen-sys\/SDL_timer_shims.h 37:26@
+secondsToNs
+  :: BG.Word64
+  -- ^
+  --
+  --           [@s@]: the number of seconds to convert.
+  -> IO BG.Word64
+secondsToNs =
+  \x00 ->
+    fmap Coerce.coerce (Unsafe.lithon_SDL_SECONDS_TO_NS (Coerce.coerce x00))
+
+-- | Convert milliseconds to nanoseconds.
+--
+--     The SDL_MS_TO_NS macro as a function. This only converts whole numbers, not fractional milliseconds.
+--
+--     [Returns]: @ms@, expressed in nanoseconds.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_MS_TO_NS@.
+--                   The safe import is not exported
+--                   : pure math on immediate values; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_MS_TO_NS@, defined at @sdl3-bindgen-sys\/SDL_timer_shims.h 55:26@
+msToNs
+  :: BG.Word64
+  -- ^
+  --
+  --           [@ms@]: the number of milliseconds to convert.
+  -> IO BG.Word64
+msToNs =
+  \x00 ->
+    fmap Coerce.coerce (Unsafe.lithon_SDL_MS_TO_NS (Coerce.coerce x00))
+
+-- | Convert microseconds to nanoseconds.
+--
+--     The SDL_US_TO_NS macro as a function. This only converts whole numbers, not fractional microseconds.
+--
+--     [Returns]: @us@, expressed in nanoseconds.
+--
+--     [Thread safety]: It is safe to call this function from any thread.
+--
+--     @since 3.2.0
+--
+--     === __@sdl3-bindgen-sys@ notes__
+--
+--     [FFI safety]: __Unsafe__ foreign import of @lithon_SDL_US_TO_NS@.
+--                   The safe import is not exported
+--                   : pure math on immediate values; cannot block, lock, or call back.
+--
+--     [Scalars]: The binding generation has mapped C scalars to native Haskell scalars for this function.
+--                Pointers and structs are untouched by this best-effort mapping. Higher-level bindings are expected to map structs and pointers as appropriate.
+--
+--     [C declaration]: @lithon_SDL_US_TO_NS@, defined at @sdl3-bindgen-sys\/SDL_timer_shims.h 73:26@
+usToNs
+  :: BG.Word64
+  -- ^
+  --
+  --           [@us@]: the number of microseconds to convert.
+  -> IO BG.Word64
+usToNs =
+  \x00 ->
+    fmap Coerce.coerce (Unsafe.lithon_SDL_US_TO_NS (Coerce.coerce x00))
diff --git a/src/SDL3/Sys/Touch.hs b/src/SDL3/Sys/Touch.hs
--- a/src/SDL3/Sys/Touch.hs
+++ b/src/SDL3/Sys/Touch.hs
@@ -1,3 +1,6 @@
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | SDL offers touch input, on platforms that support it. It can manage multiple touch devices and track multiple fingers on those devices.
 --
 --     Touches are mostly dealt with through the event system, in the SDL_EVENT_FINGER_DOWN, SDL_EVENT_FINGER_MOTION, and SDL_EVENT_FINGER_UP events, but there are also functions to query for hardware details, etc.
@@ -18,6 +21,10 @@
 module SDL3.Sys.Touch (
   module SDL3.Sys.Bindgen.Touch,
 
+  -- * Typed constants
+  pattern SDL3.Sys.Touch.SDL_MOUSE_TOUCHID,
+  pattern SDL3.Sys.Touch.SDL_PEN_TOUCHID,
+
   -- * Function aliases
   SDL3.Sys.Touch.getTouchDevices,
   SDL3.Sys.Touch.getTouchDevicesSafe,
@@ -30,6 +37,8 @@
 )
 where
 
+import Prelude (IO)
+
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
 import HsBindgen.Runtime.Support qualified as BG
 import SDL3.Sys.Bindgen.Touch
@@ -215,3 +224,11 @@
   --           [@count@]: a pointer filled in with the number of fingers returned, can be NULL.
   -> IO (BG.Ptr (BG.Ptr SDL_Finger))
 getTouchFingersSafe = Safe.sDL_GetTouchFingers
+
+-- | Typed constant for macro @SDL_MOUSE_TOUCHID@.
+pattern SDL_MOUSE_TOUCHID :: SDL_TouchID
+pattern SDL_MOUSE_TOUCHID = SDL_TouchID 18446744073709551615
+
+-- | Typed constant for macro @SDL_PEN_TOUCHID@ (declared in @SDL_pen.h@).
+pattern SDL_PEN_TOUCHID :: SDL_TouchID
+pattern SDL_PEN_TOUCHID = SDL_TouchID 18446744073709551614
diff --git a/src/SDL3/Sys/Tray.hs b/src/SDL3/Sys/Tray.hs
--- a/src/SDL3/Sys/Tray.hs
+++ b/src/SDL3/Sys/Tray.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | SDL offers a way to add items to the \"system tray\" (more correctly called the \"notification area\" on Windows). On platforms that offer this concept, an SDL app can add a tray icon, submenus, checkboxes, and clickable entries, and register a callback that is fired when the user clicks on these pieces. An opaque handle representing a toplevel system tray object.
 --
@@ -70,6 +71,7 @@
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (Bool, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.LibC qualified
diff --git a/src/SDL3/Sys/Version.hs b/src/SDL3/Sys/Version.hs
--- a/src/SDL3/Sys/Version.hs
+++ b/src/SDL3/Sys/Version.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | Functionality to query the current SDL version, both as headers the app was compiled against, and a library the app is linked to. The current major version of SDL headers.
 --
 --     If this were SDL version 3.2.1, this value would be 3.
@@ -19,6 +21,7 @@
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (IO, fmap)
 
 import HsBindgen.Runtime.LibC qualified
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
diff --git a/src/SDL3/Sys/Video.hs b/src/SDL3/Sys/Video.hs
--- a/src/SDL3/Sys/Video.hs
+++ b/src/SDL3/Sys/Video.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE NoImplicitPrelude #-}
 
 -- | SDL\'s video subsystem is largely interested in abstracting window management from the underlying operating system. You can create windows, manage them in various ways, set them fullscreen, and get events when interesting things happen with them, such as the mouse or keyboard interacting with a window.
 --
@@ -292,6 +293,7 @@
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (Bool, Float, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.LibC qualified
diff --git a/src/SDL3/Sys/Vulkan.hs b/src/SDL3/Sys/Vulkan.hs
--- a/src/SDL3/Sys/Vulkan.hs
+++ b/src/SDL3/Sys/Vulkan.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 -- | Functions for creating Vulkan surfaces on SDL windows.
 --
 --     == FFI conventions
@@ -27,6 +29,7 @@
 where
 
 import Data.Coerce qualified as Coerce
+import Prelude (Bool, IO, fmap)
 
 import HsBindgen.Runtime.CBool qualified as CBool
 import HsBindgen.Runtime.PtrConst qualified as PtrConst
